It4-FolioViews-HitpMcs
senso-concept-Mcs

Mcsh-creation:: {2025-09-15}

overview of It4

description::
it.nfo is part of it.nfo.

name::
* McsEngl.it.nfo,

CmprLago2 part

lcp.instance.JAVA {1995} (run everywhere)

name::
* McsEngl.lcp.instance.JAVA {1995} (run everywhere)@cptIt,

jv'toc#ql:[Level CONCEPT:rl? conceptItsoft1012]#

NAME

name::
* McsEngl.conceptItsoft1012,
* McsEngl.lcp.java@cptIt,
* McsEngl.java-computer-language@cptIt,
* McsEngl.java'computer'language@cptItsoft1012,
* McsEngl.java@cptItsoft1012,
* McsEngl.pl.java@cptIt,
* McsEngl.plJava@cptIt, {2014-01-30}
* McsEngl.pgmlng.java@cptIt, {2014-01-30}
* McsEngl.programing-language.JAVA@cptIt,
* McsEngl.jv@cptItsoft1012,

DEFINITION

Java: A simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, and dynamic language#cptIt248.1#.
[INTERNET]

H JAVA είναι μια νέα γλώσσα προγραμματισμού που εισήγαγε η Sun. Είναι μια απλοποιημένη, ασφαλή και portable μορφή της C++, βασικό χαρακτηριστικό της οποίας είναι το "architecture-neutral distribution format", που πρακτικά σημαίνει πως μια εφαρμογή γραμμένη σε Java μπορεί να εκτελεστεί άμεσα σε οποιονδήποτε τύπο υπολογιστή, χωρίς καμία μετατροπή, ανεξάρτητα αν πρόκειται για PC, Mac, Amiga ή Unix σύστημα.
[Ο ΚΟΣΜΟΣ ΤΟΥ INTERNET, DEC. 1995, 20]

Στηριγμένη στη φιλοσοφία της Sun, ότι οι υπολογιστές αποκτούν δύναμη και δυνατότητες μέσα από το δίκτυο, η Java σήμερα που τα ιδιωτικά δίκτυα πληθαίνουν και τα δημόσια επεκτείνονται προσφέρει τη δυνατότητα να βρίσκουμε στο δίκτυο και τα δεδομένα και την εφαρμογή που θα τα ενεργοποιήσει. Έτσι, γίνεται περιττό να εγκαθιστούμε από την αρχή νέα ογκώδη, δυσκίνητα και συχνά ακριβά προγράμματα με μικρό χρόνο ζωής στον υπολογιστή μας για κάθε τύπο δεδομένων -εικόνα, ήχο, βίντεο- αλλά και για κάθε νέο στάνταρντ που εμφανίζεται. Βρίσκουμε και μεταφέρουμε απ' το δίκτυο -ιδιωτικό ή Internet- τα δεδομένα και τις εφαρμογές που θα τα ζωντανέψουν. Ο σχεδιασμός της Java επιτρέπει να έχουμε ισχυρές εφαρμογές με μικρό όγκο κώδικα. Τηρεί αυστηρές προδιαγραφές ασφαλείας, για να αποτρέψει σοβαρές "βλάβες" από προγραμματιστικά λάθη. Είναι γλώσσα απλή και εύχρηστη για τον προγραμματιστή με ειδική μέριμνα για τον εύκολο εντοπισμό των λαθών. Παρά την μικρή ζωή της, ήδη αντιμετωπίζεται σαν ένα νέο ντε φάκτο στάνταρντ.
[http://istos.istos.net.gr/suntt/]

jv'GENERIC

_GENERIC:
* OBJECT-ORIENTED LANGUAGE#cptIt220#
* programming_language#cptItsoft248#

INFO-TECH-BUSINESS#cptEconomy7.108#

Η Sun δίνει ιδιαίτερη σημασία στην προώθηση της Jawa, όπως αποδεικνύει η ίδρυση ξεχωριστής εταιρίας, με την επωνυμία JavaSoft την οποία ίδρυσε για να αναπτύξει και να προωθήσει προϊόντα που βασίζονται σᾳυτή τη γλώσσα, επιλέγοντας ως πρόεδρο τον Αλαν Μπάρατζ, ως τώρα επικεφαλής της Delphi Internet Services.
[ΚΑΘΗΜΕΡΙΝΗ, 11 ΦΕΒ. 1996, 51]

jv'ENVIRONMENT#cptCore756#

name::
* McsEngl.jv'ENVIRONMENT@cptIt,

jv'ALGORITHM#cptIt548#

name::
* McsEngl.jv'ALGORITHM@cptIt,

jv'JAVA'and'Cplus

name::
* McsEngl.jv'JAVA'and'Cplus@cptIt,
* McsEngl.conceptItsoft1012.10,
* McsEngl.java'and'cplus@cptItsoft1012.10,
* McsEngl.cplus'and'java@cptItsoft1012.10,

1. The biggest potential stumbling block is speed: interpreted Java runs something like 20 times slower than C. Nothing prevents the Java language from being compiled and there are just-in-time compilers appearing at this writing which offer significant speed-ups. It is not inconcievable that full native compilers will appear for the more popular platforms, but without those there are classes of problems that will be insoluble with Java because of the speed issue.
[B. ECKEL, Thinking In Java, 1997aug18, 603]

15. Java uses packages in place of namespaces. The name issue is taken care of by (1) putting everything in a class and (2) a facility called “packages” that performs the equivalent namespace breakup for class names. Packages also collect library components under a single library name. You simply import a package and the compiler takes care of the rest.
[B. ECKEL, Thinking In Java, 1997aug18, 604]

17. There are no Java pointers in the sense of C and C++. When you create an object with new, you get back a reference (which I’ve been calling a handle in this book). For example: String s = new String(“howdy”); However, unlike C++ references that must be initialized when created and cannot be rebound to a different location, Java references don’t have to be bound at the point of creation, and they can be rebound at will, which eliminates part of the need for pointers. The other reason for pointers is to select any place in memory (which makes them unsafe, which is why Java doesn’t support them). Pointers are often seen as an efficient way to move through an array of primitive variables; Java arrays allow you to do that in a safer fashion. The final solution for pointer problems is native methods (discussed in Appendix A). Passing pointers to methods isn’t a problem since there are no global functions, only classes, and you can pass references to objects. The Java language promoters initially said “no pointers!” but when many programmers questioned “how can you work without pointers?” they began saying “restricted pointers.” You can make up your mind whether it’s “really” a pointer or not. In any event, there’s no pointer arithmetic.
[B. ECKEL, Thinking In Java, 1997aug18, 605]

47. Generally, Java is more robust, via: – Object handles initialized to null (a keyword) – Handles are always checked and exceptions are thrown for failures – All array accesses are checked for bounds violations – Automatic garbage collection prevents memory leaks – Clean, relatively fool-proof exception handling – Simple language support for multi-threading – Bytecode verification of network applets
[B. ECKEL, Thinking In Java, 1997aug18, 609]

java and SmallTalk

At 11:55 AM 2/6/98 +0800, you wrote:
>Hello Everyone, >
>I have been doing Java programming for past 4 months. Recently, I moved onto  a >Smalltalk project.>When I started studying the literature on Smalltalk, I found that the concept >of Virtual Machine (for PORTABILITY) is already imbibed in it.>It has got the key features of OO technology like inheritance, encapsulation, >polymorphism, dynamic binding, etc as well as the Java's feature of the >automatic garbage collection.
>
>Question:
>1. What's new in Java (application) ?
>2. What made it capture the IT market over Smalltalk ? (I am not considering >C++ since in all literature about Java it mentions it is C++- -) > >Thanks >Sridhar

Hi Sridhar,
I have done a little Java programming but more of C++. Now I am taking a course at Georgia Tech in Atlanta. The main goal of the course is to teach OOD and Smalltalk is used as the implementation language. Actually we are using a free version called Squeak that is being developed at Disney. Since I am only a student and not a professional programmer I will try to answer your questions to the best of my knowledge.
Java allows for private, public and protected members in a class whereas in Squeak you have to be a little more careful since it is not part of the language as it is in Java and C++.
In Smalltalk the saving of files is a little trickier since you really create a whole new compiler or environment every time you compile and save a program. The filing in and out of the .st files is so different from Java and C++ that most probably it is easier for an experienced C++ programmer to learn Java than it would be for them to learn Smalltalk.
On the upside Squeak is highly portable and blazing fast - Much faster than Java.
There is no place to hide from Objects in Smalltalk since everything is an Object but you can do a procedural program in disguise in Java or C++.
My guess as to why Smalltalk has fallen out of favor is that ParcPlace had the only rights to it and the commercial compiler I bought from them was extremely expensive.  Now that Disney has this free version Squeak....who knows.
Well that's about it.
Cindy Nelson

jv'ALGORITHM

name::
* McsEngl.jv'ALGORITHM@cptIt,
* McsEngl.jv'EXAMPLE@cptIt,
* McsEngl.jv'EX@cptIt,

_DEFINITION:
** Here I'll describe "HOW DO I" things, that I can't describe IN the PLACE where I describe java concepts.
[NIKOS, 1997may11]
** Every example is a concrete-concept of a general-concept. That's why every example must have a link to that general-concept.
[Nikos, 1998jul01]

SOURCE:
* http://www.codeguru.com/java/Swing/JTable/index.shtml

jv'ex.A

name::
* McsEngl.jv'ex.A@cptIt,

jv'ex.ANIMATION.GIF

name::
* McsEngl.jv'ex.ANIMATION.GIF@cptIt,

Make sure your drawImage method has an observer. It sounds like you don't. Support for 89A is definately provided in 1.1.
import java.awt.*; public class gif89a extends java.applet.Applet {     Image gif;     public void init () {         gif = getImage (getDocumentBase(), "atwork.gif");         MediaTracker mt = new MediaTracker (this);         mt.addImage (gif, 0);         try {             mt.waitForAll ();         } catch (Exception e) {             e.printStackTrace();         }     }     public void paint (Graphics g) {         g.drawImage (gif, 0, 0, this);     } }

John Zukowski
[1997dec18]

jv'ex.ANONYMOUS'CLASS

name::
* McsEngl.jv'ex.ANONYMOUS'CLASS@cptIt,

urlField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {        try {         jep.setPage(ae.getActionCommand());        }        catch(Exception e) {        statusBar.setText("Could not open starting page. Using a blank.");        }
}
});

jv'ex.APPLET

name::
* McsEngl.jv'ex.APPLET@cptIt,

import java.awt.*;
import java.applet.*;

class Myclass extends Applet {
public void init() {
/* All the variables, methods and images initialize here
will be called only once because this method is called only
once when the applet is first initializes */
}
public void start() {
/* The components needed to be initialize more than once
in your applet are written here or if the reader
switches back and forth in the applets. This method
can be called more than once.*/
}

public void stop() {
/* This method is the counterpart to start(). The code,
used to stop the execution is written here*/
}

public void destroy() {
/* This method contains the code that result in to release
the resources to the applet before it is
finished. This method is called only once. */
}
public void paint(Graphics g) {
/* Write the code in this method to draw, write, or color
things on the applet pane are */
}
}
[http://www.roseindia.net/java/example/java/applet/applet-versus-application.shtml]

Here is the java code of program :
import java.applet.*;
import java.awt.*;

public class FirstApplet extends Applet{
public void paint(Graphics g){
g.drawString("Welcome in Java Applet.",40,20);
}
}

Here is the HTML code of the program:
<HTML>
<HEAD>
</HEAD>
<BODY>
<APPLET ALIGN="CENTER" CODE="FirstApplet.class" WIDTH="800" HEIGHT="500"></APPLET>
</BODY>
</HTML>

jv'ex.applet.OBJECT-TAG

name::
* McsEngl.jv'ex.applet.OBJECT-TAG@cptIt,

EnglishSynonym: jv'ex.ObjectTag,

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
 WIDTH="2" HEIGHT="2"
 codebase="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0">

 <PARAM NAME="code" VALUE = WordForms >
 <PARAM NAME="codebase" VALUE = "." >
 <PARAM NAME="archive" VALUE = "wordforms02.jar" >
 <PARAM NAME="type" VALUE="application/x-java-applet;version=1.3">
 <PARAM NAME="scriptable" VALUE="false">

 <COMMENT>
   <EMBED type="application/x-java-applet;version=1.3"
     CODE = WordForms CODEBASE = "." ARCHIVE = "wordforms02.jar"
     WIDTH = 2 HEIGHT = 2 scriptable=false
     pluginspage="http://java.sun.com/products/plugin/1.3/plugin-install.html">
     <NOEMBED>
       No Java 2 SDK, Standard Edition v 1.3 support for APPLET!!
     </NOEMBED>
</EMBED>
 </COMMENT>
</OBJECT>

DEPRECATED EXAMPLE:
In the following example, the APPLET element includes a Java applet in the document. Since no codebase is supplied, the applet is assumed to be in the same directory as the current document.

<APPLET code="Bubbles.class" width="500" height="500">
Java applet that draws animated bubbles.
</APPLET>

This example may be rewritten with OBJECT as follows:

<P><OBJECT codetype="application/java"
classid="java:Bubbles.class"
width="500" height="500">
Java applet that draws animated bubbles.
</OBJECT>

Initial values may be supplied to the applet via the PARAM element.

DEPRECATED EXAMPLE:
The following sample Java applet:

<APPLET code="AudioItem" width="15" height="15">
<PARAM name="snd" value="Hello.au|Welcome.au">
Java applet that plays a welcoming sound.
</APPLET>

may be rewritten as follows with OBJECT:

<OBJECT codetype="application/java"
classid="AudioItem"
width="15" height="15">
<PARAM name="snd" value="Hello.au|Welcome.au">
Java applet that plays a welcoming sound.
</OBJECT>
[http://www.w3.org/TR/REC-html40/struct/objects.html]

jv'ex.applet.call'from'an'application

name::
* McsEngl.jv'ex.applet.call'from'an'application@cptIt,

In article <B0000002196@www.rcgis.wtusm.edu.cn>, H.y.han <hhy@rcgis.wtusm.edu.cn> wrote: >Hello: > > I want to call the applet in the application,but failed.I wish you can >help me to resolve this question.Please tell me how to do.> Regards.Thanks a lot!> > The source of application as follows: > > void button1_Clicked(Event event) { > >    // HOW TO CALL THE APPLECT1 HERE?>     >    Applet1 applet=new Applet1(); >    applet.show(true); >     >  } > > I am looking forward for your answer.
But maybe not this one :-)

What you're asking to do is very difficult. Among other things, you'd need to provide your applet with an implementation of AppletContext.
A better approach would be to put the thing you want to share in a Container. Your applet can just have a single child widget: your Container subclass. In your button1_Clicked method, just create a frame with a single child (again, your container).
Hope this helps, >
-- Bill Foote        bill.foote@eng.sun.com HotJava Developer, JavaSoft    http://java.sun.com/people/billf/
[1997jul25]

jv'ex.Applet.HypertextLink

name::
* McsEngl.jv'ex.Applet.HypertextLink@cptIt,

In your applet action() method:

try {
getAppletContext().showDocument( new URL("http://www.somewhere.com"));
} catch (MalformedURLException ex){}

Don't call in your applet constructor, getAppletContext() will return a NullPointerException.
[Ian Kershaw <ian@dungeon.demon.co.uk> 1997may10]

jv'ex.applet.SECURITY

name::
* McsEngl.jv'ex.applet.SECURITY@cptIt,

If u follow th efollowing steps u will be able to do that          
1) there is a tar file by the name java40.tar     
2) untar it it contains the netscape security package     
3) include the package in the class file wanting to write a locall file
4) use the following line to get read write permission         PrivelegeManager.enablePrivilages(UniversalPropertyRead)         PrivelegeManager.enablePrivilages(UniversalPropertyWrite)      5) now u can use the RandomAccessFile(String) method to write to a             file or read from an existing file.          Hope this might help u      Qaiser     

______________________________ Reply Separator _________________________________ Subject: netscape.AppletSecurityException Author:  Pat <pat@das-netz.de> at comsats Date:    12/23/97 12:02 PM

I need definitly to run an applet in a browser and not as stand alone. How can I write local files without:      The error is: netscape.security.AppletSecurityException: security.checkread: Read of 'default.txt' not permitted#  UniversalFileRead privilege not enabled: Reading files stored in your computer      where can I enable the that FileRead previleges?I searched everywhere in netscape 4.03 preferences. Is it possible?     Patrick                Unsubscription, archives, FAQ - http://www.xcf.berkeley.edu/lists.html

jv'ex.applet.SIGNING#ql:jv'ex.javaws#

name::
* McsEngl.jv'ex.applet.SIGNING@cptIt,

jv'ex.applet.SIZE

name::
* McsEngl.jv'ex.applet.SIZE@cptIt,

What are the rules/recommendation to follow in order to reduce an Applet > weight and to improve its efficiency (class loading, ..)
http://www.cs.cmu.edu/~jch/java/size.html

jv'ex.applet.wordforms

name::
* McsEngl.jv'ex.applet.wordforms@cptIt,
* McsEngl.applet.wordforms@cptIt,
* McsEngl.wordforms-applet@cptItsoft, {2012-09-25}

_ADDRESS.WPG:
* http://users.otenet.gr/~nikkas/grammar/wordforms.html,

_Problem:
* "το λάθος" ===> Δεν έχει την περίπτωση ουδέτερα σε -ος. {2014-05-29}
* 'γραφέας' ==> γραφέες ΑΝΤΙ γραφείς. {2012-09-25}

jv'ex.APPLET.AND.APPLICATION

name::
* McsEngl.jv'ex.APPLET.AND.APPLICATION@cptIt,

Steven Lewis wrote: > >   I want to write Java code which does not know if it is an applet > or an application. To do this I derive the main calss from Applet or > some subclass and provide a main whioch puts it in a frame.>    In Swing this had failed up through 0.6 because Applets do not draw well > in JFrames. 0.6 provides a JApplet class which I hoped could be embeded in > a frame. The following example attempts to to this. It is derived from > Sun's Applet example. When run as A Frame, the Applet and the button do not > appear!!!!>
--

Not sure if you got a response to this or not. I was interested in the topic and did a little experimentation. The following code does what you want. The key is the explicit call to the init() procedure which isn't done automatically when run as a standalone. Also, I couldn't get the button to appear until I added the validate() call in init().
/** * A very simple applet.*/
import java.awt.*; import java.awt.event.*; import com.sun.java.swing.*;
public class SwingApplet extends JApplet {
    public void init() {     Container contents = getContentPane();         contents.setLayout(new FlowLayout());         contents.setBackground(Color.red);         contents.add(new JButton("Hello, I'm a Swing Button!"));         validate();     }
    public static void main(String s[]) {
        SwingApplet panel = new SwingApplet(); 
        JFrame frame = new JFrame("SwingApplet");
        frame.addWindowListener(new WindowAdapter() {             public void windowClosing(WindowEvent e) {System.exit(0);}         });
        frame.setBounds(100,100,300,200);
        frame.getContentPane().add("Center", panel);
        frame.setVisible(true);
        panel.init();
        panel.start();
    }
}
-- Steve Zweep                                  Tel:    +1 905 542 9484 Sea Change Corporation                       Fax:    +1 905 542 9479 6695 Millcreek Drive, Unit 1                 E-mail: steve@seachange.com Mississauga, Ontario, Canada L5N 5R8         Web:    http://www.seachange.com
Unsubscription, archives, FAQ - http://www.xcf.berkeley.edu/lists.html

jv'ex.ArithmeticException

name::
* McsEngl.jv'ex.ArithmeticException@cptIt,

class Main {
public static void main(String[] args) {
System.out.println("ArithmeticException Example");
int a = 100;
a /= 0; // a=a/0
}
}

jv'ex.ARRAY

name::
* McsEngl.jv'ex.ARRAY@cptIt,

The array is a simple linear sequence, which makes element access fast, but you pay for this speed: when you create an array object, its size is fixed and cannot be changed for the lifetime of that array object.

jv'ex.array'2dimension:

Here's how the elements in a four by five array called M are referred to:
M[0][0] M[0][1] M[0][2] M[0][3] M[0][4]
M[1][0] M[1][1] M[1][2] M[1][3] M[1][4]
M[2][0] M[2][1] M[2][2] M[2][3] M[2][4]
M[3][0] M[3][1] M[3][2] M[3][3] M[3][4]

int[][] ar =
{
{1, 0 , 0},
{0, 1, 0},
{0, 0, 1}
};

ar[0][0]=1
ar[0]={1,0,0}

jv'ex.array'creation:
int[] k = new int[3];
String[] names = new String[50];
Random[] myrandom = new Random[10];
int a[] = { 1, 2, 3, 4, 5 };
int[] a = new int[] {1, 2, 3};

jv'ex.array'declaration:
Here's a declaration for an array of integers:
int[] arrayOfInts;
[JavaSoft Tutorial, 1996jul06]

jv'ex.array'size:
int i = arr.length;

jv'ex.array'initialization:
float[] squares = new float[101];
for (int i=0; i<=100; i++){
 squares[i]=i*i;
}

int a1[] = { 1, 2, 3, 4, 5 };

String[] entities = {"book", "car", "dog", "apple"}

new char[]{'n','m','1','\n'}

jv'ex.ARRAY'PRINTING:
System.out.println(Arrays.toString(arr));

String[] fn =ge.getAvailableFontFamilyNames(new Locale("el","GR"));
System.out.println("The Font Family names for GREECE (el_GR) are:");
for (int j = 0; j < fn.length; j ++)
 {System.out.println(j + " = " + fn[j]);}

jv'ex.ARRAY_TO_LIST:
Arrays.asList(array).subList(0, array.length);

jv'ex.ARRAY_TO_STRING:
char[] charBuffer = {'a','b'};
int size=charBuffer.length;
String s = new String(charBuffer, 0, size);


String s = String.copyValueOf(char[] array);

jv'ex.ARRAYOFSTRING.CONTAINS:
Util.arrayStringContains(array, key)

If you have a variable named array referring to the array object then call
    array.getClass().getName()
it will return "[I", "[D", "[F", "[J" or "[S".
The class object that describes an array has a name that consists of as many '[' as appropriate for the dimensionality of the array followed by one of the following codes:
      B            byte       C            char       D            double       F            float       I            int       J            long       Lclassname;  class or interface       S            short       Z            boolean
------------------------------------------------------------ Mark Grand                          Voice Mail (770)664-9903 Java Consultant/Instructor          mgrand@mindspring.com http://www.mindspring.com/~mgrand
[1998jan01]

>I have a problem. I have an array which can be either int[], double[], float[], long[], or short[] (basically base type array), which is stored as Object.
How can I figure out what type it is.

You have to use reflection.  Get the class for the object and then ask the class for all the information as shown below.
Class aClass = op.getClass(); if( aClass.isArray() ) {    Class componentType = aClass.getComponentType();    if( componentType == Integer.class )    {         ...   }    else if( componentType == Double.class )    {         ...   }
}
Mike mbowler@acm.org
[1997jan01]

jv'ex.ASSERTION

name::
* McsEngl.jv'ex.ASSERTION@cptIt,

PROGRAM ASSERTIONS.  The languages C and C++ have something called an assert macro, which you can use to check program assertions.  For example, a sequence like:
        char* p = (char*)malloc(10);
        assert(p);
checks whether the pointer returned by the storage allocator is non-zero and terminates the program if it is not.
It's interesting to consider one way of adding a similar facility to the Java programming language, for example:
        public class Assert {                 private static void fail()                 {                         System.err.println("assertion failed:");                                 Throwable e = new Throwable();                         e.printStackTrace();                                 System.exit(1);                 }                 public static void assert(boolean b)                 {                         if (!b)                                 fail();                 }                 public static void assert(long lag)                 {                         if (lag == 0L)                                 fail();                 }                 public static void assert(double dbl)                 {                         if (dbl == 0.0)                                 fail();                 }                 public static void assert(Object ref)                 {                         if (ref == null)                                 fail();                 }         }         With this class definition, you can write things like the following:                 int i = 0;         Assert.assert(i < 10);          // checks whether i < 10
        Object p = f();         Assert.assert(p);               // checks that p is non-null
If one of these assertion checks fails, the program will terminate with a stack traceback.
Note that there are several versions of the assert method.  This is necessary because the Java language type system is not as loose as C/C++ in converting to/from logical values.  For example, i < 10 has a boolean value, which is not convertible to an integer.  So one version of assert is given for booleans, another for byte, char, short, int, and long, another for float and double, and a final one for all reference types.
Within the fail method, a new object of type Throwable, the superclass of all exception types, is created as a means of obtaining a current stack traceback.  The traceback is printed, and the program terminates.
So if you want to check "should never fail" conditions, and terminate an application gracefully in such an event, try this technique.  You should find it useful.
[jdc tip 1998feb22]

jv'ex.Audio.application

name::
* McsEngl.jv'ex.Audio.application@cptIt,

// This example is from the book _Java AWT Reference_ by John Zukowski.

// Written by John Zukowski. Copyright (c) 1997 O'Reilly & Associates.

// You may study, use, modify, and distribute this example for any purpose.

// This example is provided WITHOUT WARRANTY either expressed or implied.

import java.net.URL; import java.io.FileInputStream; import sun.audio.*; public class SunAudioClip implements java.applet.AudioClip { private AudioData audiodata; private AudioDataStream audiostream; private ContinuousAudioDataStream continuousaudiostream; static int length; public SunAudioClip (URL url) throws java.io.IOException { audiodata = new AudioStream (url.openStream()).getData();  audiostream = null;  continuousaudiostream = null; } public SunAudioClip (String filename) throws java.io.IOException { FileInputStream fis = new FileInputStream (filename); AudioStream audioStream = new AudioStream (fis); audiodata = audioStream.getData();  audiostream = null;  continuousaudiostream = null; } public void play () { audiostream = new AudioDataStream (audiodata);  AudioPlayer.player.start (audiostream); } public void loop () { continuousaudiostream = new ContinuousAudioDataStream (audiodata);  AudioPlayer.player.start (continuousaudiostream); } public void stop () { if (audiostream != null)    AudioPlayer.player.stop (audiostream); if (continuousaudiostream != null)    AudioPlayer.player.stop (continuousaudiostream); } public static void main (String args[]) throws Exception { URL url1 = new URL ("http://localhost:8080/audio/1.au"); URL url2 = new URL ("http://localhost:8080/audio/2.au"); SunAudioClip sac1 = new SunAudioClip (url1); SunAudioClip sac2 = new SunAudioClip (url2); SunAudioClip sac3 = new SunAudioClip ("1.au"); sac1.play (); sac2.loop (); sac3.play (); try { // Delay for loop Thread.sleep (2000); } catch (InterruptedException ie) { } sac2.stop(); } }
[J. Zukowski 1997may15]

jv'ex.B

name::
* McsEngl.jv'ex.B@cptIt,

jv'ex.Backup

name::
* McsEngl.jv'ex.Backup@cptIt,

Backups files with the oldest file the bigger number:
- file.java    newer
- file.java1    previous
- file.java2    ....
- ....      oldest

jEdit.MiscUtilities:
 /**
  * Saves a backup (optionally numbered) of a file.
  * @param file A local file
  * @param backups The number of backups. Must be >= 1. If > 1, backup
  * files will be numbered.
  * @param backupPrefix The backup file name prefix
  * @param backupSuffix The backup file name suffix
  * @param backupDirectory The directory where to save backups; if null,
  * they will be saved in the same directory as the file itself.
  * @param backupTimeDistance The minimum time in minutes when a backup
  * version 1 shall be moved into version 2; if 0, backups are always
  * moved.
  * @since jEdit 4.2pre5
  */
 public static void saveBackup(File file, int backups,
      String backupPrefix, String backupSuffix,
      String backupDirectory, int backupTimeDistance)
 {
   if(backupPrefix == null)
     backupPrefix = "";
   if(backupSuffix == null)
     backupSuffix = "";

   String name = file.getName();

   // If backups is 1, create ~ file
   if(backups == 1)
   {
     File backupFile = new File(backupDirectory,
       backupPrefix + name + backupSuffix);
     long modTime = backupFile.lastModified();
     /* if backup file was created less than
      * 'backupTimeDistance' ago, we do not
      * create the backup */
     if(System.currentTimeMillis() - modTime
      >= backupTimeDistance)
     {
       Log.log(Log.DEBUG,MiscUtilities.class,
         "Saving backup of file \"" +
         file.getAbsolutePath() + "\" to \"" +
         backupFile.getAbsolutePath() + '"');
       backupFile.delete();
       if (!file.renameTo(backupFile))
         IOUtilities.moveFile(file, backupFile);
     }
   }
   // If backups > 1, move old ~n~ files, create ~1~ file
   else
   {
     /* delete a backup created using above method */
     new File(backupDirectory,
       backupPrefix + name + backupSuffix
       + backups + backupSuffix).delete();

     File firstBackup = new File(backupDirectory,
       backupPrefix + name + backupSuffix
       + '1' + backupSuffix);
     long modTime = firstBackup.lastModified();
     /* if backup file was created less than
      * 'backupTimeDistance' ago, we do not
      * create the backup */
     if(System.currentTimeMillis() - modTime
      >= backupTimeDistance)
     {
       for(int i = backups - 1; i > 0; i--)
       {
         File backup = new File(backupDirectory,
           backupPrefix + name
           + backupSuffix + i
           + backupSuffix);

         backup.renameTo(new File(backupDirectory,
           backupPrefix + name
           + backupSuffix + (i + 1)
           + backupSuffix));
       }

       File backupFile = new File(backupDirectory,
         backupPrefix + name + backupSuffix
         + '1' + backupSuffix);
       Log.log(Log.DEBUG,MiscUtilities.class,
         "Saving backup of file \"" +
         file.getAbsolutePath() + "\" to \"" +
         backupFile.getAbsolutePath() + '"');
       if (!file.renameTo(backupFile))
         IOUtilities.moveFile(file, backupFile);
     }
   }
 } //}}}

jv'ex.Bean

name::
* McsEngl.jv'ex.Bean@cptIt,

import java.awt.*;
import java.io.Serializable;

public class Acme01Bean extends Canvas implements Serializable {
public Acme01Bean() {
setSize(60,40);
}
public void paint(Graphics g) {
g.setColor(Color.blue);
g.fillRect(20, 5, 20, 30);
}
}

jv'ex.BigDecimal

name::
* McsEngl.jv'ex.BigDecimal@cptIt,

BIGDECIMAL
The java.math package contains two classes, BigInteger and BigDecimal.

BigInteger represents arbitrary-precision integers, with arithmetic operations such as addition and division supported, along with comparison and hashing methods. A BigDecimal consists of an arbitrary-precision integer along with a scale, where the scale is the number of digits to the right of the decimal point.


These classes can be used in applications requiring high-precision numbers. Financial applications sometimes require such precision, as do some kinds of numerical programming problems. An example of one of these is computing numerical constants to a high degree of precision.


The mathematical constant "e" can be defined as the sum of the infinite series:
1/0! + 1/1! + 1/2! + 1/3! + ...


A program that uses BigDecimal to compute this constant to 40 places is:
import java.math.*;
public class bige { public static void main(String args[]) { BigDecimal one = new BigDecimal("1"); BigDecimal curfact = new BigDecimal("1"); BigDecimal factmul = new BigDecimal("1"); BigDecimal curval = new BigDecimal("0");
String curout = "";
// number of desired decimal places final int NP = 40;
for (;;) { // divide 1 by the current factorial BigDecimal x = one.divide(curfact, NP + 1, BigDecimal.ROUND_HALF_EVEN);
// add the result to the accumulated value curval = curval.add(x);
// move to the next factorial value curfact = curfact.multiply(factmul); factmul = factmul.add(one);
// check convergence of the current value String s = curval.toString().substring(0, NP + 2); if (s.equals(curout)) { System.out.println(s); break; } curout = s; } } }
During the calculation, an extra digit is carried to help the rounding behavior. The rounding behavior itself is ROUND_HALF_EVEN, which means "round up/down toward nearest digit", or if the digits are equidistant, round toward the even digit. For example, division using this rounding mode, assuming one decimal place, comes out like this:
755 / 100 = 7.6 (7.5 and 7.6 are equidistant, round toward 6)
745 / 100 = 7.4 (7.4 and 7.5 are equidistant, round toward 4)
This particular rounding method minimizes cumulative error.
The output of the program is:
2.7182818284590452353602874713526624977572
which is a correct value for "e" to 40 places.
[jdc {1999-03-17}]

jv'ex.BIT'MANIPULATION

name::
* McsEngl.jv'ex.BIT'MANIPULATION@cptIt,

GET THE HIGH-BYTE OF AN INT:
private final static byte hibyte(int val) {
return (byte) (val >>> 8);
}

GET THE LOW-BYTE OF AN INT:
private final static byte lobyte(int val) {
return (byte) (val & 0x000000FF);
}

jv'ex.DECIMAL_TO_BINARY:
1. Let D= the number we wish to convert from decimal to binary.
2. Repeat until D=0:
a) If D is odd, put "1" in the leftmost open column, and subtract 1 from D.
b) If D is even, put "0" in the leftmost open column.
c) Divide D by 2.
End Repeat
[http://www.math.grin.edu/~rebelsky/Courses/152/97F/Readings/student-binary.html]

jv'ex.BINARY_TO_DECIMAL:
Since we already knew how to convert from binary to decimal, we can easily verify our result. 10100011=(1*2^0)+(1*2^1)+(1*2^5)+(1*2^7)=1+2+32+128= 163.

jv'ex.Binary'Addition:
Always remember
0+0=0
1+0=1
1+1=10

1010
+1111
______
11001 (1+1=10+1=11)

jv'ex.Binary'Multiplication:
Multiplication in the binary system works the same way as in the decimal system:

* 1*1=1
* 1*0=0
* 0*1=0

101
* 11
____
101
1010
_____
1111

jv'ex.BINARY'NEGATION:
One's Complement:
In one's complement, positive numbers are represented as usual in regular binary. However, negative numbers are represented differently. To negate a number, replace all zeros with ones, and ones with zeros - flip the bits. Thus, 12 would be 00001100, and -12 would be 11110011. As in signed magnitude, the leftmost bit indicates the sign (1 is negative, 0 is positive). To compute the value of a negative number, flip the bits and translate as before.

Two's Complement:
Begin with the number in one's complement. Add 1 if the number is negative. Twelve would be represented as 00001100, and -12 as 11110100. To verify this, let's subtract 1 from 11110110, to get 11110011. If we flip the bits, we get 00001100, or 12 in decimal.

* java uses two's-complement notation:

jv'ex.Boolean'To'String

name::
* McsEngl.jv'ex.Boolean'To'String@cptIt,

boolean name = true;
new Boolean(name).toString()

jv'ex.BorderLayout

name::
* McsEngl.jv'ex.BorderLayout@cptIt,

TO HAVE AN EMPTY-SPACE AND THEN A LINE:
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
EmptyBorder eb = new EmptyBorder(15, 15, 15, 15);
p.setBorder(new CompoundBorder(eb, new EtchedBorder()));

jv'ex.setBorder:
v12:
setBorder(BorderFactory.createEtchedBorder());


class Main {
public static void main(String[] args) {
Frame f = new Frame("BorderLayout Example");
f.setLayout(new BorderLayout(5, 10)); //horizontal/vertical gap
f.add("North", new Button("North"));
f.add("South", new Button("South"));
f.add("West", new Button("West"));
f.add("East", new Button("East"));
f.add("Center", new Button("Center"));
f.resize(200, 200);
f.pack();
f.show();
}
}

TO CHANGE THE SIZE OF A PANEL:
panelWest.setPreferredSize(500, 300);
[nikos, 1997dec29]

jv'ex.break

name::
* McsEngl.jv'ex.break@cptIt,
* McsEngl.jv'ex.continue@cptIt,

break quits the loop without executing the rest of the statements in the loop.
continue stops the execution of the current iteration and goes back to the beginning of the loop to begin a new iteration.

while ((ln=br.readLine()) != null)
{
 continue;  //read next line
 break;    //stop reading lines
}

public class BreakAndContinue {
public static void main(String[] args) {

for(int i = 0; i < 100; i++) {
if(i == 74) break; // Out of for loop
if(i % 9 != 0) continue; // Next iteration
System.out.println(i); }

int i = 0; // An "infinite loop":
while(true) {
i++;
int j = i * 27;
if(j == 1269) break; // Out of loop
if(i % 10 != 0) continue; // Top of loop
System.out.println(i);
}
}
}
The output is: 0 9 18 27 36 45 54 63 72 10 20 30 40

switch(integral-selector#ql:jv'integral'type#) {
case integral-value1 : statement; break;
case integral-value2 : statement; break;
case integral-value3 : statement; break;
case integral-value4 : statement; break;
case integral-value5 : statement; break;
// …..
default: statement;
}

jv'ex.break'labeled

name::
* McsEngl.jv'ex.break'labeled@cptIt,

public class LabeledWhile {

public static void main(String[] args) { int i = 0;
outer:
while(true) { prt("Outer while loop");
while(true) { i++; prt("i = " + i); if(i == 1) { prt("continue"); continue; } if(i == 3) { prt("continue outer"); continue outer; } if(i == 5) { prt("break"); break; } if(i == 7) { prt("break outer"); break outer; } } } } static void prt(String s) { System.out.println(s); } }

jv'ex.byte

name::
* McsEngl.jv'ex.byte@cptIt,

byte b = 0x7f; // max byte hex value
byte b='a';

jv'ex.byte-to-char

name::
* McsEngl.jv'ex.byte-to-char@cptIt,

byte b='a';
System.out.print((char)b);

jv'ex.BYTE-TO-SHORT

name::
* McsEngl.jv'ex.BYTE-TO-SHORT@cptIt,

public static final short bytesToShort(byte hiByte, byte loByte)
 {
   //byte = 8 bit value
   //short = 16 bit value
   //int = 32 bit value
   //0x000000ff=11111111
   int result = (0x000000FF & hiByte);
   result = result << 8;
   result |= (0x000000FF & loByte);
   return (short) result;
 }

public static final short bytesToShort(byte hiByte, byte loByte)
 {
   int result = (int)hiByte;
   result = result << 8;
   result = result | (int) loByte;
   return (short) result;
 }

jv'ex.ByteArrayInputStream

name::
* McsEngl.jv'ex.ByteArrayInputStream@cptIt,

import java.io.ByteArrayInputStream;
class Main {
public static void main(String[] args) {
byte[] inputbytes = { 'a', 'b', 'c', 'd', 'e'};
ByteArrayInputStream in = new ByteArrayInputStream(inputbytes);
System.out.println("Available: " + in.available());
int b;
while ((b=in.read()) >= 0) // reads "abcde"
System.out.print((char)b);
in.reset();
System.out.println();
in.skip(3); // skip "abc"
while ((b=in.read()) >= 0) // reads "de"
System.out.print((char)b);
System.out.println();
}
}

jv'ex.BYTEBUFFER-TO-STRING

name::
* McsEngl.jv'ex.BYTEBUFFER-TO-STRING@cptIt,

1.4:
public static String getString(ByteBuffer bb) throws IOException {
 int size = bb.getShort();
 char[] charBuffer = new char[size];
 for (int i = 0; i < size; i++) {
   charBuffer[i] = bb.getChar();
 }
 return new String(charBuffer, 0, size);
}

jv'ex.bytesOrderInFiles

name::
* McsEngl.jv'ex.bytesOrderInFiles@cptIt,

Java is big endian. There have been a lot of discussion on the same. I too ran into this problem, and if you search the news group archive you will find a huge collection of alternatives.
Java assumes everything to be big endian.If you have an application that say for e.g stores files in little endian format, java would'nt know automatically, you have to write some routines at the server side or client side. At server side you could have some library routines that save the file in big endian format by default and that way you don't need to anything extra at the java client side, thereby saving some class downloads. If you have multiple clients reading of the same file, it saves processing time, since each of those clients doe'nt have to do the conversion.
IT depends on your application. But summary is if you have a application that does operations with an underlying little endian representation you have to convert it into big endian either by extending DataInputStream on client side and converting the same or before saving the files at the server side, converting it into the format you want.
I saw a nice note by Roedy Green for the different options where in he had said: 1) You can rewrite the export program 2) write a translator program 3) read the data as bytes and change them on the fly
see http://oberon.ark.com/~roedy/endian.html I liked the History part in his little article, comparing the little endian to Lilliputians and big endian to Brobdignagians.:-)
Have fun, - sudhakar sudha@best.com
Shay Cohen wrote: > > Hi, > > Shouldn't java be platform independant?...> > I am referring to the DataInputStream.readInt() method.> I have a file which contains only an int (32 bit) number (this > file size is 4 bytes).> > This file is on a win95/dos partition. As known, on this platform > 32 bit integers are written in a reversed order (meaning, let's say the > file contains the int "1", in the file it would be written 1 0 0 0, > instead of 0 0 0 1).> When using the DataInputStream.readInt() method, shouldn't it > "identify" the platform, and read it in a reversed order?> As stated, this file contains four bytes: "1 0 0 0", which are > supposed to compose the 32-bit integer "1". When reading it using > readInt(), I get the integer as 16777216 (which is 256^3, which is > actually |00000001b 0 0 0|, meaning -- it reads it in the order it is in > the file).> Why? Should I be converting every int I read from a file, or am I > doing something wrong?> > And another one -- I couldn't find any method which returns the > current position in a stream (or at least in a file stream). Is there > such a method?> > Please e-mail me is possible in addition to the post in the group, > as my newsserver is not very stable.> > Shay, > shiart@inter.net.il.

jv'ex.BufferedInputStream

name::
* McsEngl.jv'ex.BufferedInputStream@cptIt,

/**
*
* @author javadb.com
*/
public class Main {

/**
* This method reads contents of a file and print it out
*/
public void readFromFile(String filename) {

BufferedInputStream bufferedInput = null;
byte[] buffer = new byte[1024];

try {

//Construct the BufferedInputStream object
bufferedInput = new BufferedInputStream(new FileInputStream(filename));

int bytesRead = 0;

//Keep reading from the file while there is any content
//when the end of the stream has been reached, -1 is returned
while ((bytesRead = bufferedInput.read(buffer)) != -1) {

//Process the chunk of bytes read
//in this case we just construct a String and print it out
String chunk = new String(buffer, 0, bytesRead);
System.out.print(chunk);
}

} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
//Close the BufferedInputStream
try {
if (bufferedInput != null)
bufferedInput.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new Main().readFromFile("myFile.txt");
}
}

Use buffered streams to copy a file:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Main {
public static void main(String[] argv) throws Exception {
BufferedInputStream fin = new BufferedInputStream(new FileInputStream("in.dat"));
BufferedOutputStream fout = new BufferedOutputStream(new FileOutputStream("out.dat"));
int i;
do {
i = fin.read();
if (i != -1)
fout.write(i);
} while (i != -1);
fin.close();
fout.close();
}
}

the BufferedInputStream class that lets you read characters from a stream and stores it in an internal buffer. Lets see an example that reads the contains of the existed file.

The given example uses the BufferedInputstream class that reads the bytes from the input stream. The input stream is a file "Filterfile.txt" from which the data is read in form of a byte through the read( ) method. The read( ) method reads the byte from the file that is converted into the character-form.



import java.io.*;

class ReadFilter
{
public static void main(String args[])
{
try
{
FileInputStream fin = new FileInputStream("Filterfile.txt");
BufferedInputStream bis = new BufferedInputStream(fin);

// Now read the buffered stream.
while (bis.available() > 0)
{
System.out.print((char)bis.read());
}

}
catch (Exception e)
{
System.err.println("Error reading file: " + e);
}
}
}

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
// reads in a file and sends it to standard output 2 times

class Main {
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Usage: java Main <file>");
System.exit(-1);
}

try {
FileInputStream in = new FileInputStream(args[0]);
// create buffered input stream for 'in'
BufferedInputStream bufin = new BufferedInputStream(in);
if (bufin.markSupported()) {
int limit;
// create mark for size of file
bufin.mark(limit=bufin.available());
// first copy; read just before EOF
for (int i = 0; i < limit; i++)
System.out.print((char)(bufin.read()));
// reset to beginning of file
bufin.reset();
}
int c;
while ((c=bufin.read()) >= 0) // second copy
System.out.print((char)c);
bufin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

jv'ex.Button

name::
* McsEngl.jv'ex.Button@cptIt,

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class BeepApplet extends Applet implements ActionListener {
public void init () {
// Construct the button
Button beep = new Button("Beep");
// add the button to the layout
add(beep);
// specify that action events sent by this button should be handled by the applet itself
beep.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
Toolkit.getDefaultToolkit().beep();
}
}

Multiline buttons:
Apart from using HTML you could also try to add to JLabels to the Button. All JComponents are Containers if my memory serves my correctly. I think I have done something like this once...I added several JLabels to a single JLabel.
[ADV JAVA {1999-03-12}]

jv'ex.C

name::
* McsEngl.jv'ex.C@cptIt,

jv'ex.CALENDAR

name::
* McsEngl.jv'ex.CALENDAR@cptIt,

GNANAM, LSD wrote: > > Hi all, > >         Please answer  this simple question.> >         In jdk1.02  java.util.Date  class got a method > >        getDay() will  return  day of the week( 0 for SUN,1 for > MON......) > >        What is the equvalent  method in jdk1.1.4  in GregarianCalendar() > (I am > > using    GregarianCalendar()   instead of Date() > > Thanks in advance > > I.Gnanam > > Unsubscription, archives, FAQ - http://www.xcf.berkeley.edu/lists.html
This is how you get the day now:
   GregorianCalendar myCal = new GregorianCalendar();    myCal.get(Calendar.DAY_OF_WEEK);
The days of the week range from 1 for SUNDAY to 7 for SATURDAY and there are constants for them.
However, there have been a lot of problems with this class so you may or may not get the answer you want.
Cynthia Jeness cj@goldencode.com

jv'ex.calendar'class:
The following example shows how GregorianCalendar is used to determine if today is a weekday.
TimeZone tz = TimeZone.getDefault();
// this constructor initializes the new GregorianCalendar
// object with System.currentTimeMillis()
GregorianCalendar calendar = new GregorianCalendar(tz);
calendar.computeFields();
int dayOfWeek = calendar.get( Calendar.DAYOFWEEK );
if( dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY ) {
System.out.println("Weekend!");
} else {
System.out.println("Weekday");
}

jv'ex.Canvas

name::
* McsEngl.jv'ex.Canvas@cptIt,

//Draws a circle on whole window
import java.awt.*;
class Main {
static public void main(String[] args) {
Frame f = new Frame("paint Example");
f.add("Center", new MainCanvas());
f.resize(200, 100);
f.show();
}
}
class MainCanvas extends Canvas {
public void paint(Graphics g) {
g.drawOval(0, 0, size().width, size().height);
}
}

jv'ex.CardLayout

name::
* McsEngl.jv'ex.CardLayout@cptIt,


// create a card panel To Put Locales
 cards = new Panel();
 cards.setLayout(new CardLayout());
// create the LinguaPanels that go into the card layout
 for (int i = 0; i < supportedLocales.length; i ++) {
  LinguaPanel linguaPanel = null;
  try {
   linguaPanel = new LinguaPanel(supportedLocales[i], defaultFont, boldFont);
  } catch (java.util.MissingResourceException e) {
   System.out.println("Couldn't load resource(s).");
  }
 // add it to the card layout
  cards.add(supportedLocales[i].getDisplayName(), linguaPanel);
 }
// add the card layout to this window
 add("Center", cards);

// to show a card
 ((CardLayout)cards.getLayout()).show(cards, currentLocale.getDisplayName());
 doLayout();

jv'ex.CASTING

name::
* McsEngl.jv'ex.CASTING@cptIt,

String text = (String) e.getNewValue();

((String)parser.nextElement()).equals(part)

jv'ex.char-to-BYTE

name::
* McsEngl.jv'ex.char-to-BYTE@cptIt,

byte b = -128;
//To Char
char c = (char)(b & 0xFF);
//To Byte
byte b2 = (byte)(c & 0xFF);

char c = str.charAt(4);
byte bValue = (byte)c;

As I understand it, A byte goes from -128 to 128. A char goes from 0 to 255.
So, to convert from byte to a char correctly, you could do this:

byte b = -128;
char c = (char)b;
System.out.println(c);
char c2 = (char)(b + 128);
System.out.println(c2);
byte b2 = (byte)(c2 -128);

jv'ex.CHAR-TO-INT

name::
* McsEngl.jv'ex.CHAR-TO-INT@cptIt,

Character.codePointAt("$^",1) ==> 94

with casting:
(int) char

jv'ex.CHAR-TO-STRING

name::
* McsEngl.jv'ex.CHAR-TO-STRING@cptIt,

String.valueOf(char)

 Character c = new Character(lkt.charAt(i));
 String cs = c.toString();

(new Character('c')).toString()

jv'ex.Character

name::
* McsEngl.jv'ex.Character@cptIt,

Character ks, ks2;
ks= new Character('\u008d');    
ks2= new Character('\u00ce');    
String s = ks.toString() + ks2.toString();    editor.setText(s);

jv'ex.Character-to-Char

name::
* McsEngl.jv'ex.Character-to-Char@cptIt,

Character h;
char c=h.charValue();

jv'ex.CheckBox

name::
* McsEngl.jv'ex.CheckBox@cptIt,

If you want a Checkbox to start life checked, use the following constructor instead:
add(new Checkbox("Pepperoni", null, true));
The null is a reference to a CheckboxGroup. Passing null for this argument says that this Checkbox does not belong to a CheckboxGroup.

jv'ex.CheckBoxMenuItem

name::
* McsEngl.jv'ex.CheckBoxMenuItem@cptIt,
* McsEngl.jv'ex.MenuItem.CheckBox@cptIt,

options.addSeparator();
cb = (JCheckBoxMenuItem) options.add(new JCheckBoxMenuItem("Show ToolTips")); cb.setSelected(true);
cb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
 JCheckBoxMenuItem cb = (JCheckBoxMenuItem)e.getSource();  
 if(cb.isSelected()) { ToolTipManager.sharedInstance().setEnabled(true);    }
  else { ToolTipManager.sharedInstance().setEnabled(false);  }
}
});

jv'ex.Choice

name::
* McsEngl.jv'ex.Choice@cptIt,

Choice choice = new Choice();
choice.addItem("item 1");
choice.addItem("item 2");
add(choice);

jv'ex.Choice.itemlistener:
//beeps on items.
...
Choice ch;
ch = new Choice();
ch.addItem("1");
ch.addItemListener(new BeepItem());
add(ch);
}

class BeepItem implements ItemListener {
public void itemStateChanged(ItemEvent ie) {
if (ie.getStateChange() == ItemEvent.SELECTED) {
...
}

jv'ex.Class

name::
* McsEngl.jv'ex.Class@cptIt,

public class Test extends java.lang.Object
{
 /* constructor */
 public Test()
 {
 }
}

// The following example uses a Class-object to print the Class name of an object:
void printClassName(Object obj) {
System.out.println("The class of " + obj + " is " + obj.getClass().getName());
}


// Prints details of a Class
import java.*;
class ClassAttr {
 public static void getDetails(Class s) {
  Class supclass = s.getSuperclass();
  String supername = supclass.getName();
  Class ifs[] = s.getInterfaces();
  ClassLoader loader = s.getClassLoader();
  String printname = s.toString();
  System.out.println("Name of Class: " + printname);
  System.out.println("Superclass is: " + supername);
  System.out.println("Class Loader is : " + loader);
  for (int i = 0; i < ifs.length; i++)
   System.out.println("Interface[" + i + "] is " + ifs[i]);
  if (s.isInterface()) {
   System.out.println(printname + " is an Interface");
  } else {
   System.out.println(printname + " is not an Interface");
  }
 }

 public static void main (String[] args) {
   Class s;
   try {
     if (args.length==0){
       System.out.println("Usage: java ClassAttr <full class name>");
       System.exit(1);
     }
     s = Class.forName(args[0]);
     getDetails(s);
   } catch (ClassNotFoundException e) {
     System.out.println(e);
   }
  }
}

jv'ex.class.creation

name::
* McsEngl.jv'ex.class.creation@cptIt,

PronounceableFSM prefixFSM = new PrefixFSM(getResource("prefix_fsm.txt"));
public class PrefixFSM extends PronounceableFSM

jv'ex.class.find'startup'class

name::
* McsEngl.jv'ex.class.find'startup'class@cptIt,

Here's how I do it - ------------------------ import java.io.*; import java.util.*;
public class ApplicationTester {
public static String getClassName() { // get the current thread's stack dump in a stream ByteArrayOutputStream bos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream( bos ); PrintStream original = System.err; System.setErr( ps ); Thread.currentThread().dumpStack(); System.setErr( original );
// parse the stack dump StringTokenizer tok = new StringTokenizer( bos.toString()); String className=null; while( tok.hasMoreTokens()) { String token = tok.nextToken(); int index = token.indexOf( ".main(" ); if( index > 0 ) { // voila! className = token.substring( 0, index ); break; } } return className; }
public static void main( String args[] ) throws Exception { System.out.println( getClassName() ); }
} ----------------------------------- Notice my getClassName() routine is static so it can be invoked inside main.
I'm sure there are less expensive implementations out there...
Have fun, Krishnan

Thanks, but this won't work. Unfortunately the result of the stack trace dump is the name of the base class (the one that contains the implementation of main()), and not the name of the derived class which is used for start up. So, for this class:
public class MyAppTester extends ApplicationTester { }
the result will be "ApplicationTester", and what I would like to get is "MyAppTester".
[adv. java {1999-04-30}]

This works (at least with Java 1.2 - there may be an equivalent in 1.1 but I haven't looked at it):
public class Test { public static void main( String args[] ) { MySecurityManager sm = new MySecurityManager(); System.out.println( sm.getFirstClass().getName() ); } }
class MySecurityManager extends SecurityManager { public Class getFirstClass() { Class[] a = getClassContext(); return( a[(a.length)-1] ); } }
public class DerivedTest extends Test { public static final void main( String args[] ) { Test.main( args ); } }
[adv java {1999-04-30}]

jv'ex.class.From'its'name

name::
* McsEngl.jv'ex.class.From'its'name@cptIt,

Class c = Class.forName(classnamestring);
VoiceDirectory vd = (VoiceDirectory) c.newInstance();

jv'ex.class.loader

name::
* McsEngl.jv'ex.class.loader@cptIt,

So, I wrote my own class loader : http://www-sor.inria.fr/~dedieu/java/ExtendableClassLoader.java
[1998jan31]

------------ Jack replies again to Joe --------------------------
I spent today finally solving the riddles of class loaders. Here's a class that works. I offer it up because advanced-java has been so helpful. This has been tested locally and over the internet. It has also
been tested with casting to an imported interface.


================= SimpleClassLoader .java ================= import java.util.Hashtable; import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.io.InputStream; import java.net.URL; import java.net.URLConnection;
/** * A simple test class loader capable of loading from local * files or a URL.

* * This class is derived from an article by Chuck McManis * http://www.javaworld.com/javaworld/jw-10-1996/indepth.src.html * with large modifications.

* * @author Jack Harich - 8/18/97 */ public class SimpleClassLoader extends ClassLoader {
//---------- Private Fields ------------------------------ private Hashtable classes = new Hashtable(); private String urlString; private String filePrefix; private char classNameReplacementChar; private boolean monitorOn = false; private boolean sourceMonitorOn = true;
//---------- Initialization ------------------------------ public SimpleClassLoader() { } //---------- Public Methods ------------------------------ /** * This is a simple version for external clients since they * will always want the class resolved before it is returned * to them.

*/ public Class loadClass(String className) throws ClassNotFoundException {
return (loadClass(className, true)); } /** * If setRootURL() is used then this class attempts to load * from the URL root, such as * "http://www.mindspring.com/~happyjac/".

*/ public void setRootURL(String urlString) { this.urlString = urlString; filePrefix = null; } /** * If setFilePrefix() is used then this class attempts to * load from a local file using the relative "filePrefix", * ie starting at the current directory. For example * @param filePrefix could be "webSiteClasses\\site1\\".

*/ public void setFilePrefix(String filePrefix) { this.filePrefix = filePrefix; urlString = null; } /** * This optional call allows a class name such as * "COM.test.Hello" to be changed to "COM_test_Hello", * which is useful for storing classes from different * packages in the same retrival directory.

* In the above example the char would be '_'.

*/ public void setClassNameReplacementChar(char replacement) { classNameReplacementChar = replacement; } //---------- Abstract Implementation --------------------- public synchronized Class loadClass(String className, boolean resolveIt) throws ClassNotFoundException {
Class result; byte[] classBytes; monitor(">> SimpleClassLoader.loadClass(" + className + ", " + resolveIt + ")");
//----- Check our local cache of classes result = (Class)classes.get(className); if (result != null) { monitor(">> returning cached result."); return result; }
//----- Check with the primordial class loader try { result = super.findSystemClass(className); monitor(">> returning system class (in CLASSPATH)."); return result; } catch (ClassNotFoundException e) { monitor(">> Not a system class."); }
//----- Try to load it from preferred source if (urlString == null) { classBytes = getClassBytesFromFile(className); } else { classBytes = loadClassBytesFromURL(className); } if (classBytes == null) { throw new ClassNotFoundException(); }
//----- Define it (parse the class file) result = defineClass(classBytes, 0, classBytes.length); if (result == null) { throw new ClassFormatError(); }
//----- Resolve if necessary if (resolveIt) resolveClass(result);
// Done classes.put(className, result); monitor(">> Returning newly loaded class."); return result; } //---------- Private Methods ----------------------------- private byte[] loadClassBytesFromURL(String className) { className = formatClassName(className); try { URL url = new URL(urlString + className + ".class"); URLConnection connection = url.openConnection(); if (sourceMonitorOn) { print("Loading from URL: " + connection.getURL() ); } monitor("Content type is: " + connection.getContentType());
InputStream inputStream = connection.getInputStream(); int length = connection.getContentLength(); monitor("InputStream length = " + length); // Failure if -1
byte[] data = new byte[length]; inputStream.read(data); // Actual byte transfer inputStream.close(); return data;
} catch(Exception ex) { print("### SimpleClassLoader.loadClassBytesFromURL() - Exception:"); ex.printStackTrace(); return null; } } private byte[] getClassBytesFromFile(String className) { className = formatClassName(className); if (sourceMonitorOn) { print(">> getClassBytesFromFile(): " + className); } byte result[]; String fileName = filePrefix + className + ".class"; try { FileInputStream inStream = new FileInputStream(fileName); // *** Is available() reliable for large files?

result = new byte[inStream.available()]; inStream.read(result); inStream.close(); return result;
} catch (Exception e) { // If we caught an exception, either the class // wasn't found or it was unreadable by our process.

print("### File '" + fileName + "' not found."); return null; } } private String formatClassName(String className) { if (classNameReplacementChar == '\u0000') { return className; } else { return className.replace('.', '_'); } } private void monitor(String text) { if (monitorOn) print(text); } //--- Std private static void print(String text) { System.out.println(text); }
} // End class
================= TestLoader.java ================= /** * Tests SimpleClassLoader. If no command options are * entered then the url is used. Otherwise local file * loading is used, which allows testing locally before * server deployment.

* * Note - Still cannot get to work: *** * String root = "http://localhost/file:///C|jp/test/store/"; * or * String root = "file:///C|jp/test/store/"; * * @author Jack Harich - 8/18/97 */ public TestLoader(String[] args) { SimpleClassLoader loader = new SimpleClassLoader(); loader.setClassNameReplacementChar('_');
if (args.length == 0) { String root = "http://www.mindspring.com/~happyjac/"; loader.setRootURL(root); } else { loader.setFilePrefix("store\\"); }
// A series of tests: Class testClass = null; try { testClass = loader.loadClass("Hello"); } catch(Exception ex) { print("Load failed"); //ex.printStackTrace(); return; } print("Loaded class " + testClass.getName() ); try { Runnable hello = (Runnable)testClass.newInstance(); hello.run(); } catch(Exception ex) { print("Failed to instantiate"); ex.printStackTrace(); } } public static void main(String[] args) { new TestLoader(args); } private static void print(String text) { System.out.println(text); } } // End class ================= Hello.java ================= package test.store;
public class Hello implements Runnable {
//---------- Initialization ------------------------------ public Hello() { print("Hello class instantiated"); } public static void main(String args[]) { Runnable test = (Runnable)new Hello(); test.run(); } //---------- Run Implementation -------------------------- public void run() { print("Hello.run() called"); // Test ability to load from same class loader Worker worker = new Worker(); worker.startWorking(); } //---------- Private Methods ----------------------------- //--- Std private static void print(String text) { System.out.println(text); } } // End class ================= Worker.java ================= package test.store;
public class Worker implements Person {
//---------- Initialization ------------------------------ public Worker() { print("Worker class instantiated"); } //---------- Person Implementation ----------------------- public String getFirstName() { return "FirstName"; } //---------- Public Methods ------------------------------ public void startWorking() { print("Worker.startWorking() called");
Person testPerson = (Person)new Worker(); print("Person first name is " + testPerson.getFirstName()); print("Tested casting Worker to Person"); } //---------- Private Methods ----------------------------- //--- Std private static void print(String text) { System.out.println(text); } } // End class ================= Person.java ================= package test.store;
public interface Person { public String getFirstName(); }

[Jack Harich happyjac@mindspring.com 1997aug18]

jv'ex.Class.depedency

name::
* McsEngl.jv'ex.Class.depedency@cptIt,

"J. David Beutel" <jdb@pinn.net> wrote:
>On Thu, 8 May 1997, Alex Jeannopoulos wrote:
>> Does anyone out there know any method of generating a list of all the
>> classes referenced by a class.
> >Jamie Cansdale has built a 1.1 GUI tool for that sort of thing. The >GUI works pretty well on JDK 1.1.1 Win95 (it might work better in one >of the IDE's), and the functionality itself has been *very* handy. See >http://www.obsolete.com/people/cansdale/java/class_spider >

Thanks for the plug! =o)
In fact only the ZIP generating functionality requires JDK 1.1 (this is because Sun's ZIP package uses native methods). You can generate JARs using JDK 1.02 (ironically the MicroSoft JAR classes don't use any native methods). I hope people find this tool useful. Remember to unzip any classes you want it to collect.
Have fun,
Jamie Candale 1997may12

jv'ex.CLASS.directory

name::
* McsEngl.jv'ex.CLASS.directory@cptIt,

Thanks for everyone's input. Seems like the best way to go is:
Class.getProtectionDomain().getCodeSource().getLocation()
Chris
[{1999-03-13}]

jv'ex.CLASS.relation

name::
* McsEngl.jv'ex.CLASS.relation@cptIt,
* McsEngl.jv'ex.class.connection@cptIt,

_DEFINITION:
How we can relate 2 classes in order to use one inside another.
[nikos {1999-03-10}]

From a Method of class1:
Class1{
method(){
Class2 c2 =new Class2(this)
}
}

Class2{
Class1 app;
//constructor
Class2(Class1 c1){
app=c1
// now from anywhere inside class2 you can use all methods/variables of class1
}
}
[nikos, {1999-03-10}]

From an Inner Class of class1:
Class1{
Class1 c1Object;
Class1(){
c1Object=this;
}
class3{
Class2 c2 =new Class2(c1Object)
}
}

Class2{
Class1 app;
//constructor
Class2(Class1 c1){
app=c1
// now from anywhere inside class2 you can use all methods/variables of class1
}
}
[nikos, {1999-03-10}]

jv'ex.Collator

name::
* McsEngl.jv'ex.Collator@cptIt,

Collator myCollator = Collator.getInstance(new Locale("en", "US"));
System.out.println(myCollator.compare("abc", "def")); System.out.println(myCollator.compare("rtf", "rtf")); System.out.println(myCollator.compare("xyz", "abc"));

-1,
0,
1,
[jdk1.2]

// Compare two strings in the default locale
Collator myCollator = Collator.getInstance();

jv'ex.COLLECTION

name::
* McsEngl.jv'ex.COLLECTION@cptIt,

jv'ex.COLLECTION.NODUPLICATES:
Suppose you have a Collection, c, and you want to create another Collection containing the same elements, but with all duplicates eliminated. The following one-liner does the trick:
Collection noDups = new HashSet(c);
[JS TUTORIAL {1999-03-12}]

jv'ex.List.util

name::
* McsEngl.jv'ex.List.util@cptIt,

import java.util.*;
public class Sort {
public static void main(String args[]) {
List l = Arrays.asList(args);
Collections.sort(l);
System.out.println(l); } }

Let's run the program: % java Sort i walk the line
[i, line, the, walk]
[JS TUTORIAL {1999-03-12}]

jv'ex.ArrayList

name::
* McsEngl.jv'ex.ArrayList@cptIt,

The JDK contains two general-purpose List implementations. ArrayList, which is generally the best-performing implementation, and LinkedListwhich offers better performance under certain circumstances.
[JS TUTORIAL {1999-03-12}]

jv'ex.LinkedList

name::
* McsEngl.jv'ex.LinkedList@cptIt,

If you frequently add elements to the beginning of the List, or iterate over the List deleting elements from its interior, you might want to consider LinkedList. These operations are constant time in a LinkedList but linear time in an ArrayList. But you pay a big price! Positional access is linear time in a LinkedList and constant time in an ArrayList. Furthermore, the constant factor for LinkedList is much worse. If you think that you want to use a LinkedList, measure the performance with both LinkedList and ArrayList. You may be surprised.
[JS TUTORIAL {1999-03-12}]

jv'ex.Set

name::
* McsEngl.jv'ex.Set@cptIt,

import java.util.*;
public class FindDups { public static void main(String args[]) {
Set s = new HashSet(); for (int i=0; i<args.length; i++) if (!s.add(args[i])) System.out.println("Duplicate detected: "+args[i]);
System.out.println(s.size()+" distinct words detected: "+s); } }

Now let's run the program: % java FindDups i came i saw i left
Duplicate detected: i Duplicate detected: i 4 distinct words detected: [came, left, saw, i]
[JS TUTORIAL {1999-03-12}]

jv'ex.HashSet

name::
* McsEngl.jv'ex.HashSet@cptIt,

The JDK contains two general-purpose Set implementations.
HashSet, which stores its elements in a hash table, is the best-performing implementation.
TreeSet, which stores its elements in a red-black tree, guarantees the order of iteration.
[JS TUTORIAL {1999-03-12}]

Set s = new HashSet((Collection)jSCS.vectorParGenID));
for (Iterator i=s.iterator(); i.hasNext();)
{String pgid=(String)i.next(); ...}

jv'ex.TreeSet

name::
* McsEngl.jv'ex.TreeSet@cptIt,

jv'OrderedList,

import java.util.*;

public class DemoTreeSet {

public static void main(String[] args) {

TreeSet t1 = new TreeSet();
t1.add("ggg");
t1.add("aaa");
t1.add("ddd");
t1.add("bbb");
t1.add("nnn");
t1.add("lll");

System.out.println("Contents of treeset");

Iterator it1 =t1.iterator();

while(it1.hasNext()){
Object o1 = it1.next();
System.out.println(o1);
}
}
}

Output:

Contents of treeset
aaa
bbb
ddd
ggg
lll
nnn

jv'ex.COLLECTIONS

name::
* McsEngl.jv'ex.COLLECTIONS@cptIt,

USING JAVA COLLECTIONS.  The Collection interface is a new feature of JDK(tm) 1.2.  A "collection" in data structure terms is a group of elements.  Some types of collections that derive from Collection include the following:
   List -- an interface specifying an ordered sequence of elements
   Set -- an interface specifying a mathematical set of elements, with no    duplication
   Vector -- an implementation of List

Specifying interfaces in this way lets you manipulate collections without having to know the details of how a given collection is implemented.  Note that existing data types like Vector have been incorporated into the Collection framework.

To see why the collections approach can be useful, consider a simple example, that of sorting a vector of elements.  JDK 1.1 and earlier versions offered no standard way to do this kind of sorting, but collections provides the capability.  Consider the following example:
        import java.util.*;                 class Comparer implements Comparator {                 public int compare(Object obj1, Object obj2)                 {                         int i1 = ((Integer)obj1).intValue();                         int i2 = ((Integer)obj2).intValue();                                 return Math.abs(i1) - Math.abs(i2);                 }         }                 public class collect {                 public static void main(String args[])                 {                         Vector vec = new Vector();                                 vec.addElement(new Integer(-200));                         vec.addElement(new Integer(100));                         vec.addElement(new Integer(400));                         vec.addElement(new Integer(-300));                                 Collections.sort(vec);                         for (int i = 0; i < vec.size(); i++) {                                 int e=((Integer)vec.elementAt(i)).intValue();                                 System.out.println(e);                         }                                 Collections.sort(vec, new Comparer());                         for (int i = 0; i < vec.size(); i++) {                                 int e=((Integer)vec.elementAt(i)).intValue();                                 System.out.println(e);                         }                 }         }
In this example, there is a vector of Integer wrappers on integral quantities.  Calling Collections.sort on this vector sorts the vector in a natural way, that is, from lowest to highest according to the values contained in the wrappers.  This sorting is achieved by virtue of the fact that all the wrapper types, along with String and a few others, implement an interface called java.lang.Comparable that imposes an ordering on individual elements.  And Vector is an implementation of List, which defines a sorting method on lists.
But suppose you want to sort this vector according to your own ordering, one that compares elements according to their absolute magnitude.  How can you do this?
One approach is to call Collections.sort again, this time specifying your own ordering.  This ordering is done by defining a class "Comparer" that implements the java.util.Comparator interface, returning < 0, 0, or > 0 according to whether the first element is less than, equal to, or greater than the second.  The difference between java.lang.Comparable and java.util.Comparator is simply that Comparable is used for types (such as Integer and String) that are built in to the core API, while Comparator is used in cases where you want to specify your own custom element ordering.
Also, there are other features in collections worth investigating, such as the Map interface that replaces Dictionary and binary searches on ordered lists.  The benefit of the collection framework is that it provides easier and more powerful use of Java language data structures.
[jdc {1998-04-23}]

jv'ex.collections.vector

name::
* McsEngl.jv'ex.collections.vector@cptIt,

USING VECTOR IN THE COLLECTION FRAMEWORK
Collections are a new feature of the Java 2 Platform, and are described in detail in various articles available on the Java Developer Connection.
Collections are used to organize and operate on groups of data elements.
For example, ArrayList is a replacement for Vector, and HashMap is similar to Hashtable.
The old classes such as Vector are still available, but the new ones are preferred. So an obvious question is how to convert between old and new.
You might, say, have a Vector object in an application, and you want to call a method that takes an ArrayList argument. One way of doing such a conversion is illustrated by the following example:
import java.util.*; public class convert { public static void process(ArrayList al) { for (int i = 0; i < al.size(); i++) System.out.println(al.get(i)); } public static void main(String args[]) { Vector vec = new Vector(); vec.addElement("123"); vec.addElement(new Integer(456)); vec.addElement(new Double(789)); process(new ArrayList(vec)); } }
A Vector is created, and several elements added to it. Then the process method is called, and it is passed an ArrayList object, one created via a constructor that takes a Vector argument. More precisely, what is happening here is that there is an ArrayList constructor that takes a "Collection" interface argument, and Vector has been retrofitted to implement the Collection interface, and so an ArrayList can be created from a Vector via this constructor.
There are a number of other conversion mechanisms available in the collection framework, for hooking together old and new code.
[jdc 1999feb16]

jv'ex.colletor

name::
* McsEngl.jv'ex.colletor@cptIt,

COLLATORS
If you've used Java much at all, you've probably had occasion to compare strings using the String.compareTo method. This method does lexicographical comparison, which is a fancy way of saying that the numerical values of corresponding Unicode characters in the strings are compared. For example, the letter "a" has a numeric value of 0x61, "b" 0x62, and so on.
Such comparisons are obviously useful, but not necessarily completely adequate, for example in an internationalization context. Suppose, for example, that you'd like for lower and upper case characters to compare identical, or you want accents on letters to be ignored. The collator classes in java.text can be used for this purpose, that is, to build locale-sensitive string comparison methods.
To see how collators work, consider an example:

import java.text.*;
import java.util.*;

public class collate {

public static void main(String args[])
{
 Collator coll = Collator.getInstance(Locale.US);
 coll.setStrength(Collator.TERTIARY);
 System.out.println(coll.compare("a","A"));//false
 coll.setStrength(Collator.SECONDARY);
 System.out.println(coll.compare("a","A"));//true

 coll.setStrength(Collator.SECONDARY);
 System.out.println(coll.compare("a","\u00e0"));//false
 coll.setStrength(Collator.PRIMARY);
 System.out.println(coll.compare("a","\u00e0"));//true
 coll.setStrength(Collator.IDENTICAL);
 System.out.println(coll.compare("a","b"));//false
CollationKey key1 = coll.getCollationKey("abc");
CollationKey key2 = coll.getCollationKey("def");
System.out.println(key1.compareTo(key2));//false
} }

The first line:
Collator defcoll = Collator.getInstance(Locale.US);
retrieves a new collator, according to the locale settings applicable to the United States.
Then a series of string comparisons is done, in each case setting a strength before performing the comparison. A strength specifies what level of difference is considered important in the comparison. Four different strengths can be defined: IDENTICAL, PRIMARY, SECONDARY, and TERTIARY. The meaning of each strength depends on the specific locale. For example, in the US locale, upper versus lower case is considered a TERTIARY difference, less important than a SECONDARY difference. If the strength is set to TERTIARY, then case is significant. An example of a SECONDARY difference is accents on letters. The Unicode letter "\u00e0", defined to be:
00E0;LATIN SMALL LETTER A WITH GRAVE
is considered different than "a" when comparing using a SECONDARY strength setting, but identical when using a PRIMARY one. These rules may of course be different for some other locale.
A final point about this example concerns efficiency. If you are performing repeated string comparisons using collators, it may be more efficient to use CollationKey objects instead of Collation.compare. CollationKey objects are precompiled, which aids performance.
If you are developing applications that operate in an international context, then this whole area is one that needs to be considered.
[jdc {1999-03-17}]

jv'ex.com

name::
* McsEngl.jv'ex.com@cptIt,

How to open msword:
You may be interested by this: http://www.must.de/Javactpe.htm
or by Java/COM bridge: http://pharos.inria.fr/Java/search?term=s1:5427
1999nov

jv'ex.command'line'arg

name::
* McsEngl.jv'ex.command'line'arg@cptIt,

jv'ex.arguments

To cast arguments from "String" to "int"
Integer.valueOf(args[0]).intValue()

To use the right arguments:
if (args.length != 1) {
System.err.println("Usage: java Main <file>");
System.exit(-1);
}

jv'ex.COMMENT

name::
* McsEngl.jv'ex.COMMENT@cptIt,

/ **
* Create a menu for the app. This is redefined to trap
* a couple of special entries for now.
* @author
* @version
* @see
* @param
* @return
* @exception
*/
protected JMenu createMenu(String key) {

jv'ex.compareTo

name::
* McsEngl.jv'ex.compareTo@cptIt,

   String javaVersion = System.getProperty("java.version");
   if(javaVersion.compareTo("1.5") < 0)
   {
     System.err.println("You are running Java version "
       + javaVersion + '.');
     System.err.println("jEdit requires Java 1.5 or later.");
     System.exit(1);
   }

jv'ex.COMPILING'WITHIN.APPLICATION

name::
* McsEngl.jv'ex.COMPILING'WITHIN.APPLICATION@cptIt,

Try
http://www.cdt.luth.se/java/doc/sun/shared/
[1997dec10]

jv'ex.COMPONENT

name::
* McsEngl.jv'ex.COMPONENT@cptIt,

repaint:
setPreferredSize(new Dimension(...));
revalidate();
repaint();

jv'ex.CONSTRUCTOR

name::
* McsEngl.jv'ex.CONSTRUCTOR@cptIt,

public class Test extends java.lang.Object
{
 /* constructor */
 public Test()
 {
 }
}

We must NOT set the VOID keyword in a constructor.
[2004-06-29]

My scs applet, wanted the constructor to be public to run with appletviewer.
[1997dec11]

A specific-class to have a constructor like the generic-class, must explicitely state the same constructor and in the specific-class.
[hknu_2004-10-18]

jv'ex.EXTENDS

name::
* McsEngl.jv'ex.EXTENDS@cptIt,

A class 'extends' only ONE class. The new class has the functionality of the old plus new one.

class Main extends Frame

IF a SUPERCLASS has a constructor with parameters and a subclass has no constructor
THEN we must add in superclass and a constructor without parameters.
[hknu_2004-06-29]

IF a SUBCLASS has a constructor with less parameters than its superclass,
THEN the constructor is subclass must have the command: super (arg1, arg2, ...)
with all the parameters of the constructor of the superclass.
[hknu_2004-11-10]

USE OF "SUPER", "THIS":
public class TermTxNounAdjectiveEng extends Term_TxConcept
public TermTxNounAdjectiveEng (String nam, String rl)
{
 super(nam, "termTxNoun_Adjective", "eng");
 termTxCpt_sRule=rl;
}

public TermTxNounAdjectiveEng (String nam)
{
 this(nam, null);
}

jv'ex.CONVERSION.NUMBERS#ql:jv'app.conversion.number#

name::
* McsEngl.jv'ex.CONVERSION.NUMBERS@cptIt,

jv'ex.conversion.String-To.binaryFormat

name::
* McsEngl.jv'ex.conversion.String-To.binaryFormat@cptIt,

Q: How to convert a STRING to BINARY
A: You might iterate through your string, getting each char and casting it to an int.
Then use the method Integer.toBinaryString(int) [Java 1.1] or Integer.toString(int number, int radix) [Java 1.0 & 1.1] to convert your char its binary String representation.
Append each of these strings to a StringBuffer, padding them with preceding zeros, so that each character is of uniform length (8 chars if you are restricting your inputs to ascii/iso-latin-1, 16 if you might use other Unicode chars).
Hope this helps.
Steve Waldman
[1997jun22]

jv'ex.COPY'ARRAY

name::
* McsEngl.jv'ex.COPY'ARRAY@cptIt,

System.arraycopy(Object src, int src_position, Object dst, int dst_position, int length)

jv'ex.COPY'FILE

name::
* McsEngl.jv'ex.COPY'FILE@cptIt,

The following code copy any file from an URL to your hard drive and give its size. It run as an applicattion with two parameters: the URL of the file to copy and the output filename.
Hope it help...
import java.awt.*; import java.io.*; import java.net.*;
public class CopyFileFromURL{ public static void main(String arg[]){   String fileInput = null, fileOutput = null;   try{    fileInput = arg[0];    fileOutput = arg[1];   }   catch(Exception e){    System.out.println("Two arguments required: URL-input and output filename");
   System.exit(0);   }   try{    byte b[] = new byte[1024];    URL url = new URL(fileInput);    InputStream in = url.openConnection().getInputStream();    FileOutputStream out = new FileOutputStream(fileOutput);    int n = 0;    while((n = in.read(b, 0, b.length)) != -1){     out.write(b, 0, n);    }    in.close();    out.close();    System.out.println("File transferred. " + (new File(fileOutput)).length() + " bytes length");    System.exit(0);   }   catch(Exception e){    System.out.println("An error ocurred while reading");    System.exit(0);   } } }
[1998jan07]

COPY BINARY FILE:
Try this: try { int readed = 0; byte[] buffer = new byte[1024]; RandomAccessFile in = new RandomAccessFile("INPUT_FILENAME","r"); RandomAccessFile out = new RandomAccessFile("OUTPUT_FILENAME","w"); do { readed = in.read(buffer); if (readed < 1024) { buffer[readed] = '\0'; } out.write(buffer); } while (readed == 1024); in.close(); out.close(); } catch (Exception e) { e.printStackTrace(); }

Hmmmm..... or try this:
try { int nbytes = 0; byte[] buffer = new byte[1024]; InputStream in = new FileInputStream("INPUT_FILENAME"); OutputStream out = new FileOutputStream("OUTPUT_FILENAME"); while ((nbytes=in.read(buffer))!=-1) out.write(buffer,0,nbytes); in.close(); out.close(); } catch (Exception e) { e.printStackTrace(); }

jv'ex.createEmptyBorder

name::
* McsEngl.jv'ex.createEmptyBorder@cptIt,

p.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 20));//up,left,down,right.

jv'ex.CURSOR.SIZE

name::
* McsEngl.jv'ex.CURSOR.SIZE@cptIt,

The 1.2 JDK has a Toolkit method of:
    public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
     * @param hotSpot the X and Y of the large cursor's hot spot.  The      * hotSpot values must be less than the Dimension returned by      * getBestCursorSize().
Other new/interested related methods: getBestCursorSize getMaximumCursorColors

jv'ex.CVS

name::
* McsEngl.jv'ex.CVS@cptIt,

I was just browsing through the configuration management FAQ, and I noticed that support for CVS is available. I remember a recent exchange in which someone said that CVS is unsupported, so I thought I'd forward the URL. I have no connection with this company or knowledge of their service beyond what's on their website.
http://www.cyclic.com/
I've used CVS a lot for Java development, and I find it so stable that I'd have a hard time paying for support (developer training might be another matter).
-- Xeno (xeno@alta.com) Altadena Instruments Corporation ___

jv'ex.D

name::
* McsEngl.jv'ex.D@cptIt,

jv'ex.DataBase

name::
* McsEngl.jv'ex.DataBase@cptIt,

I prefer going to www.instantDB.co.uk for a free database.
[{1999-03-02}]

jv'ex.DATAINPUTSTREAM-TO-STRING

name::
* McsEngl.jv'ex.DATAINPUTSTREAM-TO-STRING@cptIt,

public static String getString(DataInputStream dis) throws IOException {
 int size = dis.readShort();
 char[] charBuffer = new char[size];
 for (int i = 0; i < size; i++) {  
   charBuffer[i] = dis.readChar();
 }
 return new String(charBuffer, 0, size);
}

jv'ex.Date

name::
* McsEngl.jv'ex.Date@cptIt,

// Shows the TIME get Test to execute.
class Main {
public static void main(String[] args) {
Date startTime = new Date();
Test.tests();
Date endTime = new Date();
System.out.println("Tests took: " +
(endTime.getTime() - startTime.getTime()) +
" ms");
}
}

jv'ex.DAY

name::
* McsEngl.jv'ex.DAY@cptIt,

import java.util.*; import java.text.*;
public class Test {     public static void main(String[] args)     {         Calendar calendar = new GregorianCalendar();         SimpleDateFormat formatter = new SimpleDateFormat("EEEE");
        int startOfWeek = calendar.getFirstDayOfWeek();
        String[] weekDays = formatter.getDateFormatSymbols().getWeekdays();
        for (int i = 0; i < 7; i++)         {             System.out.println(weekDays[(i + startOfWeek - 1) % 7 + 1]);         }     } }
[1998jan09]

jv'ex.DELAY-A-COMMAND

name::
* McsEngl.jv'ex.DELAY-A-COMMAND@cptIt,

     try {
       Thread.sleep(400);
     } catch (InterruptedException ie){
       System.out.println(ie.getMessage());
     }
command

public class TestSleep
{
public static void main ( String [ ] args )
{
System.out.println("Do this stuff");
try { Thread.currentThread().sleep(3000); }
catch ( Exception e ) { }
System.out.println("Now do everything after this");
}
}

jv'ex.DELETE.CHARACTER'FROM'STRING

name::
* McsEngl.jv'ex.DELETE.CHARACTER'FROM'STRING@cptIt,

/** * Removes all instances of the specified character from the given String.
* * @param fromString the String to delete characters from * @param charToDelete the character to delete from the given String * * @return a String with all instances of the specified char deleted */
public static String deleteChar(String fromString, char charToDelete) {
 StringBuffer buffer = new StringBuffer(fromString.length());
 for (int i = 0; i < fromString.length(); i++) {
  if (fromString.charAt(i) != charToDelete) {
   buffer.append(fromString.charAt(i));   }  }  return new String(buffer); }

jv'ex.DSDocument.INSERT'FILE

name::
* McsEngl.jv'ex.DSDocument.INSERT'FILE@cptIt,

public void doLoadCommand() {
String msg;
FileDialog file = new FileDialog ( Formatter.this, "Load File", FileDialog.LOAD);
file.setFile ("*.java"); // Set initial filename filter
file.show(); // Blocks
String curFile;
if ((curFile = file.getFile()) != null) { String filename = file.getDirectory() + curFile; char[] data; setCursor (Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); File f = new File (filename); try { // Clear out current document pane.setStyledDocument (doc = new DefaultStyledDocument()); // Read in text file FileReader fin = new FileReader (f); BufferedReader br = new BufferedReader (fin); char buffer[] = new char[4096]; int len; while ((len = br.read (buffer, 0, buffer.length)) != -1) { // Insert into pane doc.insertString(doc.getLength(), new String (buffer, 0, len), null); } statusInfo.setText ("Loaded: " + filename); } catch (BadLocationException exc) { statusInfo.setText ("Error loading: " + filename); } catch (FileNotFoundException exc) { statusInfo.setText ("File Not Found: " + filename); } catch (IOException exc) { statusInfo.setText ("IOException: " + filename); } setCursor (Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } }
[jdc]

jv'ex.dialog.Button

name::
* McsEngl.jv'ex.dialog.Button@cptIt,

class AboutCommand implements ActionListener{
 Dialog aboutDialog;
 AboutCommand(Frame scsc, String title){
   aboutDialog = new Dialog(scsc, title, true);
   aboutDialog.setLayout(new GridLayout(6,1,5,5));
   aboutDialog.add(new Label("version: 1.0 beta", Label.CENTER));
 ...
   Button doneButton = new Button("OK");
   doneButton.addActionListener(new OK());
   aboutDialog.add(doneButton);
   aboutDialog.pack();
   aboutDialog.setLocation(300,222);
   aboutDialog.show();
 }
 public void actionPerformed(ActionEvent e){
   aboutDialog.setVisible(true);
 }

class OK implements ActionListener{
 public void actionPerformed(ActionEvent e){
   aboutDialog.dispose();
 }
}
} //END of AboutCommand class.

jv'ex.DIALOG.confirmation

name::
* McsEngl.jv'ex.DIALOG.confirmation@cptIt,
* McsEngl.jv'ex.joptionpane.confirmation@cptIt,

int result= JOptionPane.showConfirmDialog(null, "Is SWING cool?");
if(result == JOptionPane.YES_OPTION) ...;
else if(result == JOptionPane.NO_OPTION) ...;
else if(result == JOptionPane.CANCEL_OPTION)...;
[jdk1.2]

jv'ex.DIALOG.input

name::
* McsEngl.jv'ex.DIALOG.input@cptIt,
* McsEngl.jv'ex.joptionpane.input@cptIt,

import javax.swing.JOptionPane;

a) The user TYPES an input:
String result = JOptionPane.showInputDialog(null, "Please enter your name:");
if(result != null) {...};
[jdk1.2]

showInputDialog(Object message, Object initialSelectionValue)

b) The user CHOOSES an input:
Object[] synonyms = v.toArray();
Object selectedValue = JOptionPane.showInputDialog(null,
"Choose the SYNONYM you want to delete",  //message
"Choose One",        //title
JOptionPane.INFORMATION_MESSAGE,  //message type
null,          //icon
synonyms,          //values to select
synonyms[0]);        //initial selection
if (selectedValue!=null)

jv'ex.DIALOG.message

name::
* McsEngl.jv'ex.DIALOG.message@cptIt,
* McsEngl.jv'ex.joptionpane.message@cptIt,
* McsEngl.jv'ex.message-dialog@cptIt,
* McsEngl.jv'ex.option-dialog@cptIt,

import javax.swing.JOptionPane;

JOptionPane.showMessageDialog(null, "Plain message");
[jdk1.2]

JOptionPane.showMessageDialog(Component, String);

jv'ex.DIALOG.warning

name::
* McsEngl.jv'ex.DIALOG.warning@cptIt,
* McsEngl.jv'ex.joptionpane.warning@cptIt,

import javax.swing.JOptionPane;

JOptionPane.showMessageDialog(null,
   "message: Example Warning",
   "Warning", JOptionPane.WARNING_MESSAGE);
[jdk1.2]

jv'ex.DO'WHILE

name::
* McsEngl.jv'ex.DO'WHILE@cptIt,

GENERAL-CONCEPT#ql:jv'do'while'statement#.

the do-while is convenient to use when the statements within the loop must be executed at least once. For example, when reading information from a file, you know that you will always have to read at least one character:
int c;
InputStream in;
. . .
do {
c = in.read();
. . .
} while (c != -1);
[JavaSoft Tutorial, 1996jul06]

jv'ex.DOCUMENT

name::
* McsEngl.jv'ex.DOCUMENT@cptIt,

GET-THE-NAME:
if (((String)doc.getProperty("name")).equals("EditorWW")){

jv'ex.double

name::
* McsEngl.jv'ex.double@cptIt,

double d1 = 1d; // double suffix
double d2 = 1D; // double suffix
double d3 = 47e47d; // 10 to the power

jv'ex.DOWNCASTING

name::
* McsEngl.jv'ex.DOWNCASTING@cptIt,

>In his book, Eckel indicates that downcasting is allowed, >but not advisable due to lack of type safety, i.e. you may >not know the type of the object you are downcasting to.

haven't read the book.  downcasting is usually a bad thing. but it *can*, with care,  be made "sort of" typesafe, e.g.:
there's a (conceptual only) code example and some discussion at:
http://cdo.weblinq.com/~tiger/code/java/java-yorku/Downcasting.html

jv'ex.Disk'Space

name::
* McsEngl.jv'ex.Disk'Space@cptIt,

At 11:43 AM 3/4/2000, alex wrote: > how can i know that disk space ? I find out all the class and no such >class told me that.
Try JConfig. http://www.tolstoy.com/samizdat/jconfig.html
It is a really nice _free_ utility library which will let you do this.
[{2000-03-05}]

jv'ex.drag'drop

name::
* McsEngl.jv'ex.drag'drop@cptIt,
* McsEngl.jv'ex.dnd@cptIt,

The only example of JDK 1.2 drag and drop that I've seen is on the "Focus on java" page, at http://java.miningco.com/library/weekly/aa072398.htm
...
As well as Johns great focus on Java page there are also some examples on the JDC, for example
http://developer.java.sun.com/developer/qow/archive/1/index.html
regards
[]1998dec18

For anyone looking for an example demonstrating 1.2 Drag and Drop capabilities, I just put one online at http://java.miningco.com/library/weekly/aa051298.htm.
[Jukowski 1998may]

Check out 
http://www.apl.jhu.edu/~hall/java/
Specifically
http://www.apl.jhu.edu/~hall/CWP-Sources/CWP-Examples/Chapter13/ImageLabel/I con.java
which has a drag-and-drop image component.

jv'ex.E

name::
* McsEngl.jv'ex.E@cptIt,

jv'ex.Elemement (javax.swing.text )

name::
* McsEngl.jv'ex.Elemement (javax.swing.text )@cptIt,

Name:
* String  getName() Fetches the name of the element.

Offsets:
* getStartOffset()
* getEndOffset()

PARENT:
* Element  getParentElement()  Fetches the parent element.

CHILDREN:
* Element  getElement(int index)  Fetches the child element at the given index.
* int  getElementCount()  Gets the number of child elements contained by this element.
* int  getElementIndex(int offset)  Gets the child element index closest to the given offset.
* boolean  isLeaf()    Is this element a leaf element? An element that may have children, even if it currently has no children, would return false.

DOCUMENT:
* Document  getDocument()  Fetches the document associated with this element.

ATTRIBUTES:
* AttributeSet  getAttributes()  Fetches the collection of attributes this element contains.

jv'ex.email

name::
* McsEngl.jv'ex.email@cptIt,

There is an example by andre Pinheiro that I found really nice. IT talks about writing java clients to NNTP server, which I presume is exactly what you are looking for.
look at http://www.scruz.net/~markda/JavaZine/Issue/NewsReader.html
It has a interesting article titled "Communicating with a NNTP Server"
[1997may12]

jv'ex.EMAIL.FROM'APPLET

name::
* McsEngl.jv'ex.EMAIL.FROM'APPLET@cptIt,

What I have done is create a servlet which will send the email. The data is passed from an applet to a servlet via the URL.getContent() method.
[1997dec24]

jv'ex.EmptyStackException

name::
* McsEngl.jv'ex.EmptyStackException@cptIt,

class Main {
public static void main(String[] args) {
System.out.println("EmptyStackException example");
Stack s = new Stack();
System.out.println("push: " + s.push(new Integer(1)));
System.out.println("push: " + s.push(new Integer(2)));
System.out.println("push: " + s.push(new Integer(3)));
System.out.println("pop: " + s.pop());
System.out.println("pop: " + s.pop());
System.out.println("pop: " + s.pop());
System.out.println("pop: " + s.pop()); // empty stack
}
}

jv'ex.ENCONDING

name::
* McsEngl.jv'ex.ENCONDING@cptIt,
* McsEngl.jv'ex.file.enconding@cptIt,
* McsEngl.jv'ex.enconding.file@cptIt,

READ_FILE_WITH_STATED_ENCONDING:
//  FileReader reader = new FileReader(fileName);
 FileInputStream fis = new FileInputStream(fileName);
 InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
 BufferedReader reader = new BufferedReader(isr);

WRITE_FILE_WITH_STATED_ENCONDING:
FileOutputStream fos = new FileOutputStream(new File("out"));
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF8");
osw.write(tbEdSrcJTxAr.getText());
osw.close();

The encoding of an InputStreamReader (1.1):

fis = new FileInputStream(args[0]);
irs = new InputStreamReader(fis);
System.out.println("Using encoding : "+irs.getEncoding());

in my machine (win95) gives cp1253

The following code would convert a String to utf8 bytes as follows:
byte [] utf8bytes = aTextString.getBytes( "UTF8");
To do the reverse:
byte[] inBytes=aRawString.getBytes(); String answer = null; try { answer = new String(inBytes, "UTF8"); } catch (Exception ex) { System.out.println("Decoding exception. "); ex.printStackTrace(); }
[1999jan08]

READING/WRITING UNICODE USING I/O STREAM ENCODINGS
The Java programming language uses two-byte Unicode characters, while one-byte characters are common in other languages such as C (which uses ASCII). An obvious question that comes up is therefore: how are Java characters stored in disk files, and how can the Java language make use of the huge quantity of data out there that is encoded in ASCII?
When the JDK(tm) software, such as version 1.0.2, first became available, this problem hadn't been solved. For example, DataInputStream.readLine is a method for reading lines of input, but it fails to properly convert bytes to characters, and is now deprecated. You won't necessarily notice this failure until you start to more fully use the Unicode character set.
This problem has been solved by means of the Reader and Writer I/O classes. These sit on top of a byte stream (such as FileInputStream), and apply encoding bytes -> characters or characters -> bytes.
There's an encoding that is applied by default, and you can determine its name via a small program:
public class encode { public static void main(String args[]) { String p = System.getProperty("file.encoding"); System.out.println(p); } }
On my machine, running Java 2 software, this prints out "Cp1252", which is a code for:
Windows Western Europe / Latin-1
A table of encodings can be found at:
http://java.sun.com/products/jdk/1.1/intl/html/intlspec.doc7.html
If you want to directly specify encodings, one way of doing so is illustrated by the following program, which writes all the lower case letters of the Unicode alphabet to a file. Some of these characters have a non-zero high byte (that is, they are greater in value than '\u00ff'), and preserving both bytes of the character is therefore important. The encoding used is one called UTF-8, which has the property of representing ASCII text as itself (one byte), and other characters as two or three bytes.
import java.io.*; public class enc1 {
public static void main(String args[]) {
try {
FileOutputStream fos = new FileOutputStream("out");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF8"); for (int c = '\u0000'; c <= '\uffff'; c++) { if (!Character.isLowerCase((char)c)) continue; osw.write(c); } osw.close(); } catch (IOException e) { System.err.println(e); } } } This program reverses the process:
import java.io.*; public class enc2 { public static void main(String args[]) { try { FileInputStream fis = new FileInputStream("out"); InputStreamReader isr = new InputStreamReader(fis, "UTF8"); for (int c = '\u0000'; c <= '\uffff'; c++) { if (!Character.isLowerCase((char)c)) continue; int ch = isr.read(); if (c != ch) System.err.println("error"); } isr.close(); } catch (IOException e) { System.err.println(e); } } }
InputStreamReader and OutputStreamWriter are the classes where byte streams are converted to character streams and vice versa.
This issue is quite an important one if you are concerned with writing applications that operate in an international context.
[jdc 1999feb17]

jv'ex.Enumeration

name::
* McsEngl.jv'ex.Enumeration@cptIt,

Enumeration of the keys of a hashtable:
                                Enumeration en = ht.keys();
                                while (en.hasMoreElements()) {
                                        String el = (String)en.nextElement();
                                        countrec crec = (countrec)ht.get(el);
                                        System.out.println(crec.count +" " + el);
                                }

import java.util.Properties;
import java.util.Enumeration;
class pr {
 public static void main (String[] args){
 Properties props = System.getProperties();
 for (Enumeration enum = props.propertyNames#ql::2nfoJAPI11.NFO:propertyNames rl5#(); enum.hasMoreElements();) {
   String key = (String)enum.nextElement();
   System.out.println(key + " = " + (String)(props.get(key)));
 }
 }
}

// to print all elements of a vector v:
for (Enumeration e = vector.elements#ql::2nfoJAPI11.NFO:[Level CONCEPT:class.vector [Level Normal Level:elements rl5 ]]#() ; e.hasMoreElements() ;) {
System.out.println(e.nextElement());
}

// print an enumeration of attributes:
   Enumeration rules = styles.getStyleNames();    while (rules.hasMoreElements()) {      String name = (String) rules.nextElement();      Style rule = styles.getStyle(name);      System.out.println(rule.toString());    }

THE ENUMERATION INTERFACE. 
In the string tokenizing example above, a string is tokenized, and the tokens are retrieved and printed in turn.  The example above illustrates a general concept:  enumeration.  That is, all the values in a list of some type are returned one at a time until the list is exhausted.  In the above example the list is a list of tokens extracted from a string.
The Java utility library provides an interface to capture this type of behavior.  java.util.Enumeration declares two methods:  hasMoreElements and nextElement.  The first of these returns a true/false value, according to whether a given enumeration is exhausted.  The second method returns the next element as an Object reference.
Enumeration is an interface, meaning that it simply describes methods that must be present in any class that implements the interface.  The description doesn't say anything about how those methods are implemented.
To make the idea of enumerations more concrete, here's a specific example that defines a Stepper class to step through the values in an array:
        import java.util.Enumeration;
        class Stepper implements Enumeration {                         private Object vec[];                 private int currpos;                         public Stepper(Object x[])                 {                         vec = x;                         currpos = 0;                 }                         public boolean hasMoreElements()                 {                         return currpos < vec.length;                 }                         public Object nextElement()                 {                         return vec[currpos++];                 }                 }                 public class enum {                         public static void main(String args[])                 {                         String data[] = {"alpha", "beta", "gamma", "delta"};                                 Stepper st = new Stepper(data);                                 while (st.hasMoreElements())                                 System.out.println(st.nextElement());                 }                 }
Stepper implements the Enumeration interface, so it must define the methods hasMoreElements and nextElement.  The implementation simply defines an internal variable "currpos" that defines the current position in the array. If this value is less than the array's length, there are more elements, and the next element is retrieved based on the current array position, which is then incremented.
Stepper will work with any array of objects.  String is a subclass of Object, and as such, a String[] array reference can be assigned to an Object[] array reference (via a "widening" conversion).
Finally, the Enumeration interface is particularly useful in cases where you want to hide the details of the enumerated data structure.  For example, a common error might be to assume that the indices of an array range in value from 1 to the array length, when, in fact, the range is from 0 to the length - 1.  Using an enumeration hides this detail, and is less error-prone than explicitly indexing through the array.
[jdc 1998jun]

jv'ex.ERROR.REDIRECTION

name::
* McsEngl.jv'ex.ERROR.REDIRECTION@cptIt,

I have found a method to change the error stream from java to a file.. It works only if you can change java code..and you put the next code inside...

(If you know it I am sorry if I bother you again, but perhaps someone consider it useful).


public static void main(String arg[]){                if (arg.length!=0){//I want to log the error stream to               //the file with the name contained in arg[0]..

               try{                   //assign new error stream                    System.setErr(newPrintStream                        (newFileOutputStream(arg[0])));                }              catch(IOException e) {                  System.out.println(e.getMessage());               }//end try               }//end if
// do your real work in the next
}
[1998jan28]

jv'ex.Event

name::
* McsEngl.jv'ex.Event@cptIt,

jv'ex.Event.inner'class

name::
* McsEngl.jv'ex.Event.inner'class@cptIt,

Capturing button presses import java.awt.*; import java.awt.event.*; // Must add this import java.applet.*;
public class Button2New extends Applet {
Button b1 = new Button("Button 1"), b2 = new Button("Button 2");

public void init() { b1.addActionListener(new B1()); b2.addActionListener(new B2()); add(b1); add(b2); }

class B1 implements ActionListener { public void actionPerformed(ActionEvent e) { getAppletContext().showStatus("Button 1"); } }

class B2 implements ActionListener { public void actionPerformed(ActionEvent e) { getAppletContext().showStatus("Button 2"); } }

/* The old way: public boolean action(Event evt, Object arg) { if(evt.target.equals(b1)) getAppletContext().showStatus("Button 1"); else if(evt.target.equals(b2)) getAppletContext().showStatus("Button 2"); // Let the base class handle it: else return super.action(evt, arg); return true; // We've handled it here } */
}

ONE-BUTTON TWO-ACTION'LISTENERS

name::
* McsEngl.ONE-BUTTON TWO-ACTION'LISTENERS@cptIt,

public class MultiListener ... implements ActionListener {
...
//where initialization occurs:
button1.addActionListener(this);
button2.addActionListener(this);
button2.addActionListener(new Eavesdropper(bottomTextArea));
}
public void actionPerformed(ActionEvent e) {
topTextArea.append(e.getActionCommand() + "\n");
}
}

class Eavesdropper implements ActionListener {
TextArea myTextArea;
public Eavesdropper(TextArea ta) {
myTextArea = ta;
}
public void actionPerformed(ActionEvent e) {
myTextArea.append(e.getActionCommand() + "\n");
}
}

ONE-BUTTON ONE-ACTION'LISTENER

name::
* McsEngl.ONE-BUTTON ONE-ACTION'LISTENER@cptIt,


import java.applet.Applet;
import java.awt.Button;
import java.awt.Toolkit;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Beeper extends Applet implements ActionListener {
Button button;

public void init() {
setLayout(new BorderLayout());
button = new Button("Click Me");
add("Center", button);
button.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
Toolkit.getDefaultToolkit().beep();
}
}

MOUSE'LISTENER

name::
* McsEngl.MOUSE'LISTENER@cptIt,
* McsEngl.jv'ex.event.mouse'listener@cptIt,

public class MouseDemo ... implements MouseListener {
...
//where initialization occurs:
//Register for mouse events on blankArea and applet (panel).
blankArea.addMouseListener(this);
addMouseListener(this); }
public void mousePressed(MouseEvent e) {
saySomething("Mouse button press", e); }
public void mouseReleased(MouseEvent e) {
saySomething("Mouse button release", e); }
public void mouseEntered(MouseEvent e) {
saySomething("Cursor enter", e); }
public void mouseExited(MouseEvent e) {
saySomething("Cursor exit", e); }
public void mouseClicked(MouseEvent e) {
saySomething("Mouse button click", e); }

void saySomething(String eventDescription, MouseEvent e) {
textArea.append(eventDescription + " detected on "
+ e.getComponent().getClass().getName()
+ ".\n");
textArea.setCaretPosition(maxInt); //hack to scroll to bottom
}
}

1.0.2

jv'ex.Event1.0.2:
Threre are 2 techniks to do event handling on a button.
1) Create a subclass of a button and do it
class MyButton extends Button {
MyButton(String s) {
super(s);
}
public boolean action(Event e, Object o) {
doSomething();
return true;
}
} and

2) Create an object of a Button class.
public class Test extends Applet {
Button b;
public void init() {
add(b = new Button("Press"));
}
public boolean action(Event e, Object o) {
if (e.target == b) {
doSomething();
return true;
}
return false;
}
}
WHICH IS THE BEST?
The first is more object-oriented, but needs as many class-files as the buttons are. In this case it takes more time on a network to load an applet.
[http://www.sigs.com/publications/docs/java/9607/java9607.oaks.html, 1997feb]

jv'ex.ActionEvent

name::
* McsEngl.jv'ex.ActionEvent@cptIt,
* McsEngl.jv'ex.event.action@cptIt,
* McsEngl.jv'ex.actionevent@cptIt,

HOW TO FIND THE COMPONENT THAT FIRED THE ACTION-EVENT:
jrButtonCase.setActionCommand("first");
...
jrButtonCase.addActionListener(new CaseCommand());

public void actionPerformed(ActionEvent e)
{if (e.getActionCommand().equals("first"))
...

jv'ex.eventsOfcomponent

name::
* McsEngl.jv'ex.eventsOfcomponent@cptIt,

All subclasses of Window have add/remove windowlistener All subclasses of TextComponent have add/remove textlistener All subclasses of Container have add/remove container listener (I would like to see a MenuContainer listener too personally).
There is no hard and fast rule for action events though, short of reflection. Actually, it isn't too hard, if you use some bean classes which does the reflection for you.
TextField tf = new TextField (); BeanInfo bi = Introspector.getBeanInfo (tf.getClass()); EventSetDescriptor[] esd = bi.getEventSetDescriptors(); for (int i=0;i<esd.length;i++) System.out.print (esd[i].getName() + " "); System.out.println ();
Will display 'action' as one of the events.
-- John Zukowski
[1997may20]

jv'ex.EXECUTE.BROWSER

name::
* McsEngl.jv'ex.EXECUTE.BROWSER@cptIt,

After extensive google searching, I came across a partial solution. This code detects the default browser on a Mac, and provides an elegant solution for trying standard browsers in turn for other Unix systems. I tested it on WIndows XP and Mac OSX 3.9, and it detected the default browser each time. A suped up version of this tool is available as a SourceForge project. You can find it here:
- http://sourceforge.net/projects/browserlaunch2/
Here's the simplified code:
/////////////////////////////////////////////////////////
// Bare Bones Browser Launch //
// Version 1.5 //
// December 10, 2005 //
// Supports: Mac OS X, GNU/Linux, Unix, Windows XP //
// Example Usage: //
// String url = "http://www.centerkey.com/"; //
// BareBonesBrowserLaunch.openURL(url); //
// Public Domain Software -- Free to Use as You Like //
/////////////////////////////////////////////////////////

import java.lang.reflect.Method;
import javax.swing.JOptionPane;

public class BareBonesBrowserLaunch {

private static final String errMsg = "Error attempting to launch web browser";

public static void openURL(String url) {
String osName = System.getProperty("os.name");
try {
if (osName.startsWith("Mac OS")) {
Class fileMgr = Class.forName("com.apple.eio.FileManager");
Method openURL = fileMgr.getDeclaredMethod("openURL",
new Class[] {String.class});
openURL.invoke(null, new Object[] {url});
}
else if (osName.startsWith("Windows"))
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
else { //assume Unix or Linux
String[] browsers = {
"firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" };
String browser = null;
for (int count = 0; count < browsers.length && browser == null; count++)
if (Runtime.getRuntime().exec(
new String[] {"which", browsers[count]}).waitFor() == 0)
browser = browsers[count];
if (browser == null)
throw new Exception("Could not find web browser");
else
Runtime.getRuntime().exec(new String[] {browser, url});
}
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, errMsg + ":\n" + e.getLocalizedMessage());
}
}

}
[http://forums.sun.com/thread.jspa?threadID=755355]

jv'ex.EXECUTE.PROGRAM

name::
* McsEngl.jv'ex.EXECUTE.PROGRAM@cptIt,
* McsEngl.jv'ex.exec@cptIt,

Hi,
All you need to do is get the associated InputStream of the Process -- this is the input stream connected to the normal output of the subprocess. Try this,
...String[] commandLine = {"myprogram.exe<input>output"}; Process process = Runtime.getRuntime().exec(commandLine); InputStream in = process.getInputStream(); int ch = 0; while( in.available() > 0 ) { ch = in.read(); if( ch == -1 ) break;
System.out.print( (char)ch ); }
...
jeff --
Ann Berit Saust Rossi wrote: > > Hi, > I browsed the archive but couldn't find a solution to the following > problem: I need to call a Fortran program from Java, and I do not have > access to the source code. The program reads and prints to the screen, > and I would like to do something like: > > String[] commandLine = {"myprogram.exe<input>output"}; > > Process process = Runtime.getRuntime().exec(commandLine); > > As some of you know, this code causes a IOException.> Is there a solution to this problem?> > Any help is much appreciated, Ann Rossi, Field Diagnostics Services > saust@acrx.com
[{1999-03-27}]

Mesaros Valentin wrote: > > Hi, there > How can I call *.exe programs & C library from Java programs?

If you want to execute an existing program from Java, then use:
   Runtime.getRuntime().exec(..)
Check the Java documentation on the types of arguments that exec accepts.  If you want to call a function in a C library, then you need to read the documentation on how to do this.  Things are easier under 1.1 than they were under 1.02.  Under 1.1, you need to read about JNI. Here is the URL for the JavaSoft reference on the web:
http://java.sun.com/docs/books/tutorial/native1.1/index.html
There are also numerouse books which describe how to do this like the Java 1.1 Developer's Handbook by Heller and Roberts (Sybex).
Cynthia Jeness

jv'ex.EXPRESSION

name::
* McsEngl.jv'ex.EXPRESSION@cptIt,

the character-counting program contains a few other expressions including:
System.in.read() != -1
This expression is interesting because it's actually comprised of two expressions.
[JavaSoft Tutorial, 1996jul06]

jv'ex.F

name::
* McsEngl.jv'ex.F@cptIt,

jv'ex.FIELD.STATIC

name::
* McsEngl.jv'ex.FIELD.STATIC@cptIt,

You access class-variables with the name of the class rather than a reference variable.
add(new Label("What do you want on your pizza?", Label.CENTER));
CENTER is a static-field of the class Label.
[Harold Course 1997]

//prints the label on 'cptTitleLabel' of SCSC.class. Prints only if it is initialized.
import SCSC;
class TestStatic{
 public static void main (String args[]){
   System.out.println(SCSC.cptTitleLabel.getText());
 }
}

jv'ex.File

name::
* McsEngl.jv'ex.File@cptIt,

jv'ex.file.append

name::
* McsEngl.jv'ex.file.append@cptIt,

>anybody knows how I must open a text file for writing in "append" mode?
>When I use printwriter class it erases the old file.

In Java 1.0 you have to use a RandomAccessFile.
In Java 1.1 you can pass true as the second argument to the FileOutputStream constructor:
public FileOutputStream(String name, boolean append) throws IOException
-- Elliotte Rusty Harold
[1997jul07]

jv'ex.file.CONCATENATION#ql:jv'app.file'concatenation#

name::
* McsEngl.jv'ex.file.CONCATENATION@cptIt,

jv'ex.file.COPY

name::
* McsEngl.jv'ex.file.COPY@cptIt,

This an example from Java in a Nutshell :
import java.io.*;
public class FileCopy { public static void copy( String source_name, String dest_name) throws IOException
{ File source_file= new File(source_name); File destination_file = new File(dest_name); FileInputStream source =null; FileOutputStream destination = null; byte[] buffer; int bytes_read;
try { // First make sure the specified source file // exists, is a file, and is readable
if(!source_file.exists() || !source_file.isFile()) throw new FileCopyException("No existe archivo : " + source_name);
if(!source_file.canRead()) throw new FileCopyException("El archivo especificado no se puede leer"+
source_name);
// If the destination exists, make sure it is writable file // and ask before overwrtiting it. If the destination doesn't // exists, make sure the directory exists and is writable
if (destination_file.exists()) { if (destination_file.isFile()) { DataInputStream in = new DataInputStream(System.in); String response;
if (!destination_file.canWrite()) throw new FileCopyException("No se puede escribir en el archivo "+
dest_name);
// Tell the user the file already exist // and ask if it okay to overwrite it.

System.out.println("El archivo" + dest_name+ " ya existe.Sobreescribirlo(S/N)");
System.out.flush();
// Read the user's response. Note that we use // a DataInputStream created from System.in // in roder to read lines rather characters.

response=in.readLine();
response=response.toUpperCase();
if(!response.equals("S")) throw new FileCopyException("Copia Cancelada");
} else throw new FileCopyException("El destino " +dest_name +" no es un archivo "); } else { File parentdir=parent(destination_file); if(!parentdir.exists()) throw new FileCopyException("El directorio " +dest_name +" no existe ");
if(!parentdir.canWrite()) throw new FileCopyException("El directorio " +dest_name +" no se puede escribir "); }
// Create an input stream from the source file and an output // stream to the destiantion file. Then read arrays of bytes // from the one and write them to the other . When the read() method // returns -1, we've reach the end of the fiel and can stop.

source =new FileInputStream(source_file); destination=new FileOutputStream(destination_file); buffer=new byte[1024];
while(true) { bytes_read=source.read(buffer); if(bytes_read == -1) break; destination.write(buffer,0,bytes_read); }
}
// Por precaucisn se cierran las corrientes que se abrieron finally { if(source !=null) try { source.close(); } catch(IOException e) { } if(destination !=null) try { destination.close(); } catch(IOException e){ } } }
// File.getParent() can return null when the file is specified without
// a directory or is in the root directory // this method handles those cases.

private static File parent(File f) { String dirname= f.getParent(); if(dirname == null) { if(f.isAbsolute()) return new File(File.separator); else return new File(System.getProperty("user.dir")); } return new File(dirname); }
public static void main(String[] args) { if(args.length !=2) System.err.println("Usar: java FileCOpy" +"<source file> <destination file>"); else { try { copy(args[0],args[1]); } catch(IOException e) { System.err.println(e.getMessage()); } } } } class FileCopyException extends IOException { public FileCopyException(String msg) { super(msg); } }
good luck!!

Andres Aguiar wrote:
> I can't believe that there's no File.copyTo method in the File Class and > that i will have to do my own file copy routine.
> > How can I copy a file in Java if I'm too lazy to do my own method?
{1997-09-25}

jv'ex.file.CREATION

name::
* McsEngl.jv'ex.file.CREATION@cptIt,

import java.io.*;
 FileWriter writer = new FileWriter("out.txt");
 BufferedWriter bw =new BufferedWriter(writer);
 bw.write(f + ":" + lines + ":" + cs);
 bw.close();

jv'ex.File.Delete

name::
* McsEngl.jv'ex.File.Delete@cptIt,

 String fileName = "\\name.txt";
 File f1 = new File(fileName);
 f1.delete();

We can NOT delete a file if a Buffer Reader/Writer on this file was not closed.

jv'ex.File.Directory

name::
* McsEngl.jv'ex.File.Directory@cptIt,

new File(".", "test.txt").getCanonicalPath()
- Mitch
> -----Original Message----- > From: M.Amin [mailto:amin@imkenberg.net] > Sent: Tuesday, May 08, 2001 1:04 AM > To: advanced-java@xcf.berkeley.edu > Cc: java@yorku.ca > Subject: [Advanced-java] How can i get the current directory of my > running application ?

jv'ex.file.ENCONDING

name::
* McsEngl.jv'ex.file.ENCONDING@cptIt,

READ A FILE from ANOTHER ENCONDING than default:
FileInputStream fis = new FileInputStream(filename);
InputStreamReader isr = new InputStreamReader(fis, "UTF-16");
BufferedReader br = new BufferedReader(isr);


InputStream setdata = getClass().getResourceAsStream(sourcefile);
BufferedReader in = new BufferedReader(new InputStreamReader(setdata, "UTF-8"));

jv'ex.File.Read

name::
* McsEngl.jv'ex.File.Read@cptIt,

FROM URL:
BufferedReader reader;
String line;

reader = new BufferedReader(new InputStreamReader(url.openStream()));
line = reader.readLine();
while (line != null) {
if (!line.startsWith("***")) {
parseAndAdd(line);
}
line = reader.readLine();
}
reader.close();

while ((line = reader.readLine()) != null) {

DIFERENT ENCONDING:
   try
   {
//      FileReader fr = new FileReader();
//      BufferedReader br = new BufferedReader(fr);
     FileInputStream fis = new FileInputStream(fl);
     InputStreamReader isr = new InputStreamReader(fis, "UTF-16");
     BufferedReader br = new BufferedReader(isr);
     while ( (ln=br.readLine())!=null )
     {
       if (ln.startsWith(chr))
         return ln;
     }
     br.close();
   }
   catch (EOFException e){
     System.out.println("Logetro.identifyCharacterUnicode: EOFException");}
   catch (FileNotFoundException e)  {
     System.out.println("Logetro.identifyCharacterUnicode: FileNotFoundException");}
   catch (IOException e){
     System.out.println("Logetro.identifyCharacterUnicode: IOException");}

jv'ex.File.ReadAndWrite

name::
* McsEngl.jv'ex.File.ReadAndWrite@cptIt,
* McsEngl.jv'ex.read.file@cptIt,

FASTER I/O USING JDK 1.1 CLASSES. 
With JDK 1.0, a standard way of reading and writing text lines was to use the DataInputStream class and the readLine method.  JDK 1.1 offers a faster way of performing line-oriented text I/O using the classes FileReader, BufferedReader, FileWriter, and BufferedWriter.
This program gives a simple example of how these classes are used.

import java.io.*;
public class readwrite {                

public static void main(String args[])                
{ if (args.length != 2) {
System.err.println("usage: infile outfile\n");                                 System.exit(1);         }   
String in_file = args[0];                        
String out_file = args[1];
try {
FileReader reader = new FileReader(in_file);                                
BufferedReader buf_reader =  new BufferedReader(reader);                                
FileWriter writer = new FileWriter(out_file);                                
BufferedWriter buf_writer =    new BufferedWriter(writer);                                
String ln = null;                                
while ((ln = buf_reader.readLine()) != null){
buf_writer.write(ln);                                         buf_writer.newLine();                                 } buf_reader.close();                                
buf_writer.close();                         }                        
catch (IOException e) { System.err.println(e);   System.exit(1); }
}        

}

The program copies its input file to the output file.  It runs about twice as fast as with the JDK 1.0 method of copying.  One major reason for the difference in speed is because method call overhead to read underlying characters is eliminated.
Note:  this approach is oriented toward text lines represented as Strings. Faster but more primitive I/O methods are also available, such as FileInputStream.


jv'ex.file.write:
 FileOutputStream ostream = new FileOutputStream("t.tmp");
 ObjectOutputStream p = new ObjectOutputStream(ostream);
 p.writeInt(12345);
 p.writeObject("Today");
 p.writeObject(new Date());
 p.flush();
 ostream.close();

jv'ex.file.writeASCII:
i.e.: x = PageName.trim() + "," + String.valueOf(Pcount).trim(); inputFile.write(x.getBytes()); inputFile.close();

jv'ex.File.rename

name::
* McsEngl.jv'ex.File.rename@cptIt,

File f1 = new File(System.getProperty("user.dir")+"/1.xml");
File f2 = new File(System.getProperty("user.dir")+"/2.xml");
f1.delete();
f2.renameTo(new File(System.getProperty("user.dir")+"/1.xml"));
[jdk1.2]

jv'ex.FileDialog

name::
* McsEngl.jv'ex.FileDialog@cptIt,

     FileDialog flDialog = new FileDialog(cJFrHtmlMgr);
     flDialog.setMode(FileDialog.SAVE);
     flDialog.setDirectory(getDirHome());
     flDialog.setFile(getFileName(sUrlFile));//sUrlFile.substring(5));
     flDialog.setVisible(true);
     String file = flDialog.getFile();   //asks for a file
     if (file == null) {      return;        }
     File f = new File(getDirHome(), file);
     try {
       FileWriter writer = new FileWriter(f);
       BufferedWriter bw =new BufferedWriter(writer);
       bw.write(tbEdSrcJTxAr.getText());
       bw.close();
     } catch (Exception e) {
       System.out.println(e.toString());
     }

In contrast with JFileChooser, FileDialog ASK if we want to replace an existing file.
[hknu_2010-07-09]

jv'ex.FilenameFilter

name::
* McsEngl.jv'ex.FilenameFilter@cptIt,

import java.io.*;
public class javaFilter implements FilenameFilter {
public boolean accept(File dir, String name) {
if (name.endsWith(".java")) return true; return false; }
}

jv'ex.FINALLY

name::
* McsEngl.jv'ex.FINALLY@cptIt,

GENERAL-CONCEPT#ql:jv'finally'keyword#.

try {
...
} finally {
s.close();
}

jv'ex.float

name::
* McsEngl.jv'ex.float@cptIt,

float f1 = 1; float f2 = 1F; // float suffix
float f3 = 1f; // float suffix
float f4 = 1e-45f; // 10 to the power
float f5 = 1e+9f; // float suffix

jv'ex.Font

name::
* McsEngl.jv'ex.Font@cptIt,

one starting point might be here (contains many pointers): ftp://ftp.ilog.fr/pub/Users/haible/utf8/Unicode-HOWTO.html

System Fonts:
import java.awt.Font;
public class TestUnicodeFonts { private static int count=0;
public static void main(String[] args) { Font f = new Font(null, Font.PLAIN, 12); analyseFont(f); System.exit(0); }
private static void reportBlock(Character.UnicodeBlock block, int start, int finish) { System.out.println("Block: "+block+" "+Integer.toHexString(start)+" ... " +Integer.toHexString(finish)); }
private static void reportRange(char start, char finish) { /* System.out.println("Range: "+Integer.toHexString(start)+" ... "+ Integer.toHexString(finish)); */ count += (finish-start)+1; // report unicode blocks for these characters Character.UnicodeBlock currentBlock = null; int n=0; for (int c=start;c <= finish; c++) { Character.UnicodeBlock block = Character.UnicodeBlock.of((char)c); if (block != currentBlock) { if (n > 0) reportBlock(currentBlock, c-n, c-1); n = 0; currentBlock = block; } n++; } if (n > 0) reportBlock(currentBlock, finish-n+1, finish); }
private static void analyseFont(Font f) { System.out.println("Analyse font: "+f.getName()+", "+f.getFontName()); boolean inRange = false; char c=0; char start=0; do { if (f.canDisplay(c) != inRange) { if (inRange) reportRange(start, (char)(c-1)); inRange = !inRange; start = c; } c++; } while (c != 0); if (inRange) reportRange(start, (char)(c-1)); System.out.println("Total displayable code points: "+count); } }
[2000may06]

java.awt.Toolkit.getFontList
public abstract String[] getFontList()
Returns the names of the available fonts.

TRUE TYPE FONT:
UNCHECKED:
I think that you need a suitable font.properties file, if you look in java 1.1.1 JDK's lib directory you will find a selection. If there isn't one suitable, you may have to create one...

//on an awt object
setFont(new Font("Helvetica", Font.PLAIN, 20));

I have added a True Type Font, Verdana, to the font.properties file, by adding the following lines:
verdana.0=Verdana,ANSI_CHARSET exclusion.verdana.0=0100-ffff
The font is rendered properly when displayed in any component, but the Toolkit's getFontList() method does not return Verdana as one of the fonts. Is there any way to get a list of all fonts, including those added to the font.properties file?
[1997aug]

jv'ex.Font.add

name::
* McsEngl.jv'ex.Font.add@cptIt,

> I'm a problem with Font properties.
> I can't change the font in my Image object.
> > I write this: > > public void draw( Graphics g, int angle, int x, int y){ > //            ---- > >     double theta = angle * Math.PI / 180; > >     Font f = new Font( "Arial", Font.PLAIN, 10); >
...snip
Just now, with JDK 1.2beta2 (and a few months ago, with JDK 1.1.2 if memory serves) I was able to do this.  However, the key is you must modify the font.properties file and add the new font.  Just copy the sections as used for an existing font and change it to refer to the new font.  For example, my font.properties looks like this:
# @(#)font.properties 1.4 97/03/03## AWT Font default Properties for Windows#
dialog.0=Arial,ANSI_CHARSET dialog.1=WingDings,SYMBOL_CHARSET,NEED_CONVERTED dialog.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED
dialoginput.0=Courier New,ANSI_CHARSET dialoginput.1=WingDings,SYMBOL_CHARSET,NEED_CONVERTED dialoginput.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED
serif.0=Times New Roman,ANSI_CHARSET serif.1=WingDings,SYMBOL_CHARSET,NEED_CONVERTED serif.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED
sansserif.0=Arial,ANSI_CHARSET sansserif.1=WingDings,SYMBOL_CHARSET,NEED_CONVERTED sansserif.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED
monospaced.0=Courier New,ANSI_CHARSET monospaced.1=WingDings,SYMBOL_CHARSET,NEED_CONVERTED monospaced.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED
algerian.0=Algerian,ANSI_CHARSET algerian.1=WingDings,SYMBOL_CHARSET,NEED_CONVERTED algerian.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED
# name aliases## alias.timesroman=serif# alias.helvetica=sansserif# alias.courier=monospaced
# for backword compatibility timesroman.0=Times New Roman,ANSI_CHARSET helvetica.0=Arial,ANSI_CHARSET courier.0=Courier New,ANSI_CHARSET zapfdingbats.0=WingDings,SYMBOL_CHARSET
# Default font definition# default.char=2751
# Static FontCharset info.
# fontcharset.dialog.1=sun.awt.windows.CharToByteWingDings fontcharset.dialog.2=sun.awt.CharToByteSymbol
fontcharset.dialoginput.1=sun.awt.windows.CharToByteWingDings fontcharset.dialoginput.2=sun.awt.CharToByteSymbol
fontcharset.serif.1=sun.awt.windows.CharToByteWingDings fontcharset.serif.2=sun.awt.CharToByteSymbol
fontcharset.sansserif.1=sun.awt.windows.CharToByteWingDings fontcharset.sansserif.2=sun.awt.CharToByteSymbol
fontcharset.monospaced.1=sun.awt.windows.CharToByteWingDings fontcharset.monospaced.2=sun.awt.CharToByteSymbol
fontcharset.algerian.1=sun.awt.windows.CharToByteWingDings fontcharset.algerian.2=sun.awt.CharToByteSymbol
# Exclusion Range info.
# exclusion.dialog.0=0100-ffff
exclusion.dialoginput.0=0100-ffff
exclusion.serif.0=0100-ffff
exclusion.sansserif.0=0100-ffff
exclusion.monospaced.0=0100-ffff
exclusion.algerian.0=0100-ffff
# charset for text input# inputtextcharset=ANSI_CHARSET
<EOF>
And in an About dialog I was able to do this:
  label1 = new java.awt.Label("A Basic Java  Application");   label1.setFont(new Font("algerian", Font.PLAIN, 18));
Last time I tested this, I was only able to use TrueType fonts, not FON fonts.
Anyhow, shame on Sun, Toolkit.getFontList is _still_ broken even in JDK 1.2beta.  I'm going to be pretty pissed with them if they don't get it fixed by release time.  I even used Mocha to disassemble the sun.awt.SunToolkit, and found this:
    public String[] getFontList()     {         String astring[] = { "Dialog", "SansSerif", "Serif", "Monospaced", "Helvetica", "TimesRoman", "Courier", "DialogInput", "ZapfDingbats" };         return astring;     }
It is also not overridden in WToolkit (I mocha'd that too).  So, I still can't get a list of available fonts to show in a font menu, because they are returning this stupid fixed list rather than going native and finding out what the OS really has available.  Looks like I might have to read font.properties myself and read the fonts from it directly.  ARGGHH!  And to make sure font.properties is a true list of what the OS has available, I'm going to have to write an MFC app to get a list of fonts from the OS and write a new font.properties, and run this app before the Java app, each time it is started up.  ARGGHH!  Can't believe it's still this broken, for this long a time.

Unsubscription, archives, FAQ - http://www.xcf.berkeley.edu/lists.html
[1998jan27]

jv'ex.Font.russian

name::
* McsEngl.jv'ex.Font.russian@cptIt,

> The question: how i can enter russian letter in TextField in JDK1.1.1 under win95/nt.

--you need to make a font.properties.ru file in your JAVA/lib directory. This is described in the current JDK 1.1.2 documentation. Here you are able to set "virtual classes" of fonts.
--Then you must set the localisation of the TextComponent (see class Locale). Changing the "Locale" should change the used font.
--After doing that you should be able to enter Cyrillic characters. Every Client needs to have the font.properties.ru file!
Steffen Krug
[1997jun05]

jv'ex.Font.underline

name::
* McsEngl.jv'ex.Font.underline@cptIt,

The following works for me - Its an UnderLineLabel widget I wrote a couple years ago in AWT To use with Swing, replace Label with JLabel and paint with paintComponent ----------- UnderLineLabel.java ------------------------------- import java.awt.*;
public class UnderLineLabel extends Label { public UnderLineLabel( String text ) { super( text ); } public UnderLineLabel(String text, int horizontalAlignment) { super( text, horizontalAlignment ); }
public void paint( Graphics g ) { super.paint(g ); FontMetrics fm = g.getFontMetrics( g.getFont() ); int width = fm.stringWidth( getText() ); g.setColor( Color.blue );
int x = 0; switch ( getAlignment() ) { case LEFT : x = 0; break; case CENTER : x = ( getSize().width - width ) / 2; break; case RIGHT : x = getSize().width - width; break; } int y = getSize().height - 3; g.drawLine( x, y, x + width, y ); } public static void main( String args[]) { Frame f = new Frame(); f.setLayout( new FlowLayout()); UnderLineLabel l = new UnderLineLabel( "ABCDEFGHIJKLMNOPQRSTUVWXYZ", Label.LEFT ); UnderLineLabel l2 = new UnderLineLabel("test", Label.CENTER ); UnderLineLabel l3 = new UnderLineLabel("test123", Label.RIGHT );
f.add( l ); f.add( l2 ); f.add( l3 );
f.pack(); f.setVisible( true ); } } --------------------- Here's how it looks :
It would be cool if the Font class had an underline attribute like in MFC. Until then, use this!
Krishnan

jv'ex.FontMetrics

name::
* McsEngl.jv'ex.FontMetrics@cptIt,

class MyCanvas extends Canvas {
public void paint(Graphics g) {
FontMetrics fm = g.getFontMetrics();
g.drawString("Canvas",
(size().width-fm.stringWidth("Canvas"))/2,
(size().height-fm.getAscent())/2);
}
}

// Draws first/secon line on screan
public void paint(Graphics g) {
Font f = new Font("Courier", Font.ITALIC+Font.BOLD, 18);
FontMetrics fm = g.getFontMetrics(f);
int y = 0;
g.setColor(Color.blue);
g.setFont(f);
g.drawString("First Line", 0, y + fm.getAscent());
y += fm.getHeight();
g.drawString("Second Line", 0, y + fm.getAscent());
}

jv'ex.FOR

name::
* McsEngl.jv'ex.FOR@cptIt,

GENERAL-CONCEPT#ql:jv'for'statement#.

We can use the SAME COUNTER in a method sequencially but not the same inside the other.

loop on vector:
Vector subs = ex.vectorSubID;
for (int i=0; i<subs.size(); i++)

break - continue:
for(int i = 0; i < 100; i++) {
if(i == 74) break; // Out of for loop
if(i % 9 != 0) continue; // Next iteration
System.out.println(i); }

for (initialization; termination; increment)
statements

for (int i=50; i>0; i--){
 ...
}

DESCENDING-ORDER:
for (int i=niIdxCh; i>0; i--){
}

ARRAY-LOOP:
. . .
int i;
int length = a.length;
for (i = 0; i < a.length; i++) {
. . .
// do something to the i th element of a
. . .
}
[JavaSoft Tutorial, 1996jul06]

Variable declaration inside for loop:
...
for (int i=0; i<50; i=i+1){
 //do something
}

WITH ENUMERATION:
for (Enumeration e = vector.elements#ql::2nfoJAPI11.NFO:[Level CONCEPT:class.vector [Level Normal Level:elements rl5 ]]#(); e.hasMoreElements();) {
System.out.println(e.nextElement());
}

WITH ITERATROR:
Set s = new HashSet((Collection)jSCS.vectorParGenID));
for (Iterator i=s.iterator(); i.hasNext();)
{String pgid=(String)i.next(); ...}

ENDLESS:
for(;;) {
...
}

while (true){
...
}

jv'ex.FOR'EACH (since 1.5)

name::
* McsEngl.jv'ex.FOR'EACH (since 1.5)@cptIt,

jv'ex.ForEach, jv'ForEach,

void cancelAll(Collection<TimerTask> c) {
for (TimerTask t : c)
t.cancel();
}
When you see the colon (:) read it as “in.” The loop above reads as "for each TimerTask t in c"”

The for-each construct is also applicable to arrays, where it hides the index variable rather than the iterator. The following method returns the sum of the values in an int array:
// Returns the sum of the elements of a
int sum(int[] a) {
int result = 0;
for (int i : a)
result += i;
return result;
}

So when should you use the for-each loop? Any time you can. It really beautifies your code. Unfortunately, you cannot use it everywhere. Consider, for example, the expurgate method. The program needs access to the iterator in order to remove the current element. The for-each loop hides the iterator, so you cannot call remove. Therefore, the for-each loop is not usable for filtering. Similarly it is not usable for loops where you need to replace elements in a list or array as you traverse it. Finally, it is not usable for loops that must iterate over multiple collections in parallel. These shortcomings were known by the designers, who made a conscious decision to go with a clean, simple construct that would cover the great majority of cases.
[/JAVA/DOCS/150/guide/language/foreach.html]

jv'ex.Frame

name::
* McsEngl.jv'ex.Frame@cptIt,

jv'ex.JFrame:

//add component:
super("Tittle");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(jPanel, BorderLayout.CENTER);
setLocation(126,126);
setVisible(true);

// Shows 2 windows
import java.awt.*;
class Main {
static public void main(String[] args) {
Frame f1 = new Frame("Frame Example");
Frame f2 = new Frame();
f1.resize(100, 100);
f1.show();
f2.reshape(100, 100, 100, 100);
f2.show();
}
}

jv'ex.frame:
// δείχνει απλώς ένα παράθυρο
class Main
extends Frame {
Main() {
super("Title: Example");
resize(150, 75);
show();
}

jv'ex.frame.centering:
1) Get the screen size.
2) Then the size of the frame.
3) Take the width of the screen size, subtract the frame size and divide that by 2.
4)Do the same thing with the Width and pass that to Component Class move method:
//***************************************
PopupFrame f = new PopupFrame(img);
f.resize(560,380);
f.setResizable(false);
f.setTitle("Images");
screen_size = Toolkit.getDefaultToolkit().getScreenSize(); //1
frame_size = f.size(); //2
f.move((screen_size.width-frame_size.width)/2, //3 & 4
(screen_size.height-frame_size.height)/2); //3 & 4  
f.show();
//***************************************
Rick Retterer
[1997jun16]

jv'ex.frame.getPreferedSize:
There have been lots of problems with insets on frames in almost every version of the awt on almost every platform. In most cases, though, calling addNotify() before getPreferredSize() will do the trick.
--- Dan Jacobs Tech Tonic Netsystems email: djacobs@ma.ultranet.com
[1997jun16]

jv'ex.frame.LOCATION:
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int w = 262;    int h = 129;
frame.setLocation(screenSize.width / 2 - w / 2, screenSize.height / 2 - h / 2);

jv'ex.ftp

name::
* McsEngl.jv'ex.ftp@cptIt,

There are three ftp java clients that I know of:
1) Peter Van Der Linden's at www.afu.com 2) Oro Inc at www.oroinc.com 3) IBM's at www.alphaworks.ibm.com
The first one comes as source, which may help you.
[advanced java 1999feb05]

jv'ex.G

name::
* McsEngl.jv'ex.G@cptIt,

jv'ex.gc

name::
* McsEngl.jv'ex.gc@cptIt,

Your Class is getting garbage collected. (static and all).You have 3 possible options for fixing it.
1) use -noclassgc as an arg to the VM (java) command.
2) use 1.2
3) add a reference to an instance of your class which is permenant. A way to ensure this is to refer to it in a Thread.
Something like this:
class Holder extends Thread { private Object held; public Holder(Object grip){ super("holder"); held = grip; } } and add
UpdateQue dummy UpdateQue(); Holder h= new Holder(dummy);
in your startup code.This works because unstarted threads are never GC'd.
[adv java {1999-03-21}]

jv'ex.GENERICS

name::
* McsEngl.jv'ex.GENERICS@cptIt,

THEORY#ql:jv'generics#

Set<String> s = new HashSet<String>();

Hashtable<String,Vector<String>> ht = new Hashtable<String,Vector<String>>();

public Map<String,TreeSet> tmapEmptyID=new TreeMap<String,TreeSet>()

public static Map<String,String[]> tmapBM=new TreeMap<String,String[]>();

Hashtable<? extends TxNode,? extends String>

Here is a simple example taken from the existing Collections tutorial:
// Removes 4-letter words from c. Elements must be strings
static void expurgate(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); )
if (((String) i.next()).length() == 4)
i.remove();
}

Here is the same example modified to use generics:
// Removes the 4-letter words from c
static void expurgate(Collection<String> c) {
for (Iterator<String> i = c.iterator(); i.hasNext(); )
if (i.next().length() == 4)
i.remove();
}

jv'ex.getResource

name::
* McsEngl.jv'ex.getResource@cptIt,

this.getClass().getResource("prefix_fsm.txt"):
input: a string, the name of the file.
output: a URL object.
misc: It is a method of the class "Class".

jv'ex.graphics

name::
* McsEngl.jv'ex.graphics@cptIt,

// availableFonts is a list
public void paint(Graphics g) {
for (int i = 0; i < availableFonts.length; i++) {
g.drawString(availableFonts[i], 5, 15*(i+1));
}
}

jv'ex.graphics.drawline:
// Draw a simple line
public void paint(Graphics g) {
g.drawLine(0, 0, size().width, size().height);
}

jv'ex.GRAPHICS.POLYGON:
// Draws a blue polygon, a green rectagle, and a red oval
public void paint(Graphics g) {
Polygon polygon = new Polygon();
polygon.addPoint(125, 0);
polygon.addPoint(100, 50);
polygon.addPoint(150, 50);
g.setColor(Color.red);
g.fillOval(0, 0, 50, 50);
g.setColor(Color.green);
g.fillRect(50, 0, 50, 50);
g.setColor(Color.blue);
g.fillPolygon(polygon);
}

jv'ex.Graphics:
// Writes font information

import java.awt.*;
class Main extends Frame {
Main() {
super("getFont Example");
resize(100, 100);
show();
}
public void paint(Graphics g) {
Font f = g.getFont();
FontMetrics fm = g.getFontMetrics(f);
g.drawString("family="+f.getFamily()+" name="+f.getName()
+" style="+f.getStyle()+" size="+f.getSize(), 10, 20); }
public static void main(String[] args) {
new Main();
}
}

jv'ex.GREEK-DISPLAY

name::
* McsEngl.jv'ex.GREEK-DISPLAY@cptIt,

jv'ex.ENCONDING.

jEditorPane.setContentType("text/html;charset=utf-8");

JEditorPane jep = new JEditorPane();
jep.setEditable(false);
jep.setContentType("text/html; charset=big5");

jv'ex.GREP

name::
* McsEngl.jv'ex.GREP@cptIt,

Thanks to all who replied.


Here are the suggestions:
1. use the Knuth Morris Pratt or Boyer Moore algorithm.

   I found some code examples at http://www.cs.columbia.edu/~zkazi/desc.html
2. http://www.oroinc.com/  They have some java libs    such as PerlTools and AwkTools where you can use perl/awk expressions.

   the libs are free, but no source code is available.


3. "Java Algorithms" (Jan, 1998)    http://www.amazon.com/exec/obidos/ISBN=0079136966/4000-0910645-354321    Seems promising, but the local B&N didn't have it.  so no comments.
[1998jan31]

jv'ex.GridBagConstraints

name::
* McsEngl.jv'ex.GridBagConstraints@cptIt,

GridBagLayout gbl = new GridBagLayout();
setLayout(gbl);

GridBagConstraints c1 = new GridBagConstraints();
c1.fill=GridBagConstraints.BOTH;
c1.gridx=2;
c1.gridy=0;
c1.gridwidth=5;
c1.gridheight=1;
c1.weightx=2;
c1.weighty=0;
add(concLabel);
gbl.setConstraints(concLabel, c1);

jv'ex.GridLayout

name::
* McsEngl.jv'ex.GridLayout@cptIt,
* McsEngl.jv'ex.layout.gridlayout@cptIt,

3 γραμμές, 4 στήλες:
Frame f = new Frame("GridLayout Example");
Button b;
f.setLayout(new GridLayout(3, 4, 5, 10));//rows, cols, hgap, vgap
f.add(new Button("1"));
f.add(new List());
f.add(new Button("3"));
f.add(new Button("4"));
f.add(b = new Button("5"));
f.add(new Button("6"));
f.add(new Button("7"));
f.pack();
f.show();
b.hide();

X γραμμές, 1 στήλη:
new GridLayout(0,1) //And add many components

jv'ex.H

name::
* McsEngl.jv'ex.H@cptIt,

jv'ex.Hashtable (java.util.Hashtable)

name::
* McsEngl.jv'ex.Hashtable (java.util.Hashtable)@cptIt,

class#ql:jv'hashtable#

NUMBER MUNIPULATION IN HASHTABLE:
* because we can not put (int) in a hashtable (only objects are accepted), we put them as strings, and retrieve them from strings:
String s = String.valueOf(35)
int i =Integer.parseInt("35")

ERROR:
* you can NOT use the put method with 'char' as argument, because char is not an Object.
We can transform it to String (String.valueOf(char)).
[hknu_2004-11-14]

jv'ex.Hashtable.iterating'KEYS:
for (Iterator i=ht.keySet().iterator(); i.hasNext(); )
System.out.println(i.next());

jv'ex.Hashtable.iterating'VALUES:
for (Iterator i=ht.values().iterator(); i.hasNext(); )
System.out.println(i.next());

jv'ex.Hashtable.iterating'KEY'VALUES:
Set<Map.Entry<TxNode,String>> sme = htK.entrySet();
for (Map.Entry<TxNode,String> me : sme){
 result.put(me.getKey(), me.getValue());}
============================================
for (Iterator i=m.entrySet().iterator(); i.hasNext(); ) {
 Map.Entry e = (Map.Entry) i.next();
 System.out.println(e.getKey() + ": " + e.getValue()); }

FIRST KEY-VALUE:
Hashtable<TtrNode,String[]> ht = isValidSintakseroKonseptero(st,vok,i);
TtrNode nd = ht.keys().nextElement();
String[] ar = ht.elements().nextElement();
============================================
String tp = (String)ht.keySet().iterator().next();

This example creates a hashtable of numbers. It uses the names of the numbers as keys:
Hashtable numbers = new Hashtable();
numbers.put("one", new Integer(1));
numbers.put("two", new Integer(2));
numbers.put("three", new Integer(3));

To retrieve a number, use the following code:
Integer n = (Integer)numbers.get("two");
if (n != null) {
System.out.println("two = " + n);
}


import java.util.Hashtable;
import java.util.Enumeration;

class Disc {
public String title;
public String singer;
Disc(String t, String s) {
title = t;
singer = s;
}
public String toString() {
return ("'" + title + "' by " + singer);
}
}


class Main {
// print the contents of the jukebox
public static void print(String msg, Hashtable box, boolean all) {
if (msg != null)
System.out.print(msg + ": ");
if (box.isEmpty())
System.out.println("The juke box is empty");
else {
System.out.println("There are " + box.size()
+ " discs in the juke box:");
for(Enumeration e = (all ? box.elements() : box.keys());
e.hasMoreElements();
System.out.println("\t" + e.nextElement()));
}
}
public static void main (String[] args) {
// create a jukebox with initial capacity of 13 and 0.5 load factor
Hashtable jukebox = new Hashtable(13, 0.5f);
Disc houndDog;
jukebox.put("Hound Dog", houndDog = new Disc("Hound Dog", "Elvis"));
jukebox.put("Yesterday", new Disc("Yesterday", "Beatles"));
jukebox.put("On Top of the World",
new Disc("On Top of the World", "Carpenters"));
jukebox.put("Only You", new Disc("Only You", "Platters"));

print("jukebox after adding 4 titles", jukebox, true);
// search by title
System.out.println("Yesterday is " +
(jukebox.containsKey("Yesterday") ? "" : "not ") +
" in the jukebox");
// search by content
System.out.println(houndDog + " is " +
(jukebox.contains(houndDog) ? "" : "not ") +
" in the jukebox");
// empty jukebox
jukebox.clear();
print("jukebox after clearing it", jukebox, true);
}
}

USING HASHTABLE.  Hashtable is a class that is part of the core API java.util.  It is used to efficiently store and look up key/element pairs.
Hashtable is extended from an abstract class called Dictionary, a name that clearly describes its purpose.
To see how Hashtable might be used, consider an application that needs to count how many times each line occurs in a file.  This technique could be used in tabulating word frequencies, for example.  Using Hashtable, one way of doing this is the following:
        import java.io.*;
        import java.util.*;

        public class hash {
                private static class countrec {
                        int count;
                };

                public static void main(String args[])
                {
                        try {
                                FileReader fr = new FileReader(args[0]);
                                BufferedReader br = new BufferedReader(fr);
                                Hashtable ht = new Hashtable();
                                String key = null;
                                while ((key = br.readLine()) != null) {
                                        countrec crec = (countrec)ht.get(key);
                                        if (crec == null) {
                                                crec = new countrec();
                                                crec.count = 1;
                                                ht.put(key, crec);
                                        }
                                        else {
                                                crec.count++;
                                        }
                                }
                                br.close();
                                Enumeration en = ht.keys();
                                while (en.hasMoreElements()) {
                                        String el = (String)en.nextElement();
                                        countrec crec = (countrec)ht.get(el);
                                        System.out.println(crec.count +" " + el);
                                }
                        }
                        catch (Throwable e) {
                                System.err.println(e);
                        }
                }
        }
There are several interesting points to note in the example.  The basic operations of adding to a hash table, or looking up keys in it, are implemented via the put and get methods.  The put method puts a key and element pair into the table, while get looks up an element using its key and returns the element.  Object.hashCode or an overriding hashCode method in a subclass of Object is used to compute the actual hash value needed for insertion into the hash table.
countrec is an example of an inner class, and is new feature in JDK(tm) 1.1.  It's a nested top-level class, meaning that it is available only within the hash class that declares it.  countrec could be defined outside of hash, or even in a separate file.  But defining it in the way shown here offers the benefit of keeping it very localized, and not exposed to other classes or applications.
Note also that get and put deal with Object references.  If you want to use fundamental types like int or double with Hashtable, you will need to use wrapper classes such as Integer or Double defined in java.lang.
--- Retrieving Results
Once all the lines have been read from the file and inserted into the hash table, the next step is to retrieve the results, that is, the set of keys and the associated elements that go with each key.  To do this, an enumeration is retrieved using the keys method of Hashtable.  Enumeration is an interface, and a class that implements it is guaranteed to define the methods hasMoreElements and nextElement used for stepping through a list of items.  In this example the items are keys from the hash table.  These are stepped through in turn and the associated elements retrieved.
It's possible to tune the performance of a hash table by setting its initial size and its load factor.  For example, the initial load factor is 0.75, meaning that if the table becomes more than 75 percent full, the capacity will be increased via internal rehashing of the table.
[JDC TIP 1998mar]

jv'ex.HexToInt'APP

name::
* McsEngl.jv'ex.HexToInt'APP@cptIt,

// Nikos 1997jun14. USAGE: java HexToInt <hex>
class HexToInt {
 public static void main (String args[]){
if (args.length != 1) {
System.err.println("Usage: java HexToInt <hex>"); System.exit(-1); }
   int k = Integer.decode("0x"+args[0]).intValue();
   System.out.println("Hexadecimal = "+args[0]+", Integer = "+k);  } }

jv'ex.highlightText

name::
* McsEngl.jv'ex.highlightText@cptIt,

Replaces the text with the highlited-term:
public class Test {

public String highlightTerm(String text, String term){
String startTag = "<span style=\"background-color:#FFFF00\">";
String endTag = "</span>";
if (!term.equals("")){
StringBuffer hResult = new StringBuffer (startTag);
hResult.append(term);
hResult.append(endTag);
System.out.println("---->" + text + " " + term);
return text.replace(term, hResult.toString());
} else {
return text;
}
}
}

Highlights a knowns start-end-position:
try
{
int start = htmlPane.getSelectionStart();
int end = htmlPane.getSelectionEnd();
System.out.println(start + " : " + end);
htmlPane.getHighlighter().addHighlight(start, end, DefaultHighlighter.DefaultPainter);
}
catch(BadLocationException ble) {}

jv'ex.HOLDING'OBJECTS

name::
* McsEngl.jv'ex.HOLDING'OBJECTS@cptIt,

To hold objects, you can use:
- arrays#ql:jv'ex.array#.
- Hashtables#ql:jv'ex.hashtable#.
- Stacks#ql:jv'ex.stack#.
- Vectors#ql:jv'ex.vector#.

array is just one way to hold objects. But there are a number of other ways to hold objects.

jv'ex.HTML

name::
* McsEngl.jv'ex.HTML@cptIt,

Make sure you test ICE thoroughly. We had to replace it when it kept failing during acceptance testing. Under normal user conditions (i.e. navigating back and forwards amongst the document history at a casual speed) it performs ok, but if the navigation is conducted rapidly you can get it to hang (very easily on a Pentium 90mz; now and again on a Pentium 200). Not tried it outside Windows. The authors have a new release now which, they say, does fix these problems.
We were originally advised to go with ICE over the Hot Java HTML Component but when we had to replace ICE with the HTML Component (due to not having any other option) we wished that we had gone with it from the beginning - much faster and easier to interact with.
I have no connection with the makers of the HTML Component.
GREG
[1998feb]

Does the HTML display have to be aware of all (most) kinds of embedded types/plugins/applets? like a full-blown browser? You could use the following code to view the actual text of the document. Maybe even graft on some simple content-handlers (like gif,jpg,sound,etc)
import java.net.*;
import java.io.*;
class OpenStreamTest {
public static void main(String[] args) {
try {
URL yahoo = new URL("http://www.yahoo.com/");
DataInputStream dis = new DataInputStream(yahoo.openStream());
String inputLine;
while ((inputLine = dis.readLine()) != null) {
System.out.println(inputLine);
}
dis.close();
}
catch (MalformedURLException me) {
System.out.println("MalformedURLException: " + me);
}
catch (IOException ioe) {
System.out.println("IOException: " + ioe);
}
}
}

SEE html in java app
try this
http://w3.nai.net/~rvdi/jhelp/jhelp.html
[1996jun06]
** see#ql:jv'app.jhelp# app.

TextView in IFC will display HTML 1.0 (IFC 1.1 has an extensible HTML parser that allows you to add support for other tags as well).
<http://developer.netscape.com/library/ifc/index.html>
jim [1996jun06]

>Is it possible to load a URL into a specified html-frame via java(not!!!>java-script), like you can say in html: 'target="my_window"' ???

Yes, simply use AppletContext.showDocument(URL url,String target), where the target string names the frame into which you would like to direct the returned document. A simple example of this is at www.imperium.co.uk/impjvex1.html.

I believe that Netscape's IFC has such a class. Also, search on www.gamelan.com for "jhelp". This is another HTML display class. Neither is complete or fast.
Terry Gilbert
[1997may13]

http://www.inria.fr/koala/jml/java/gui/htmlarea/index.html
and feel free to contribute...... :-))

You can only connect to the host that the applet was loaded from. You will get a security exception otherwise. For a work-around you could always consider having your applet talk to a server on ths host that it was loaded from and this server gets the data you need and passess it back to the applet.
applet <--------> applet-host <-----------> other hosts
Roel Bakker wrote: > > Here's my problem > > I want to get the content of a HTML page from a remote Web server as a > String in my applet. My applet is served from my local Web server, not the > Web server I want the HTML file from. I don't need the whole content but a > single line. I tried something like: > > URLConnection conn = null; > DataInputStream data = null; > String content; > > try > { > conn = this.theURL.openConnection(); > conn.connect(); > data = new DataInputStream(new > BufferedInputStream(conn.getInputStream())); > while ((line = data.readLine()) != null) > { > if(line.equals("the string I'm looking for") > { > content = line; > } // if > } // while > } // try > catch (IOException e) > { > } // catch > catch (SecurityException e) > { > } // catch > > And I get a SecurityException. Does this mean that it's not possible or am > I doing something stupid and is there a workaround? It seems to me that > when a HTML page can be loaded in a Web browser anywhere on the network, it > can also be loaded in an applet that does something with the content.> > Please help! reply to the newsgroup or mail me.> > Roel Bakker > roel.bakker@cmg.nl

Does anyone know of any Java HTML-Reader class(s) or application that >can display HTML document inside Java application ?> >Can we display a HTML document inside Java applet/application ?

Also, you could take a look at the ICE browser: http: //www.bgnett.no/datatech/ICEBrowser/index.html
We're currently using it, it's flexible and fits our needs. They have a free license (no commercial uses) and several kinds of commercial licenses (one time payment, no royalties).
Enzo
[1998feb]

jv'ex.HTMLDocument

name::
* McsEngl.jv'ex.HTMLDocument@cptIt,

 try {
     URL url = new URL(stUrl);//file:...
     URLConnection connection = url.openConnection();
     InputStream is = connection.getInputStream();
     InputStreamReader isr = new InputStreamReader(is);
     BufferedReader br = new BufferedReader(isr);
 
     HTMLEditorKit htmlKit = new HTMLEditorKit();
     HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();
     HTMLEditorKit.Parser parser = new ParserDelegator();
     HTMLEditorKit.ParserCallback callback = htmlDoc.getReader(0);
     parser.parse(br, callback, true);
 
     for (HTMLDocument.Iterator iterator = htmlDoc.getIterator(HTML.Tag.A);
           iterator.isValid(); iterator.next()) {
 
       AttributeSet attributes = iterator.getAttributes();
       String srcString = (String) attributes
           .getAttribute(HTML.Attribute.NAME);
       if (srcString!=null){
         System.out.print(srcString);
         int startOffset = iterator.getStartOffset();
         int endOffset = iterator.getEndOffset();
         int length = endOffset - startOffset;
         String text = htmlDoc.getText(startOffset, length);
         System.out.println(" - " + text);
       }
     }
   } catch (Exception e){}

GET_TEXT_OF_ELEM:
Element elem= hDoc.getCharacterElement(niCaretPos);
   String s_Txt="";
   int startOffset = elem.getStartOffset();
   int endOffset = elem.getEndOffset();
   int length = endOffset - startOffset;
   try {
     s_Txt= doc.getText(startOffset, length);
   } catch (BadLocationException ble) {
     System.out.println(ble.toString());
   }

GET_ATTRIBUTES_OF_ELEM:
int niCaretPos = cEdWw.getCaretPosition();
HTMLDocument hDoc= (HTMLDocument)cEdWw.getDocument();
HtmlEditorKitEditorWW hKit= ((HtmlEditorKitEditorWW)cEdWw.getEditorKit());
Element elem = hDoc.getCharacterElement(niCaretPos);
Hashtable<String,String> htAttrs= new Hashtable<String,String>();
AttributeSet attrs = elem.getAttributes();
Enumeration keys=attrs.getAttributeNames();
while( keys.hasMoreElements()) {
         Object key= keys.nextElement();
         Object value= attrs.getAttribute(key);
         htAttrs.put(key.toString(), value.toString());
}
if (htAttrs.containsKey("a")){
 //  a,href=www.xxx#yyy
 String sAValue= htAttrs.get("a");
 String sAVValue= sAValue.substring(sAValue.indexOf("=")+1).trim();
}

Gets the NAME attribute of anchor-element AND the startOffset of the element that contains this attribute:

HTMLDocument doc= (HTMLDocument)jepViewer.getDocument();
HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.A);
while (it.isValid()) {
 SimpleAttributeSet s = (SimpleAttributeSet)it.getAttributes();
 String link = (String)s.getAttribute(HTML.Attribute.NAME);
 if (link != null) {
   System.out.println(">>> "+link +", offset:"+it.getStartOffset() );
 }
 it.next();
}

jv'ex.HTML'PARSER

name::
* McsEngl.jv'ex.HTML'PARSER@cptIt,

> Has anyone come across an extension to StreamTokenizer (or something of that > ilk) that correctly returns all HTML tokens from an input stream?
I can recommend two options: a regular expression package or a full-blown parser.  The first option could be used to "find" HTML tokens.  Search Gamelan on "regular expression" or look into OROMatcher (www.oroinc.com).  The second option could be used to "read" the HTML file and generate a set of objects representing the HTML entities.  Again, you can search Gamelan for "HTML parser."  I have looked into two tools: JavaCC (http://www.suntest.com/ JavaCC/ with no source code) and ANTLR (http://www.antlr.org/ with source).
-Bryan Basham
[1998feb]

> > Has anyone come across an extension to StreamTokenizer (or something of that > > ilk) that correctly returns all HTML tokens from an input stream?
http://www-cs-students.stanford.edu/~do/parser/htmltokenizer.html
...above is an HTML parser by Arthur Do.  It works quite nicely and is very fast.  It is freeware for non-commercial use...if I remember correctly.
[1998feb]

jv'ex.I

name::
* McsEngl.jv'ex.I@cptIt,

jv'ex.ICON

name::
* McsEngl.jv'ex.ICON@cptIt,

new ImageIcon(getImage("resources/window_icon.gif", jSCS.class))
public static Image getImage(String path, Class clss)
{
return Toolkit.getDefaultToolkit().getImage(clss.getResource(path));
}

jv'ex.if

name::
* McsEngl.jv'ex.if@cptIt,

if (defaultLocale == null) {            
 String language = System.getProperty("user.language", "EN");            
 String region = System.getProperty("user.region", "");
 defaultLocale = new Locale(language, region);        
}        
return defaultLocale;    

if (appl.searchSib==true || appl.searchSub==true)
never
if (bool=true)

jv'ex.if'else

name::
* McsEngl.jv'ex.if'else@cptIt,

EXAMPLE:
if( dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY ) {
System.out.println("Weekend!");
} else {
System.out.println("Weekday");
}

EXAMPLE:
if (leaf) {       setIcon(getLeafIcon());      }
else if (expanded) {       setIcon(getOpenIcon());      } else {       setIcon(getClosedIcon());      }

jv'ex.IllegalArgumentException

name::
* McsEngl.jv'ex.IllegalArgumentException@cptIt,

class Main {
static double sqrt(double i) throws IllegalArgumentException {
if (i < 0)
throw new IllegalArgumentException(
"Cannot take square root of a negative number");
return (Math.sqrt(i));
}
public static void main(String[] args) {
System.out.println("IllegalArgumentException example");
System.out.println(sqrt(-4));
}
}

jv'ex.IllegalThreadStateException

name::
* McsEngl.jv'ex.IllegalThreadStateException@cptIt,

import java.util.Date;
class T extends Thread {
public void run() {
System.out.println(new Date());
}
}

class Main {
public static void main(String[] args) {
T th = new T();
th.start();
th.start(); // will raise IllegalThreadStateException
}
}

jv'ex.IMAGE

name::
* McsEngl.jv'ex.IMAGE@cptIt,

jv'ex.Image:
Main(String filename) {
super("Image Example");
try {
// Retrieve the image.
URL url = new URL("file:///" + System.getProperty("user.dir") + "/" + filename);
add("Center", new ImageCanvas(getToolkit().getImage(url)));
} catch (Exception e) {
e.printStackTrace();
}
resize(300, 300);
show();
}

>Do you know any class in Java that loads a image type .ico?
Check out Jimi at
http://java.sun.com/products/jimi/
It supports GIF, JPEG, TIFF, PNG, PICT, Photoshop, BMP, Targa, ICO, CUR, Sunraster, XBM, XPM, and PCX.

From: Justin Couch <couch@ccis.adisys.com.au> To: Advanced Java List <advanced-java@xcf.berkeley.edu> Subject: ANN: Image Loader Libraries Available Date: Κυριακή, 28 Φεβρουαρίου 1999 5:15 πμ
Another chunk of image loading code for you all to play with.
I won't say much here, read the readme - attached below.
Use these as content handlers with the java.net URL code, or the URI code that I released yesterday.
The following types are supported: GIF, JPEG, TIFF (uncompressed), TARGA, BMP, PNG (1.0, no 1.1 spt yet), XPM, XBM.
These work properly - fetch a URL and you get an Image, not some stupid URLImageSource class.
All the code is pretty heavily optomised for minimum memory usage (typically about 25% of the Sun library usage on load) and as fast up to twice as fast on the time taken to load.
Known to work on Win32 (NT4), Solaris and HP-UX.
The file can be referenced from
http://www.vlc.com.au/~justin/java/images/imageloader_0.9.zip
and is 1.8MB in size. Please be careful, the machine is only on a 64K link so too many hitting it at once will cause slow d/ls.
-- Justin Couch Author, Java Hacker Snr Software Engineer couch@ccis.adisys.com.au ADI Ltd, Systems Group http://www.vlc.com.au/~justin/ Java3D FAQ: http://tintoy.ncsa.uiuc.edu/~srp/java3d/faq.html ------------------------------------------------------------------- "Look through the lens, and the light breaks down into many lights. Turn it or move it, and a new set of arrangements appears... is it a single light or many lights, lights that one must know how to distinguish, recognise and appreciate? Is it one light with many frames or one frame for many lights?" -Subcomandante Marcos -------------------------------------------------------------------

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Content Handlers for Image Loading
(c) ADI Limited 1998-1999 (c) The Virtual Light Company 1999

Content handlers are Java's method of adding support for different MIMEType based handling for information coming from a stream. Typically this is used in conjunction with the java.net URL classes but may be more widely used. For example, we use it seamlessly with the URI class libraries in our applications.
Licensing -----------
ADI (my employer) has allowed us to give away the code as a gesture of appreciation to the Free Software community. I am the one responsible now for dealing with everything - they've washed their hands of it in a legal way. That is the reason you see two (c) lines above.
This code is released under the GNU LGPL. If you wish to redistribute this code then you must include the license.txt file as is.
The original copy of this code can be found at
http://www.vlc.com.au/~justin/java/images/imageloader_0.9.zip
This code makes use of other 3rd party libraries that contain a variety of different licenses. They are all less restrictive than the LGPL in usage. These are the libraries currently in use:
- libpng v1.0.2 - libjpeg v6.0a - NetPBM libraries - libTIFF from Sam Leffer v3.4beta037

The GNU LGPL can be found in license.txt or at http://www.gnu.org/lgpl.html
#include <std_disclaimer.h>


Installing -----------
Sorry, no JAR file yet. unzip the classes (or keep the zip file if you wish) and point your classpath at the place where you've extracted them.
The libraries use native code to load the images. In this release, there is only native code for Win32 platforms although it will compile and run on various Unices. Extract the DLL called imagedecoder.dll and make sure your PATH (not the classpath) points at the directory where you've put the DLL.
The software, as delivered, requires JDK 1.2 to run as it returns java.awt.image.BufferedImage objects to represent an image. By hand modifying the code you can get it to run with JDK 1.1 (remove comments is all that needs to be done).
Using --------
These classes load native libraries. In Java 2 this could cause security exceptions depending on your setup. If this happens, consult the javadoc for JDK1.2 (I'll do a writeup on this later).
To use it in your application, you will need to make Java aware of this.You can use one of 2 options:
- set the system property java.content.handler.pkgs to point to the name of the package (vlc.content).
- Create a ContentHandlerFactory and get it to return instances of these handlers when requested. We have provided a default implementation in vlc.content for the lazy.
Make sure that the system knows about the various MIME type mappings for the file extensions so that it can make use of the loaders. You can edit $java.home/lib/content-types.properties to add a new type or you can specify your own FileNameMap and set that in java.net.URLConnection. Note that there is a bug in URLConnection where it will trash your FileNameMap at the first time that it reads a file:// URL. The simple workaround is to load some file right at the start of the app and then set the map.
Now create a URL eg file://usr/users/justin/myimage.png, create a URL and then fetch the content of that URL. This should return you an Image object that you are free to use wherever.
Note: These content handlers DO NOT work with java.awt.Toolkit.createImage(). You are much better off just creating a URL and accessing it directly for all your image loading under this toolkit. It is much faster and much more memory efficient.
Compiling ----------
All of the native code can be found in \vlc\content\image\native. There are build scripts there for the native code. Also make sure that you view the readmes.
The code has been tested and compiled under NT4.0/SP3, Solaris 2.6/2.7 and HP-UX 10.20. If you have any other ports for different platforms - let us know!
The java code can be compiled on the command line as normal.
There are no general build scripts available at this time.
TODO: ------
- Write build scripts :)
- Tidy up documentation (ie Provide some and the web page).
- create signed JAR file and policy file

Justin Couch, 25 Feb 1999 couch@ccis.adisys.com.au (work) justin@vlc.com.au (home)
Unsubscription, archives, FAQ - http://www.xcf.berkeley.edu/lists.html

Parekh wrote: > > How do I convert a given Image into a Integer array with all entries > corresponding to the color in RGB Aplha format.

Look at PixelGrabber and MemoryImageSource.
For more information on these two classes (with examples), you can read a chapter on it from my book at IBM's website:
http://www.ibm.com/java/education/Oreilly/Java_AWT_Ref/ch12_01.html
J

>I know this has been discussed before...but I can' find a definitive >answer. How do you read in a GIF stored in a Jar File. The >Toolkit.getImage() seems to require a URL. How do I get Java to take the >JAR as a URL?
Use Class.getResourceAsStream() to read the image data and then use Toolkit.createImage(byte[]) to make the Image.

jv'ex.IMAGE.GIF

name::
* McsEngl.jv'ex.IMAGE.GIF@cptIt,

but:
http://www.acme.com/java/software/Acme.JPM.Encoders.GifEncoder.html
Points to a class API that can convert an Image to a Stream in the GIF format.
[1999jan]

jv'ex.IMAGE.JPEG

name::
* McsEngl.jv'ex.IMAGE.JPEG@cptIt,

>Hi Guys, > I have a project requiring a specific type of Jpeg encoding and as I >am limited to JDK1.1.7 I cannot use the com.sun.image.codec.jpeg package >from Java 2.
My open source ImageJ program at http://rsb.info.nih.gov/ij/ uses the JDK 1.1 compatible BioElectroMech JPEG encoder from http://www.obrador.com/essentialjpeg/.
-wayne

jv'ex.IMAGE.PNG'FORMAT

name::
* McsEngl.jv'ex.IMAGE.PNG'FORMAT@cptIt,

To all who are interested!
The PNG web site is located at http://www.cdrom.com/pub/png. Specifically,source code and conversion utilities are at http://www.cdrom.com/pub/png/pngcode.html.
The Java source I used with excellent results was PNGImageProducer by Jason Marshall.
For those not familiar with PNG files, they are graphics files (similar to GIF and/or JPEG).  Advantages  include:
1) no fees for commercial use (as is required for .GIF files) 2) none of the deficiencies of .JPG files (i.e. no information is lost) 3) more "features" than .JPG and .GIF files including variable transparency 4) java source code is available for input/display of PNG files 5) numerous conversion utilities are available (e.g. GIF2PNG, JPG to PNG,...) including some written entirely in Java 6) supported by later versions of Microsoft office

Good Luck!
Colin Geis Java Consultant email: coling@pro.net phone: (604) 273-0851

jv'ex.IMAGE.RETRIEVE

name::
* McsEngl.jv'ex.IMAGE.RETRIEVE@cptIt,

Toolkit.getDefaultToolkit().getImage(class.getResource(path))
Gets the image with PATH related to 'class'.
[hknu_{2001-03-17}]

// In a Frame:
Image image = Toolkit.getDefaultToolkit().getImage("image.gif");

URL url = getClass().getResource("flag.gif");
Image image = getToolkit().getImage(url);

//In an applet:
Image img = getImage(getCodeBase(), "image.gif");

jv'ex.IMAGE.SAVING

name::
* McsEngl.jv'ex.IMAGE.SAVING@cptIt,

i forgot the url but ACME has a package for savingg and handle imageformats
[1997dec22]

You might not be reading the whole input stream.  Have you tried looping through it and writing to the file output stream:
File f = new File(path,data); FileOutputStream f2 = new FileOutputStream(f);
byte buf[] = new byte[2056]; while (true) {   int len = is.read(buf);   if (len == -1) break;   f2.write(buf,0,len); } f2.close();

jv'ex.IMAGEICON

name::
* McsEngl.jv'ex.IMAGEICON@cptIt,

new ImageIcon("resources/jSCS_icon.gif")
The path is RELATIVE to "user.dir", NOT to class_directory that calls it.
[hknu_{2001-03-17}]

jv'ex.InputStreamReader

name::
* McsEngl.jv'ex.InputStreamReader@cptIt,

to translate a text file in the UTF-8 encoding into Unicode, you create an InputStreamReader as follows:
FileInputStream fis = new FileInputStream("test.txt");
InputStreamReader isr = new InputStreamReader(fis, "UTF8");

jv'ex.String_to_InputStreamReader:
new InputStreamReader(new ByteArrayInputStream(StringBuff.toString().getBytes()))

jv'ex.Insets

name::
* McsEngl.jv'ex.Insets@cptIt,

new Insets (top, left, bottom, right)

jv'ex.instanceof

name::
* McsEngl.jv'ex.instanceof@cptIt,

...
if (literal instanceof String)
 ...
else if (literal instanceof Number)
 ...

jv'ex.indexOf

name::
* McsEngl.jv'ex.indexOf@cptIt,

String s = "it17_HardDisk'Partition.xml";
int j = s.indexOf("_"); >>> j=4

int j = s.indexOf("H"); >>> j=5

int j = s.indexOf("h"); >>> j=-1

int j = s.indexOf("HardDisk"); >>> j=5

jv'ex.INHERITANCE.MULTIPLE

name::
* McsEngl.jv'ex.INHERITANCE.MULTIPLE@cptIt,

In an interview, my friend was asked this question :     Given two classes A and B, inherit a third class 'C' from both   'A' and 'B', without modifying the classes A and B.
Is this possible?

Multiple inheritance is NOT posibble in Java...use interface instead
ie have interface A and interface B
class C implements A, B

jv'ex.INNER-CLASS

name::
* McsEngl.jv'ex.INNER-CLASS@cptIt,

jv'ex.nested_class,

To call from another:
Outer outer = new Outer();
outer.new Inner();

It wants static-variable to refer in a variable of the outer class.
[nikos, 1997dec]

jv'ex.INNER'CLASS.NO'NAME

name::
* McsEngl.jv'ex.INNER'CLASS.NO'NAME@cptIt,

frame.addWindowListener( new WindowAdapter()
{
public void windowClosing(WindowEvent e) {
System.exit(0);}
});
[Swing 0.6.1, SimpleTree example]

urlField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {        try {         jep.setPage(ae.getActionCommand());        }        catch(Exception e) {        statusBar.setText("Could not open starting page. Using a blank.");        }
}
});

jv'ex.INT

name::
* McsEngl.jv'ex.INT@cptIt,

in diferent forms:
int i1 = 0x2f; // Hexadecimal (lowercase)
int i2 = 0X2F; // Hexadecimal (uppercase)
int i3 = 0177; // Octal (leading zero)

jv'ex.INT-TO-BINARY

name::
* McsEngl.jv'ex.INT-TO-BINARY@cptIt,

 static void printBinaryFromInt(int i)
 {
   System.out.print("int: " + i + ", binary: ");
   System.out.print(" ");
   for (int j = 31; j >= 0; j--)
     if (((1 << j) & i) != 0)
       System.out.print("1");
     else
       System.out.print("0");
   System.out.println();
 }

jv'ex.INT-TO-BYTE

name::
* McsEngl.jv'ex.INT-TO-BYTE@cptIt,

(byte)0x3a

jv'ex.INT-TO-CHAR

name::
* McsEngl.jv'ex.INT-TO-CHAR@cptIt,

// to char c from int i
c = (char)i;

jv'ex.INT-TO-INTEGER

name::
* McsEngl.jv'ex.INT-TO-INTEGER@cptIt,

Integer.valueOf(int):
Returns a Integer instance representing the specified int value.

jv'ex.INT-TO-STRING

name::
* McsEngl.jv'ex.INT-TO-STRING@cptIt,

With the static method valueOf of class String:
String.valueOf(int)

jv'ex.INT-TO-SPACE

name::
* McsEngl.jv'ex.INT-TO-SPACE@cptIt,

public static String pad(int padding) {
 if (padding > 0) {  
   StringBuffer sb = new StringBuffer(padding);  
   for (int i = 0; i < padding; i++) {
     sb.append(' ');
   }  
   return sb.toString();  
 } else {
   return "";
 }
}

jv'ex.Int-To-Hex'APP

name::
* McsEngl.jv'ex.Int-To-Hex'APP@cptIt,

// Nikos 1997jun14. USAGE: java IntToHex <int>
class IntToHex {
 public static void main (String args[]){ if (args.length != 1) { System.err.println("Usage: java IntToHex <int>"); System.exit(-1); }
   String hex = Integer.toHexString(Integer.valueOf(args[0]).intValue());
   System.out.println("Integer ="+args[0]+", Hexadecimal ="+hex);  } }

jv'ex.INTEGER

name::
* McsEngl.jv'ex.INTEGER@cptIt,

integerObject.intValue()
Returns the value of this Integer as an int.

jv'ex.Interface

name::
* McsEngl.jv'ex.Interface@cptIt,

interface Collection {
int MAXIMUM = 500;
void add(Object obj);
void delete(Object obj);
Object find(Object obj);
int currentCount();
}

jv'ex.INTROSPECTION

name::
* McsEngl.jv'ex.INTROSPECTION@cptIt,

Hi Carli,
Please find attached the code to get list of Classes in the package you want to introspect on. once the classes are obtained then you could use instanceof or any other introspection functions about the code - the parts are tested, and have been working fine, made one file(didn't test it), I don't expect problems, do let me know if you face any.
harmeet -----Original Message----- From: Carli Massimo <carlim@archimedia.it> >i have a jar file and i want an array >of BeanInfo objects which contains >the BeanInfo object of each Bean in >it. This mean that i want the information >in array of PropertySetDescriptor, EventSetDescriptor, >ecc..>1) Use the jar tool to unjar the file in a >predefined dir.>2) Use the classloader model but how can i >use the Introspector class in this way?>Which of these solution is better for you?

Code /******************  Code Start **********************************/ import java.io.*; import java.util.*; import java.util.zip.*;
public class AllClass {
  Class[] getPackageClassNames(String pack) {     String[] name = getPackageClassNames(pack);     Class[] res = new Class[name.length];     for ( int ni = 0 ; ni < name.length ; ni++ )       res[ni] = Class.forName(name[ni]);     return res;   }
  String[] getPackageClassNames(String pack) {     final String packDir = pack.replace('.',File.separatorChar);
    String classPath = System.getProperty("java.class.path");     String[] pathList = getTokens(new StringTokenizer(classPath,File.pathSeparator));     System.out.println(System.getProperties().toString());     for ( int pi = 0 ; pi < pathList.length ; pi++ )  {       String path = pathList[pi];       if ( path.equals(".") )         path = System.getProperty("user.dir");       if ( new File(path).isDirectory() == true ) {         String dir = path + File.separator + packDir;         String[] str = getClsFilesInDir(dir);         append(vect,str);       }       else {    //  zip or jar dosen't matter         String[] files = getFilesInZip(path);         for ( int fi = 0 ; fi < files.length ; fi++ )           //  toLowerCase can be removed           if ( files[fi].toLowerCase().startsWith(packDir.toLowerCase()) )           if ( files[fi].toLowerCase().endsWith("class") )           if files[fi].substring(packDir.length()+1).indexOf(File.separator) == -1 )             append(vect,files[fi].substring(packDir.length()+1));       }     }     return null;   }
  private String[] getTokens(StringTokenizer tok) {     final int len = tok.countTokens();     String[] result = new String[len];     for ( int i = 0 ; i < len ; i++ )         result[i] = tok.nextToken();     return result;   }
  private String[] getClsFilesInDir(String dirname) {     Vector vect = new Vector();     File dir = new File(dirname);
    String[] files = dir.list();     for ( int i = 0 ; i < files.length ; i++ )       if ( files[i].toLowerCase().endsWith(".class") )         vect.addElement(files[i]);     return (String[])vect.toArray(vect);   }
  //  works for both zip and jar   public static String[] getFilesInZip(String fileName) throws IOException {     Vector vect = new Vector();
    ZipInputStream zip = new ZipInputStream(new FileInputStream(fileName));     char dirSep = File.separatorChar;     while(true) {       ZipEntry entry = zip.getNextEntry();       if ( entry == null )    break;       String name = entry.getName();       if ( dirSep != '/' )         name = name.replace('/',dirSep);       if ( name.charAt(name.length()-1) == dirSep )   continue;       //System.out.println(name);       vect.addElement(name);     }     return (String[])toArray(vect);   }
  private void append(Vector vect, String file) {     if ( vect.contains(file) == false )       vect.addElement(file);   }
  private void append(Vector vect, String[] file) {     for ( int i = 0 ; i < file.length ; i++ )       append(vect.file);   }
  private Object[] toArray(Vector vect)  {     Object[] arr = new Object[vect.size()];     vect.copyInto(arr);     return arr;   } } /****************** Code End   **********************************/
Unsubscription, archives, FAQ - http://www.xcf.berkeley.edu/lists.html
[1998jan06]

jv'ex.INVOKING'DEFAULT'BROWSER

name::
* McsEngl.jv'ex.INVOKING'DEFAULT'BROWSER@cptIt,
* McsEngl.jv'ex.html'browser@cptIt,
* McsEngl.jv'ex.browser@cptIt,

On Windows and Mac, you can make a file:// URL and use JConfig's FileRegistry.launchURL() method:
http://www.tolstoy.com/samizdat/jconfig.html
Javaworld has a tip on this topic as well, but it only covers win/unix. See this too:
http://developer.apple.com/qa/java/java12.html

jv'ex.J

name::
* McsEngl.jv'ex.J@cptIt,

jv'ex.JAR'FILE

name::
* McsEngl.jv'ex.JAR'FILE@cptIt,

jar cvfe HtmlMgr2010-05-02.jar pk_Html.HtmlMgr pk_Html:
- creates a jar-file HtmlMgr2010-05-02.jar
- main-entry: pk_html.HtmlMgr
- directory-to-include: pk_Html
- executed from parent dir of pk_Html.

To create a JAR file:
jar cvf JARfilename listoffiles

To list the contents of a JAR file:
jar tvf JARfilename

To extract the entire contents of a JAR file:
jar xvf JARfilename

To extract a specific file from a JAR file:
jar xvf JARfilename FileToExtract

To specify the use of a JAR file with an applet:
<applet code=AppletClassName.class archive="JarFileName.jar" width=width height=height> </applet>

To create a JAR file named file.jar that includes compressed versions of all of the class and GIF files in the current directory:
jar cvf file.zip *.class *.gif

To create a JAR file for an applet whose classes are in a package named com.mycompany.myproject:
jar cvf file.zip com/mycompany/myproject/*.class *.gif (Solaris)
jar cvf file.zip com\mycompany\myproject\*.class *.gif (Windows 95/NT)

To create a jar file:
- jar cvf bundle.jar *:
Creates the <bundle.jar> file from ALL the files in the current directory.
- jar cvf bundle.jar audio classes images:
Creates the <bundle.jar> file from the files in audio/classes/images directories
of the current directory.

HAVE YOU TRIED USING JAR FILES for archiving? You may have heard of a UNIX tool called "tar," or tape archiver, that's used to group files together for backup purposes. In the Java Development Kit 1.1 and later releases, there's a similar facility known as "jar," or Java Archiver.
Here's a way to use this tool.
A JAR archive is created with the following:
$ jar cf archive.jar file1 file2 ...
After you create the archive, you can list the contents with:
$ jar tf archive.jar
and files can be extracted with the following:
$ jar xf archive.jar [file1 file2 ...]
Why is the JAR facility important? After all, various ZIP tool versions exist for archiving and compressing files. One important use of JAR is for bundling Java .class files. A group of such files could constitute a Java package or library. For example, with Windows 95 or NT you might say:
CLASSPATH="lib1.jar;lib2.jar;"
Another very important JAR use is for optimizing applet loading.
Consider this example with a simple applet:
// applet.java import java.awt.*; import java.applet.*;
public class applet extends Applet { public void paint(Graphics g) { String s = Message.getIntro(getParameter("intro")); g.drawString(s, 25, 25); } }
that accesses an auxiliary class:
// Message.java public class Message { public static String getIntro(String t) { if (t != null) return t; else return "Hello world!"; } }
You can invoke this applet with some HTML code, such as:
<html> <head><title>Hello World Example Applet </title></head> <body> <applet code="applet.class" archive="applet.jar" width=150 height=150> <param name="intro" value="good morning"></applet> </body> </html>
Note the "archive" attribute. Without this setting, each subsidiary class that's loaded, such as Message, would involve a separate request to the server holding the HTML page. But with the JAR file, the various .class files can be downloaded more efficiently.
In this example, you prepare archive.jar with the following:
$ javac applet.java $ jar cf applet.jar *.class
that is, construct the JAR file from all of the .class files.
A final note: JAR files are also used with JavaBeans.
[internet {1997-09-04}]

Loading a GIF image:
Let's say we have a JAR file containing a bunch of .gif image files that we want to use in our application. Here's how we could access an image file from the JAR using the JarResources:
JarResources jar = new JarResources ("Images.jar");
Image logo = Toolkit.getDefaultToolkit().createImage (jar.getResource ("logo.gif");
That code snippet shows that we can create a JarResources object initialized to the JAR file containing the resource that we're interested in using -- Images.jar. We then use the JarResources' getResource() method to provide the raw data from the logo.gif file for the AWT toolkit's createImage() method.
[jworld 1998mar] {1998-03-04}

http://www.cs.kuleuven.ac.be/~yvan/jardemo.html
[1999mar]

JAR FILE MANIFESTS. 
Jar files are mentioned in earlier issues of the JDC Tech Tips (No.  1 and No.  9), and this issue covers them again.  Jar files are used extensively within the Java language for packaging and distribution purposes, and it's important know how they work and how they can be manipulated.
A Jar file has the same format as a Zip file, and also optionally includes a manifest, which is a description of the contents of the file.  Jar files are used by the Java language for several purposes, such as distribution of groups of .class files, and downloading applets from the Web.
A feature in JDK(tm) 1.2 builds on existing java.util.zip.ZipFile functionality, to explicitly support the manipulation of Jar file manifests.  Here is an example of how this feature works:
        import java.io.*;         import java.util.*;         import java.util.jar.*;                 public class manif {                 public static void main(String args[])                 {                         if (args.length != 1) {                                 System.err.println("usage: manif file.jar");                                 System.exit(1);                         }                                 try {                                 JarFile jf = new JarFile(args[0]);                                 Manifest manif = jf.getManifest();                                 if (manif != null) {                                         manif.write(System.out);                                         Attributes attr =                                             manif.getMainAttributes();                                         String attrname =                                             "Specification-Version";                                         String str =                                             attr.getValue(attrname);                                         System.out.println(str);                                 }                         }                         catch (IOException e) {                                 System.err.println(e);                         }                 }         }
JarFile is a class whose instances represent Jar files.  In the example given above, a Jar file is opened for access, and then the manifest is written to standard output.  Next, the value of an individual attribute of the manifest ("Specification-Version") is retrieved and displayed.  Output, when the program is run on the JDK 1.2 Beta 4 version of "rt.jar", looks like this:
        Manifest-Version: 1.0         Specification-Title: Java Platform API Specification         Specification-Vendor: Sun Microsystems, Inc.        Implementation-Vendor: Sun Microsystems, Inc.        Specification-Version: 1.2beta4         Implementation-Version: 1.2beta4         Implementation-Title: Java Runtime Environment                 1.2beta4
Manifest attributes can be used both globally (they apply to the whole Jar file), and per entry (attributes of a given entry in the Jar file).
[1998oct]

jv'ex.Jar.image

name::
* McsEngl.jv'ex.Jar.image@cptIt,

Try InputStream in = getClass().getResourceAsStream("/images/light.gif"); Note the initial "/". Otherwise it will be prepending the path of your package and thus looking somewhere like /com/mitch/yourPackage/images/light.gif

> How can we get a resource (ex: "toto.dtd") which is in a jar ?

I think you can pull any arbitrary file out of a jar; the trick is to specify the resource path relative to a class and use that class to get it.
So if you have class MyClass in package org.my.pkg your jar might look like:
org/my/pkg/MyClass.class org/my/pkg/dtd/toto.dtd
Then to get that dtd file you would use something like:
org.my.pkg.MyClass.class.getResource("dtd/toto.dtd");

MyClass.class.getResourceAsStream("resource.dtd");

jv'ex.javaws

name::
* McsEngl.jv'ex.javaws@cptIt,
* McsEngl.java-web-start-example@cptIt,

Basic Steps

1. Configure the Web server to use the Java Web Start MIME type
Configure the Web server so that all files with the .jnlp file extension are set to the application/x-java-jnlp-file MIME type.
Most Web browsers use the MIME type returned with the contents from the Web server to determine how to handle the particular content. The server must return application/x-java-jnlp-file MIME type for JNLP files in order for Java Web Start to be invoked.
Each Web server has a specific way in which to add MIME types. For example, for the Apache Web server you must add the following line to the .mime.types configuration file:
application/x-java-jnlp-file JNLP
Check the documentation for the specifics of your Web server.

2. Create a JNLP file for the application
The easiest way to create this file is to modify an existing JNLP file to your requirements.
The syntax and format for the JNLP file is described in a later section.

3. Make the application accessible on the Web server
Ensure your application's JAR files and the JNLP file are accessible at the URLs listed in the JNLP file.

4. Create the web page that launches the application
See the next chapter, Creating the Web Page that launches the Application, for details on step 4.
[file:///D:/JAVA/DOCS/DOCS6/technotes/guides/javaws/developersguide/setup.html]

jv'ex.JNLP-FILE

name::
* McsEngl.jv'ex.JNLP-FILE@cptIt,

The JNLP file is an XML document. The following shows a complete example of a JNLP file.
Example

<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File for SwingSet2 Demo Application -->
<jnlp
spec="6.0+"
codebase="http://my_company.com/jaws/apps"
href="swingset2.jnlp">
<information>
<title>SwingSet2 Demo Application</title>
<vendor>Sun Microsystems, Inc.</vendor>
<homepage href="docs/help.html"/>
<description>SwingSet2 Demo Application</description>
<description kind="short">A demo of the capabilities
of the Swing Graphical User Interface.</description>
<icon href="images/swingset2.jpg"/>
<icon kind="splash" href="images/splash.gif"/>
<offline-allowed/>
<association>
<mime-type="application-x/swingset2-file"/>
<extensions="swingset2"/>
</association>
<shortcut online="false">
<desktop/>
<menu submenu="My Corporation Apps"/>
</shortcut>
</information>
<information os="linux">
<title> SwingSet2 Demo on Linux </title>
<homepage href="docs/linuxhelp.html">
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+" java-vm-args="-esa -Xnoclassgc"/>
<jar href="lib/SwingSet2.jar"/>
</resources>
<application-desc main-class="SwingSet2"/>
</jnlp>

The example shows the basic outline of the document. The root element is jnlp, which has four subelements: information, security, resources, and application-desc. In addition, Java Web Start also supports launching applets by using the applet-desc element. The elements are described in more detail below.
[file:///D:/JAVA/DOCS/DOCS6/technotes/guides/javaws/developersguide/syntax.html]

jv'ex.SIGNING-JAR-FILES

name::
* McsEngl.jv'ex.SIGNING-JAR-FILES@cptIt,

Signing JAR Files With a Test Certificate

Here are the steps needed to sign a JAR file with a test certificate:

1. Make sure that you have an SDK 1.4.2 keytool and jarsigner in your path. These tools are located in the SDK bin directory.

2. Create a new key in a new keystore as follows:

keytool -genkey -keystore myKeystore -alias myself

You will get prompted for a information about the new key, such as password, name, etc. This will create the myKeystore file on disk.

3. Then create a self-signed test certificate as follows:

keytool -selfcert -alias myself -keystore myKeystore

This will prompt for the password. Generating the certificate may take a few minutes.

4. Check to make sure that everything is okay. To list the contents of the keystore, use this command:

keytool -list -keystore myKeystore

It should list something like:

Keystore type: jks
Keystore provider: SUN

Your keystore contains 1 entry:

myself, Tue Jan 23 19:29:32 PST 2001, keyEntry,
Certificate fingerprint (MD5):
C2:E9:BF:F9:D3:DF:4C:8F:3C:5F:22:9E:AF:0B:42:9D

5. Finally, sign the JAR file with the test certificate as follows:

jarsigner -keystore myKeystore test.jar myself

Repeat this step with all of your JAR files.


Note that a self-signed test certificate should only be used for internal testing, since it does not guarantee the identity of the user and therefore cannot be trusted. A trust-worthy certificate can be obtained from a certificate authority, such as VeriSign or Thawte, and should be used when the application is put into production.
[file:///D:/JAVA/DOCS/DOCS6/technotes/guides/javaws/developersguide/development.html#security]

applet SIGNING

If you want an applet to store data on the local machine, from 6u10 the javax.jnlp.PersistenceService is available. Creating a secure "signed applet" is difficult, and I wouldn't recommend it to anyone.
[http://stackoverflow.com/questions/984595/signed-java-applet-writing-to-a-text-file]

1) for NS the technique is Object signing.       http://developer.netscape.com/products/zigbert/index.html      The tool is JarPackager.
     2) for IE the technique is Cabbing      http://www.microsoft.com/     search for the location      The tool is called something like cab
     3) for Hotjava use Javakey
     You can get a test certificate from www.verisign.com      For your own purposes you can create test certificates using some tools.
[1997dec10]

load-image

ClassLoader cl = Thread.currentThread().getContextClassLoader();
InputStream baseInputStream = cl.getResourceAsStream(value);
if(baseInputStream != null){
ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
byte[] buffer = new byte[1024];
int len;

while((len = baseInputStream.read(buffer)) >= 0)
out.write(buffer, 0, len);

baseInputStream.close();
out.close();

imageIcon = new ImageIcon(out.toByteArray());
}

jv'ex.JCheckBox (javax.swing)

name::
* McsEngl.jv'ex.JCheckBox (javax.swing)@cptIt,

public boolean isSelected()
Returns the state of the button. True if the toggle button is selected, false if it's not.

public void setSelected(boolean b)
Sets the state of the button. Note that this method does not trigger an actionEvent. Call doClick to perform a programatic action change.

jv'ex.JComboBox (javax.swing)

name::
* McsEngl.jv'ex.JComboBox (javax.swing)@cptIt,

http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html

import javax.swing.JComboBox;
JComboBox jcBox = new JComboBox();
.addItem(k);
.addActionListener(new ActionDisplayVSStats());
.setSelectedIndex(0);
.setPreferredSize(new Dimension(46,16));

.getSelectedItem();
.getSelectedIndex();

DATA:
days.addItem("Monday"); days.addItem("Tuesday");

DefaultComboBoxModel dcbm = new DefaultComboBoxModel(cbtEn); //Object array
cboxRule.setModel(dcbm);

_SET:
* jcbLang
* cboxTypeEn

_GET:
* int getSelectedIndex() Returns the index of the currently selected item in the list.
* Object getSelectedItem()
((String)jcbLang.getSelectedItem()).equals(AAj.labels.getString("Greek2"))
* Object getItemAt(int index)

jv'ex.jdbc

name::
* McsEngl.jv'ex.jdbc@cptIt,


// The following code can be used as a template. Simply
// substitute the appropriate url, login, and password, and then substitute the
// SQL statement you want to send to the database.
//----------------------------------------------------------------------------
//
// Module:  SimpleSelect.java
//
// Description:  Test program for ODBC API interface. This java application
// will connect to a JDBC driver, issue a select statement
// and display all result columns and rows
//
// Product:  JDBC to ODBC Bridge
//
// Author:  Karl Moss
//
// Date:  February, 1996
//
// Copyright:  1990-1996 INTERSOLV, Inc.
// This software contains confidential and proprietary
// information of INTERSOLV, Inc.
//----------------------------------------------------------------------------


import java.net.URL;
import java.sql.*;
class SimpleSelect {
public static void main (String args[]) {
 String url = "jdbc:odbc:my-dsn";
 String query = "SELECT * FROM emp";
 try {
   // Load the jdbc-odbc bridge driver
   Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
   DriverManager.setLogStream(System.out);
   // Attempt to connect to a driver. Each one
   // of the registered drivers will be loaded until
   // one is found that can process this URL
   Connection con = DriverManager.getConnection (
     url, "my-user", "my-passwd");
   // If we were unable to connect, an exception
   // would have been thrown. So, if we get here,
   // we are successfully connected to the URL
   // Check for, and display and warnings generated
   // by the connect.
   checkForWarning (con.getWarnings ());
   // Get the DatabaseMetaData object and display
   // some information about the connection
   DatabaseMetaData dma = con.getMetaData ();
   System.out.println("\nConnected to " + dma.getURL());
   System.out.println("Driver " +
     dma.getDriverName());
   System.out.println("Version " +
     dma.getDriverVersion());
   System.out.println("");
   // Create a Statement object so we can submit
   // SQL statements to the driver
   Statement stmt = con.createStatement ();
   // Submit a query, creating a ResultSet object
   ResultSet rs = stmt.executeQuery (query);
   // Display all columns and rows from the result set
   dispResultSet (rs);
   // Close the result set
   rs.close();
   // Close the statement
   stmt.close();
   // Close the connection
   con.close();
 }
 catch (SQLException ex) {
   // A SQLException was generated. Catch it and
   // display the error information. Note that there
   // could be multiple error objects chained
   // together
 System.out.println ("\n*** SQLException caught ***\n");
 while (ex != null) {
   System.out.println ("SQLState: " +
       ex.getSQLState ());
   System.out.println ("Message: " + ex.getMessage ());
   System.out.println ("Vendor: " +
       ex.getErrorCode ());
   ex = ex.getNextException ();
   System.out.println ("");
   }
 }
 catch (java.lang.Exception ex) {
   // Got some other type of exception. Dump it.
   ex.printStackTrace ();
 }
}
//-------------------------------------------------------------------
// checkForWarning
// Checks for and displays warnings. Returns true if a warning
// existed
//-------------------------------------------------------------------


private static boolean checkForWarning (SQLWarning warn)  
             throws SQLException {
 boolean rc = false;
 // If a SQLWarning object was given, display the
 // warning messages. Note that there could be
 // multiple warnings chained together
 if (warn != null) {
   System.out.println ("\n *** Warning ***\n");
   rc = true;
   while (warn != null) {
     System.out.println ("SQLState: " +
       warn.getSQLState ());
     System.out.println ("Message: " +
       warn.getMessage ());
     System.out.println ("Vendor: " +
       warn.getErrorCode ());
     System.out.println ("");
     warn = warn.getNextWarning ();
   }
 }
 return rc;
}
//-------------------------------------------------------------------
// dispResultSet
// Displays all columns and rows in the given result set
//-------------------------------------------------------------------


private static void dispResultSet (ResultSet rs)
 throws SQLException{
 int i;
 // Get the ResultSetMetaData. This will be used for
 // the column headings
 ResultSetMetaData rsmd = rs.getMetaData ();
 // Get the number of columns in the result set
 int numCols = rsmd.getColumnCount ();
 // Display column headings
 for (i=1; i<=numCols; i++) {
   if (i > 1) System.out.print(",");
   System.out.print(rsmd.getColumnLabel(i));
 }
 System.out.println("");
 
 // Display data, fetching until end of the result set
 boolean more = rs.next ();
 while (more) {
   // Loop through each column, getting the
   // column data and displaying
   for (i=1; i<=numCols; i++) {
     if (i > 1) System.out.print(",");
     System.out.print(rs.getString(i));
   }
   System.out.println("");
   // Fetch the next result set row
   more = rs.next ();
 }
}
}

jv'ex.JButton

name::
* McsEngl.jv'ex.JButton@cptIt,

public class ButtonPanel extends JPanel { public ButtonPanel() { Icon tigerIcon = new ImageIcon("SmallTiger.gif"); JButton myButton = new JButton("Tiger", tigerIcon); myButton.setBackground (SystemColor.control); add(myButton); } }
[jdk]

bt = new JButton("find");
bt.setActionCommand("findPar");
bt.addActionListener(new FindAction());

jv'ex.JEditorPane

name::
* McsEngl.jv'ex.JEditorPane@cptIt,
* McsEngl.jv'ex.html@cptIt,

READ-FILE:
public void displayFile(File jfile) {
try {
FileInputStream fis = new FileInputStream(jfile);
jePane.read(fis,jfile);
} catch (IOException e) {
System.out.println("IO Exception in display file");
}
}

To make this more efficient try reading in bytes of data instead. Eg.

InputStream file_reader = new BufferedInputStream(new FileInputStream
(filename));

now construct an array of bytes
int BUFFER_SIZE = 4096;
byte[] buffer = new byte[BUFFER_SIZE];

and then to read 4096 bytes of data
int bytesRead = file_reader.read(buffer, 0, BUFFER_SIZE);

now if u want to turn buffer into a string
String line = new String(buffer, 0, bytesRead);

of course your displayFile(File jfile) function will need to be changed since
in the file_reader above u need filename to be a string rather than of type
File. I tested this with files of size greater than 26MB and it worked fine.
Hope it helps.
If you still have trouble just send me an email.

[http://forums.devx.com/showthread.php?t=29135]

Setting the font in a JEditorPane.
Once you change the content type of a JEditorPane to text/html the font on the Pane starts to be managed by Swing. If you want to force it you should use something like the following.

JEditorPane pane = new JEditorPane();
pane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
pane.setFont(SOME_FONT);

INSERT-HTML-AND-STYLESHEET:
 HTMLDocument htmlDoc= (HTMLDocument)tbEdWwJEdPn.getDocument();
 StyleSheet ss = htmlDoc.getStyleSheet();
 try {
   ss.importStyleSheet(new URL("file:g:/file1/aajworking/aaj.css"));
 } catch (Exception e) {
   System.out.println(e.toString());
 }
 htmlDoc = new HTMLDocument(ss);
 tbEdWwJEdPn.setDocument(htmlDoc);
 tbEdWwJEdPn.setText(tbEdSrcJTxAr.getText());
 htmlDoc.addDocumentListener(lsnDoc);



//        HtmlEditorKitEditorWW htmlKit= (HtmlEditorKitEditorWW)tbEdWwJEdPn.getEditorKit();
//        StyleSheet ss = htmlKit.getStyleSheet();
//        File fileCSS= new File("g:/file1/aajworking/aaj.css");
//        try {
//          URL cssUrl = fileCSS.toURI().toURL();
//          InputStream is = cssUrl.openStream();
//          BufferedReader br = new BufferedReader(new InputStreamReader(is));
//          ss.loadRules(br, cssUrl);
//          br.close();
//        } catch (Exception e) {
//          System.out.println(e.toString());
//        }
//        Document doc = htmlKit.createDefaultDocument();
//        tbEdWwJEdPn.setDocument(doc);
//        tbEdWwJEdPn.setText(tbEdSrcJTxAr.getText());
//        tbEdWwJEdPn.getDocument().removeDocumentListener(lsnDoc);
//        tbEdWwJEdPn.getDocument().addDocumentListener(lsnDoc);

sreedhar @ hamsadvani.serc.iisc.ernet.in (Sreedharamurthy K) on 10/02/98 12:33:16
To:   advanced-java @ xcf.berkeley.edu @ SMTP cc:
Subject:  JEditorPane for handling HTML links

Hi everyone,      I want to know how to use JEditorPane of SWING 0.7, to handle HTML links. I found an example in SwingSet example of SWING kit, i separated that module and tried, I'm getting some exceptions. So can anybody help me in using this GUI element?
Thanx in advance...
Sreedhar

Sreedhar,
More than a month ago, before release 0.7, I submitted a feedback to the swing team concerning JEditorPane in order to beanify this component specially for the hyper link. Before version 0.7, subclassing was the only way to know that a link had been activated by overwritting linkActiviated( URL url ).
>From version 0.7, you have now a publish and subscribe mechanism with a listener, an event and a support for registration to be notified that a link has been activated.
The API is the following :
JEditorPane :      - void addHyperlinkListener( HyperlinkListener listener )
HyperlinkListener      - void hyperlinkUpdate( HyperlinkEvent event )
HyperlinkEvent      - URL getURL()      - HyperlinkEvent.EventType getType()
between Swing 0.6.1 and Swing 0.7. It means
Regards Olivier

SPEED

editorPane.addPropertyChangeListener( new PropertyChangeListener() {
 public void propertyChange( PropertyChangeEvent e ) {
   if ( e.getPropertyName().equals( "page" ) ) {
     editorPane.setCaretPosition( editorPane.getDocument().getLength() );
   }
 }
}
);

Faster JTextPane Text Insertion (Part II)
* http://javatechniques.com/blog/faster-jtextpane-text-insertion-part-ii/

I have just solved a similar problem, not sure this will work for you but it might be worth a try.

Basically I discovered that when rendering large amounts of text wihtout any return carriagres the JEditorPane is being resized to an extremely large size at some rendering stage, even if it's within a JScrollPane.

The fix is easy, just use: yourEditorPane.setMaximumSize (new Dimension(realisticX, realisticY));

This sped up setText from several minutes to a couple of secs.

[http://java.itags.org/java-core-gui-apis/45562/]

Re: Performance of JEditorPane with unicode characters
Posted: Feb 24, 2006 6:11 AM in response to: idk    
 Click to reply to this thread  Reply

Apparently what happens is that inserting the unicode character sets the multiByte property to true. Setting it back to false restores normal behaviour:

getDocument().putProperty("multiByte", false);

It doesn't seem to have any side effects.

Rasmus
[http://forums.java.net/jive/thread.jspa?threadID=13265]

jv'ex.JFileChooser

name::
* McsEngl.jv'ex.JFileChooser@cptIt,

CHOOSE_ONLY_DIRECTORY:
     JFileChooser jFC = new JFileChooser(new File(getDirHome()));
     jFC.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
     int retval = jFC.showOpenDialog(jFrameHMgr);
     if (retval == JFileChooser.APPROVE_OPTION) {
       File file = jFC.getSelectedFile();
       if (file.isFile())
         System.out.println(file.toString());
       if (file.isDirectory())
         System.out.println("dir: "+file.toString());
     }

// JFileChooser Example
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

class JFileChooserExample extends JFrame implements ActionListener {
private JEditorPane jep = new JEditorPane();
public JFileChooserExample() {
super("Editor");
Container cp = getContentPane( );
cp.add(new JScrollPane(jep), BorderLayout.CENTER);
JMenu menu = new JMenu("File");
menu.add(make("Open")); menu.add(make("Save"));
menu.add(make("Quit"));
JMenuBar menuBar = new JMenuBar();
menuBar.add(menu); setJMenuBar(menuBar);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200,300);
}

public void actionPerformed(ActionEvent e) {
String ac = e.getActionCommand();
if(ac.equals("Open")) openFile();
else if(ac.equals("Save")) saveFile();
else if(ac.equals("Quit")) System.exit(0);
}

private void openFile() {
JFileChooser jfc = new JFileChooser();
int result = jfc.showOpenDialog(this);
if(result == JFileChooser.CANCEL_OPTION) return;
try {
File file = jfc.getSelectedFile();
BufferedReader br = new BufferedReader(new FileReader(file));
String s=""; int c=0;
while((c=br.read())!=-1) s+=(char)c;
br.close(); jep.setText(s);
} catch (Exception e) {
JOptionPane.showMessageDialog(this,e.getMessage(),
"File error",JOptionPane.ERROR_MESSAGE);}
}

private void saveFile( ) {
JFileChooser jfc = new JFileChooser();
int result = jfc.showSaveDialog(this);
if(result == JFileChooser.CANCEL_OPTION) return;
File file = jfc.getSelectedFile();
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write(jep.getText());
bw.close();
}
catch (Exception e) {
JOptionPane.showMessageDialog(
this,
e.getMessage(),
"File Error",
JOptionPane.ERROR_MESSAGE
);
}
}

private JMenuItem make(String name) {
JMenuItem m = new JMenuItem(name);
m.addActionListener(this);
return m;
}

public static void main(String[] args) {
new JFileChooserExample().setVisible(true);}
}

     JFileChooser jflChooser = new JFileChooser(getDirHome());
//      jfileDialog.setDialogType(JFileChooser.SAVE_DIALOG);
//      jflChooser.setFileFilter(new HtmlFileFilter());
     jflChooser.setSelectedFile(new File(sUrlFile.substring(5)));
     int returnVal = jflChooser.showSaveDialog(cJFrHtmlMgr);
//      System.out.println(sUrlFile.substring(5));
     if (returnVal == JFileChooser.APPROVE_OPTION) {
       File f = jflChooser.getSelectedFile();
       try {
         FileWriter writer = new FileWriter(f);
         BufferedWriter bw =new BufferedWriter(writer);
         bw.write(tbEdSrcJTxAr.getText());
         bw.close();
       } catch (Exception e) {
         System.out.println(e.toString());
       }
     }

jv'ex.JLabel

name::
* McsEngl.jv'ex.JLabel@cptIt,

public class LabelPanel extends JPanel
{ public LabelPanel() {
// Create and add a JLabel
JLabel plainLabel = new JLabel("Plain Small Label"); add(plainLabel);
// Create a 2nd JLabel
JLabel fancyLabel = new JLabel("Fancy Big Label");
// Instantiate a Font object to use for the label
Font fancyFont = new Font("Serif", Font.BOLD | Font.ITALIC, 32);
// Associate the font with the label fancyLabel.setFont(fancyFont);
// Create an Icon
Icon tigerIcon = new ImageIcon("SmallTiger.gif");
// Place the Icon in the label fancyLabel.setIcon(tigerIcon);
// Align the text to the right of the Icon fancyLabel.setHorizontalAlignment(JLabel.RIGHT);
// Add to panel add(fancyLabel); } }
[jdk]

jv'ex.JLIST

name::
* McsEngl.jv'ex.JLIST@cptIt,

jls.setListData(Vector)

int index = jls.getSelectedIndex();

String sel = (String)jls.getSelectedValue();

SELECTION:
* getSelectedIndex(): returns the first selected index.
* getSelectedValue(): returns the first selected value or null, if the selection is empty.

* locationToIndex(MouseEvent.getPoint()) = 1, 2, ...

>some of item in the list is selected and I make setListData() to view >another array in the list, it's OK. But if there wasn't selected item in >the list after making setListData() to view another array in the list, I >see the same items from previous array. And after selecting item in the >list, it gives me view of new array items.>How can I solve that problem?

As a temporary fix, you could call repaint() and revalidate() after setting the new list data.  But there's probably a more appropriate way to handle this of which I am not currently aware.
daniel
orororororororororororororororororororororororororororororororororororororo Daniel F. Savarese                                    email: dfs@oroinc.com ORO, Inc.  "Component software for the Internet."tm  http://www.oroinc.com/ orororororororororororororororororororororororororororororororororororororo
[1998jan01]

jv'ex.JScrollPane

name::
* McsEngl.jv'ex.JScrollPane@cptIt,

JScrollPane outputPane = new JScrollPane(componet,
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

on a list:
dlistModel = new DefaultListModel();
jlistResults = new JList (dlistModel);
JScrollPane scrollPane = new JScrollPane(jlistResults);

JScrollPane jsp = new JScrollPane(jep);
jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

jv'ex.JSplitPane

name::
* McsEngl.jv'ex.JSplitPane@cptIt,
* McsEngl.jv'ex.SPLITPANE@cptIt,

 JScrollPane    treeView, textView;
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);    splitPane.setLeftComponent (treeView = new JScrollPane (tree)); splitPane.setRightComponent (textView = new JScrollPane (editor));
Dimension minimumSize = new Dimension (100, 50);
textView.setMinimumSize (minimumSize);
treeView.setMinimumSize (minimumSize);
splitPane.setPreferredSize (new Dimension (780, 580));
splitPane.setDividerLocation (250);    
splitPane.setContinuousLayout(true);

import javax.swing.*; import javax.swing.event.*; import javax.accessibility.*; import java.awt.*; import java.awt.event.*;
public class SplitPanePanel extends JPanel
{ /** JSplitPane being shown to the user. */ protected JSplitPane splitPane; /** Left component being split. */ protected JTextArea leftComp; /** Right component being split. */ protected JTextPane rightComp;

public SplitPanePanel() { super(); setDoubleBuffered(true); setLayout(new BorderLayout()); createSplitPane(); }

/** * Creates the JSplitPane. */
protected void createSplitPane() {
leftComp = new JTextArea(); leftComp.setPreferredSize(new Dimension(200, 400)); rightComp = new JTextPane(); rightComp.setPreferredSize(new Dimension(600, 400));
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftComp, rightComp);
splitPane.setContinuousLayout(true);
splitPane.setPreferredSize(new Dimension(400, 300));
splitPane.getAccessibleContext().setAccessibleName("Split pane example");
add(splitPane, BorderLayout.CENTER); }
}

jv'ex.JTextComponent

name::
* McsEngl.jv'ex.JTextComponent@cptIt,

GET_POSITION_OF_VISIBLE_TEXT:
HTMLDocument hDoc= (HTMLDocument)cBrsr.getDocument();
Element elem= hDoc.getParagraphElement(jTxComp.viewToModel(
 ((JViewport)jTxComp.getParent()).getViewPosition()));
System.out.println("%%%"+elem.toString());

Using the Selection of a JTextComponent
JTextComponent c = new JTextArea(); // Get text inside selection c.getSelectedText(); // Replace selected text c.replaceSelection("replacement text"); // Set the start of the selection; ignored if new start is < end c.setSelectionStart(10); // Set the end of the selection; ignored if new end is > start c.setSelectionEnd(20); // Better way to set the selection c.select(10, 20); // Set the color of text inside the selection c.setSelectedTextColor(Color.red); // Set the color behind the selected text c.setSelectionColor(Color.green);

jv'ex.JTextField

name::
* McsEngl.jv'ex.JTextField@cptIt,

import javax.swing.JTextField;
JTextField jtField = new JTextField(4);
jtField.setFont(new Font("serif", Font.BOLD, 14));
jtField.setHorizontalAlignment(JTextField.CENTER);
.setText(String.valueOf(gensFound.size()));

jv'ex.JTextField.at

name::
* McsEngl.jv'ex.JTextField.at@cptIt,

USING @:
I guess its a bug.. Somebody has already replied in this list..
Take a look at this link: http://developer.java.sun.com/developer/bugParade/bugs/4122687.html
There's a description of the problem, and a work-around.
I have the same problem, all I can offer you is an "ugly" workaround....
class TextKeyAction extends java.awt.event.KeyAdapter { public void keyPressed(java.awt.event.KeyEvent event) { if( (event.getKeyCode() == KeyEvent.VK_2) && event.isAltDown()) jtfEMail.setText( (jtfEMail.getText() + "\u0040") ); } }
[adv. java {1999-03-16}]

jv'ex.JTextField.LIMIT'CHARACTERS

name::
* McsEngl.jv'ex.JTextField.LIMIT'CHARACTERS@cptIt,

Some time ago there was a discussion on how to limit the number of characters the user can type in a TextField.
In case of JTextField (and I think this is applicable to JTextArea as well) there is a relatively simply solution. Here is the short version
import com.sun.java.swing.text.*; public final class InputSizeLimitingDocument extends PlainDocument  {     private int _maxSize;       public InputSizeLimitingDocument(int maxSize) {     super();      _maxSize = maxSize;     }   
  //  override the insertString method   public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {     if ( getLength() == _maxSize )       return;     super.insertString(offs, str, a);   }  }   
Now you have to hookup the JTextField to the document:
JTextField  = myLimitedTextField(..............); myLimitedTextField.setDocument( new InputSizeLimitingDocument( 10 ) );
[1997dec23]

jv'ex.JTree

name::
* McsEngl.jv'ex.JTree@cptIt,

trick to set X axis at 0:
   Rectangle bounds = tbTocJTr.getPathBounds(path);
   if(bounds != null) {
     bounds.setBounds(0, (int)bounds.getY(),
           (int)bounds.getWidth(), (int)bounds.getHeight());
     tbTocJTr.scrollRectToVisible(bounds);
   }

SELECT ROW THAT ENDS WITH STRING:
int row=0;
while(row < tree.getRowCount()) {
 TreePath tp= tree.getPathForRow(int row) ;
 String sTp= tp.toString();
 if (sTp.endsWith("x"){
   return
   tree.setSelectionPath (tp);
   tree.scrollPathToVisible (tp);
 }
 row++;
}

EXPAND-ALL-NODES:
for(int i = 0; i <tocRoot.getChildCount(); i++)
{
 DefaultMutableTreeNode node = (DefaultMutableTreeNode)tocRoot.getChildAt(i);
 toc.expandPath(new TreePath(node.getPath()));
}

jv'ex.K

name::
* McsEngl.jv'ex.K@cptIt,

jv'ex.KeyBinding

name::
* McsEngl.jv'ex.KeyBinding@cptIt,

Here is an example of specifying that a component should react to the F2 key:
component.getInputMap().put(KeyStroke.getKeyStroke("F2"),
"doSomething");
component.getActionMap().put("doSomething",
anAction);

//where anAction is a javax.swing.Action
Action doNothing = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
//do nothing
}
};

To make a component IGNORE A KEY that it normally responds to, you can use the special action name "none". For example, the following code makes a component ignore the F2 key.

component.getInputMap().put(KeyStroke.getKeyStroke("F2"),
"none");
[http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html]

jv'ex.KeyStroke

name::
* McsEngl.jv'ex.KeyStroke@cptIt,

Shift + Enter:
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.SHIFT_MASK);

Shift + H:
KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.SHIFT_MASK);

jv'ex.L

name::
* McsEngl.jv'ex.L@cptIt,

jv'ex.Label

name::
* McsEngl.jv'ex.Label@cptIt,

import java.awt.*;

public class Main extends Frame {
Label statusBar = new Label();
Main() {
super("Label Example");
add("South", statusBar);
resize(200, 200);
show();
}

public boolean handleEvent(Event evt) {
switch (evt.id) {
case Event.MOUSE_MOVE:
case Event.MOUSE_DRAG:
String status = "("+evt.x+","+evt.y+") ";

if (evt.controlDown()) status += "C";
if (evt.shiftDown()) status += "S";
if (evt.metaDown()) status += "M";
statusBar.setText(status);
return true;
}
return super.handleEvent(evt);
}

static public void main(String[] args) {
new Main();
}
}

CENTERING A LABEL:
new Label("What do you want on your pizza?", Label.CENTER));

SETTING BACKGROUND COLOR:
Label hLabel = new Label("Υψος");
hLabel.setBackground(Color.lightGray);
add(hLabel);

SETTING FONT ON A LABEL:
Label bLabel = new Label("Unicode base (δεκαδικός):");
bLabel.setFont(new Font("Helvetica", Font.PLAIN, 14));
panel.add(bLabel);

jv'ex.LABEL.multiline

name::
* McsEngl.jv'ex.LABEL.multiline@cptIt,

Adam J. Rose" wrote:
> I am writing an application which has some buttons with rather long
> labels. I would like to have these wrap to the next line. I have tried
> putting /n in the string, but it just prints a square.

very simple
JButton button = new JButton("<html>Line one<br>Line two<br>Line three");
will give you a 3-line button.

As of swing1.1beta1, JLabel , JButton and JMenuItem support HTML text, allowing you to do all kinds of fancy formatting ( including Tables and Lists ) that HTML supports.
If I remember correctly, someone yesterday asked for a MultiLineLabel. The following will do the trick ;
JLabel label = new JLabel( "<html><u>This is an underlined label</u>");
Have fun, Krishnan
[adv java {1999-03-10}]

jv'ex.Layout.Vertical

name::
* McsEngl.jv'ex.Layout.Vertical@cptIt,

From: colin mummery <colin@equitysoft.freeserve.co.uk> To: <advanced-java@xcf.berkeley.edu> Subject: AWT VerticalLayout manager free source Date: Κυριακή, 4 Απριλίου 1999 12:31 μμ
VerticalLayout manager is the vertical version of the AWT FlowLayout Manager. It solves the problems of using GridBagLayout or BoxLayout to align components vertically and can be downloaded in source form for free from
http://www.kagi.com/equitysoft
Like FlowLayout components won't expand to fill the available space and like GridBagLayout they can be anchored to a particular part or the container.
It works in Java 1.02, 1.1, 1.2 or J++
Regards Colin Mummery equitysoft@iname.com

jv'ex.LETTER

name::
* McsEngl.jv'ex.LETTER@cptIt,
* McsEngl.jv'ex.char'in'set@cptIt,

private static boolean isLetter(char ch) {
return (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z'));
}

private static boolean isLowercaseLetter(char ch) {
return ('a' <= ch && ch <= 'z');
}

TEST IF A CHAR BELONGS TO A SET:
String set=" \t\n";
if (set.contains(String.valueOf(ch)))
 return true;

jv'ex.LINESEPARATOR

name::
* McsEngl.jv'ex.LINESEPARATOR@cptIt,

jv'ex.NewLine, jv'ex.lineTerminator:
\ n /* \u000a(10): linefeed LF */
\ r /* \u000d(13): carriage return CR */
Line Separators
Unix systems use newlines (\n) to mark line endings in text files.
The MacOS uses carriage-returns (\r).
Windows uses a carriage-return followed by a newline (\r\n).
jEdit can read and write files in all three formats.
The line separator used by the in-memory representation of file contents is always the newline character. When a file is being loaded, the line separator used in the file on disk is stored in a per-buffer property, and all line-endings are converted to newline characters for the in-memory representation. When the buffer is consequently saved, the value of the property replaces newline characters when the buffer is saved to disk.
[jEdit help]

String newline = System.getProperty("line.separator");

jv'ex.LISTENER

name::
* McsEngl.jv'ex.LISTENER@cptIt,

I thought the idea of not having source in all event types is interesting.I am able to ignore the source in many listeners.  When I do require the source, I try to have the listener applicable to only one class of source, and check with instanceof.  I avoid listeners which contain code such as:
Object source = event.getSource(); if( source instanceof XXX ) { ...} else if( source instanceof YYY ) { ...} ...
[Mike Foley 1997dec28]

jv'ex.LIST

name::
* McsEngl.jv'ex.LIST@cptIt,

* Array:

* Vector:

jv'ex.LIST.ORDERED

name::
* McsEngl.jv'ex.LIST.ORDERED@cptIt,

* TreeSet#ql:jv'ex.treeset#

jv'ex.List.awt

name::
* McsEngl.jv'ex.List.awt@cptIt,

List list = new List();
list.addItem("List");
list.addItem("a list item");
add(list);

There is a method in List called `getSelectedIndexes()'. This returns the list position of all current selections. You need to keep a separate array of your list elements, in the same order as they appear in the list itself. It is then a simple matter of returning those elements. Here is a snippet of code:
public Vector getSelectedItems() {  int[] selectedIndexes = list.getSelectedIndexes();  Vector selectedItems = new Vector(selectedIndexes.length);  if (selectedIndexes.length > 0) {   for (int i = 0; i < selectedIndexes.length; i++) {   selectedItems.addElement(listElements[selectedIndexes[i]]);   }   return selectedItems;  }  else {   System.out.println("Nothing selected");   return (Vector)null;  } }

Once you have returned the selected items, you can then reiterate through the `selectedIndexes' to deselect them all.
[1997may28]

jv'ex.Local'Port

name::
* McsEngl.jv'ex.Local'Port@cptIt,

hope the following lines will guide you..
Socket client = new Socket("lacalhost", 8001); System.out.println("Client socket: " + client);
you can get the local port by using subString().
local port number is printed after the localhost's IP address and its port(8001)
regards
[adv. java {1999-03-25}]

jv'ex.LOCALE

name::
* McsEngl.jv'ex.LOCALE@cptIt,

import java.util.Locale;

// A locale for Great Britain
Locale greatBritain = new Locale("en","GB");
// A locale for the French language
Locale french = new Locale("fr", "");

jv'ex.LOCALE.DEFAULT:
* In my system, I have not to use el_GR (115), because my program see ONLY this.
To show the greek information I use _nk (nikosKasselouris!!!)locale.
[nikos, 1997dec]

Yes, Properties are used.  Here's the code from java.util.Locale:
    public static synchronized Locale getDefault() {         if (defaultLocale == null) {             String language = System.getProperty("user.language", "EN");             String region = System.getProperty("user.region", "");
            defaultLocale = new Locale(language, region);         }         return defaultLocale;     }
Mitch Gart wrote: ] Each program runs with a default Locale.  Does anybody know how the ] default Locale is established, if the program doesn't make any calls ] to setLocale()?  Is the default Locale a Property?  TIA,
[1998feb06]

jv'ex.long

name::
* McsEngl.jv'ex.long@cptIt,

GENERAL-CONCEPT#ql:jv'long'type#.

// Hex and Oct also work with long.
long n1 = 200L; // long suffix
long n2 = 200l; // long suffix
long n3 = 200;
//! long l6(200); // not allowed

jv'ex.M

name::
* McsEngl.jv'ex.M@cptIt,

jv'ex.mail.sending

name::
* McsEngl.jv'ex.mail.sending@cptIt,

Steven, I don't have a code snippet to offer at the moment, but I remember doing this without too much pain using Sun's Javamail API. The demo directory in the Javamail 1.0 distribution has an application called msgmultisend which you might want to take a look at.
[1999jan20]

here is the sample code for connecting and sending mail in Java. It assumes you know the RFC and Java net progrMming. The sample code does not check return values from server. 200+ return value is "noerror".
Hope this help.
boolean connectToServer(String user, String server) {
boolean bRetVal = false; try { showOurStatus("Connecting to " + server); socketSmtpServer = new Socket(server, 25); dos = new DataOutputStream(socketSmtpServer.getOutputStream()); dis = new DataInputStream (socketSmtpServer.getInputStream()); String strBuf; String strMyName = user; strBuf = dis.readLine(); dos.writeBytes("HELO " + strMyName + "\n"); strBuf = dis.readLine(); bRetVal = true; } catch (UnknownHostException e) { socketSmtpServer = null; dos = null; dis = null; showOurStatus("Failed to connect to Server!"); bRetVal = false; } catch (IOException e) { socketSmtpServer = null; dos = null; dis = null; showOurStatus("Failed to create streams!"); bRetVal = false; } catch (Exception e) { socketSmtpServer = null; dos = null; dis = null; showOurStatus("Failed! " + e.getMessage()); bRetVal = false; }
return bRetVal;
}

void sendMail()
{ try { String user = user1; String server = getCodeBase().getHost(); boolean bConnect = connectToServer(user, server); if (bConnect) {
dos.writeBytes("RSET\n"); //reset SMTP server strBuf = dis.readLine();
dos.writeBytes("MAIL FROM:<" + user + "@" + server + ">\n");
dis.readLine();
dos.writeBytes("RCPT TO:<" + user2 + "@" + server2 + ">\n");
strBuf = dis.readLine();
dos.writeBytes ("DATA\n"); strBuf = dis.readLine();
//WRITE HEADER dos.writeBytes ("To: <" + user2 + "@" + server2 + ">\n"); dos.writeBytes ("Subject: Mail Subject\n"); String strBoundary = "SimpleBoundary"; dos.writeBytes("Mime-Version 1.0\n"); dos.writeBytes("--" + strBoundary + "\n"); dos.writeBytes("Content-Type: text/plain; charset=\"us-ascii\"\n\n");
//WRITE DATA for (int i = 0; i < data.length; i++) //dats is String [] dos.writeBytes(data[i]);
//CLOSE SESSION dos.writeBytes("\n.\n"); strBuf = dis.readLine();
dos.writeBytes("QUIT\n"); strBuf = dis.readLine();
dos.close(); dis.close(); socketSmtpServer.close(); } else { showOurStatus("Failed to connect to <" + server + ">, please try later."); }
}
catch (UnknownHostException e) { showOurStatus("Failed to connect to Server!"); } catch (IOException e) { showOurStatus("Failed to create streams!"); } finally { socketSmtpServer = null; dos = null; dis = null; } }
[] 1999jan20

Wrote a mail class sometime back, Tested, works fine with 1.02, not tried with 1.1.x Code for sending mail
import java.io.*; import java.util.*; import java.net.InetAddress; import sun.net.smtp.SmtpClient;
public class Mail {
public Mail(String from,String to,String subject,String message) { try { SmtpClient sendmail = new SmtpClient("<mail server>");   sendmail.from(from);   sendmail.to(to);   PrintStream ps = sendmail.startMessage();
// send headers.
    ps.println("From: "+from);     ps.println("To: "+to);     ps.println("Subject: "+subject);     ps.print("\r\n"); //header area delimiter     // now send data to it     ps.println(message);       ps.flush();     ps.close();     sendmail.closeServer(); } catch(Exception e) { System.out.println(e.getClass().getName()+" : "+e.getMessage()); e.printStackTrace(System.out); } } } from an applet, I usu launch this class via a servlet. It is simple and clean.
Regards, / harmeet
[1997jun06]

jv'ex.MAIN'METHOD

name::
* McsEngl.jv'ex.MAIN'METHOD@cptIt,

class Main {
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Usage: java Main <file>");
System.exit(-1);
}

jv'ex.MAKE'TOOL

name::
* McsEngl.jv'ex.MAKE'TOOL@cptIt,

From: Glen_Stampoultzis@ansett.com.au
Sent: Sunday, May 09, 1999 7:49 PM
To: advanced-java@xcf.berkeley.edu
Subject: Make tool for windows

Check out www.servertec.com.
They have a make as well as a pre-processor.

jv'ex.Map

name::
* McsEngl.jv'ex.Map@cptIt,
* McsEngl.jv'ex.HashMap@cptIt,
* McsEngl.jv'ex.TreeMap@cptIt,
* McsEngl.jv'OrderedMap@cptIt,

GENERIC#ql:jv'map#

The two general purpose Mapimplementations are HashMap and TreeMap. The situation for Map is exactly analogous to Set.
If you need SortedMap operations or in-order Collection-view iteration, go for TreeMap;
otherwise, go for HashMap.
[JS TUTORIAL {1999-03-12}]

_CREATION:
Map m = new HashMap();
Map m = new TreeMap();

jv'ex.Map.iterating'KEYS:
Here's an example illustrating the standard idiom for iterating over the keys in a Map:

for (Iterator i=m.keySet().iterator(); i.hasNext(); )
System.out.println(i.next());
[JS TUTORIAL {1999-03-12}]

jv'ex.Map.iterating'VALUES:
for (Iterator i=m.values().iterator(); i.hasNext(); )
System.out.println(i.next());

jv'ex.Map.iterating'KEY'VALUES:
The idiom for iterating over values is analogous. Here's the idiom for iterating over key-value pairs:

for (Iterator i=m.entrySet().iterator(); i.hasNext(); ) {
Map.Entry e = (Map.Entry) i.next();
System.out.println(e.getKey() + ": " + e.getValue()); }
[JS TUTORIAL {1999-03-12}]

jv'ex.Map.printing:
import java.util.*; import java.io.*;
public class MapArray { public static void main(String[] args)
{
Map m = new TreeMap();
m.put("key1", new String[] {"1nk","1lj","1kl"});
m.put("key2", new String[] {"2nk","2lj","2kl"});
for (Iterator i = m.entrySet().iterator(); i.hasNext(); )
{
Map.Entry e = (Map.Entry) i.next();
String[] a = (String[]) e.getValue();
System.out.println(e.getKey() +" " +a[0] +" " +a[1] +" " +a[2]);
} }
}
[nikos, {1999-03-21}]

STORAGE OF MORE THAN 2 DATA:
1. Set one data as Key.
2. Create a class that stores the rest of data.
3. Set in the map the new-class(object) as value.

jv'ex.MATH

name::
* McsEngl.jv'ex.MATH@cptIt,

POWER OF A NUMBER (jv'ex.power'of'number):
Math.pow(2,3)
===> 2*2*2=8.0 as double

jv'ex.Menu

name::
* McsEngl.jv'ex.Menu@cptIt,

public class Main extends Frame {
Menu m = new Menu("Menu");
Main() {
super("Menu Example");
MenuBar mb = new MenuBar();
// Add item to menu.
m.add("MenuItem");
// Add menu to menu bar
mb.add(m);
// Set menu bar on frame.
setMenuBar(mb);
resize(100, 100);
show();
}

jv'ex.menu.cascading

name::
* McsEngl.jv'ex.menu.cascading@cptIt,

the JavaWorld article:
http://www.javaworld.com/javaworld/javatips/jw-javatip12.html

jv'ex.MENU.SHORTCUT

name::
* McsEngl.jv'ex.MENU.SHORTCUT@cptIt,

 getActionCommand for menuitems works if its generated by mouse clicked on the menuItem. If you use shortcut key, it returns you null and not the menu caption as expected.
 If you want menu cation from shortcut key, you will have to specifically set the action command.
 Looking at the way keyEvent for menushortcuts is handled, it seems you could have got the caption instead of null, had the code been slightly changed. I am sure in 1.1.1 they must have taken care of it.
Amrit Raj

Jamie Sharples wrote: > > I am trying to use the new Java 1.1 feature, MenuShortcuts. Creating > menu items with shortcuts is easily done with the correct key > combination shown, however in the ActionListener method > actionPerformed(ActionEvent event) which is fired correctly by the key > combination, the getActionCommand() method returns null...not helpful!
1997may12

JDC TIPS:
THE ABILITY TO SPECIFY MENU SHORTCUTS is one of the features in JDK(tm) 1.1 -- where menu choices can be selected via the keyboard instead of with the mouse.  For example:
        import java.awt.*;         import java.awt.event.*;
        public class menu implements ActionListener {
                public void actionPerformed(ActionEvent e)                 {                         String lab = ((MenuItem)e.getSource()).getLabel();                         System.out.println("label = " + lab);                        if(lab.equals("Exit"))                        {                              System.exit(0);                        }                 }
                public static void main(String args[])                 {                         Frame f = new Frame("testing");
                        Menu m = new Menu("File");
                        menu acl = new menu();
                        MenuItem mi1 = new MenuItem("Open");                         mi1.addActionListener(acl);                         m.add(mi1);
                        MenuItem mi2 = new MenuItem("Save");                         mi2.addActionListener(acl);                         m.add(mi2);
                        MenuShortcut ms3 = new MenuShortcut(KeyEvent.VK_E);                         MenuItem mi3 = new MenuItem("Exit", ms3);                         mi3.addActionListener(acl);                         m.add(mi3);
                        MenuBar mb = new MenuBar();                         mb.add(m);
                        f.setMenuBar(mb);                         f.setSize(200, 200);                         f.setVisible(true);                 }
        }
The example sets up a frame, which is a top-level application window. The frame contains a menu bar, and the menu bar contains a single pull-down menu named "File." The menu offers choices for Open, Save, and Exit, with Exit having a keyboard shortcut set up for it that specifies the virtual key code "E."
How the shortcut gets invoked varies, depending on the platform in question. For example, with Windows you use Ctrl-E so that when a user types Ctrl-E within the window containing the menu bar, the Exit command is invoked.
One last thing: this example doesn't actually have a command structure set up for it, but instead invokes actionPerformed to demonstrate that the command processing structure is in place.
[1997oct25]

jv'ex.MenuBar

name::
* McsEngl.jv'ex.MenuBar@cptIt,


// Displays FILE, EDIT, HELP commands
import java.awt.*;
class Main extends Frame {
Main() {
super("MenuBar Example");
MenuBar mb = new MenuBar();
Menu m = new Menu("File");
m.add("New");
m.add("Open...");
mb.add(m);
// To keep it short, these menus don't have menu items.
mb.add(new Menu("Edit"));
mb.setHelpMenu(new Menu("Help"));
// Set the menu bar on the frame.
setMenuBar(mb);
resize(200, 100);
show();
}
public boolean action(Event evt, Object what) {
if ("New".equals(what)) {
// do new
return true;
} else if ("Open...".equals(what)) {
// do open
return true;
}
return false;
}
static public void main(String[] args) {
new Main();
}
}

jv'ex.MenuComponent

name::
* McsEngl.jv'ex.MenuComponent@cptIt,

// Shows a window with File/Edit Commands.
import java.awt.*;
class Main extends Frame {
Main() {
super("Menu Components");
MenuBar mb = new MenuBar();
Menu m = new Menu("File");
// Add items to File menu
m.add("New");
m.add("Open...");
// Add File and Edit menus to menubar
mb.add(m);
mb.add(new Menu("Edit"));
// Set the menu bar on the frame.
setMenuBar(mb);
resize(200, 100);
show();
}
static public void main(String[] args) {
new Main();
}
}

jv'ex.MenuItem

name::
* McsEngl.jv'ex.MenuItem@cptIt,

Main() {
super("MenuItem Example");
MenuBar mb = new MenuBar();
Menu m = new Menu("File");
MenuItem mi;
mi = new MenuItem("New");
mi.disable();
m.add(mi);
m.add("Open...");
m.add("-");
m.add("Exit");
mb.add(m);
// Set the menu bar on the frame.
setMenuBar(mb);
resize(100, 50);
show();
}

public boolean action(Event evt, Object what) {
if ("New".equals(what)) {
// do new
return true;
} else if ("Open...".equals(what)) {
// do open
return true;
}
return false;
}

jv'ex.MessageFormat

name::
* McsEngl.jv'ex.MessageFormat@cptIt,

Object[] arguments = {
new Integer(7),
new Date(System.currentTimeMillis()),
"a disturbance in the Force"
};
String result = MessageFormat.format(
"At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
arguments);
output:
At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
Typically, the message format will come from resources, and the arguments will be dynamically set at runtime.

jv'ex.METHOD

name::
* McsEngl.jv'ex.METHOD@cptIt,

class RightTriangle {
double base, height, area;

double getHypotenuse() {
double h;
h = java.lang.Math.sqrt(base * base + height * height);
return h;
} // end method

} // end class

jv'ex.method'call:
This expression is a method call:
System.in.read()
[JavaSoft Tutorial, 1996jul06]

jv'ex.Method'return'value:
class Point {
public double x;
public double y;

public void print() {
System.out.println("(" + x + "," + y + ")");
}

public String toString() {
return "(" + x + "," + y + ")";
}
}

Point origin = new Point();
origin.x = 0.0;
origin.y = 0.0;
String s = origin.toString();
System.out.println(s);

Better yet,
Point origin = new Point();
origin.x = 0.0;
origin.y = 0.0;
System.out.println(origin.toString());

Best yet, println() will implicitly call toString() as necessary to convert an object to a string.

Point origin = new Point();
origin.x = 0.0;
origin.y = 0.0;
System.out.println(origin);
[Harold course 1997]

jv'ex.modem

name::
* McsEngl.jv'ex.modem@cptIt,

> I am looking for a way to control a modem with Java. It's connected to the > serial port, so the javax.comm class is an option, but are there any higher > level protocol classes available which simplyfy the controlling of a modem?
DataOutputStream out = new DataOutputStream(new FileOutputStream("COM1:")); out.writeln("ATZ"); out.writeln("ATDT1800916753");
and if you want to read the result, use a RandomAccessFile so you can read back the answers. It shouldn't be too hard.
[adv-java {1999-03-31}]

jv'ex.MOUSE.BUTTONS

name::
* McsEngl.jv'ex.MOUSE.BUTTONS@cptIt,

Actually, instead of using the ALT_MASK, META_MASK etc.., you can use the BUTTONx_MASK flags.  These flags are defined in MouseEvent's parent, InputEvent.

Here's an example:
import java.awt.*; import java.awt.event.*;
public class MouseTest extends MouseAdapter {
private Frame f;
public MouseTest() {
f=new Frame("MouseTest"); f.setSize(200,200); f.setVisible(true); f.addMouseListener(this); }
public void mouseClicked(MouseEvent e){
int button=e.getModifiers();
switch(button) {
        case MouseEvent.BUTTON1_MASK:                 System.out.println("Left Button");                 break;
        case MouseEvent.BUTTON2_MASK:                 System.out.println("Middle Button");                 break;
        case MouseEvent.BUTTON3_MASK:                 System.out.println("Left Button"); } }
public static void main (String args[]){         new MouseTest(); }
} /* end MouseTest.java */
[1998jan10]

else if (mouseEvt.getButton()== MouseEvent.BUTTON3 ) {

jv'ex.MOUSE.COORDINATES

name::
* McsEngl.jv'ex.MOUSE.COORDINATES@cptIt,

Peter Lee wrote: > > How to find out the coordinations (x,y) of the current mouse pointer on > screen without clicking the mouse buttons?> > Thanks in advance.> > Pete

The mouseMove event keeps track of the pointer coordinates. You'll need an event handler to listen for the mouseMove event, then maybe set variables currentX and currentY like this:
int currentX; int currentY; public boolean handleEvent(Event evt) {     if (evt.id = Event.MOUSE_MOVE) {       currentX = evt.x;       currentY = evt.y;       return true;     }   return false; }
when the mouse pointer stops, it's most recent x and y coordinates will be stored.
[1998jan05]

jv'ex.MouseListener

name::
* McsEngl.jv'ex.MouseListener@cptIt,

final JList list = new JList(dataModel);
MouseListener mouseListener = new MouseAdapter()
{
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) { int index = list.locationToIndex(e.getPoint()); System.out.println("Double clicked on Item " + index); } }
};
list.addMouseListener(mouseListener);

Note that in this example the JList variable is final because it's referred to by the anonymous MouseListener class.
[jdk1.2]

jv'ex.MULTIPROCESS

name::
* McsEngl.jv'ex.MULTIPROCESS@cptIt,

Just a note to say that I've written a multiple-process system in java which I hope will be of use to some of you.  It's basically an API that tries to let you run all your applications in the same JVM easily with a few added features.  http://www.javagroup.org/echidna/
It's free, pure java, and includes source.
[Luce Gorrie 1997oct28]

jv'ex.N

name::
* McsEngl.jv'ex.N@cptIt,

jv'ex.NumberFormatException

name::
* McsEngl.jv'ex.NumberFormatException@cptIt,

class Main {
public static void main(String[] args) {
System.out.println("NumberFormatException example");
Integer inum = new Integer("36.5"); // format problem
}
}

jv'ex.Number.Unique

name::
* McsEngl.jv'ex.Number.Unique@cptIt,

Can anyone suggest a algorithm to generate a unique number. It should be a integer or long. thanks & regards,

Hi There are two simple algorithms that you can use 1) Through a sequence from datastore (Oracle allows you to create a sequence which in turn can be called by a java program thus obtaining a unique number every time)- the data type can be put as long or int. 2) Secondly, cut and paste the under mentioned code. This code is capable of generating 89999999 unique IDs per milliSecond.
public class GenerateID { private static int sequence =1000000; public static long getUniqueID() { long txnID=0; if (sequence>=9999999) { sequence =1000000; System.out.println("Re-initializing sequence"); } sequence=sequence+1; Integer IntSeq = new Integer(sequence); String stringSeq = IntSeq.toString(); Long longTime = new Long(System.currentTimeMillis()); String stringLongTime = longTime.toString(); String UID = stringSeq.concat(stringLongTime); Long LongUID = new Long(UID); txnID = LongUID.longValue(); return txnID; } }

jv'ex.O

name::
* McsEngl.jv'ex.O@cptIt,

jv'ex.OBJECT

name::
* McsEngl.jv'ex.OBJECT@cptIt,

jv'ex.OBJECT'CREATION:
Often, you will see a Java object created with a statement like this one:
Date today = new Date();
This statement creates a new Date object (Date is a class in the java.util package). This single statement actually performs three actions: declaration, instantiation, and initialization.
- Date today is a variable declaration which simply declares to the compiler that the name today will be used to refer to an object whose type is Date,
- the new operator instantiates the Date class (thereby creating a new Data object), and
- Date() initializes the object.
[JavaSoft Tutorial, 1996jul06]

jv'ex.OBJECT'CREATION'FROM'STRING:
String voiceClassName = "com.sun.speech.freetts.en.us.CMUDiphoneVoice";
Class voiceClass = Class.forName(voiceClassName);
Voice helloVoice = (Voice) voiceClass.newInstance();

it creates the Voice-object "helloVoice" from the name of this class com.sun...

jv'ex.object.all'references

name::
* McsEngl.jv'ex.object.all'references@cptIt,

OptimizeIt can show you where the instance was allocated, which may help a lot.
Michael Kvintus      Applied Digital Access, Inc.     kvintus@ada.com
[{1997-11-02}]

jv'ex.Object's'class

name::
* McsEngl.jv'ex.Object's'class@cptIt,

import java.awt.Button; class ObjectClass{  public static void main(String args[]){    Button bt = new Button("OK");    System.out.println("The class of Object bt is " +bt.getClass().getName());  } }

jv'ex.equals

name::
* McsEngl.jv'ex.equals@cptIt,

itemKeys[i].equals("-")

jv'ex.OPERATOR.equivalent

name::
* McsEngl.jv'ex.OPERATOR.equivalent@cptIt,
* McsEngl.jv'ex.EQUIVALENT'OPERATOR@cptIt,

The relational operators == and != also work with all objects, but their meaning often confuses the first-time Java programmer.

Here’s an example:
//: Equivalence.java
public class Equivalence {
public static void main(String args[]) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2); >>FALSE
System.out.println(n1 != n2); >>TRUE
}
} ///:~
The expression System.out.println(n1 == n2) will print out the result of the boolean comparison within. Surely the output should be true and then false, since both Integer objects are the same. But while the contents of the objects are the same, the handles are not the same and the operators == and != compare object handles. So the output is actually false and then true. Naturally, this surprises people at first.

What if you want to compare the actual contents of an object for equivalence? You must use the special method equals( ) that exists for all objects (not primitives, which work fine with == and !=).

the default behavior of equals( ) is to compare handles, so unless you override equals( ) in your new class, you won’t get the desired behavior.
[B. ECKEL, Thinking In Java, 1997aug18, 68]

jv'ex.OPERATOR.increment

name::
* McsEngl.jv'ex.OPERATOR.increment@cptIt,

GENERAL-CONCEPT#ql:jv'increment'operator#

// Demonstrates the ++ and -- operators
public class AutoInc {

public static void main(String[] args) {
int i = 1;
prt("i : " + i); // prints: i:1
prt("++i : " + ++i); // Pre-increment, prints: ++i:2
prt("i++ : " + i++); // Post-increment, prints: i++:2
prt("i : " + i); // prints: i:3
prt("--i : " + --i); // Pre-decrement, prints: --i:2
prt("i-- : " + i--); // Post-decrement, prints: i--:2
prt("i : " + i); // prints: i:1
}

static void prt(String s) { System.out.println(s); } }

The output for this program is:
i : 1
++i : 2
i++ : 2
i : 3
--i : 2
i-- : 2
i : 1
[B. ECKEL, Thinking In Java, 1998jan]

for (int i=0; i<50; i++){
 ...
}

jv'ex.OPERATOR.TERNARY

name::
* McsEngl.jv'ex.OPERATOR.TERNARY@cptIt,

The syntax should be like this
       return_value = (boolean expr) ? value1 : value2
if expr is true it will evaluate value1 and return the value otherwise it will evaluate value2 and return the value
for example :
       if (a>b)
            c =  a + 0;
       else
            c =  a + 1;
is equivalent to :
        c = (a>b) ? (a+0) : (a+1);

jv'ex.ORDER

name::
* McsEngl.jv'ex.ORDER@cptIt,

ORDERED-LIST:
To have a list order, put the items on a TreeSet first and then on a list.

ORDERED-PAIR:
* TreeMap.

jv'ex.P

name::
* McsEngl.jv'ex.P@cptIt,

jv'ex.package

name::
* McsEngl.jv'ex.package@cptIt,

GENERAL-CONCEPT#ql:jv'package#.

package graphics;
interface Draggable { . . .}
class Circle { . . .}
class Rectangle { . . .}

jv'ex.PAIR

name::
* McsEngl.jv'ex.PAIR@cptIt,

* Hashtable:

jv'ex.PAIR.ORDERED

name::
* McsEngl.jv'ex.PAIR.ORDERED@cptIt,

* TreeMap:

jv'ex.Panel

name::
* McsEngl.jv'ex.Panel@cptIt,
* McsEngl.jv'ex.jpanel@cptIt,

LAYOUT:
Panel p = new Panel();
p.setLayout(new BorderLayout());

COMPONETS:
p.add(paneNorth, BorderLayout.NORTH);
p.add(new Button("Okay"), "South");

BORDER:
p.setBorder(BorderFactory.createEtchedBorder());
p.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 20));//up,left,down,wright.

jv'ex.program'execution

name::
* McsEngl.jv'ex.program'execution@cptIt,

> Is it possible to execute an external programme from a Java application?

Do something like this: Runtime.getRuntime().exec("program name");
[1997jun08]

jv'ex.PropertyChangeListener

name::
* McsEngl.jv'ex.PropertyChangeListener@cptIt,

All Swing components implement the property pattern, meaning that there is an addPropertyChangeListener() method on all subclasses of JComponent.

PropertyChangeEvent e:
* e.getPropertyName().equals(Action.NAME)    //on JButton
* e.getPropertyName().equals(Action.SMALL_ICON)    //on JButton
* e.getPropertyName().equals("enabled")      //on JButton

* e.getPropertyName().equals( "page" )      //on JEditorPane (when finishing loading)

editor.addPropertyChangeListener("grid", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent propertyChangeEvent) {
viewer.repaint();
grid_size.setText(realeditor.getGridwidth() + " x "
      + realeditor.getGridheight());
}
});

firePropertyChange("grid",false,true);

jv'ex.pdf

name::
* McsEngl.jv'ex.pdf@cptIt,

You might want to try this site, should be definitely helpful
http://www.retep.org.uk/pdf/
Winston.
[1999jan25]

jv'ex.Polygon

name::
* McsEngl.jv'ex.Polygon@cptIt,

public void paint(Graphics g) {
int w = size().width;
int h = size().height;
if (polygon == null) {
polygon = new Polygon();
for (int i=0; i<25; i++) {
// Points need to be one pixel from the
// right and bottom edges otherwise the polygon
// will extend outside the canvas bounds.
polygon.addPoint(random(w-1), random(h-1));
}
}
g.fillPolygon(polygon);
}

jv'ex.popupmenu

name::
* McsEngl.jv'ex.popupmenu@cptIt,

The other day somebody said he couldn't get popup menus to work.Here's an example where a popup is added to a label, a panel, and a button (why not?) Hope that helps.
- Mitch - mg@inmet.com


import java.awt.*; import java.awt.event.*; import java.lang.*; import java.util.Hashtable;
public class action4 extends Frame implements ActionListener, MouseListener {
PopupMenu pm = new PopupMenu();
public static void main (String argv[]) { new action4(); }
public action4() { MenuItem item = new MenuItem("file-1"); item.addActionListener(this); Menu m = new Menu("file"); m.add(item); item = new MenuItem("file-2"); m.add(item); MenuBar mb = new MenuBar(); mb.add(m);
setMenuBar(mb); setSize(100, 100); setLayout(new BorderLayout());
Label l = new Label("label"); addPopup(l, "label"); add(l, "North");
Panel p = new Panel(); addPopup(p, "Panel"); add(p, "Center");
Button b = new Button("button"); addPopup(b, "button"); add(b, "South");
show(); }
public void actionPerformed(ActionEvent e) { System.out.println("actionPerformed, event=" + e + ", mod=" + getMods(e)); System.out.println(" command=" + e.getActionCommand()); System.out.println(" param=" + e.paramString()); System.out.println(" source=" + e.getSource()); }
String getMods(ActionEvent e) { return getMods(e.getModifiers()); }
String getMods(MouseEvent e) { return getMods(e.getModifiers()); }
String getMods(int mods) { String modstr = ""; if ((mods & ActionEvent.SHIFT_MASK) == ActionEvent.SHIFT_MASK) modstr += (" SHIFT"); if ((mods & ActionEvent.ALT_MASK) == ActionEvent.ALT_MASK) modstr += (" ALT"); if ((mods & ActionEvent.CTRL_MASK) == ActionEvent.CTRL_MASK) modstr += (" CTRL"); if ((mods & ActionEvent.META_MASK) == ActionEvent.META_MASK) modstr += (" META"); return modstr; }
public void mouseClicked (MouseEvent e) { mouseAction("mouseClicked", e); }
public void mouseEntered (MouseEvent e) { }
public void mouseExited (MouseEvent e) { }
public void mousePressed (MouseEvent e) { mouseAction("mousePressed", e); }
public void mouseReleased (MouseEvent e) { mouseAction("mouseReleased", e); }
void mouseAction (String which, MouseEvent e) { Component c = e.getComponent(); System.out.println(which + "e=" + e + ", mods=" + getMods(e) + ", component=" + c); if (e.isPopupTrigger()) { System.out.println("isPopup"); PopupMenu pm = getHash(c); pm.show(c, c.getSize().width/2, c.getSize().height/2); } }

void addPopup(Component c, String name) { PopupMenu pm = new PopupMenu(); MenuItem mi = new MenuItem(name + "-1"); mi.addActionListener(this); pm.add(mi);
mi = new MenuItem(name + "-2"); pm.add(mi);
setHash(c, pm); c.add(pm); c.addMouseListener(this); }

Hashtable popupTable = new Hashtable();
void setHash(Component c, PopupMenu p) { popupTable.put(c, p); }
PopupMenu getHash(Component c) { return (PopupMenu)(popupTable.get(c)); }
}
[1997may23]

jv'ex.Properties

name::
* McsEngl.jv'ex.Properties@cptIt,

//prints the keys of system-properties
import java.util.Properties;
import java.util.Enumeration;
class pr {
 public static void main (String[] args){
   Properties props = System.getProperties();
   for (Enumeration enum = props.propertyNames(); enum.hasMoreElements();) {
     String key = (String)enum.nextElement();
     System.out.println(key + " = " + (String)(props.get(key)));
   }
 }
}

add properties.

props.put(name,value)

jv'ex.PRINTING

name::
* McsEngl.jv'ex.PRINTING@cptIt,

FOR PRINTING IN JAVA, TRY THIS. JDK(tm) 1.1 provides a standard way to print and improves on JDK 1.0 printing.
You print via the Abstract Window Toolkit (AWT). A simple example for printing a filled-in oval looks like this:
import java.awt.*;
public class print {
public static void main(String args[]) { Frame f = new Frame("test"); f.pack();
PrintJob pj = f.getToolkit().getPrintJob(f, "print1", null);
if (pj != null) { Graphics g = pj.getGraphics();
g.fillOval(5, 5, 150, 100);
g.dispose();
pj.end(); }
System.exit(0); }
}

This example is a standalone Java program that creates an AWT frame, a top-level GUI component for running an application. The program next retrieves the toolkit for the frame. The toolkit for the AWT is the interface between the abstract window layer and an actual windowing implementation such as Windows 95 or X Windows.
Once you create the toolkit, you can initiate a print job via getPrintJob, which causes a window to pop up on the screen asking the user for information about which printer is being used, the number of copies to print, and so on. This process is similar to printing in conventional Windows applications.
Given a PrintJob object, you can obtain a graphics context and draw to it.Such drawing, using normal graphics primitives such as fillOval, goes to the printer instead of the screen. Calling dispose on the graphics context object sends the page to the printer, and the print job is terminated by calling end.
If you're using your own custom AWT components, you can use the paint methods you define for printing without change--by passing them the graphics context returned by getGraphics. But if you want different behavior when you print, specialized methods can also be defined for components as necessary.

-- Printing from applets
The example given above is a standalone Java program. But what about printing from applets? The Java security system contains a feature that may lock out an applet from initiating its own print job, requiring that the initiation be done via a Web browser or applet viewer. The security area is in a state of flux at present, and your experiences with this process may be different.
Finally, another less portable approach to printing text is to open the special device file that represents the printer, and do conventional file I/O to that file. For example, "lpt1" can be used for this purpose with Windows systems, and "/dev/lp" can be used with UNIX.
[{1997-09-25} JDC]

How are you printing? If you're using Java's printing support, I cannot see how this error would occur -- you're painting on a Graphics object, so the printer's fonts are irrelevant. If you're not using Java's printing support, then you'll need to look whatever you are using, since that's your problem.-- Chris Bergstresser chris@subtlety.com

At 01:30 PM 1/9/98 -0600, Rob Hannah wrote: > > I've followed the guidelines for setting up the appropriate > font.properties file (in this case, .zh_TW) and have setup NT w/ > international Unicode fonts. I am able to display Chinese in my > application, but am unable to print -- the printer does not have the > appropriate fonts.> > Can someone redirect me to a more appropriate place to find out how to > print Unicode?
[1998jan09]

StyleReport works well: http://www.inetsoftcorp.com/
Rex Issac wrote: > > I am looking for any report writers to be packaged with an existing > application, to provide printing capability.
[1999may01]

jv'ex.ProgressBar

name::
* McsEngl.jv'ex.ProgressBar@cptIt,
* McsEngl.jv'ex.JJProgressBar@cptIt,

SHOWS-IS-WORKING:
progressBar.setIndeterminate(true);

jv'ex.PROTOCOL'HANDLER

name::
* McsEngl.jv'ex.PROTOCOL'HANDLER@cptIt,

Brian Maso wrote an excellent article on custom protocol handlres: http://developer.java.sun.com/developer/onlineTraining/protocolhandlers/
He gives there as an example a protocol handler that accesses a local Windows registry, using native code of course as Ted mentioned.

jv'ex.Q

name::
* McsEngl.jv'ex.Q@cptIt,

jv'ex.R

name::
* McsEngl.jv'ex.R@cptIt,

jv'ex.RANDOM

name::
* McsEngl.jv'ex.RANDOM@cptIt,

For example, to simulate a six-sided die; that is to generate a random integer between 1 and 6, you might write
Random r = new Random();
int die = r.nextInt();
die = Math.abs(die);
die = die % 6; //the remainder over 6
die += 1;
System.out.println(die);

jv'ex.READ.URL

name::
* McsEngl.jv'ex.READ.URL@cptIt,

_DEFINITION:
Read fron a url

String xmlFile
URL docURL= createURL(xmlFile);

URL createURL(String fileName)
{ URL url = null;
try { url = new URL(fileName); }

catch (MalformedURLException ex)
{ File f = new File(fileName);
try { String path = f.getAbsolutePath();
// This is a bunch of weird code that is required to make a valid URL on the Windows platform, due to inconsistencies in what getAbsolutePath returns.
String fs = System.getProperty("file.separator");
if (fs.length() == 1)
{ char sep = fs.charAt(0);
if (sep != '/') path = path.replace(sep, '/');
if (path.charAt(0) != '/') path = '/' + path;
} path = "file://" + path; url = new URL(path); }
catch (MalformedURLException e)
{ System.out.println("Cannot create url for: " + fileName); System.exit(0); }
} return url; }

externalEntity = docURL.openConnection();
externalEntity.connect();
InputSteam is = externalEntity.getInputStream();

jv'ex.Rectangle

name::
* McsEngl.jv'ex.Rectangle@cptIt,

new Rectangle(rand(50), rand(50), 50, 50);

jv'ex.RECURSION

name::
* McsEngl.jv'ex.RECURSION@cptIt,

Find the Generic of a concept and the generics of its generics:
filesToSearch.add(scpt_s_FormalID);
while(!filesToSearch.isEmpty())
{
 String currentFileName=null;
 try {
   currentFileName = filesToSearch.firstElement();
 }
 catch (Exception e)  {
   JOptionPane.showMessageDialog(null, "Problem " + currentFileName);
   continue;        // Try next file
 }
 extractGen(currentFileName);
 Vector<String> gens = vectorGenID;
 for (int i=0; i<gens.size(); i++)  {
   filesToSearch.add(gens.get(i));
   vectorAllGenID.add(gens.get(i));
 }
 filesToSearch.remove(0);
}

FINDS THE FILES OF A DIRECTORY, RECURSIVELY:
 public static Collection<File> listFiles(
       File directory,
       FilenameFilter filter,
       boolean recurse)
 {
   // List of files / directories
   Vector<File> files = new Vector<File>();

   // Get files / directories in the directory
   File[] entries = directory.listFiles();

   // Go over entries
   for (File entry : entries)
   {
     // If there is no filter or the filter accepts the
     // file / directory, add it to the list
     if (filter == null || filter.accept(directory, entry.getName()))
     {
       files.add(entry.getAbsoluteFile());
     }

     // If the file is a directory and the recurse flag
     // is set, recurse into the directory
     if (recurse && entry.isDirectory())
     {
       files.addAll(listFiles(entry, filter, recurse));
     }
   }

   // Return collection of files
   return files;
 }

jv'ex.REFLECTION

name::
* McsEngl.jv'ex.REFLECTION@cptIt,

REFLECTION.  An important Java language feature is reflection, a feature also known as "introspection."  Reflection is the ability to query a Java class about its properties, and to operate on methods and fields by name for a given object instance.
You can use reflection to set object fields or invoke particular object methods by name.  For example, given an object instance "obj," and a method name "f5" specified at program execution time, the method can be invoked on the instance.
To see how this works, look at this simple example:
        import java.lang.reflect.*;
        public class DumpMethods {                 public static void main(String args[])                 {                         try {                                 Class c = Class.forName(args[0]);                                 Method m[] = c.getDeclaredMethods();                                 for (int i = 0; i < m.length; i++)                                         System.out.println(m[i].toString());                         }                         catch (Throwable e) {                                 System.err.println(e);                         }                 }         }
For an invocation of:
        java DumpMethods java.util.Stack
the output is:
        public java.lang.Object java.util.Stack.push(java.lang.Object)         public synchronized java.lang.Object java.util.Stack.pop()         public synchronized java.lang.Object java.util.Stack.peek()         public boolean java.util.Stack.empty()         public synchronized int java.util.Stack.search(java.lang.Object)
That is, the method names of class java.util.Stack are listed, along with their fully qualified return types and parameter types.
This program loads the specified class using class.forName, and then calls getDeclaredMethods to retrieve the list of methods defined in the class. The class java.lang.reflect.Method represents a single class method.
The reflection feature may not seem like much at first, but it's impossible to do in other languages such as C, C++, or Fortran.  The names and properties of functions in these other languages are gone by the time the program is executed.  In technical terms, these other languages have "early binding," whereas the Java language has "late binding."
[jdc 1997dec19]

jv'ex.REGULAR'EXPRESION

name::
* McsEngl.jv'ex.REGULAR'EXPRESION@cptIt,
* McsEngl.jv'ex.regex@cptIt,
* McsEngl.jv'ex.MATCHES@cptIt,
* McsEngl.jv'ex.PATTERN@cptIt,

PACKAGE:

since 1.4:

MATCH whole string:
import java.util.regex.*;
boolean b = Pattern.matches("a*b", "aaaaab");

equevalent to:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();

MATCH part of a string:
Pattern p = Pattern.compile(exp.toLowerCase()+"\\b");
Matcher m = p.matcher(line);
if (m.find()){ }

Pattern.matches("[012][0-9]:[0-5][0-9]", "11:12"))//true
Pattern.matches("\\d+,\\d+", "1234,55"));//true

public final class SplitTest {
private static String REGEX = ":";
private static String INPUT = "one:two:three:four:five";
public static void main(String[] argv) {
Pattern p = Pattern.compile(REGEX);
String[] items = p.split(INPUT);
for(int i=0;i<items.length;i++) {
System.out.println(items[i]);
}
}
}

REMOVES_MARKUP:
cntnt=cntnt.replaceAll("</[^>]+>", "");
cntnt=cntnt.replaceAll("<[^>]+>", "");

REPLACE-DEMO:
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class ReplaceDemo {

private static String REGEX = "dog";
private static String INPUT = "The dog says meow. All dogs say meow.";
private static String REPLACE = "cat";

public static void main(String[] args) {
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(INPUT); // get a matcher object
INPUT = m.replaceAll(REPLACE);
System.out.println(INPUT);
}
}

OUTPUT: The cat says meow. All cats say meow.

REPLACE:
REGEX = "dog([0-9]*)";
REPLACE = "cat$1";

Summary of regular-expression constructs:
Construct  Matches
Characters:
x      The character x
\\      The backslash character
\0n      The character with octal value 0n (0 <= n <= 7)
\0nn    The character with octal value 0nn (0 <= n <= 7)
\0mnn    The character with octal value 0mnn (0 <= m <= 3, 0 <= n <= 7)
\xhh    The character with hexadecimal value 0xhh
\uhhhh    The character with hexadecimal value 0xhhhh
\t      The tab character ('\u0009')
\n      The newline (line feed) character ('\u000A')
\r      The carriage-return character ('\u000D')
\f      The form-feed character ('\u000C')
\a      The alert (bell) character ('\u0007')
\e      The escape character ('\u001B')
\cx      The control character corresponding to x
Character classes:
[abc]    a, b, or c (simple class)
[^abc]    Any character except a, b, or c (negation)
[a-zA-Z]    a through z or A through Z, inclusive (range)
[a-d[m-p]]    a through d, or m through p: [a-dm-p] (union)
[a-z&&[def]]  d, e, or f (intersection)
[a-z&&[^bc]]  a through z, except for b and c: [ad-z] (subtraction)
[a-z&&[^m-p]]  a through z, and not m through p: [a-lq-z](subtraction)
Predefined character classes:
.      Any character (may or may not match line terminators)
\d      A digit: [0-9]
\D      A non-digit: [^0-9]
\s      A whitespace character: [ \t\n\x0B\f\r]
\S      A non-whitespace character: [^\s]
\w      A word character: [a-zA-Z_0-9] any lowercase|uppercase letter, the underscore, or any digit
\W      A non-word character: [^\w]
POSIX character classes (US-ASCII only):
\p{Lower}    A lower-case alphabetic character: [a-z]
\p{Upper}    An upper-case alphabetic character:[A-Z]
\p{ASCII}    All ASCII:[\x00-\x7F]
\p{Alpha}    An alphabetic character:[\p{Lower}\p{Upper}]
\p{Digit}    A decimal digit: [0-9]
\p{Alnum}    An alphanumeric character:[\p{Alpha}\p{Digit}]
\p{Punct}    Punctuation: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph}    A visible character: [\p{Alnum}\p{Punct}]
\p{Print}    A printable character: [\p{Graph}]
\p{Blank}    A space or a tab: [ \t]
\p{Cntrl}    A control character: [\x00-\x1F\x7F]
\p{XDigit}    A hexadecimal digit: [0-9a-fA-F]
\p{Space}    A whitespace character: [ \t\n\x0B\f\r]
Classes for Unicode blocks and categories:
\p{InGreek}    A character in the Greek block (simple block)
\p{Lu}    An uppercase letter (simple category)
\p{Sc}    A currency symbol
\P{InGreek}  Any character except one in the Greek block (negation) [\p{L}&&[^\p{Lu}]] Any letter except an uppercase letter (subtraction)
Boundary matchers:
^      The beginning of a line
$      The end of a line
\b      A word boundary
\B      A non-word boundary
\A      The beginning of the input
\G      The end of the previous match
\Z      The end of the input but for the final terminator, if any
\z      The end of the input
Greedy quantifiers:
X?      X, once or not at all
X*      X, zero or more times
X+      X, one or more times
X{n}    X, exactly n times
X(n,}    X, at least n times
X{n,m}    X, at least n but not more than m times
Reluctant quantifiers:
X??    X, once or not at all
X*?    X, zero or more times
X+?    X, one or more times
X{n}?    X, exactly n times
X(n,}?    X, at least n times
X{n,m}?    X, at least n but not more than m times
Possessive quantifiers:
X?+ X, once or not at all X*+ X, zero or more times X++ X, one or more times X{n}+ X, exactly n times X(n,}+ X, at least n times X{n,m}+ X, at least n but not more than m times
Logical operators:
XY      X followed by Y
X|Y      Either X or Y
(X)      X, as a capturing group
Back references:
\n Whatever the nth capturing group matched
Quotation:
\ Nothing, but quotes the following character \Q Nothing, but quotes all characters until \E \E Nothing, but ends quoting started by \Q
Special constructs (non-capturing):
(?:X) X, as a non-capturing group (?idmsux-idmsux) Nothing, but turns match flags on - off (?idmsux-idmsux:X) X, as a non-capturing group with the given flags on - off (?=X) X, via zero-width positive lookahead (?!X) X, via zero-width negative lookahead (?<=X) X, via zero-width positive lookbehind (?<!X) X, via zero-width negative lookbehind (?>X) X, as an independent, non-capturing group

Gnu has ported their regexp package to Java.  It was pretty straightforward to convert from Oroinc's Perl5Util interface to Gnu's.
http://www.fsf.org/software/java/java.html
[]1998nov

Many thanks to everyone who made suggestions.
http://meurrens.ml.org/ip-Links/java/regex/ takes advantage of too many annoying web page tricks, but it does offer a comprehensive list of java regexp packages and is more up-to-date than http://home.worldcom.ch/~jmlugrin/RegExSummary.html (last updated 5/97), which I had been working from.
The gnu package at http://www.cacas.org/~wes/java/ is small, lean, and I got it to work, so I'll probably continue with that.
I originally mentioned that I couldn't get the oroinc one to work.According to the top of http://www.oroinc.com/downloads, their main distribution doesn't work with Java 1.2. The same page provides a link to a version that does. Several other packages out there build on this one.
The evaluation copy of http://javaregex.com/ outputs a message about being an evaluation copy, and in my "lazy evaluation" mode, I was just redirecting my output to a file in which I didn't need that message. If I didn't see anything else I liked, my next planned step was to create a proper output stream for my program's output, at which point I wouldn't have this problem anymore. $10 certainly seems reasonable.
Bob DuCharme www.snee.com/bob <bob@ snee.com> see www.snee.com/bob/xmlann for "XML: The Annotated Specification" from Prentice Hall.
[xmldev {1999-04-06}]

The GNU site (http://www.gnu.org/software/java/java-software.html) lists a free Java regex library called "gnu.regexp", which is available at http://www.cacas.org/~wes/java/.
If you need a commercial product, then check out the "pat" package at http://javaregex.com/.It enables a Java application to compile and use perl5 regular expressions.It's only $10, and there is no per copy royalty fee if you are just distributing with your application or applet.
You can download an eval copy for free.The documentation is good. I didn't find any bugs when I was evaluating it.
A few months ago, I too was searching for a Java regex library for my XML app.The "pat" package was not fast enough for my needs. I ended up changing my design, so that I would not need a regex library.
[adv-java {1999-04-06}]

jv'ex.replace

name::
* McsEngl.jv'ex.replace@cptIt,

String normalName= cptName.replace('\'', ' ');

jv'ex.ResourceBundle

name::
* McsEngl.jv'ex.ResourceBundle@cptIt,

jv'ex.getString:
* to display correctly NonAscii characters, WRITE them in unicode-form: \uDDDD
[HokoYono, 2008-04-20]

MyResourceBundle class MUST be public to work.
[Nikos, 1997dec12]

The LabelsBundle file is found in bundles directory:
static ResourceBundle labels = ResourceBundle.getBundle("bundles.LabelsBundle", locale);
[Nikos, 1997dec]

IF a string in a resource DOESN'T match this string in the program,
an exception at runtime is issued.
[Nikos, 1997dec13]

There is an example in the Java Developer Connection
http://developer.javasoft.com/developer/techDocs/SearchData/qa/Sample_code_for_jdk_1.1_localisation.html
seems to work for me, contains code
Locale japan= new Locale("ja", "JP"); ResourceBundle bun=ResourceBundle.getBundle("mybundle", japan);

>I am having a problem loading a property resource bundle when I use my >own class loader.  <...>

Have you implemented java.lang.ClassLoader.getResourceAsStream(String)?That's how property resource bundles get loaded.
[1997oct]

jv'ex.ResourceBundle.retrive'object

name::
* McsEngl.jv'ex.ResourceBundle.retrive'object@cptIt,

You can return arbitrary objects, not just strings, since it is often easier (and sometimes necessary, such as for graphics that need to be localized). For example:
Old
myCheckbox = new Checkbox("Clean ink cartridge before printing document");
New
myCheckbox = (Checkbox) MyResources.rb.getObject("CleanCartridge");
// insert localized {key, value} pairs here
{"CleanCartridge", new Checkbox("Clean ink cartridge before printing document")}, ...

jv'ex.RETURN

name::
* McsEngl.jv'ex.RETURN@cptIt,

1) 'returns' an entity:

static int test2(int testval) {
if(testval > target)
 return -1;
if(testval < target)
 return +1;
return 0; // match
}
[B. Eckel, TIJ, 1998jan]

...
Object pop() {
if (topelement == STACK_EMPTY)
return null;
else {
return stackelements[topelement--];
}
}
[Java Tutorial, 1996dec24]

2) 'returns' nothing. Just stops the process:

if (boolean)
{
 return;
}
else
{
 ...
}

jv'ex.Runnable

name::
* McsEngl.jv'ex.Runnable@cptIt,

   SwingUtilities.invokeLater(new Runnable()
   {
     public void run()
     {
       queuedTOCReload = false;
       toc.load();
     }
   });

jv'ex.Runtime

name::
* McsEngl.jv'ex.Runtime@cptIt,

jv'ex.exec,

Process p = Runtime.getRuntime().exec("c:/program files/mozilla firefox/firefox.exe file:///c:/java/docs/150/api/java/awt/AWTEventMulticaster.html");

Runtime.getRuntime().exec("\.......\word.exe foo.doc");

We can do dos interanl-command throw bach files:
Runtime rt = Runtime.getRuntime();
rt.exec("ren.bat");
[nikos, {1999-03-01}]

jv'ex.S

name::
* McsEngl.jv'ex.S@cptIt,

jv'ex.ScreenSize

name::
* McsEngl.jv'ex.ScreenSize@cptIt,

java.awt.Toolkit.getScreenResolution() java.awt.Toolkit.getScreenSize()

Try Toolkit.getScreenSize().
 J
Haresh(Java) wrote: > > How do i get size of my desktop/screen in Java? ( Windows95)
-- John Zukowski - http://java.miningco.com - jaz@ultranet.com

To get screen size:
int maxX = Toolkit.getDefaultToolkit().getScreenSize().width;
int maxY = Toolkit.getDefaultToolkit().getScreenSize().height;
Jeff Zhuk

jv'ex.Scrollbar

name::
* McsEngl.jv'ex.Scrollbar@cptIt,

// Creates a scrollbar and prints the events
import java.awt.*;

public class Main extends Frame {
Scrollbar sb = new Scrollbar(Scrollbar.HORIZONTAL, 50, 50, 0, 100);

Main() {
super("Scrollbar Example");
add("South", sb);
pack();
show();
}

public boolean handleEvent(Event evt) {
if (evt.target == sb) {
System.out.println(evt);
return true;
}
return false;
}

static public void main(String[] args) {
new Main();
}
}

jv'ex.ScrollPane

name::
* McsEngl.jv'ex.ScrollPane@cptIt,

JScrollPane(Component view, int vsbPolicy, 20asneeded, 21never, 22always
int hsbPolicy 30asneeded, 31never, 32always)

USING SCROLLPANE TO SCROLL GUI OBJECTS.  ScrollPane is a JDK 1.1 class that supports scrolling.  Before JDK 1.1 was released you had to manage scroll bars in terms of capturing and managing scrolling by yourself.  ScrollPane handles these tasks automatically for some common usages.
An example of using ScrollPane looks like this:
import java.awt.*;
class Box extends Component
{
public Dimension getPreferredSize() {return new Dimension(300, 300);}
public void paint(Graphics gr) {gr.setColor(Color.blue); gr.drawLine(5, 5, 295, 5); gr.drawLine(295, 5, 295, 295);                         gr.drawLine(295, 295, 5, 295);  gr.drawLine(5, 295, 5, 5);}
}

public class scroll
{
public static void main(String args[])
{ Frame fr = new Frame("ScrollPane test");
ScrollPane pane = new ScrollPane();
pane.setSize(200, 200);
pane.add(new Box());
fr.add(pane);
fr.pack(); fr.setVisible(true); Adjustable vadj = pane.getVAdjustable(); Adjustable hadj = pane.getHAdjustable(); vadj.setUnitIncrement(5); hadj.setUnitIncrement(5); }
}

In the example is a custom component named Box of size 300 x 300.  The component contains a blue outlined box drawn within it.  An instance of this component is added to a ScrollPane of size 200 x 200, which, in turn, is added to the top-level frame.  The ScrollPane object therefore is smaller than the Box and displays only a portion of the box at one time.ScrollPane supplies scroll bars automatically.
In this example, the vertical and horizontal increments for the scroll bar are also set so that each click on the scroll bar scrolls by 5 units instead of 1, which is the default.

EXAMPLE:
//from swing0.6.1 tree
JScrollPane sp2 = new JScrollPane();
sp2.getViewport().add(infoTArea);
Panel.add("Center", sp2);

jv'ex.search

name::
* McsEngl.jv'ex.search@cptIt,

SEARCH_TEXT:
niSearchPos =
 (bCaseSenstive ?
 sText.indexOf(sFindTxt, niOffset) :
 sText.toLowerCase().indexOf(sFindTxt.toLowerCase(), niOffset)
 );
if(niSearchPos > -1) {
 cJTxToSearch.select(niSearchPos, niSearchPos + sFindTxt.length());
}

SEARCH_REGEX:
// Compile a regular expression
String patternStr = "b";
Pattern pattern = Pattern.compile(patternStr);

// Check for the existence of the pattern
CharSequence inputStr = "a b c b";
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.find(); // true

// Retrieve matching string
String match = matcher.group(); // b

// Retrieve indices of matching string
int start = matcher.start(); // 2
int end = matcher.end(); // 3
// the end is index of the last matching character + 1

// Find the next occurrence
matchFound = matcher.find(); // true

Scott Ladd's book Java Algorithms (McGraw Hill) has some interesting text searching algorithms that you may want to look at. I am very familiar with the book ( I did some of the technical editing ) so I can give it a strong recommendation.
You can get it through Amazon, Barnes & Noble, or my web site (see below).
-- Michael S. Jenkins               |   Abstract Data Types in Java Jenkins Consulting Services, Inc |  Michael S Jenkins / McGraw Hill jenkins@pprd.abbott.com          |        ISBN 0-07-913270-7 mjenkins@jcs-inc.com             | Get the book through my web site http://www.wwa.com/~mjenkins <<<<-- in association with Amazon.com
[1998jan31]

HotJava alpha has a search utility.

FULL TEXT:
There is a OSS/PGL Java Full Text Search Engine called lucene that might help.
www.lucene.com

Have a look at Lucene search engine at http://www.lucene.com
I'll second that. I spent two or three weeks working with lucene before going on vacation (got back yesterday :-( ) and it looks like a winner. We're currently using it in a product where I work and it's been quite impressive.
Lucene's author, Doug Cutting, has some heavy credentials in search engines, he's extremely active and helpful, and lucene has a small but fairly active and helpful community of users on the lucene-users list. I haven't seen the lucene-developers list yet but from the sound of it they're equally active. On top of that, it's open source and the code has that lean, agile look of heavily refactored code performs well.
To clarify one detail that seems to confuse a fair number of folks, Lucene is an _api_, it's not a turnkey application. Since this was exactly what I was looking for, I couldn't be happier with Lucene. However, this does mean that you'll have to write your own code to spider and parse your documents, then instantiate Lucene Document objects containing Lucene Field objects, then add them to the Lucene IndexWriter. The example code that comes bundled with Lucene shows how to do this quite nicely.
Steven J. Owens

jv'ex.SecurityManager

name::
* McsEngl.jv'ex.SecurityManager@cptIt,

The SecurityManager class contains many methods with names that begin with the word check. These methods are called by various methods in the Java libraries before those methods perform certain potentially sensitive operations. The invocation of such a check method typically looks like this:
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkXXX(argument, . . . );
}

jv'ex.SERIALIZATION

name::
* McsEngl.jv'ex.SERIALIZATION@cptIt,

// Serialize today's date to a file.
FileOutputStream f = new FileOutputStream("tmp");
ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject("Today");
s.writeObject(new Date());
s.flush();

// Deserialize a string and date from a file.
FileInputStream in = new FileInputStream("tmp");  ObjectInputStream s = new ObjectInputStream(in);  String today = (String)s.readObject();  Date date = (Date)s.readObject();
[API1.1]

SERIALIZATION AND TRANSIENT VALUES.  The Java programming language incorporates a feature known as serialization, which is used to convert objects (including complex data structures such as lists and trees) into a stream of bytes, for writing to a file or across a network.  The stream can later be deserialized and converted back into an object.  This feature is very useful for giving objects persistence, and for transmitting them to a remote location.
A simple example of serialization looks like this:
        // write.java         import java.io.*;         public class write {                 public static void main(String args[])                 {                         try {                                 FileOutputStream fos =                                     new FileOutputStream("file.out");                                 ObjectOutputStream oos =                                     new ObjectOutputStream(fos);                                 oos.writeObject(new Test("testing", 37));                                 oos.flush();                                 fos.close();                         }                         catch (Throwable e) {                                 System.err.println(e);                         }                 }         }
        // read.java         import java.io.*;         public class read {                 public static void main(String args[])                 {                         Test testobj = null;                         try {                                 FileInputStream fis =                                     new FileInputStream("file.out");                                 ObjectInputStream ois =                                     new ObjectInputStream(fis);                                 testobj = (Test)ois.readObject();                                 fis.close();                         }                         catch (Throwable e) {                                 System.err.println(e);                         }                         System.out.println(testobj.str);                         System.out.println(testobj.ivalue);                 }         }
        // Test.java         public class Test implements java.io.Serializable {                 public String str;                 public transient int ivalue;                 public Test(String s, int i)                 {                         str = s;                         ivalue = i;                 }         }
There are two programs in this example:  one that serializes an Test object instance, and the other that reads back the serialized bytes and reconstitutes the object.  ObjectOutputStream and ObjectInputStream are layered on top of FileOutputStream and FileInputStream to effect the actual serialization and deserialization, using the writeObject and readObject methods.
The Test class implements java.io.Serializable.  Serializable is used as a marker interface, that is, it simply flags the fact that a class that implements it has some specific property.  Without implementation of this interface, objects of class Test would not be serializable.
This example illustrates an interesting aspect of serialization.  A field of a class may be declared as transient, meaning that the field is not serialized.  In other words, it's not part of the persistent state of an object.  An example of where this situation matters is java.util.Hashtable.
When a Hashtable object is serialized, the keys and values are written out as pairs of values, rather than written out as the actual table.  This is because the underlying hash codes (see Object.hashCode) may differ when the table is reconstructed.  In the above example, ivalue has the default value 0 when the saved object is deserialized.
Finally, serialization is an important technique to understand, especially as it's used by Remote Method Invocation to transmit objects across a network.
[JDC TIP 1998feb]

Joseph,
I have not done anything much with Swing, so I do not know about the "why".  One general solution for objects which are not Serializable is to mark them "transient".  Then override "readObject()" which is a private method of "Object" for the main object which you are trying to serialize.  Call "input.defaultReadObject()" first to handle de-serializing all of the non-transient objects.  Then re-instantiate your transient objects.
Cynthia Jeness
[1998jan03]

I have posted sources for a simple class that does custom serialization of Java objects using the ZIP algo.
These are available at: http://www.geocities.com/SiliconValley/Campus/1628/jstuff/jstuff.html
Tests show that in some cases the size of the serialized object, when using compressed serialization, is 50% smaller then the one we get using the default serialization mechanism.
This can be significant if you have to move large objects across the network.
Comments are very welcome.
David

-- =================================================== David Soroko mailto://davids@mannanetwork.com http://www.geocities.com/SiliconValley/Campus/1628/ Manna Network Technologies
[adv-java {1999-04-02}]

jv'ex.servlet

name::
* McsEngl.jv'ex.servlet@cptIt,

> i am looking for any servlet programming > tutorial on the net. Can you send any URLs ?
Here are a few in no particular order:
Servlet Essentials http://www.novocode.com/doc/servlet-essentials/ [*] This was recently updated and includes JSDK 2.1
There are some links to follow in the (or "one of the") FAQs:
http://www.purpletech.com/servlet-faq/
...and there's always Old Faithful which is worth reading:
http://java.sun.com/docs/books/tutorial/servlets/index.html
The December issue of JavaWorld was devoted to Servlets and might be worth a visit, depending on what you're after:
http://www.javaworld.com/javaworld/jw-12-1998/
I hope this helps,
--Jim Kimble Silicon Graphics Inc. Java E-Commerce Guy mailto:jimk@esd.sgi.com
[adv java {1999-03-06}]

Also check out JRun Magazine at http://jrunmag.com

Hi all,
I Don't know if this will interest anyone or not, but I've been working on a servlets tutorial at http://realm.granitepeaks.com / Reference Material / Java Servlets Workshop ... feedback and suggestions for improvement are welcome.
Christian -------------------------------------------- Christian Cryder Software Engineer - UHR Infrastructure REALM Information Technologies - http://www.realminfo.com Adventures in UHR - http://realm.granitepeaks.com Plugin Version Control for Java (PVCj 1.0) - http://www.pssg.com/pvcj
[adv java 1999may08]

jv'ex.server

name::
* McsEngl.jv'ex.server@cptIt,

"Server-side Java" @ WROX is a good reference.
www.jguru.com has some sniplets...

jv'ex.setBackground

name::
* McsEngl.jv'ex.setBackground@cptIt,

setBackground(Color.lightGray);

jv'ex.setIconImage

name::
* McsEngl.jv'ex.setIconImage@cptIt,

v12: //for a frame
Image IconImage = Toolkit.getDefaultToolkit().getImage("images/DebugIcon.gif");  
setIconImage(IconImage);

jv'ex.setPreferredSize(Dimension)

name::
* McsEngl.jv'ex.setPreferredSize(Dimension)@cptIt,

v12:
setPreferredSize(new Dimension(200, 400));
[1998dec25]

jv'ex.short

name::
* McsEngl.jv'ex.short@cptIt,

DEFINITION#ql:jv'short#

short s = 0x7fff; // max short hex value

jv'ex.SIMPLEATTRIBUTESET

name::
* McsEngl.jv'ex.SIMPLEATTRIBUTESET@cptIt,

Oops, sorry about that. Below is an updated program. I think that is a remnant of an earlier Swing release that I missed updating.

import java.awt.*; import java.awt.event.*; import com.sun.java.swing.*; import com.sun.java.swing.text.*; import java.io.*; import java.util.*;
public class TP extends JFrame {   static int WIDTH = 400;   static int HEIGHT = 300;   static String NORMAL = "Normal";   static String ITALIC = "Italic";   static String BIG = "Big";   JTextPane pane;   StyledDocument doc;   Hashtable paraStyles;
  public TP(String lab) {     super (lab);
    // Setup Text Pane     doc = new DefaultStyledDocument();     pane = new JTextPane (doc);     getContentPane().add (pane, BorderLayout.CENTER);
    // Setup initial style set     paraStyles = new Hashtable();     SimpleAttributeSet attr = new SimpleAttributeSet();     paraStyles.put(NORMAL, attr);
    attr = new SimpleAttributeSet();     StyleConstants.setItalic(attr, true);     paraStyles.put(ITALIC, attr);
    attr = new SimpleAttributeSet();     StyleConstants.setFontSize(attr, 36);     paraStyles.put(BIG, attr);
    // Setup actions     JButton b1 = new JButton ("Load");     b1.addActionListener (new ActionListener() {       public void actionPerformed (ActionEvent e) {         doLoadCommand();       }     });     JButton b2 = new JButton ("New");     b2.addActionListener (new ActionListener() {       public void actionPerformed (ActionEvent e) {         doNewCommand();       }     });     JButton b3 = new JButton ("Change");     b3.addActionListener (new ActionListener() {       public void actionPerformed (ActionEvent e) {         doChangeCommand();       }     });     JPanel p = new JPanel ();     p.add (b1);     p.add (b2);     p.add (b3);     getContentPane().add (p, BorderLayout.SOUTH);   }
  public static void main (String args[]) {     JFrame frame = new TP("TextPane Demo");     frame.addWindowListener(new WindowAdapter() {       public void windowClosing(WindowEvent e) {System.exit(0);}     });     frame.setSize(WIDTH, HEIGHT);     frame.setVisible(true);     frame.setBackground (Color.lightGray);   }
  public void doChangeCommand() {     pane.setCharacterAttributes ((SimpleAttributeSet) paraStyles.get(BIG), true);     validate();   }

  public void doNewCommand() {     pane.setStyledDocument(doc = new DefaultStyledDocument());     validate();   }
  public void doLoadCommand() {     try {       // Clear out current document       pane.setStyledDocument(doc = new DefaultStyledDocument());       // Get the NORMAL Style       AttributeSet defaultStyle = (AttributeSet) paraStyles.get(NORMAL);       // Get the ITALIC Style       AttributeSet italicStyle = (AttributeSet) paraStyles.get(ITALIC);       // Get the BIG Style       AttributeSet bigStyle = (AttributeSet) paraStyles.get(BIG);       // Insert into pane       doc.insertString(doc.getLength(), "Hello World\n", bigStyle);       doc.insertString(doc.getLength(), "What's up Doc?\n", italicStyle);       doc.insertString(doc.getLength(), "Boring...\n", defaultStyle);       System.out.println ("Loaded");       pane.validate();     } catch (BadLocationException exc) {       System.out.println ("Error loading");     }   } }

jv'ex.SORT

name::
* McsEngl.jv'ex.SORT@cptIt,

public static void sortStrings(Collator collator, String[] words)
{
String tmp;
for (int i = 0; i < words.length; i++) {
for (int j = i + 1; j < words.length; j++) {
// Compare elements of the array two at a time.
if (collator.compare(words[i], words[j] ) > 0 ) {
// Swap words[i] and words[j]
tmp = words[i];
words[i] = words[j];
words[j] = tmp;
} } } }
[js tutorial {1999-03-12}]

>Is there a sort class or function for Java? I need to sort a >vector of records. TIA.
1.  Java Generic Library (www.objectspace.com, i think).
2.  Roedy Green's sorting classes:         http://oberon.ark.com/~roedy
            look for:                 quicksor.txt                 heapsort.txt                 radixsor.txt
[1997dec16]

Below is a Quick Sort that I pretty much copied from a book by Wirth.
Sten-Erik Bergner AU-System
-------------------------------------------------------------
import java.util.*;
/** Sort is a light weight sorting alternativ to the more capable but demanding COM.objectspace.jgl.Sorting. Unlike the later, Sort only relies on the core API of Java 1.0.
Java's typing makes it ackward to offer generic sorting for all types of
collections and all types of elements. The extremly simplistic strategy adopted in this class is that the interface will be extended each time a new type combination is added.
Usage: Vector stringsInAlphabeticalOrder = Sort.strings(aVectorOfStrings);  */

public class Sort
{
/** Sorts elements in array a in ascending order. */
public static void strings (String[] a) {Sort.strings(a, 0, a.length);}
/** Sorts array a between indicies l and r using the Quick Sort algorithm [C.A.R. Hoare].  */ public static void strings (String[] a, int left, int right) {if (left > right) return; int i = left; int j = right; String ax = a[(left+right)/2]; do {while (a[i].compareTo(ax) < 0) i++; while (ax.compareTo(a[j]) < 0) j--; if (i <= j) {String swap = a[i]; a[i] = a[j]; a[j] = swap; i++; j--;}} while (i <= j); if (left < j)  strings (a, left, j); if (i < right)  strings (a, i, right);}

/** Returns a new enumeration of strings with the elements in ascending order. */
public static Enumeration strings (Enumeration strings) {Vector aVector = new Vector(); while (strings.hasMoreElements()) aVector.addElement(strings.nextElement()); return Sort.strings(aVector).elements();}
/** Returns a copy of strings with the elements in ascending order. */
public static Vector strings (Vector strings) {int size = strings.size(); String[] a = new String[size]; strings.copyInto(a); Sort.strings(a, 0, size - 1); Vector answer = new Vector(size); for (int i = 0; i < size; i++) answer.addElement(a[i]); return answer;} }
------------------------------------------------------------------------ -------------------
End code
-----Original Message----- From: Carl Hoang [SMTP:carl@softechie.com] Sent: Monday, December 15, 1997 4:53 PM To: advanced-java@xcf.berkeley.edu Subject: Sort Class
Is there a sort class or function for Java? I need to sort a vector of records. TIA.
-- <<<--------------------------------------------------------->>>      Carl Hoang                   SofTech Systems      carl@softechie.com           7118 Willow Road      (612) 424-7886               Maple Grove, MN 55369
[1997dec16]

jv'ex.StackOverflowError

name::
* McsEngl.jv'ex.StackOverflowError@cptIt,

class Main {
public static void method1() {
method2();
}
public static void method2() {
method1();
}
public static void main(String[] args) {
System.out.println("StackOverflowError example");
method1();
}
}

jv'ex.STATUS'BAR

name::
* McsEngl.jv'ex.STATUS'BAR@cptIt,

Java Swing status bar
The Swing library doesn't have a specific component for statusbar. The hack is you create a ordinary component- say JPanel - and set its border to LOWERED - BevelBorder. Then add this component to the SOUTH of your BorderLayouted JFrame.

import javax.swing.*;
import javax.swing.border.*;

====================

JPanel jp_status = new JPanel();
jp_status.setLayout(new BorderLayout());
jp_status.add(new JLabel("Subhash"), BorderLayout.CENTER);

jp_status.setBorder(new BevelBorder(BevelBorder.LOWERED));

// ``ct'' is the Container of JFrame
ct.add(jp_status,BorderLayout.SOUTH);

showStatus("Initializing Applet");
or some such will put a message in the status bar

jv'ex.STREAM'TOKENIZING

name::
* McsEngl.jv'ex.STREAM'TOKENIZING@cptIt,

java.io.StreamTokenizer

STREAM TOKENIZING. 
In JDC Tech Tips No. 11, an example of string tokenization was presented, using the class java.util.StringTokenizer.
To access the JDC Tech Tips No. 11, use the following address:
http://developer.javasoft.com/developer/technicalArticles/TechTips/

There's also another way to do tokenization, using java.io.StreamTokenizer.  StreamTokenizer operates on input streams rather than strings, and each byte in the input stream is regarded as a character in the range '\u0000' through '\u00FF'.
StreamTokenizer is lower level than StringTokenizer, but offers more control over the tokenization process.  The class uses an internal table to control how tokens are parsed, and this syntax table can be modified to change the parsing rules.  Here's an example of how StreamTokenizer works:
        import java.io.*;
        import java.util.*;
        public class streamtoken {
                public static void main(String args[])
                {
                        if (args.length == 0) {
                                System.err.println("missing input filename");
                                System.exit(1);
                        }

                        Hashtable wordlist = new Hashtable();
                        try {
                                FileReader fr = new FileReader(args[0]);
                                BufferedReader br = new BufferedReader(fr);
                                StreamTokenizer st = new StreamTokenizer(br);
                                //StreamTokenizer st =   new StreamTokenizer(new StringReader("this is a test"));
                                st.resetSyntax();
                                st.wordChars('A', 'Z');
                                st.wordChars('a', 'z');
                                int type;
                                Object dummy = new Object();
                                while ((type = st.nextToken()) != StreamTokenizer.TT_EOF) {
                                        if (type == StreamTokenizer.TT_WORD)
                                                wordlist.put(st.sval, dummy);
                                }
                                br.close();
                        }
                        catch (IOException e) {                                 System.err.println(e);                         }

                        Enumeration enum = wordlist.keys();
                        while (enum.hasMoreElements())
                                System.out.println(enum.nextElement());
                }
        }
In this example, a StreamTokenizer is created on top of a FileReader / BufferedReader pair that represents a text file. Note that a StreamTokenizer can also be made to read from a String by using StringReader as illustrated in the commented-out code shown above (StringBufferInputStream also works, although this class has been deprecated).
The method resetSyntax is used to clear the internal syntax table, so that StreamTokenizer forgets any rules that it knows about parsing tokens.  Then wordChars is used to declare that only upper and lower case letters should be considered to form words.  That is, the only tokens that StreamTokenizer recognizes are sequences of upper and lower case letters.
nextToken is called repeatedly to retrieve words, and each resulting word is found in the public instance variable "st.sval". The words are inserted into a Hashtable, and at the end of processing the contents of the table are displayed, using an Enumeration as illustrated in JDC Tech Tips No. 11. So the action of this program is to find all the unique words in a text file and display them.
StreamTokenizer also has special facilities for parsing numbers, quoted strings, and comments. It's a useful alternative to StringTokenizer, and is especially applicable if you are tokenizing input streams, or wish to exercise finer control over the tokenization process.
[jdc tip 1998jul22]

jv'ex.STREAM.FILTER

name::
* McsEngl.jv'ex.STREAM.FILTER@cptIt,

FILTER STREAMS.  If you've read much about the Java programming language, you may have encountered filter streams.  A stream refers to an ordered sequence of bytes or other data, with a source (for input streams) or a destination (for output streams).  Streams are used for file I/O, networking, pipes, and so forth.
A filter stream is two or more streams hooked together to provide added functionality.  For example, one stream may provide a method to read in a large block of characters efficiently, while another stream built on the first one could offer a mechanism for buffering those characters so they can be read one at a time in an efficient way.  Another example of filtering would be support for tracking line numbers.
To see how all this works, consider the following program that searches a text file for a pattern, and displays each line containing the pattern along with its line number:

import java.io.*;                

public class filter {                
public static void main(String args[])                
{                        
if (args.length != 2) {                                 System.err.println("usage: pattern file");                                 System.exit(1);                         }                        
String patt = args[0];                        
String file = args[1];                                
try {                                 FileReader fr =                                     new FileReader(file);                                 LineNumberReader lr =                                     new LineNumberReader(fr);                                 String str;                                 while ((str = lr.readLine()) != null) {                                         if (str.indexOf(patt) != -1) {                                                 int ln = lr.getLineNumber();                                                 System.out.println(file + "["                                                     + ln + "]: " + str);                                         }                                 }                                 lr.close();                         }                         catch (IOException e) {                                 System.err.println(e);                         }                 }         }
The example uses the LineNumberReader class in preference to the older LineNumberInputStream that has been deprecated.
LineNumberReader is a buffered input reader that tracks line numbers as it goes.  In other words, successive large chunks of the file are read into a buffer using FileReader.  FileReader is a class that sets up a FileInputStream based on an actual file, and then uses the mechanisms of its superclass InputStreamReader to convert a stream of bytes into a sequence of Java language characters.  readLine is then called to read each line in turn from the buffer.  When a line terminator is detected, an internal line number counter is incremented, and its current value is retrieved using getLineNumber.
Note that you can also design your own filter streams.  One example is to extend java.io.BufferedReader so that readLine skips blank lines and returns only the lines that contain non-whitespace characters.
[jdc tip 1998aug12]

jv'ex.STRING

name::
* McsEngl.jv'ex.STRING@cptIt,

String s="Νίκος Κασσελούρης \u03b1\u03c0";

jv'ex.STRING.array'creation

name::
* McsEngl.jv'ex.STRING.array'creation@cptIt,

jv'ex.SPLIT,

since 1.4:
String s = "x1# x2,x3#x4";
String a[]= s.split("#");
for(int i=0; i<a.length ; i++){
 System.out.println(a[i]);
}

jv'ex.STRING.COMPARISON

name::
* McsEngl.jv'ex.STRING.COMPARISON@cptIt,

string1.equals("nikos");

String s1 = "Jack went up the hill.";
String s2 = "Jack went up the hill.";
if (s1.equals(s2)) {
System.out.println("The strings are the same.");
} else {
System.out.println("The strings are different.");
}

jv'ex.STRING.DELETECHAR

name::
* McsEngl.jv'ex.STRING.DELETECHAR@cptIt,


public static String deleteChar(String fromString, char charToDelete) {
 StringBuffer buffer = new StringBuffer(fromString.length());
 for (int i = 0; i < fromString.length(); i++) {
   if (fromString.charAt(i) != charToDelete) {
     buffer.append(fromString.charAt(i));
   }
 }
 return new String(buffer);
}

jv'ex.STRING.LENGTH

name::
* McsEngl.jv'ex.STRING.LENGTH@cptIt,

String s="";
s.length() is equal to ZERO.

Be careful: string.length()
THROWS a NullPoiterException if string=null.
[nikos, {1999-03-13}]

jv'ex.STRING.REPLACE

name::
* McsEngl.jv'ex.STRING.REPLACE@cptIt,

String  replace(char oldChar, char newChar)
Returns a new string resulting from replacing all occurrences of oldChar in this string with newChar.
String  replace(CharSequence target, CharSequence replacement)
Replaces each substring of this string that matches the literal target sequence with the specified literal replacement sequence.
String  replaceAll(String regex, String replacement)
Replaces each substring of this string that matches the given regular expression with the given replacement.
String  replaceFirst(String regex, String replacement)
Replaces the first substring of this string that matches the given regular expression with the given replacement.

I am sure there would be some way but if u dont find any other way then following in one.
replace(String src,String key,String rep)
{
while( (i=src.indexof(key)) !=-1)
{
src=src.subString(0,i)+ rep +src.subString(i+lengthof key, end of string)
}
}


to replace with the SAME rep:
replace(String src,String key,String rep)
{
int index=0;
while( (i=src.indexof(index,key)) !=-1)
{
index=index+src.indexof(index,key)+2;
src=src.subString(0,i)+ rep +src.subString(i+lengthof key, end of string)
}
}

jv'ex.STRING.SUBSTRING#ql:jv'ex.substring#

name::
* McsEngl.jv'ex.STRING.SUBSTRING@cptIt,

jv'ex.STRING-TO-ARRAY'OF'STRING

name::
* McsEngl.jv'ex.STRING-TO-ARRAY'OF'STRING@cptIt,


//string to char array
char[] ch = word.toCharArray();
//fill up
String[] phones = new String[ch.size];
for(int i=0; i<ch.size; i++)
{
phones[i]=String.valueOf(ch[i]);
}

jv'ex.STRING-TO-CHAR

name::
* McsEngl.jv'ex.STRING-TO-CHAR@cptIt,

String s="a";
char=s.charAt(0);

jv'ex.STRING-TO-INT

name::
* McsEngl.jv'ex.STRING-TO-INT@cptIt,

int i =Integer.parseInt("35")

class StringToInteger {
public static void main (String args[]){
Integer i = Integer.decode(args[0]);
int i2 = i.intValue();
int i3 = i2+2;
System.out.println(i3);
}
}

jv'ex.STRING.TOKENIZING

name::
* McsEngl.jv'ex.STRING.TOKENIZING@cptIt,
* McsEngl.jv'ex.StringTokenizer@cptIt,

StringTokenizer():
 StringTokenizer stkz = new StringTokenizer(strText, ",.:?()[]\" ");
 while (stkz.hasMoreTokens()) {
   String s= stkz.nextToken();

SPLIT():
* NEEDS escape (\) for |
- in AAj did not work!!!! [2006-02-08]

String s = "write|wrote";
     String a[]= s.split("\|");
     for(int i=0; i<a.length ; i++)
     {
       System.out.println(a[i]);
     }

java.util.StringTokenizer
 String s = "this is a test";
 StringTokenizer st = new StringTokenizer(s);
 while (st.hasMoreTokens()) {
   System.out.println(st.nextToken());
 }
Prints the following on the console:
 this
 is
 a
 test

 String s = "x1,x2,x3";
 StringTokenizer st = new StringTokenizer(s, ",");
 int t=st.countTokens();
 String a[]= new String[t];
 for(int i=0; i<t ; i++)
 {
   a[i]=st.nextToken();
 }
 for(int i=0; i<a.length ; i++)
 {
   System.out.println(a[i]);
 }

String s = "\\windows\\command;\\dos;\\bin;\\util";
StringTokenizer parser = new StringTokenizer(s, ";");
try {
while(parser.hasMoreElements()) {
 System.out.println(parser.nextElement());
}
} catch (NoSuchElementException e) {
System.out.println(e);
}

a loop with for:
StringTokenizer parser2 = new StringTokenizer(forms, ",");
int tokens2=parser2.countTokens();
farray=new String[tokens2];
try {
 for(int i=0; i<tokens2; i++)
 {farray[i]=(String)parser2.nextElement(); }
} catch (NoSuchElementException e) {
 System.out.println("Util.getWordFormsAsArray: NoSuchElementException");    }

STRING TOKENIZING.  A very common programming problem is one where you have a string of characters, that you'd like to split into individual chunks (or tokens).  Typically, white space (created by inserting spaces and tabs) is used to separate one token from the next.
The Java language provides an easy way to solve this problem:  the java.util.StringTokenizer class.  You create a new instance of StringTokenizer, specifying a string to be tokenized.  Then hasMoreTokens and nextToken are called repeatedly to obtain the next token from the string.
To see how tokenizing works, consider the following example:
        import java.util.StringTokenizer;
        public class token {
                public static void main(String args[])  {
                        String testdata = "123,456, 789,,,1011  \n    1213";
                        StringTokenizer st =   new StringTokenizer(testdata, " ,\t\r\n");
                        while (st.hasMoreTokens()) {
                                String token = st.nextToken();
                                System.out.println(token);
                        }
                }
        }
In the example, a string of numeric test data is set up, and a StringTokenizer object is established to parse the string.  By default, the standard delimiters for tokenizing are " \t\r\n", and the example adds comma to the standard list.  hasMoreTokens is called to determine whether the string of data has been exhausted, and if not, nextToken is called to retrieve the next token.  In this example tokens are numeric values that represent fields of some type.
The program output is the following:
        123         456         789         1011         1213
StringTokenizer has additional useful facilities.  If you are interested in learning more about them, one method to try is countTokens, a method that returns a count of the number of tokens in the specified string.
[jdc 1998jun]

jv'ex.StringBuffer

name::
* McsEngl.jv'ex.StringBuffer@cptIt,

class Main {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("abcde");
sb.reverse();
System.out.println(sb); // "edcba"
}
}

To clear a stringbuffer:
sb.setLength(0);

PERFORMANCE:  STRING VERSUS STRINGBUFFER.  For this tip, suppose you have an application in which you're detabbing text for later display--using a method like drawString in java.awt.Graphics.  In such an application, it's necessary to go through the text character by character, and expand a tab to the appropriate number of spaces required to reach the next tab stop (typically set at intervals of 8 characters).

What's the fastest way to do this?  One approach is to set up an empty string and append characters to it in turn, using the += operator for appending, as shown in the following example:
        String result = "";
        ...
        result += 'x';
This approach works, but overlooks the fact that in Java, strings are immutable (that is, they never change).  Therefore, the operation shown above consists of copying the current value of "result" to a temporary buffer, appending the character, and creating a new String object that result then references.  Another way of saying this is that in:
        String string1 = "abc";
        String string2 = string1;
        string1 = "xyz";
        System.out.println(string2);
the printed result will be "abc," because reassigning to string1 doesn't change the reference from string2 to the string "abc."

--- A faster approach
A much faster approach to detabbing uses StringBuffer, a class that supports mutable strings.  Operations such as appending are directly supported with StringBuffer, and the result can be converted to a String at any time.
To show how this approach works in practice, here is an example of detabbing text using String (detab1) and StringBuffer (detab2):
        public class perf {
                public static String detab1(String s)                 {
                        if (s.indexOf('\t') == -1)
                                return s;
                        String res = "";;
                        int len = s.length();
                        int pos = 0;
                        int i = 0;
                        for (; i < len && s.charAt(i) == '\t'; i++) {
                                res += "        ";
                                pos += 8;
                        }
                        for (; i < len; i++) {
                                char c = s.charAt(i);
                                if (c == '\t') {                                         do {                                                 res += " ";                                                 pos++;                                         } while (pos % 8 != 0);                                 }                                 else {                                         res += c;                                         pos++;                                 }                         }                         return res;                 }                       public static String detab2(String s)                 {                         if (s.indexOf('\t') == -1)                                 return s;                         StringBuffer sb = new StringBuffer();                         int len = s.length();                         int pos = 0;                         int i = 0;                         for (; i < len && s.charAt(i) == '\t'; i++) {                                 sb.append("        ");                                 pos += 8;                         }                         for (; i < len; i++) {                                 char c = s.charAt(i);                                 if (c == '\t') {                                         do {                                                 sb.append(' ');                                                 pos++;                                         } while (pos % 8 != 0);                                 }                                 else {                                         sb.append(c);                                         pos++;                                 }                         }                         return sb.toString();                 }                         public static String testlist[] = {                         "",                         "\t",                         "\t\t\tabc",                         "abc\tdef",                         "1234567\t8",                         "12345678\t9",                         "123456789\t"                 };        

public static void main(String args[])                 {                         for (int i = 0; i < testlist.length; i++) {                                 String tc = testlist[i];                                 if (!detab1(tc).equals(detab2(tc)))                                         System.err.println(tc);                         }                                 String test_string =                             "\t\tthis is a test\tof detabbing performance";                         int N = 5000;                         int i = 0;                                 long ct = System.currentTimeMillis();                         for (i = 1; i <= N; i++)                                 detab1(test_string);                         long elapsed = System.currentTimeMillis() - ct;                         System.out.println("String time = " + elapsed);                                 ct = System.currentTimeMillis();                         for (i = 1; i <= N; i++)                                 detab2(test_string);                         elapsed = System.currentTimeMillis() - ct;                         System.out.println("StringBuffer time = " + elapsed);                 }         }
This example first runs some test data through both methods to ensure they are equivalent, and then does a timing to compare the two.  The second method, using StringBuffer, runs approximately six times as fast as the first method using String.
When you're tuning programs that do a lot of character processing, it's always a good idea to keep an eye on how much work the program is doing for each character, and the example given above illustrates how character data in the Java language can be efficiently manipulated.
[jdc tip 1998jan]

jv'ex.StringIndexOutOfBoundsException

name::
* McsEngl.jv'ex.StringIndexOutOfBoundsException@cptIt,

class Main {
public static void main(String[] args) {
System.out.println("StringIndexOutOfBoundsException example");
String str = "abc";
System.out.println(str.charAt(3));
}
}

try {...substirng }
catch (StringIndexOutOfBoundsException sioofe){
...
}

jv'ex.StylSheet

name::
* McsEngl.jv'ex.StylSheet@cptIt,

IMPORT-RULES:
HTMLDocument htmlDoc= (HTMLDocument)tbEdWwJEdPn.getDocument();
StyleSheet ss = htmlDoc.getStyleSheet();
File fileCSS= new File("g:/file1/aajworking/aaj.css");
try {
   URL cssUrl = fileCSS.toURI().toURL();
   InputStream is = cssUrl.openStream();
   BufferedReader br = new BufferedReader(new InputStreamReader(is));
   ss.loadRules(br, cssUrl);
   br.close();
OR
   ss.importStyleSheet(new URL("file:g:/file1/aajworking/aaj.css"));

jv'ex.substring

name::
* McsEngl.jv'ex.substring@cptIt,

jv'ex.substring.FIRST PART:
* "hamburger".substring(0, 3) >>> ham

* s = "Hard-disk_it-1.xml";
s.substring(0, s.lastIndexOf("-")));
>>> "Hard-disk_it"

* s = "Hard-disk_it-1.xml";
s.substring(0, s.indexOf("-")));
>>> "Hard"

String s = it1_computer.xml
String s2 = s.substring(0, s.indexOf("_") );
>>> s2= it1

String id=s.substring(0,1);
>>> gives the first leter of the string.

String s = computer.xml
String s2 = s.substring(0, s.length()-4) );
>>> s2= computer

jv'ex.substring.MIDDLE PART:
* "hamburger".substring(4, 8) >>> urge

* "smiles".substring(1, 5) >>> mile

* s = "Hard-disk_it-1.xml";
s.substring(s.indexOf("_")+1, s.lastIndexOf("-")));
>>> it

* String s2="<CPTEXT ID="iii" FILE="fff" AUTHOR="aaa"/>";
s2.substring(s2.indexOf("ID=")+4, s2.indexOf("\"",s2.indexOf("ID=")+5));
>>> iii

String s = ID="computer.xml"
String s2 = s.substring(s.indexOf("\"")+1, s.lastIndexOf("\"") );
>>> s2= computer.xml

jv'ex.substring.LAST PART:
"unhappy".substring(st.length()-2) >>> "py"
"unhappy".substring(2) returns "happy"
"Harbison".substring(3) returns "bison"
"emptiness".substring(9) returns "" (an empty string)

EXCEPTION:
try {...substirng }
catch (StringIndexOutOfBoundsException sioofe){}

jv'ex.SubstringElementContent:
sTitle= sETxt.substring(sETxt.indexOf(">")+1, sETxt.lastIndeOf("<"));

jv'ex.SUPER

name::
* McsEngl.jv'ex.SUPER@cptIt,

* To distiguish the current-class from its superclass.

jv'ex.SwingWorker (java6)

name::
* McsEngl.jv'ex.SwingWorker (java6)@cptIt,


SwingWorker worker = new SwingWorker<List, Void>() {

//This method automatically gets executed in a background thread
public List doInBackground() {
//fetch the big list from the
List list = getBigListAfterExecutingForLongTime();
return intDoc;
}

//This methods automatically gets executed in the EDT
public void done() {
//Get method retuns the exect, same thing
//that the doInBackground() method returned
List list = get();
//Now do all UI Operations here..
updateTheUIWithThisBigList(list);
}
};

//Code that executes THE WORKER-THREAD when the button is pressed
public void actionPerformed(ActionEvent ae){
worker.execute();
}

private Document doc;
...
JButton button = new JButton("Open XML");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

SwingWorker<Document, Void> worker = new SwingWorker<Document, Void>() {
public Document doInBackground() {
Document intDoc = loadXML();
return intDoc;
}
public void done() {
try {
doc = get();
} catch (InterruptedException ex) {
ex.printStackTrace();
} catch (ExecutionException ex) {
ex.printStackTrace();
}
}
};

worker.execute();
}
});

jv'ex.SWITCH'STATEMENT

name::
* McsEngl.jv'ex.SWITCH'STATEMENT@cptIt,
* McsEngl.jv'ex.case@cptIt,

GENERAL-CONCEPT#ql:jv'switch'statement#.

EXAMPLE:
int month;
switch (month) {
 case 1: System.out.println("January"); break#ql:jv'break'keyword#;
 case 2: System.out.println("February"); break;
 case 3: System.out.println("March"); break;
 ...
 case 12: System.out.println("December"); break;
}

['month' takes 1-12 as values]
[JavaSoft Tutorial, 1996jul06]

int i;
switch (i) {
     case 0: ton="NameNounCase"; break;
     case 1: ton="NameNounAdjective"; break;
     case 2: ton="NameNounAdverb"; break;
     case 3: ton="NameVerb"; break;
     case 4: ton="NameConjunction"; break;
     case 5: ton="NameShort"; break;
     case 6: ton="NameSymbol"; break;
     case 7: ton="NameNounSpecialCase"; break;
     case 8: ton="NameNounSpecialAdjective"; break;
     case 9: ton="NameNounSpecialAdverb"; break;
   }

EXAMPLE (cases with common statement):
switch ((int)c){
 case 0x20:
 case 0x09:
 case 0x0d:
   return true;
 default:
   return false;
}

jv'ex.default:
switch(integral-selector#ql:jv'integral'type#) {
case integral-value1 : statement; break;
case integral-value2 : statement; break;
case integral-value3 : statement; break;
case integral-value4 : statement; break;
case integral-value5 : statement; break;
// …..
default: statement;
}

If no match occurs, the default statement executes.

jv'ex.System

name::
* McsEngl.jv'ex.System@cptIt,

jv'ex.System:
//Prints the Java Directory:
class JavaHome{
 public static void main(String[] args){
   String jhome;
   jhome = System.getProperty("java.home");
   System.out.println(jhome);
 }
}

the System class has several fields, and if you select *out* you’ll discover that it’s a **static PrintStream** object. Since it’s static you don’t have to create anything, the out object is always there and you can just use it. But what can you do with this out object? That is determined by what type it is – it’s a PrintStream. Conveniently, PrintStream is shown in the description as a hyperlink, so if you click on that you’ll see a list of all the methods you can call for PrintStream. There are quite a few and these will be covered later in the book, but for now all we’re interested in is println( ), which in effect means “print out what I’m giving you to the console, and end with a new line). Thus in any Java program you write you can just say System.out.println(“things”) whenever you want to print things to the console.
[B. ECKEL, Thinking In Java, 1997aug18, 56]

Here is:
import java.io.*; import java.util.*;
class IO { public static void main(String argv[]) { try {
String command = "/bin/ls -l"; Process p = Runtime.getRuntime().exec(command); // NEW 1.1.1 API BufferedReader commandResult = new BufferedReader(new InputStreamReader(p.getInputStream())); // DataInputStream commandResult = new DataInputStream(new InputStream(p.getInputStream())); // JDK1.0.2
String s = null; try { while ((s = commandResult.readLine()) != null) System.out.println("Output: " + s); } catch (Exception e) {} System.out.println("return code: " + p.exitValue()); } catch (IOException e) { System.err.println("IO error: " + e); } } }
[1997jul05]

jv'ex.System.getProperty:
System.getProperty("file.encoding")
System.getProperty("file.separator")
System.getProperty("line.separator")
System.getProperty("java.class.path")
System.getProperty("java.home")
System.getProperty("java.version")
System.getProperty("os.name")
System.getProperty("user.dir")
System.getProperty("user.language", "EN");
System.getProperty("user.region", "");

jv'ex.T

name::
* McsEngl.jv'ex.T@cptIt,

jv'ex.JTabbedPane

name::
* McsEngl.jv'ex.JTabbedPane@cptIt,

cJTabPnL.setSelectedComponent(cJPnlToc);

public Component getSelectedComponent()
component.equals(cJEdPnBrowser)

jv'ex.TABLE

name::
* McsEngl.jv'ex.TABLE@cptIt,
* McsEngl.jv'ex.jtable@cptIt,

http://www.codeguru.com/java/Swing/JTable/index.shtml
U'll get a lot of examples like that..
[1999mar]

From: Dana W. Edwards <danaedwards@yahoo.com> To: <jahansoz@worldy.com>; <advanced-java@xcf.berkeley.edu>
Subject: Re: A very elementary question ?
Date: Σάββατο, 13 Μαρτίου 1999 6:37 πμ
Well the answer is not to adjust the table but to adjust the table model. (think MVC :) )
Below is a very quick answer to what you want. Instead of holding a vector of Strings as your rowData you would probably create your own class. This is very basic and of course you could modify it to do whatever you wanted... The key is the addElement() method in the TableModel.
Good Luck!! Let me know if I can help you any more.
===
import java.awt.*;
import java.awt.event.*;
import com.sun.java.swing.*;
import com.sun.java.swing.table.*;
import java.util.*;
public class TableFrame extends JFrame
{
JScrollPane scroller = null;
JTable table = null;
TableFrameModel model = null;
JPanel buttonPanel = new JPanel();
JButton addButton = new JButton();

public TableFrame() {    try {      jbInit();    }    catch (Exception e) {      e.printStackTrace();    }  }

public static void main(String[] args)
{
TableFrame tableFrame = new TableFrame();
tableFrame.addWindowListener(new WindowAdapter() {      public void windowClosing(WindowEvent e) {        System.exit(0);  } });
tableFrame.pack();
tableFrame.setVisible(true);
}

private void jbInit() throws Exception
{
model = new TableFrameModel();    
table = new JTable(model);
addButton.setText("ADD");    
addButton.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {        model.addElement("New Element");      }    });
scroller = JTable.createScrollPaneForTable(table);    getContentPane().add(scroller, BorderLayout.CENTER);    getContentPane().add(buttonPanel, BorderLayout.SOUTH);    buttonPanel.add(addButton, null);  
}
}



class TableFrameModel extends AbstractTableModel
{
Vector columnNames = new Vector();
Vector rowData = new Vector();

public TableFrameModel() {    columnNames.addElement("Name");    rowData.addElement("Dana");    rowData.addElement("Bill");  }

public String getColumnName(int col) {    return (String)columnNames.elementAt(col);  }

public int getRowCount() {    return rowData.size();  }

public int getColumnCount() {    return columnNames.size();  }

public Object getValueAt(int row, int col) {    return rowData.elementAt(row);  }

public boolean isCellEditable(int row, int col) {    return true;  }

public void setValueAt(Object value, int row, int col) {    rowData.setElementAt(value.toString(), row);    fireTableCellUpdated(row, col);  }

public void addElement(Object value) {    rowData.addElement(value.toString());    fireTableCellUpdated(rowData.size() - 1, 0);  }
}
==
Dana W. Edwards Software Architect ObjectIntelligence 900 Ridgefield Dr. Suite 240 Raleigh, NC 27609-8524 danaedwards@yahoo.com

Unsubscription, archives, FAQ - http://www.xcf.berkeley.edu/lists.html

jv'ex.Jtable.resizing

name::
* McsEngl.jv'ex.Jtable.resizing@cptIt,

Subject: Re: Resizing JTable Columns Widths Date: Τρίτη, 16 Μαρτίου 1999 4:21 πμ

That code alone should work just fine. Here is my example that mimics what you are doing. I bet you have code below this that overrides what you have done.
If you still can't get it to work, email it to me and I will take a look.
Good Luck!
import java.awt.*; import java.awt.event.*; import com.sun.java.swing.*; import com.sun.java.swing.table.*;
public class InBoxTable extends JFrame {
 public InBoxTable() {
   try {      init();    }    catch (Exception e) {      e.printStackTrace();    }  }
 public static void main(String[] args) {
   InBoxTable frame = new InBoxTable();
   frame.addWindowListener(new WindowAdapter() {      public void windowClosing(WindowEvent e) {        System.exit(0);      }    });
   frame.setVisible(true);  }
 private void init() throws Exception {
   JTable table = new JTable(new InBoxModel());    JScrollPane scroller = JTable.createScrollPaneForTable(table);
   table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
   TableColumnModel model = table.getColumnModel();    model.getColumn(0).setWidth(20);    model.getColumn(1).setWidth(50);    model.getColumn(2).setWidth(25);    model.getColumn(3).setWidth(25);
   getContentPane().add(scroller, BorderLayout.CENTER);  } }
== Dana W. Edwards Software Architect ObjectIntelligence 900 Ridgefield Dr. Suite 240 Raleigh, NC 27609-8524 danaedwards@yahoo.com
_________________________________________________________ DO YOU YAHOO!?Get your free @yahoo.com address at http://mail.yahoo.com

Unsubscription, archives, FAQ - http://www.xcf.berkeley.edu/lists.html

jv'ex.TEMPRORARY'FILES

name::
* McsEngl.jv'ex.TEMPRORARY'FILES@cptIt,

TEMPORARY FILES.  In programming applications you often need to use temporary files -- files that are created during program execution to hold transient information.  A typical case is a language compiler that uses several passes (such as preprocessing or assembly) with temporary files used to hold the output of the previous pass.  In some cases, you could use memory instead of disk files, but you can't always assume that the required amount of memory will be available.
One feature in JDK(tm) 1.2 is the ability to create temporary files.  These files are created in a specified directory or in the default system temporary directory (such as \TEMP on Windows systems).  The temporary name is something like the following:
        t:\tmp\tmp-21885.tmp
The same name is not returned twice during the lifetime of the Java virtual machine.  The returned temporary file is in a File object and can be used like any other file.  Note:  With Unix, you may find that your input file has to also reside in the same file system where the temporary files are stored.  The renameTo method cannot rename files across file systems.
Here is an example of using temporary files to convert an input file to upper case:
        import java.io.*;                 public class upper {                 public static void main(String args[])                 {                         // check command-line argument                                 if (args.length != 1) {                                 System.err.println("usage: upper file");                                 System.exit(1);                         }                         String in_file = args[0];                                 try {                                 // create temporary and mark "delete on exit"                                         File tmpf = File.createTempFile("tmp");                                 tmpf.deleteOnExit();                                 System.err.println("temp file = " + tmpf);                                         // copy to temporary file,                                 // converting to upper case                                         File inf = new File(in_file);                                 FileReader fr = new FileReader(in_file);                                 BufferedReader br = new BufferedReader(fr);                                 FileWriter fw =                                     new FileWriter(tmpf.getPath());                                 BufferedWriter bw =                                     new BufferedWriter(fw);                                 String s = null;                                 while ((s = br.readLine()) != null) {                                         s = s.toUpperCase();                                         bw.write(s, 0, s.length());                                         bw.newLine();                                 }                                 br.close();                                 bw.close();                                         // rename temporary file back to original file                                         if (!inf.delete() || !tmpf.renameTo(inf))                                         System.err.println("rename failed");                         }                         catch (IOException e) {                                 System.err.println(e);                         }                 }         }
The input file is copied to the temporary file, and the file contents are converted to upper case.  The temporary file is then renamed back to the input file.
JDK 1.2 also provides a mechanism whereby files can be marked for "delete on exit."  That is, when the Java virtual machine exits, the file is deleted.  An aspect worth noting in the above program is that this feature handles the case where the temporary file is created, and then an error occurs (for example, the input file does not exist).  The delete-on-exit feature guarantees that the temporary file is deleted in the case of abnormal program termination.
[jdc 1998may]

jv'ex.TextArea

name::
* McsEngl.jv'ex.TextArea@cptIt,


// (1.0) Have a textarea in a frame, and the frame can be closed.

import java.awt.*;
class Main extends Frame {
TextArea ta = new TextArea(1, 1);

Main() {
super("TextArea Example");
add("Center", ta);
pack();
show();
}

static public void main(String[] args) {
new Main();
 }

public boolean handleEvent(Event e) {
 if (e.id == Event.WINDOW_DESTROY) {
  System.exit(0);
 }
 return super.handleEvent(e);
}
}


jv'ex.TextArea:
// Have a checkbox to SET textarea editable or not.

import java.awt.*;
class Main extends Frame {
TextArea ta = new TextArea();
Checkbox cb = new Checkbox("Editable", null, true);

Main() {
super("setEditable Example");
add("Center", ta);
add("South", cb);
pack();
show();
}

public boolean action(Event evt, Object what) {
if (evt.target == cb) {
ta.setEditable(cb.getState());
}
return true;
}

static public void main(String[] args) {
new Main();
}
}

jv'ex.textArea.wrappingText:
If you are using JDK 1.1.1 you construct the TextArea and pass in the TextArea.SCROLLBARS_VERTICAL_ONLY mask.
e.g.
TextArea myText = new TextArea("", 5, 80, TextArea.SCROLLBARS_VERTICAL_ONLY);
This creates a text area which is 5 rows high, 80 columns wide and only has a vertical scrollbar. Not having a Horizontal scrollbar will force your text to be wrapped...

jv'ex.TextField

name::
* McsEngl.jv'ex.TextField@cptIt,

// prints on Dos what you are writing in textfield when you press
// enter. Τα ελληνικά του textfield είναι αλλαμπουρνέζικα στο Dos.

import java.awt.*;
public class Main extends Frame {
TextField tf = new TextField("TextField");

Main() {
super("TextField Example");
add("Center", tf);
pack();
show();
}

public boolean action(Event evt, Object what) {
if (evt.target == tf) {
System.out.println(tf.getText());
return true;
}
return false;
}

static public void main(String[] args) {
new Main();
}
}

jv'ex.TextField.alphacharacter

name::
* McsEngl.jv'ex.TextField.alphacharacter@cptIt,

John Zukowski 1997may11
Just attach a KeyListener and in the keyTyped method, do something like the following.
public void keyTyped (KeyEvent e) { char c = e.getKeyChar(); if ((c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_ENTER) || (c == KeyEvent.VK_TAB)) return; if (!Character.isLetter (c)) e.consume(); }
That is all you need to handle keyboard input. If you want to handle programmatic changes through setText, you should override that too.
 J
P.S. The checking for backspace and delete is to ensure error corrections, tab for tabbing between fields and enter for action triggering.

On Sat, 10 May 1997 19:21:20 GMT, jamesf@nova.org (James Fitzgerald) wrote:
> >I'm trying to create an alphacharacter only TextField.
> >I've extended the TextField class to have a local copy of the text >that appears in the TextField and to setup up a TextListener >on itself. > >I extended the TextListener so that it keeps an internal >reference to the new TextField. Whenever the TextListener >gets a textValueChaned event it calls a method in the >TextField which checks to see that the textfield only has >alpha characters in it. If it doesn't (i.e. has digits or something) >it replaces the text in the TextField with the local copy of the >value that it has, otherwise it does nothing.> >I noticied immediately that when I would change the value >of the text it would constantly keep calling the textValueChanged >event. So I tried added code around the setText call to remove >the TextListener and the re-add it after I had changed the >text. Same result. It constantly calls the value textValueChanged >routine, even if the setText call doesn't happen. Anyone >have any clues as to what I'm doing wrong?> > >compares the current text in the textfield >to what it has the >
John Zukowski - http://java.miningco.com - jaz@ultranet.com Software Mage - http://www.magelang.com - jaz@magelang.com MageLang Institute Author Java AWT Reference - http://www.ora.com/catalog/javawt/

jv'ex.TEXTFIELD.FILTER

name::
* McsEngl.jv'ex.TEXTFIELD.FILTER@cptIt,

Hi Mircea wanted to know how to override TextField in order to write a filter for keystrokes.
I have attached a simple application which has a filter for alphabets : does not print any alphabets on the textfield, others like numerics it prints.
> > import  java.awt.*; >   import  java.awt.event.*; > >   class CustomTextField extends TextField implements KeyListener { > >   public void keyTyped (KeyEvent ke) { >   } > >   public void keyPressed (KeyEvent ke) { >    if ((ke.getKeyCode() >=65) && (ke.getKeyCode() <=90)) { >    System.out.println("Consuming"); >    ke.consume(); >      } >   } > >   public void keyReleased (KeyEvent ke) { >   } > >  } > >   public class Spec { > >   public static void main (String[] args) { > >   Frame fr=new Frame(); >   CustomTextField ct=new CustomTextField(); >   ct.addKeyListener(ct); >   fr.add("North",ct); >   fr.addWindowListener (new WindowAdapter () { >       public void windowClosing (WindowEvent we) { >    System.exit(0); >    }}); > >   fr.setSize(200,200); >   fr.show(); > >   } > } > >
Hope this helps to whoever it concerns.

jv'ex.TextField.limit

name::
* McsEngl.jv'ex.TextField.limit@cptIt,

>Is there a way to limit the maximum number of characters >entered in  a Text field / Text area.>The character counting does not work as that will not >prevent Copy/Paste events.


attached is a short, very ugly example of how you can use a TextListener to do this.  This requires the new event model, no idea if you can do this with the 1.0.2 event model.
please ignore the ugliness (hardcoding, etc).  i tried to get it working as quickly as possible to show the idea.  making it more maintainable in your own code is up to you :).


the code is tested with the win95 JDK 1.1.5 and the Linux JDK 1.1.4 (XFree96 and fvwm95).  i haven't tested this as an applet, if there are bugs in browser JVMs then they may show up here.  if you test in applets, maybe you could tell the list which browsers you tested and which ones it doesn't work on :).


the same idea can be used to implement all kinds of data entry validation.
NOTE: it's conceivable (although i haven't heard of anything like this) that some platforms may have text areas that don't send text changed events on cut and paste events. so the TextListener technique might not work on such platforms.
in the worst case, you could spin out a thread that checks if the text area has changed every half second or something :). this would be ugly beyond words though :).
tiger
--=====================_884561212==_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="TA.java"
import java.io.*; import java.awt.*; import java.awt.event.*;

public class TA implements TextListener {         private static final int DEFAULT_LEN=3D10; =09         String contents=3D"";                 // previous known good contents.  if the new contents of                 // the text area don't fit our criteria, we restore the                 // previous contents.

        =09         int desiredLength=3DDEFAULT_LEN; =09         public TA(int len)         {                 if(len < 0)                         len=3DDEFAULT_LEN;                                 // silent re-setting, we could also throw an exception,                                 // something like InvalidParameterException (except with                                 // a diff name since that name is already taken in                                 // java.security...)                 else                    =09                         desiredLength=3Dlen;         } =09         public static void main(String args[])         {                 Frame f=3Dnew Frame();                 f.setSize(500,500);                 f.setLayout(new BorderLayout());         =09                 TextArea ta=3Dnew TextArea();                 ta.addTextListener(new TA(32));                 f.add(ta,"Center");         =09                 f.setVisible(true);         }
        public void textValueChanged(TextEvent e)         {                 TextArea ta=3D(TextArea)e.getSource();
                // if new length is too long.  rollback to previous                 // contents.  otherwise, set previous contents to the                 // current contents, ready for next text event. this                 // trivial example does not reset the cursor to where it                 // should be... left as an exercise to whomever wants to use                 // this technique :).

                if(ta.getText().length() > desiredLength)                 {                         ta.setText(contents);                         System.out.println("Tried to change, denied.");         =09                 }                 else                 {                         contents=3Dta.getText();                         System.out.println("Changed");          =09                 }         } }
--=====================_884561212==_ Content-Type: text/plain; charset="us-ascii"

------------------------------------------------------------- Gerald Timothy Quimpo         *  entia non sunt multiplicanda tiger at kami dot com            praetere necessitatem http://cdo.weblinq.com/~tiger *  mene sakhet ur-seveh

    When in doubt, use brute force.

                             - Ken Thompson
[1998jan11]

jv'ex.JTextPane

name::
* McsEngl.jv'ex.JTextPane@cptIt,

JTextPane tp = new JTextPane();
MutableAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setFontFamily(attr, "Serif"); StyleConstants.setFontSize(attr, 18);
StyleConstants.setBold(attr, true);
tp.setCharacterAttributes(attr, false);
add(tp);

SPEED:
Avoiding the first of these pitfalls is trivial: You need only ensure that large updates are only performed on document objects that are not attached to text components at the time that the updates are made. For example, instead of retrieving a document object and modifying it:

...
JTextPane jtp = new JTextPane();
Document doc = jtp.getDocument();

for (... iteration over large chunk of parsed text ...) {
...
doc.insertString(offset, partOfText, attrsForPartOfText);
...
}
...

you should either create a new document and insert into it before telling the text pane to use it:

...
JTextPane jtp = new JTextPane();
Document doc = new DefaultStyledDocument();

for (... iteration over large chunk of parsed text ...) {
...
doc.insertString(offset, partOfText, attrsForPartOfText);
...
}
jtp.setDocument(doc);
...

or (if, for example, the text pane uses a custom document class), swap in a blank document and then restore the original document after the inserts:

...
JTextPane jtp = new JTextPane();
Document doc = jtp.getDocument();
Document blank = new DefaultStyledDocument();
jtp.setDocument(blank);

for (... iteration over large chunk of parsed text ...) {
...
doc.insertString(offset, partOfText, attrsForPartOfText);
...
}
jtp.setDocument(doc);
...

The speed boost from this change can be dramatic. For example, for a roughly 450K document in which each word was a different color and size (therefore requiring different attributes), document initialization time was over three times slower with a document attached to a JTextPane than with an unattached document. Representative times were 151s vs. 460s on a 500Mhz iBook running OSX 10.3.2. (The test code is in Part II of this article.) Of course, a two and a half minute wait for a document to load suggests that there is still room for improvement. In Part II we look at a solution to the second source of sluggishness, per-insertion coordination overhead within DefaultStyledDocument.
[http://javatechniques.com/blog/faster-jtextpane-text-insertion-part-i/]

jv'ex.THIS

name::
* McsEngl.jv'ex.THIS@cptIt,

* To distiguish the current-class from its superclass.

* To distiguish a method's-variable from its class's-variable:
class Point {
private double x;
private double y;

Point(double x, double y) {
this.x = x;
this.y = y;
}
....
[Harold course 1997spring]

jv'ex.THREAD

name::
* McsEngl.jv'ex.THREAD@cptIt,

GENERAL-CONCEPT#ql:jv'thread#.

Some programming environments will flash programs up on the screen and close them before you've had a chance to see the results. You can put in the following bit of code at the end of main( ) to pause the output:
try { Thread.currentThread().sleep(5 * 1000); } catch(InterruptedException e) {} }
This will pause the output for five seconds. This code involves concepts that will not be introduced until much later in the book, so you won’t understand it until then, but it will do the trick.
[B. ECKEL, Thinking In Java, 1998jan]

class TwoThreadsTest {
public static void main (String[] args) {
new SimpleThread("Jamaica").start();
new SimpleThread("Fiji").start();
}
}

class SimpleThread extends Thread {
public SimpleThread(String str) {
super(str);
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(i + " " + getName());
try {
sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {}
}
System.out.println("DONE! " + getName());
}
}

NEW_THREAD:
   SwingUtilities.invokeLater(new Runnable() {
     public void run() {
       // DO SOMETHING
     }
   });

jv'ex.thread.stopping:
There is an article by Scott Oaks (Sun Systems Engineer and author of Java Threads) on how to work with Threads while avoiding the newly deprecated Thread methods available online at: http://www.sigs.com/jro/oaks.html
[1997dec03]

See: http://gee.cs.oswego.edu/dl/cpj/cancel.html
From: "Nathan X Sowatskey" <sowatskey_nathan@jpmorgan.com>
[{1999-03-16}]

in run method use a while loop with a boolean check and set that variable to false when you click the button. if you are stuck with a processing wherein you are waiting then use interrupt to wake up and branch into exception and terminate doing necessay clean up in finally.
Miten Mehta/MCLEOD
From: mmehta@McLeodUSA.com
[{1999-03-16}]

Most recommendations I have seen are to set a shutdown flag in the thread that it checks regularly. You may have to do some other things (e.g. send it a notify if it is waiting and hence can't check the shutdown flag) depending on how your thread operates.
From: "Mike Castillo" <casti@advtech.uswest.com>
[{1999-03-16}]

Check this
http://java.sun.com/docs/books/tutorial/essential/threads/lifecycle.html
http://java.sun.com/docs/books/tutorial/essential/threads/lifecycle.html#stopping
From: Mehrdad Jahansoozi <jahansoz@worldy.com>
[{1999-03-16}]

I had simmilar problems with threads stop() method.
It never destroys thread and slows down the system as the CPU usage increases gradually.
If you find the correct solution to stop threads please let me also know.
Thanks Mangesh
From: mazankar@usa.net
[{1999-03-16}]

From: Kasselouris, Nikos <nikas@ioa.forthnet.gr> To: <mazankar@usa.net>
Subject: Stopping thread Date: Παρασκευή, 19 Μαρτίου 1999 7:02 μμ
Mangesh
It depends on what your thread does.
The general solution is to make a flag in your application, and your thread to do something through a while loop checking this flag.My example: ===============================
public class SearchXml extends JFrame {
SearchFiles threadSF = null;
boolean abortThread = true;
...
JButton search = new JButton (" search ");
search.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { .... abortThread=true; threadSF = new SearchFiles(sxObject, text); threadSF.start(); } }

JButton abort = new JButton (" abort ");
abort.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { if (threadSF != null) abortThread=false; threadSF = null; abort.setEnabled(false); } }); ...}

class SearchFiles extends Thread {
SearchXml appl;
SearchFiles(SearchXml application) { appl=application; }
public void run() { while (appl.abortThread)       { ... } } }
===========================
Be very careful in the while loop how you gonna implement to do something while checking the flag appl.abortThread.

Nikos Kasselouris Ioannina - GREECE
nikas@ioa.forthnet.gr http://users.forthnet.gr/ioa/nikas/

A clean way would be to have a bRun boolean set somewhere and you could use it like this :
boolean bRun;
public void run() { while(this.bRun) { ... } }
public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals(START_BUTTON_ACTION_COMMAND) { this.bRun = true; (new Thread(this)).start(); }
else if (e.getActionCommand().equals(STOP_BUTTON_ACTION_COMMAND) this.bRun = false; }
This way, you thread will die naturally.

===
When accessing a boolean (or any other instance variable) from different threads in this way you must use the volatile modifier:
volatile boolean bRun;
This ensures that a thread uses the actual variable rather than a cached one it may hold in a register (or whatever)
IFAIK pre java 2 volatile did not have any effect, I beleive that its use is essential when running on Java 2 VMs (especially ones with hotspot or similar technologies).


You may also want to use InterruptedException:
public void run() { while(this.bRun) { try { ....
// code which either waits/sleeps etc sometimes // or uses Thread.interrupted() as shown below ....} catch(InterruptedException iex) { // do nothing=: we may have been interrupted // for some reason other than that we were // requested to stop using bRun } } }
This way you can interrupt wait/Sleep etc calls to provide immediate stopping of a waiting thread. by doing: this.bRun=false; thread.interrupt(); // you will need to have kept a reference to the // thread
You can also use this to stop a thread invloved in long winded computation by periodically doing: if(Thread.interrupted()) { throw new InterruptedException(); }
Periodically in your computation loop.
If you need to do much thread work I recomend the Paul Hyde book "Java Thread Programming" (ISBN: 0-672-31585-8) as it introduces exactly the sort of issue you raised and more (and it is up to date).

WITH RUNNABLE-INTERFACE:
The Runnable interface should be implemented by any class whose instances are intended to be executed by a thread. The class must define a method of no arguments called run.

This interface is designed to provide a common protocol for objects that wish to execute code while they are active. For example, Runnable is implemented by class Thread. Being active simply means that a thread has been started and has not yet been stopped.

In addition, Runnable provides the means for a class to be active while not subclassing Thread. A class that implements Runnable can run without subclassing Thread by instantiating a Thread instance and passing itself in as the target. In most cases, the Runnable interface should be used if you are only planning to override the run() method and no other Thread methods. This is important because classes should not be subclassed unless the programmer intends on modifying or enhancing the fundamental behavior of the class.

jv'ex.throw

name::
* McsEngl.jv'ex.throw@cptIt,

if(parent == null)
throw new IllegalArgumentException("node does not have a parent.");
[jdk1.2]

if (ch != '=')
throw throwExpectedInput("=");

jv'ex.throws

name::
* McsEngl.jv'ex.throws@cptIt,

public void addjNodeCorelation(jNodeCorelation newjNodeCorelation)
throws ErrorjNodeCorelationAdd, ErrorSystemAdd

jv'ex.Throwable

name::
* McsEngl.jv'ex.Throwable@cptIt,

try {
int a[] = new int[2];
a[4]= 3;
} catch (Throwable e) {
System.err.println("exception msg: " + e.getMessage());
System.err.println("exception string: " + e.toString());
e.printStackTrace();
}

jv'ex.THROWABLE:
try {
int a[] = new int[2];
a[4];
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("an exception occurred: " + e.getMessage());
e.printStackTrace();
}

jv'ex.time

name::
* McsEngl.jv'ex.time@cptIt,

As of JDK 1.1, the Date class should only be used as a wrapper for a date. That is, Date objects represent a specific instant in time with millisecond precision. The java.util.Calendar class should be used to convert between dates and time fields and the java.text.DateFormat class should be used to format and parse date strings.
[Intl Spec 1996dec04]

jv'ex.TIMER

name::
* McsEngl.jv'ex.TIMER@cptIt,

Scheduling a Timer Task to Run Repeatedly
int delay = 5000; // delay for 5 sec.
int period = 1000; // repeat every sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() { // Task here ... }
}, delay, period);

Scheduling a Timer Task to Run at a Certain Time
int numberOfMillisecondsInTheFuture = 10000; // 10 sec Date timeToRun = new Date(System.currentTimeMillis()+numberOfMillisecondsInTheFuture); Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { // Task here ... } }, timeToRun);

jv'ex.toLowerCase()

name::
* McsEngl.jv'ex.toLowerCase()@cptIt,

file = file.toLowerCase().

jv'ex.Toolkit

name::
* McsEngl.jv'ex.Toolkit@cptIt,

String[] fontNames = Toolkit.getDefaultToolkit().getFontList();

jv'ex.Tree

name::
* McsEngl.jv'ex.Tree@cptIt,

SWING:
/* create a panel */
JPanel westPanel = new JPanel(true);
/* Create the JTreeModel. */
DefaultMutableTreeNode root = new DefaultMutableTreeNode ("CONCEPT: Greece"); DefaultTreeModel treeModel = new DefaultTreeModel(root);

/* insert nodes (here leafs)*/
treeModel.insertNodeInto( (new DefaultMutableTreeNode ("SYNONYMA")), root, 0); treeModel.insertNodeInto((new DefaultMutableTreeNode ("DEFINITION")), root, 1);

JTree tree = new JTree(treeModel);
/* Make tree ask for the height of each row. */
tree.setRowHeight(-1);

/* Put the Tree in a scroller. */
JScrollPane sp = new JScrollPane();
sp.getViewport().add(tree);

/* Put the scroller in the panel */
westPanel.setLayout(new BorderLayout());
westPanel.add("Center", sp);

PERFORMANCE -- using Object to represent disparate types.  This tip is a little tricky, but it recently came up in an actual application, and illustrates how Java language features are used to efficiently represent a large data structure.
The application is one where a very large tree structure, consuming millions of bytes, is built up.  Some of the nodes in the tree reference child nodes (non-terminals), while others are leaf nodes (terminals) and have no children, but contain String information.  The application involves parsing a large Java program and representing it internally via a tree.
One simple approach to this problem is to define a Node class such as the following:
        public class Node {                 private int type;                 private Node child[];                 private String info;         }
If the node is a leaf node, then info is used.  Otherwise, child refers to the children of the node, and child.length to the number of children.
This approach works pretty well, but uses a lot of memory.  Only one of child and info are used at any one time, meaning that the other field is wasted.  Child is an array, with attendant overhead, for example, in storing the dimensions of the array for subscript checking.  For certain large inputs, the parser program runs out of memory.
The first refinement of this approach is to collapse child and info:
        public class Node {                 private int type;                 private Object info;         }
In this scheme, info can refer to either a String, for a leaf node, or to a child node array.  Object is the root of the Java class hierarchy, so that for example, the following:
        class A {}
implicitly means:
        class A extends Object {}
An instance of a subclass of Object, such as String, can be assigned to an Object reference.  An array of Nodes can likewise be assigned to an Object.The instanceof operator can be used to determine the actual type of an Object reference.
In the parser application, using Object to represent both data types is not good enough because it still takes up too much memory.  So a further change has been implemented.  After doing some research, it was found that the child array consisted of a single Node element about 95 percent of the time.  So it's possible to represent one-child cases directly using an Object reference to the child node, rather than a reference to a one-long array of child nodes.
This representation is complicated, and it's useful to define a method for encapsulating the abstraction as in the following example:
        public class Node {
                private int type;
                private Object info;
                // constructors, other methods here ...
                // gets the i-th child reference
                public Node getChild(int i)                 {
                        if (info instanceof String)
                                return null;
                        else if (info instanceof Node && i == 0)
                                return (Node)info;
                        else
                                return ((Node[])info)[i];
                }
        }
getChild returns the i-th child, or null for leaf nodes.  If there is exactly one child, then info is of type Node, referencing that child.  If there is more than one child, info is of type Node[], and a cast to Node[] is done, followed by a retrieval and return of the child reference.
In the parser application, this change is enough to tip the scales, so that the application would not run out of memory.  The internal representation in this example is tricky, but it can be hidden via methods such as getChild.  In general, it's wise to avoid tricky coding, but useful to know how to do it when the need arises.
The example also illustrates the utility of using one Object reference to represent several different data types.  In C/C++ similar techniques would use void* pointers or unions.
[jdc 1997dec19]

Particularly:
http://www2.gol.com/users/tame/swing/examples/JTreeExamples2.html
[adv. java {1999-03-27}]

Graham, Dennis wrote:
> > Is there some way to change the default image associated with a DefaultMutableTreeNode class (Swing)?

What I do is provide a TreeCellRenderer. You can start with SampleTreeCellRenderer. Below is an example of how I use it:
>>>----------------------------------------------------<<< Jack Harich      Affiliated with: Atlanta Java Users Group       Java Consultant                   Java Second Language SIG happyjac@mindspring.com           Atlanta Java Consortium
======================================================
package org.jcon.ba.tree;
import org.jcon.ba.system.Bean; import org.jcon.ba.system.Item; import org.jcon.ba.system.Module; import org.jcon.ui.ImageLib; import org.jcon.util.TNode;
import java.awt.Component; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image;
import com.sun.java.swing.Icon; import com.sun.java.swing.ImageIcon; import com.sun.java.swing.JLabel; import com.sun.java.swing.JTree; import com.sun.java.swing.tree.TreeCellRenderer; import com.sun.java.swing.tree.DefaultMutableTreeNode;
/** * Renders tree nodes using the node userObject, which is * an Item. This class's main responsiblity is to allow the * user to conceptually grasp the node's state, and hence * the tree's state.* * Started from SampleTreeCellRenderer in Swing 0.5.1 */ public class TreeViewCellRenderer     extends JLabel implements TreeCellRenderer {
//---------- Protected Fields ---------------------------- /** Font used if the string to be displayed isn't a font. */ static protected Font defaultFont;
/** Icon to use when the item is collapsed. */ static protected ImageIcon collapsedIcon;
/** Icon to use when the item is expanded. */ static protected ImageIcon expandedIcon;
/** Whether or not the item that was last configured is selected. */ protected boolean selected;
protected Item item;
//---------- Initialization ------------------------------ static { try {     defaultFont = new Font("SansSerif", 0, 12); } catch (Exception ex) { }
try {     // We use the defaultClassName for image resource     Image collapsedImage = ImageLib.loadClassResourceImage(         null, "Folder.gif"); // Was Collapsed     collapsedIcon = new ImageIcon(collapsedImage);
    Image expandedImage = ImageLib.loadClassResourceImage(         null, "Folder.gif"); // Was Expanded     expandedIcon = new ImageIcon(expandedImage);
} catch (Exception ex) { // Not triggered if image is null     print("TreeViewCellRenderer - Couldn't load images: " + ex); } } // End method
//---------- Public Methods ------------------------------ /** * This is messaged from JTree whenever it needs to get the * size of the component or it wants to draw it.* This attempts to set the font based on value, which will * be a TreeNode.*/ public Component getTreeCellRendererComponent(JTree tree,             Object value, boolean selected,             boolean expanded, boolean leaf, int row,             boolean hasFocus) {
    Font   font;     String stringValue = tree.convertValueToText(value, selected,         expanded, leaf, row, hasFocus);
    /* Set the text. */     setText(stringValue);
    /* Set the image. */     item = (Item) ((TNode)value).getUserObject();
    if(expanded)         setIcon(expandedIcon);     else if(item.isModule())         setIcon(collapsedIcon);     else         setIcon(null);
    // Set the color and the font     //if(hasFocus)     //    setForeground(Color.cyan);     //else     //    setForeground(userObject.getColor());     //setForeground(Color.black); // *** No effect
    //if(userObject.getFont() == null)     //    setFont(defaultFont);     //else     //    setFont(userObject.getFont());     //setFont(defaultFont); // *** No effect
    /* Update the selected flag for the next paint. */     this.selected = selected;
    return this; } /** * paint() is subclassed to draw the background correctly.* JLabel currently does not allow backgrounds other than * white, and it will also fill behind the icon, * something that isn't desirable.*/ public void paint(Graphics g) {     // Set background color to selected or normal     if (selected) {         g.setColor(Color.cyan);  // Could be a constant     } else {         g.setColor(Color.white); // Could be a constant     }     // Various properties     int gap = 3; // Icon, gap, nodeState, gap, text     FontMetrics metrics = g.getFontMetrics();     String text = item.getInstanceName();         // Calculate iconWidth including gap     int   iconWidth = 0; // Icon, gap     Icon  currentIcon = getIcon();     if(currentIcon != null && getText() != null) {         iconWidth = currentIcon.getIconWidth() + gap;     }         // nodeState dimensions     int diameter = getHeight() / 2;     int xNode = getX() + iconWidth + gap;     int yNode = getY() + ((getHeight() - diameter) / 2);     int xText = xNode + diameter + gap + 1;
    // Draw cell background color rectangle ***     int textWidth = metrics.stringWidth(text);     g.fillRect(xText +  + 1, getY() + 1,         textWidth, getHeight() - 1);
    // Draw icon     if (currentIcon != null) {         // Should center vertically ???      currentIcon.paintIcon(this,         g, getX() + 2, getY() + 2); // 2 by coincidence     }     // Draw nodeState, a color filled box
    g.setColor(calcNodeColor()); // Calculate per nodeState     g.fillRect(xNode, yNode, diameter, diameter);
    g.setColor(Color.darkGray);     g.drawRect(xNode, yNode, diameter, diameter);
    // Draw an X if has parex /**     if (item.hasParam()) {         // Top left to lower right         g.drawLine(xNode, yNode,             xNode + diameter, yNode + diameter);         // Lower left to top right         g.drawLine(xNode, yNode + diameter,             xNode + diameter, yNode);     } */     // Draw text     g.setColor(Color.black); // Foreground     int yText = getY() + metrics.getAscent() + 1;     g.drawString(text, xText, yText);
    // *** super.paint(g); // The easy way } //---------- Private Methods ----------------------------- private Color calcNodeColor() {     // Note background is cyan or white, squares have black border
    // White  - minimal capability     // Yellow - caution, only initialized     // Green  - going     // Red    - stopped     // Black  - error
    switch(item.getItemState() ) {         case Item.CLOSED:      return Color.white;         case Item.INITIALIZED: return Color.yellow;         case Item.STARTED:     return Color.green;         case Item.STOPPED:     return Color.red;         default: return Color.black;     } } //--- Std private static void print(String text) {     System.out.println(text); }

} // End class

[1997dec19]

jv'ex.TREE.APPLET

name::
* McsEngl.jv'ex.TREE.APPLET@cptIt,

a TreeView APPLET (FreeWare) http://www.pratique.fr/~rberthou

jv'ex.TREE.CellRenderer

name::
* McsEngl.jv'ex.TREE.CellRenderer@cptIt,

Nodes in different colors:
hi, here you go.........
JTree tree = new JTree(); tree.setCellRenderer(new DefaultTreeCellRenderer() { public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value,sel, expanded, leaf, row, hasFocus); DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; // Each time generate a random color // Color color = new Color(generated random number); // and set the color setColor(color);
return this; } });
in case of problems please let me know......
ramesh reddy

I meant setForeground(Color c); setColor() is not there..

jv'ex.tree.EXPANDROW

name::
* McsEngl.jv'ex.tree.EXPANDROW@cptIt,

tree.expandRow(3);

jv'ex.TREE.INSERT'NODE

name::
* McsEngl.jv'ex.TREE.INSERT'NODE@cptIt,

Last week there was a discussion about the proper method to use while dynamically adding nodes to a JTree.  The solution was to use the insertNodeInto() method of the DefaultTreeModel class.
Using this method, a simple method to append a node to the root of the tree would be as follows:
private static void appendToTreeRoot(JTree tree, Object object) {   
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();    DefaultMutableTreeNode node = new DefaultMutableTreeNode(object);    DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();    model.insertNodeInto(node, root, root.getChildCount()); }
While this code works, it relies on a specific implementation of the TreeModel interface.  This significantly reduces the reusability of this code.
I think methods need to be added to the TreeModel interface which allow inserting and removing nodes from the tree.  These could be the insertNodeInto() and removeNodeFromParent() methods defined in the DefaultTreeModel class.  If the model interfaces are not sufficient to completely define the model, significant amounts of code will be written relying on the default implementations of the model, reducing the benefit of the architecture.

Mike Foley
[1998jan04]

Mike,
Visual trees certainly are useful. For me, JTree and JTable are the real workhorses of Swing.
The intent of the TreeModule interface, while not documented, seems to be "read only" as far as the tree is concerned. This is in keeping with the philosophy that in a Model/View relationship, the View can only read the model, not modify it.
So what would be the best way to mutate the tree, not using the TreeModel interface, but given a TreeModel?  I believe that's your question. Hmmmm, these are questions that try men's souls....  :-)
This is certainly an MVC pattern. The model is the root node, not the TreeModel, which is merely useful to provide the View with a read only relationship to the model.
One solution would be to provide a NodeLibrary with static methods. This would allow the Controller(s) to mutate the Model efficiently, without mucking up the existing classes. This is a "clean" solution.
Another solution is to create a wrapper for a Swing node, such as a class extending DefaultMutableTreeNode. Your code never refers to a DefaultMutableTreeNode or a MutableTreeNode. The wrapper does this. The wrapper has convenience methods such as: - removeNodeFromTree - insertNode - getRootNode - getParentNode - getPathNodes - listTree (for debugging) - etc ad nodium (sic)  :-)
This is the solution I've taken. It has the great benefit of encapsulating the complexities of the nodes JTree uses, and allows one to add additional functionality. It works well with TreeModelEvent and TreeModel, since both are node oriented. It shields business objects from actual GUI objects. It makes life as simple as a walk on the beach....  If you'd like a copy, just ask.
BTW, thanks for your earlier suggestion to use insertNodeInto().
Jack Harich     
[1998jan04]

jv'ex.TREE.MOUSELISTENER

name::
* McsEngl.jv'ex.TREE.MOUSELISTENER@cptIt,

...
final JTree tree = new JTree();
...
MouseListener ml = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
 int selRow = tree.getRowForLocation(e.getX(), e.getY() );
 TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
 if(selRow != -1) {
   if(e.getClickCount() == 1)
     {tArea.append("\nSingle clik on: " + selRow); }
   else if(e.getClickCount() == 2)
     {tArea.append("\nDouble clik on: " + selPath.toString());
 }
}
};
tree.addMouseListener(ml);
...
'tree' and 'tArea' MUST be final.

jv'ex.TREE.PATH

name::
* McsEngl.jv'ex.TREE.PATH@cptIt,

You can define a path by putting in an array the nodes, as you created them in your program, not the values
 Object[] path = {root, lv1a, lv2a, lv3a};
 tree.scrollPathToVisible(new TreePath(path));
[nikos, 1997dec29]

jv'ex.TREE.REFRESH

name::
* McsEngl.jv'ex.TREE.REFRESH@cptIt,
* McsEngl.jv'ex.tree.update@cptIt,

If a node is added to a node as a child call nodesWereInserted on the tree model like this ((DefaultTreeModel)aTree.getModel()).nodesWereInserted(parentNode, childIndex); similarly if node was update call nodeChanged(), if deleted call nodesWereRemoved()...if the tree changed a lot then call...nodeStructureChanged(rootTreeNode); all methods work on the Tree Model.
Makarand -----Original Message----- From: Arvind Rao <arvind@medilinq.com> To: Advanced-Java <advanced-java@xcf.berkeley.edu>; Advanced-Swing <advanced-swing@eos.dk> Date: Friday, April 30, 1999 10:23 AM Subject: How to Update JTree in response to TreeDataModel changes?

>Hi, > >How do you update the JTree if the TreeDataModel is changed directly ?
[adv java {1999-04-30}]

R. Mark Volkmann wrote: > > What must be done to get a JTree to display a newly added node?> I have code like the following to add a node.  I can ask for the > children of "root" after adding a new node to it and it is there but the > new node doesn't display.> > // "tree" is a JTree.> // "root" is the root node of tree.> DefaultMutableTreeNode node = new DefaultMutableTreeNode(object); > root.add(node); > DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); > model.reload(); > > Are calls to invalidate() and validate() required?> I've tried them but they don't seem to help.>
One way is:    ((DefaultTreeModel)tree.getModel()).reload(); Due to unimplemented methods in JTree, one cannot just refresh a desired node. This technique refreshes and collapses the entire tree.
Happy Jack

>>>----------------------------------------------------<<< Jack Harich      Affiliated with: Atlanta Java Users Group       Java Consultant                   Java Second Language SIG happyjac@mindspring.com           Atlanta Java Consortium
[1998jan01]

If you are using the DefaultTree model, the documentation states:

public void insertNodeInto(MutableTreeNode newChild,                             MutableTreeNode parent,                             int index)
     Invoked this to insert newChild at location index in parents children.     This will then message nodesWereInserted      to create the appropriate event.      This is the preferred way to add children as it will create      the appropriate event.
I use this in my trees, and it works.  Only the altered node is drawn.
Mike Foley
[1998jan01]

jv'ex.TRY'CATCH

name::
* McsEngl.jv'ex.TRY'CATCH@cptIt,
* McsEngl.jv'ex.CATCH@cptIt,

EXAMPLE:
try
{
...
} catch(Exception e)
{
e.printStackTrace();
}

EXAMPLE:
try
{
...
} catch(Exception e) {}

EXAMPLE:
try
{
...
}
catch(Exception1 e) {}
catch(Exception2 e) {}
catch(Exception3 e) {}

EXAMPLE:
try
{
...
}
catch (FileNotFoundException ef) { System.err.println(ef.toString());  }
catch (IOException eio) {  System.err.println(eio.toString());  }
catch (BadLocationException e) {}

EXAMPLE:
try {
...
} catch (EmptyStackException ese) {
 nameParent3 = "none";
}
- This code has no sense, because the program stops when finds the exception.
On catch_statement we can put info useful to find out what went wrong with
System.out.println(e.toString());

jv'ex.U

name::
* McsEngl.jv'ex.U@cptIt,

jv'ex.UIManager

name::
* McsEngl.jv'ex.UIManager@cptIt,

   // Force SwingSet to come up in the Cross Platform L&F    try {   //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());   // If you want the System L&F instead, comment out the above line and   // uncomment the following:   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());    } catch (Exception exc) {   System.err.println("Error loading L&F: " + exc);      }
[jdk1.2]

jv'ex.unicode

name::
* McsEngl.jv'ex.unicode@cptIt,

UNICODE CHARACTER BLOCKS
Java uses the Unicode character set, which contains a series of subsections known as character blocks. For example, the letter "z" is part of the BASIC_LATIN block, while the character "\u0400" is within the CYRILLIC block.
This program shows how such blocks can be used:
public class uniblock { public static void main(String args[]) { char c;
c = 'z'; Character.UnicodeBlock block1 = Character.UnicodeBlock.of(c);
c = '\u0400'; Character.UnicodeBlock block2 = Character.UnicodeBlock.of(c);
System.out.println("block 1 = " + block1); System.out.println("block 2 = " + block2);
System.out.println("Are blocks equal? " + (block1 == block2)); } }
The output is:
block 1 = BASIC_LATIN block 2 = CYRILLIC Are blocks equal? false
This feature is useful in classifying characters. For example, the BASIC_LATIN category corresponds to the characters in the range \u0000 through \u007F, the values in the widely used, seven-bit ASCII character set
[JDC 1998dec]

>How do I use Unicode to display the alphabet of different languages ?
1. You have to have a unicode font installed.
2. You have to configure the font.properties file.
Netscape has a page that explains where you can get a unicode font and an updated font.properties file.  Check out http://developer.netscape.com/software/jdk/i18n.html
[1997dec05]

Go to http://www.javasoft.com/products/jdk/1.1/docs/guide/intl/fontprop.html

However, Java Examples in a Nutshell has a decent program to show off the various Unicode characters and their encodings. Just grab it at http://www.oreilly.com/catalog/jenut/examples/UnicodeDisplay.java

DISPLAYING UNICODE FOR A DECIMAL BASE:
import java.awt.*; import java.awt.event.*;
public class UnicodeTest    extends Frame implements ActionListener, ItemListener {
SymbolCanvas symbols; TextField baseText; static final int SYMBOL_BASE = 0x2200; static final int DINGBAT_BASE = 0x2700; static final int GREEK_BASE = 0x3300;
   UnicodeTest(){        super("UnicodeTest");        setLayout(new BorderLayout()); Panel panel = new Panel(); panel.add(new Label("Font:")); Choice fontList = new Choice(); String[] fontNames = getToolkit().getFontList(); for (int i = 4; i < fontNames.length; i++) { fontList.addItem(fontNames[i]); } for (int i = 0; i < 3; i++) { fontList.addItem(fontNames[i]); } fontList.addItemListener(this); panel.add(fontList); Font defaultFont = new Font("Helvetica", Font.PLAIN, 16);        Label bLabel = new Label("Unicode base (δεκαδικός):");        bLabel.setFont(new Font("Helvetica", Font.PLAIN, 14)); panel.add(bLabel);        baseText = new TextField(Integer.toString(900), 5); //baseText = new TextField(Integer.toHexString(900), 5); baseText.setFont(new Font("Monospaced", Font.PLAIN, 12)); baseText.addActionListener(this); panel.add(baseText); add("North", panel); ScrollPane sp = new ScrollPane(); symbols = new SymbolCanvas(defaultFont, 900); sp.add(symbols); add("Center", sp); //add("South", new Label("Symbols=0x2200, Dingbats=0x2700, Greek=0x3300"));        pack();        setSize(650, 500);        show();  addWindowListener(new MyAdapter()); }

public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { String fontName = (String)e.getItem(); symbols.setFont(new Font(fontName, Font.PLAIN, 20)); } }
public void actionPerformed(ActionEvent e) { try { int newBase = Integer.valueOf(e.getActionCommand(), 10).intValue(); symbols.setBase(newBase); } catch (NumberFormatException nfe) { Toolkit.getDefaultToolkit().beep(); baseText.select(0, Integer.MAX_VALUE); } }
static class MyAdapter extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } }
public static void main(String args[]) {      new UnicodeTest(); } }
//========================================================================= class SymbolCanvas extends Canvas { Font font = new Font("Helvetica", Font.PLAIN, 20); int charHeight; int charWidth; int charBase;
public SymbolCanvas(Font font, int base) { FontMetrics fm = Toolkit.getDefaultToolkit().getFontMetrics(font); charHeight = fm.getHeight() + 3; charWidth = fm.getMaxAdvance() + 4; charBase = base; setSize(charWidth * 16 + 60, charHeight * 16 + 10); }
public void setBase(int base) { charBase = base; repaint(); }
public void setFont(Font font) { this.font = font; repaint(); }
public void paint(Graphics g) { g.setFont(font); g.setColor(Color.black); char[] carray = new char[1]; int c = charBase; int y = 20; for (int v = 0; v < 16; v++) { g.drawString(Integer.toHexString(c), 10, y); int x = 60; for (int h = 0; h < 16; h++) { carray[0] = (char)c++; g.drawChars(carray, 0, 1, x, y); x += charWidth; } y += charHeight; } } }

>The question: Is Java Strings converted to a NULL terminated Unicode > string.> If not, why ? I think UTF strings is.> >/niels >

If the String in question is e.g. the result of a substring() call, the Unicode string will not be NULL terminated.
I thought this was a bug, and actually filed a bug report, but the reply from JavaSoft was quite clear: Unicode strings are NOT NULL-terminated.
[1997dec30]

jv'ex.Uploading'file

name::
* McsEngl.jv'ex.Uploading'file@cptIt,
* McsEngl.jve'ex.file.uploading@cptIt,

For uploading :
There is an excellent free component at http://www.jspsmart.com/
the only restriction is that it only works with jre 1.2 and higher.
[{2000-04-12}]

jv'ex.URL

name::
* McsEngl.jv'ex.URL@cptIt,

URL of a resource from a class:
 URL url = this.getClass().getResource("images\\new.gif");
 URL url = this.getClass().getResource("images/new.gif");

URL of a resource in the same directory of a class:
Class cls = EldLexicon.class;
URL letterToSoundURL = cls.getResource("cmulext_lts.txt");

URL url = new URL("file:" + fileName);

URL url = null;
String prefix = "file:" + System.getProperty("user.dir") +System.getProperty("file.separator");
try
{
 url = new URL(prefix + "example.html");
}
catch (java.net.MalformedURLException exc)
{
 System.err.println("Attempted to open example.html " + "with a bad URL: " + url);
 url = null;
}

jv'ex.URL-TO-BufferedReader

name::
* McsEngl.jv'ex.URL-TO-BufferedReader@cptIt,

     URL url = new URL(sUrlFile);//file:...
     URLConnection connection = url.openConnection();
     InputStream is = connection.getInputStream();
     InputStreamReader isr = new InputStreamReader(is);
     BufferedReader br = new BufferedReader(isr);

jv'ex.URL-TO-INPUTSTREAM

name::
* McsEngl.jv'ex.URL-TO-INPUTSTREAM@cptIt,

input: url
output: FileInputStream or buffered input stream.

public static InputStream getInputStream(URL url) throws IOException {
 if (url.getProtocol().equals("file")) {
    return new FileInputStream(url.getFile());
 } else {
  return url.openStream();
 }
}

new URL(url).openStream();

jv'ex.Url-to-String

name::
* McsEngl.jv'ex.Url-to-String@cptIt,

private String getURLDirName(URL url) {
String urlFileName = url.getPath();
int i = urlFileName.lastIndexOf('!');
if (i == -1) {
i = urlFileName.length();
}
int dir = urlFileName.lastIndexOf("/", i);
if (!urlFileName.startsWith("file:")) {
return "";
}
return urlFileName.substring(5,dir) + "/";
}
[FreeTTS]

jv'ex.URL.FILE

name::
* McsEngl.jv'ex.URL.FILE@cptIt,

CONVERTING PATHNAMES TO URLS
A new feature of the Java(tm) 2 Platform is the File.toURL method, which is used to convert a pathname specification to a URL (Uniform Resource Locator, used on the Web).
A simple example that illustrates this method is:
import java.io.*; import java.net.*; public class url { public static void main(String args[]) { if (args.length != 1) { System.err.println("missing filename"); System.exit(1); } File f = new File(args[0]); try { URL u = f.toURL(); System.out.println(u); } catch (MalformedURLException e) { System.err.println(e); } } }
For input of:
$ java url paper.txt (current directory is t:\tmp)
output is:
file:/T:/tmp/paper.txt
and this URL can be specified to view the local file in Netscape or Microsoft web browsers.
Such a method is useful in applications that have to treat local pathnames and web-based resources in a uniform way.
[JDC 1999feb17]

URL createURL(String fileName)
{
File here = new File(".");
URL baseURL;
URL docURL;
baseURL = new URL("file", "localhost", here.getAbsolutePath());
docURL = new URL(baseURL,fileName);
}

Here is what I use:
package com.jstud.util;
import java.io.File; import java.net.URL; import java.net.MalformedURLException;
// // // NetUtil // // public class NetUtil {   public static URL createFileURL (File file) {   return createFileURL(file.getAbsolutePath()); }
  public static URL createFileURL (String path) {         URL url = null;         try         {             // This is a bunch of weird code that is required to             // make a valid URL on the Windows platform, due             // to inconsistencies in what getAbsolutePath returns.            String fs = File.separator;             if (fs.length() == 1)             {                 char sep = fs.charAt(0);                 if (sep != '/')                     path = path.replace(sep, '/');                 if (path.charAt(0) != '/')                     path = '/' + path;             }             path = "file://" + path;             url = new URL(path);         }         catch (MalformedURLException e)         {         }         return url; } }
Don Park http://www.quake.net/~donpark/index.html


xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev@ic.ac.uk Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ To (un)subscribe, mailto:majordomo@ic.ac.uk the following message; (un)subscribe xml-dev To subscribe to the digests, mailto:majordomo@ic.ac.uk the following message; subscribe xml-dev-digest List coordinator, Henry Rzepa (mailto:rzepa@ic.ac.uk)

jv'ex.URL.LOGIN'PASSWORD

name::
* McsEngl.jv'ex.URL.LOGIN'PASSWORD@cptIt,

Please check out this URL it might have what you want
http://www.innovation.ch/java/HTTPClient/index.html
David L. Wasler dwasler@isearch.com http://www.isearch.com/

jv'ex.UTF8'STRING

name::
* McsEngl.jv'ex.UTF8'STRING@cptIt,

At 9:17 AM -0800 2/5/98, Mitch Gart wrote:
>I'm working with a program that's getting back a String from a native >interface.  I think there is a bug in the native interface, where >the String is coming back in UTF-8 encoding instead of Unicode encoding.
>Are there any Java classes that convert between Unicode and UTF-8?
>I've seen C methods in the JNI that do this, but I'd prefer to fix this >problem in Java instead of in C.  TIA, >

Is it really a string being returned by the native method and not a byte array? If you've really got a byte array, then you can create a new String from it like this:
String s = new String(b, "UTF8");
If you really are getting a String back that's got its characters mixed up, then I don't know what to do. You'have to convert the String to raw bytes, then convert back using the above constructor.  But the more I think about it the harder I find it to believe that's possible. It would just screw up too much else in the VM. For instance, while a Unicode String always has an even number of bytes, a UTF-8 string does not.
Elliotte Rusty Harold

jv'ex.V

name::
* McsEngl.jv'ex.V@cptIt,

jv'ex.VARIABLE

name::
* McsEngl.jv'ex.VARIABLE@cptIt,

byte x;
This statement creates a new variable called x. Since we have not given x any value, it holds the default value of 0.
[DSWgroup TUTORIAL, 1996]

/**
* A String type
*/
public final static PropertyType STRING = new PropertyType("String") {
/**
* Determines if this is a valid string
*
* @param obj
* the object to check
* @return true if the object is a valid string
*/
boolean isValid(Object obj) {
return obj instanceof String;
}
};

jv'ex.Vector

name::
* McsEngl.jv'ex.Vector@cptIt,

CLASS#ql:jv'vector#:

Vector<String> voc = new Vector<String>();

indexOf(Object elem)
Searches for the first occurence of the given argument, testing for equality using the equals method.

// reads in a file of lines and writes the lines out in reverse order

import java.util.Vector;
import java.util.Enumeration;
import java.io.*;

class Main {
public static void main (String[] args) {
if (args.length != 2) {
System.err.println("Usage: Main inputfile outputfile");
System.exit(1);
}
try {
DataInputStream in = new DataInputStream(new FileInputStream(args[0]));
DataOutputStream out = new DataOutputStream(new FileOutputStream(args[1]));
Vector buf = new Vector(100);
String str;
while ((str = in.readLine()) != null)
buf.addElement(str);
in.close();
for (int i = buf.size()-1; i >=0; i--) {
out.writeBytes((String)buf.elementAt(i));
out.writeByte('\n');
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

jv'ex.Vector'To'Array

name::
* McsEngl.jv'ex.Vector'To'Array@cptIt,

From a Vector of type1 to an Array of type1:

Vector<String> voc = new Vector<String>();
String ch[]=new String[voc.size()];
ch=voc.toArray(ch);

jv'ex.W

name::
* McsEngl.jv'ex.W@cptIt,

jv'ex.WHILE

name::
* McsEngl.jv'ex.WHILE@cptIt,

GENERAL-CONCEPT#ql:jv'while'statement#.

while (System.in.read() != -1)
count++;
// That is, while expression is true, do statement.
[JavaSoft Tutorial, 1996jul06]

// infinite while loop
//use "break" to exit the loop:
while (true)
{
c = (char) irs.read();
System.out.print(c);
System.out.flush();
if (c == '\n') break;
}

while inside another:
int i=0;
while (i<20)
{
System.out.println("while1="+i);
i++;
if (i>20)break;

while(i<15)
{
i++;
if(i>10) continue;
System.out.println("while2="+i);
}//while2

}//while1

outputs:
while1=0
while2=2 while2=3 while2=4 while2=5 while2=6 while2=7 while2=8 while2=9 while2=10
while1=15 while1=16 while1=17 while1=18 while1=19
[nikos, {1999-03-13}]

while with Enumeration of the keys of a hashtable:
                                Enumeration en = ht.keys();
                                while (en.hasMoreElements()) {
                                        String el = (String)en.nextElement();
                                        countrec crec = (countrec)ht.get(el);
                                        System.out.println(crec.count +" " + el);
                                }

ENDLESS:
for(;;) {
...
}

while (true){
...
}

RECURSION: Reads, endlesly, the next "space"+"word"
int j=1;
String tmlExp=chExp;
while (true)
{
 //if x+1 TxBlankspace
 TxNode cNd1 = vc.get(x+j);
 if(!cNd1.txnd_s_Type.equals("TxBlankspace"))
 break;

 //check x+(x+2) match
 TxNode cNd2 = vc.get(x+j+1);
 tmlExp=tmlExp+" "+cNd2.txnd_s_Expression;

 if (line.indexOf("TxEXP=\""+tmlExp+" ")!=-1){
   j=j+2;
   continue;
 }
 else
   break;
}

jv'ex.Window

name::
* McsEngl.jv'ex.Window@cptIt,

class PopupMenu extends Window {
PopupMenu(Frame f) {
super(f);
}
public void paint(Graphics g) {
FontMetrics fm = g.getFontMetrics();
String s = "Popup Menu";
g.drawString(s,
(size().width-fm.stringWidth(s))/2,
(size().height-fm.getHeight())/2 + fm.getAscent());
}
}

jv'ex.WINDOW.CLOSE1.0:
(1.0.2)EXAMPLE TO CLOSE A WINDOW:
public boolean handleEvent(Event e) {
 if (e.id == Event.WINDOW_DESTROY) {
  System.exit(0);
 }
 return super.handleEvent(e);
}

jv'ex.WINDOW.DISPOSE'SHOW:
//With the following code you can display again a disposed window.
frameFind.show();
frameFind.toFront();
frameFind.requestFocus();

jv'ex.WINDOW.RESTORE

name::
* McsEngl.jv'ex.WINDOW.RESTORE@cptIt,

This is working for our applications to restore a minimized window. Only the first two lines are really needed I think.
frame.removeNotify(); frame.addNotify(); frame.setVisible(true); frame.toFront(); frame.requestFocus();
[adv java 2000oct10]

jv'ex.WRITER

name::
* McsEngl.jv'ex.WRITER@cptIt,

WRITING TO CONSOLE(1.2):
defaultWriter = new BufferedWriter(new PrintWriter (System.out));

WRITING TO FILE(1.2):
BufferedWriter bw = new BufferedWriter (new FileWriter (fileString));

WRITE TO JTextPane(1.2):
ByteArrayOutputStream baos = new ByteArrayOutputStream();
public static PrintStream ps = new PrintStream(baos);
XMLOutputStream xout = d.createOutputStream(ps);
d.show(xout); /* put the info from memory(d) to xout */
try {doc.insertString(doc.getLength(), baos.toString(), s2); }
catch (BadLocationException e) {}

jv'ex.X

name::
* McsEngl.jv'ex.X@cptIt,

jv'ex.Y

name::
* McsEngl.jv'ex.Y@cptIt,

jv'ex.Z

name::
* McsEngl.jv'ex.Z@cptIt,

jv'ex.ZIP-FILES

name::
* McsEngl.jv'ex.ZIP-FILES@cptIt,

UNPACKING ZIP FILES. 
Zip files are used widely for packaging and distributing software.  ZipFile is a handy tool for doing the following: reading the contents of .zip and .jar files, obtaining a list of the files they contain, and reading the contents of individual files.  Jar files, used in Java software distribution, employ the Zip file format as well.
For more information on Jar files, see JDC Tech Tips No.  1 (September 3, 1997) at the following address:
http://developer.javasoft.com/developer/technicalArticles/TechTips/
java.util.ZipFile is a class used to represent a Zip file.  You construct a ZipFile object, and then iterate over the entries in the file, each of which is a ZipEntry.  Entries can be checked to determine if they are directories and read from as if they were individual files, in addition to other functions.  The ZipFile class is found in both JDK 1.1 and JDK 1.2 beta2.


Here is an example of using ZipFile to dump out the entries and contents of a .zip file.  The program accepts a single file argument, along with an optional -contents flag that indicates the contents should also be displayed (note that printing a binary file to screen does not work well).

        import java.io.*;         import java.util.Enumeration;         import java.util.zip.*;                 public class zipview {                 public static void dump(ZipFile zf, ZipEntry ze)                     throws IOException                 {                         System.out.println(">>>>> " + ze.getName());                         InputStream istr = zf.getInputStream(ze);                         BufferedInputStream bis =                             new BufferedInputStream(istr);                         FileDescriptor out = FileDescriptor.out;                         FileOutputStream fos = new FileOutputStream(out);                         int sz = (int)ze.getSize();                         final int N = 1024;                         byte buf[] = new byte[N];                         int ln = 0;                         while (sz > 0 &&  // workaround for bug                             (ln = bis.read(buf, 0, Math.min(N, sz))) != -1) {                                 fos.write(buf, 0, ln);                                 sz -= ln;                         }                         bis.close();                         fos.flush();                 }                         public static void main(String args[])                 {                         boolean dump_contents = false;                         int arg_indx = 0;                         ZipFile zf = null;                                 if (args.length >= 1 && args[0].equals("-contents")) {                                 dump_contents = true;                                 arg_indx++;                         }                         if (arg_indx >= args.length) {                                 System.err.println("usage: [-contents] file");                                 System.exit(1);                         }                                 try {                                 zf = new ZipFile(args[arg_indx]);                         }                         catch (ZipException e1) {                                 System.err.println("exception: " + e1);                         }                         catch (IOException e2) {                                 System.err.println("exception: " + e2);                         }                                 Enumeration list = zf.entries();                         while (list.hasMoreElements()) {                                 ZipEntry ze = (ZipEntry)list.nextElement();                                 if (!dump_contents || ze.isDirectory()) {                                         System.out.println(ze.getName());                                         continue;                                 }                                 try {                                         dump(zf, ze);                                 }                                 catch (IOException e) {                                         System.err.println("exception: " + e);                                 }                         }                 }         }
This program includes a workaround for a bug in JDK versions 1.1 and 1.2 beta 2, that is, bug#4040920 in the JDC Bug Parade database.  Normally, when you read from a low-level file input stream, you read chunks of, say, 1024 bytes at a time, and you don't worry whether that many bytes are actually left to read.  This approach fails with the input stream returned by getInputStream for a given Zip file entry, and the workaround is to never try to read more bytes from the entry than are actually there.
[jdc {1998-04-23}]

jv'archetype

name::
* McsEngl.jv'archetype@cptIt,
* McsEngl.jv'DATA@cptIt,
* McsEngl.jv'DATA'VALUE@cptIt,
* McsEngl.jv'VALUE@cptIt,
* McsElln.ΤΙΜΗ@cptIt,

_DEFINITION:
VALUE is an INSTANCE of a data-type or a REFERENCE to an instance of a data-type.
Because 'value' in java call and a reference to an instance of a data-type, the name 'value' is used diferently from other diciplines (especially math) where with value call specific-information of a generic one.
[hknu_2002-04-30]
===
There are, correspondingly [to data-types#ql:jv'data'type#], two kinds of data values that
- can be stored in variables,
- passed as arguments,
- returned by methods,
- and operated on:
primitive values and reference values.
[lang spec, 1996aug]

jv'VALUE.PRIMITIVE

name::
* McsEngl.jv'VALUE.PRIMITIVE@cptIt,
* McsEngl.jv'PRIMITIVE'VALUE@cptIt,

jv'VALUE.REFERENCE

name::
* McsEngl.jv'VALUE.REFERENCE@cptIt,
* McsEngl.jv'REFERENCE'VALUE@cptIt,
* McsEngl.jv'REFERENCE@cptIt,

_DEFINITION:
The reference values (often just references)
are pointers to these objects, and a special null reference, which refers to no object.
[lang spec, 1996aug]
===
** The value of a reference-variable#ql:jv'reference'variable# is a reference (a pointer in other terminology) to the actual value or set of values represented by the variable.
For example, the character-counting program declares (but never uses) one variable of reference type, args, which is declared to be an array of String objects. When used in a statement or expression, the name args evaluates to the address of the memory location where the array lives.
[JavaSoft Tutorial, 1996jul06]

One common complaint about Java among programmers accustomed to traditional languages like C and Pascal is that the lack of pointers makes the creation of data structures too difficult. WhatΉs been removed from Java is not pointers, but rather the ability to do arithmetic with pointers, convert integers into pointers, and other such tricks that cause many bugs in C programs. Pointers themselves are still present, although without pointer arithmetic and explicit memory allocation and deallocation. pointers without these powers are called references. References allow you to create all the data structures you desire without introducing all the bugs common to C code.
[E. HAROLD Java Developer's Resource]

jv'archetype.COLLECTION

name::
* McsEngl.jv'archetype.COLLECTION@cptIt,

_DESCRIPTION:
To summarize what we’ve seen so far, your first, most efficient choice to hold a group of objects should be an array, and you’re forced into this choice if you want to hold a group of primitives. In the remainder of the chapter we’ll look at the more general case, when you don’t know at the time you’re writing the program how many objects you’re going to need, or if you need a more sophisticated way to store your objects. Java provides four types of collection classes to solve this problem: Vector, BitSet, Stack, and Hashtable. Although compared to other languages that provide collections this is a fairly meager supply, you can nonetheless solve a surprising number of problems using these tools.
[Eckel, Thinking in Java, 1998jan]

ITERATOR:
In any collection class, you must have a way to put things in and a way to get things out. After all, that’s the primary job of a collection – to hold things.
[Eckel, Thinking in Java, 1998jan]

jv'CODE

name::
* McsEngl.jv'CODE@cptIt,
* McsEngl.jvcode@cptIt,

_SPECIFIC:
* binary-code##
* source-code##

jv'codeSrc.collection.ARRAY

name::
* McsEngl.jv'codeSrc.collection.ARRAY@cptIt,
* McsEngl.jv'ARRAY@cptIt,
* McsEngl.jv'TYPE.ARRAY@cptIt,

_DEFINITION:
The reference-types#ql:jv'type.reference# (§4.3) are
- class types,
- interface types, and
- array types.
[lang spec, 1996aug]

Java arrays are objects#ql:jv'object# (§4.3.1), are dynamically created, and may be assigned to variables of type Object (§4.3.2). All methods of class Object may be invoked on an array.
[lang spec, 1996aug]

An array is a collection of variables of the same type.
[Harold course 1997spring]

An array is simply a sequence of objects, all the same type and packaged together under one identifier name.
[B. ECKEL, Thinking In Java, 1997aug18, 117]

_EVALUATION:
There are two issues that distinguish arrays from other types of containers: efficiency and type.
- The array is the most efficient way that Java provides to store and access objects (actually, object handles)...
- This is the second place where an array is superior to the generic containers: when you create an array, you create it to hold a specific type. This means you get compile-time type checking to prevent you from putting the wrong type in, or mistaking the type that you’re extracting.
[B. ECKEL, Thinking In Java, 1997aug18, 207]

RELATION TO VECTOR:
a Vector is measurably less efficient than an array.
[B. ECKEL, Thinking In Java, 1997aug18, 207]

jvarray'ACCESS

name::
* McsEngl.jvarray'ACCESS@cptIt,

A component of an array is accessed by an array access expression (§15.12) that consists of an expression whose value is an array reference followed by an indexing expression enclosed by [ and ], as in A[i]. All arrays are 0-origin.
[lang spec, 1996aug]

jvarray'CREATION

name::
* McsEngl.jvarray'CREATION@cptIt,

_DEFINITION:
An array is created by
- an array-creation-expression#ql:jv'expression.array'creation# (§15.9) or
- an array-initializer#ql:jv'array'initializer# (§10.6).
[lang spec, 1996aug]

To allocate memory for the elements of the array, you must instantiate the array. You do this using Jv's new operator.
[JavaSoft Tutorial, 1996jul06]

elementType[] arrayName = new elementType[arraySize]

Example#ql:jv'ex.array'creation#.

jvarray'DECLARATION

name::
* McsEngl.jvarray'DECLARATION@cptIt,
* McsEngl.jv'ARRAY'DEFINITION@cptIt,

_DEFINITION:
like other variables, a declaration of an array has two primary components:
- the array's type and
- the array's name.
[JavaSoft Tutorial, 1996jul06]

Declaring an array merely says what it is. It does NOT CREATE the array. To actually create the array (or any other object) use the new operator.
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

To define an array you just follow your identifier with empty square brackets:
int a1[];
However, you can also put the square brackets after the type name to produce exactly the same meaning:
int[] a1;
This might be considered a more sensible syntax, since it says that the type is “an int array.” But the former style of definition conforms to expectations from C and C++ programmers.
... all you have at this point [of declaration] is a handle to an array, and there’s been no space allocated for the array itself. To create storage for the array you must write an initialization expression.
[B. ECKEL, Thinking In Java, 1997aug18, 117]

Example#ql:jv'ex.array'declaration#.

jvarry'INITIALIZER

name::
* McsEngl.jvarry'INITIALIZER@cptIt,
* McsEngl.jv'ARRAY'INITIALIZATION@cptIt,

An array initializer may be specified in a declaration, creating an array and providing some initial values:
#jv'ArrayInitializer#:
{ VariableInitializersopt ,opt }
#jv'VariableInitializers#:
VariableInitializer#ql:[Field JAVA:VariableInitializer]#
VariableInitializers , VariableInitializer
An array initializer is written as a comma-separated list of expressions, enclosed by braces "{" and "}".
[lang spec, 1996aug]

Example#ql:jv'ex.array'initialization#.

jvarray'EVALUATION

name::
* McsEngl.jvarray'EVALUATION@cptIt,

One of the primary goals of Java is safety, so many of the problems that plague programmers in C and C++ are not repeated in Java. A Java array is guaranteed to be initialized and cannot be accessed outside of its range. The range checking comes at the price of having a small amount of memory overhead on each array as well as verifying the index at run time, but the assumption is that the safety and increased productivity is worth the expense.
[B. ECKEL, Thinking In Java, 1997aug18, 48]

jvarray'MEMBER

name::
* McsEngl.jvarray'MEMBER@cptIt,

The members of an array type are all of the following:
- The public final field length, which contains the number of components of the array (length may be positive or zero)
- The public method clone, which overrides the method of the same name in class Object and throws no checked exceptions
- All the members inherited from class Object; the only method of Object that is not inherited is its clone method
[lang spec, 1996aug]

jvarray'VALUES

name::
* McsEngl.jvarray'VALUES@cptIt,

Now that your array has been allocated some memory you can assign values to its elements and retrieve those values:
for (int j = 0; j < arrayOfInts.length; j ++) {
arrayOfInts[j] = j;
System.out.println("[j] = " + arrayOfInts[j]);
}

An Array of Characters is Not a String
[lang spec, 1996aug]

jvarray'VARIABLE

name::
* McsEngl.jvarray'VARIABLE@cptIt,

An array object contains a number of variables.
The number of variables may be zero, in which case the array is said to be empty.
The variables contained in an array have no names; instead they are referenced by array access expressions that use nonnegative integer index values. These variables are called the components of the array [jv'array'component#ql:"jv'variable.array'component"#]. If an array has n components, we say n is the length [jv'array'length] of the array; the components of the array are referenced using integer indices from 0 to n-1, inclusive.
[lang spec, 1996aug]

jvarray.EXAMPLE#ql:jv'ex.array#

name::
* McsEngl.jvarray.EXAMPLE@cptIt,

jvarray.PRIMITIVE

name::
* McsEngl.jvarray.PRIMITIVE@cptIt,

arrays of objects and arrays of primitives are almost identical in their use. The only difference is that arrays of objects hold handles while arrays of primitives hold the primitive values directly.
[Eckel, Thinking in Java, 1998jan, 263]

jv'codeSrc.collection.CLASS

name::
* McsEngl.jv'codeSrc.collection.CLASS@cptIt,
* McsEngl.jv'class@cptIt,

=== _NOTES: You might expect there to be a keyword called “type” and that certainly would have made sense. Historically, however, most object-oriented languages have used the keyword class to say: “I’m about to tell you what a new type of object looks like.”
[B. ECKEL, Thinking In Java, 1997aug18, 50]

_DEFINITION:
The reference-types#ql:jv'type.reference# are
- class types,
- interface types, and
- array types.
[lang spec, 1996aug]

_DEFINITION:
A class--the basic building block of an object-oriented language such as Java--is
a template that describes the data and behavior associated with instances of that class.
[JavaSoft Tutorial, 1996jul06]

_DEFINITION:
A class is a blueprint or prototype that you can use to create many objects.
[Java Tutorial, 1996dec24]

When we want to create an object, we must first create a class which defines the properties of a set of objects. Then, from this class, we can make as many objects as we need.
[DSWgroup Tutorial]

Frequently, we say that an object's class is the object's type.
[Tutorial]

A class
is a blueprint or prototype that you can use to create many objects.
The implementation of a class is comprised of two components:
- the class declaration and
- the class body.
classDeclaration {
classBody
}

The data associated with a class or object is stored in variables; the behavior associated with a class or object is implemented with methods.

jv'CLASS'BODY

name::
* McsEngl.jv'CLASS'BODY@cptIt,

The class body
follows the class declaration and is embedded within curly braces { and }. The class body contains declarations for the class's member variables, and declarations and implementations for the class's methods.

PRODUCTION:
A class body may contain
- declarations of members-of-the-class#ql:jv'class'member#, that is, fields (§8.3) and methods (§8.4).
- A class body may also contain static initializers (§8.5) and
- declarations of constructors (§8.6) for the class.
#jv'ClassBody#:
{ ClassBodyDeclarationsopt }
#jv'ClassBodyDeclarations#:
ClassBodyDeclaration
ClassBodyDeclarations ClassBodyDeclaration
#jv'ClassBodyDeclaration#:
ClassMemberDeclaration
StaticInitializer
ConstructorDeclaration
#jv'ClassMemberDeclaration#:
FieldDeclaration
MethodDeclaration
[lang spec, 1996aug]

jv'CLASS'CONSTRUCTOR

name::
* McsEngl.jv'CLASS'CONSTRUCTOR@cptIt,
* McsEngl.jv'CONSTRUCTOR@cptIt,

_DEFINITION:
ALL Java classes have special methods called constructors that are used to initialize a new object of that type. Constructors have the same name as the class.
[Java Tutorial, 1996dec24]

Constructors (§8.6) are not members.
[lang spec, 1996aug]

Constructors (§8.6) are similar to methods, but cannot be invoked directly by a method call; they are used to initialize new class instances.
Like methods, they may be overloaded (§8.6.6).
[lang spec, 1996aug]

EVOLUTION:
C++ introduced the concept of a constructor, a special method automatically called when an object is created. Java also adopted the constructor,
[B. ECKEL, Thinking In Java, 1997aug18, 99]

jv'CONSTRUCTOR'BODY

name::
* McsEngl.jv'CONSTRUCTOR'BODY@cptIt,

PRODUCTION:
#jv'ConstructorBody#:
{ ExplicitConstructorInvocationopt BlockStatements#ql:[Field JAVA:BlockStatements]#opt }
#jv'ExplicitConstructorInvocation#:
this ( ArgumentListopt ) ;
super ( ArgumentListopt ) ;
[lang spec, 1996aug]

jv'CONSTRUCTOR'CALL

name::
* McsEngl.jv'CONSTRUCTOR'CALL@cptIt,

allways with 'new' eg: new SCSC()

jv'CONSTRUCTOR'DECLARATION

name::
* McsEngl.jv'CONSTRUCTOR'DECLARATION@cptIt,

A constructor is used in the creation of an object that is an instance of a class:
#jv'ConstructorDeclaration#:
ConstructorModifiersopt ConstructorDeclarator
Throwsopt ConstructorBody
#jv'ConstructorDeclarator#:
SimpleTypeName ( FormalParameterListopt )
[lang spec, 1996aug]

jv'CONSTRUCTOR'MODIFIER

name::
* McsEngl.jv'CONSTRUCTOR'MODIFIER@cptIt,

PRODUCTION:
#jv'ConstructorModifiers#:
ConstructorModifier
ConstructorModifiers ConstructorModifier
#jv'ConstructorModifier#: one of
public protected private
[lang spec, 1996aug]

jv'CONSTRUCTOR'NAME

name::
* McsEngl.jv'CONSTRUCTOR'NAME@cptIt,

The next challenge is what to name this method. There are two issues. The first is that any name you use could clash with a name you might like to use as a member in the class. The second is that because the compiler is responsible for calling the constructor, it must always know which method to call. The C++ solution seems the easiest and most logical, so it’s also used in Java: The name of the constructor is the same as the name of the class. It makes sense that such a method will be called automatically on initialization.
...
Note that the coding style of making the first letter of all methods lower case must necessarily be lifted for constructors, since the name of the constructor must match the name of the class exactly.
[B. ECKEL, Thinking In Java, 1997aug18, 100]

jv'CONSTRUCTOR.DEFAULT

name::
* McsEngl.jv'CONSTRUCTOR.DEFAULT@cptIt,

If a class contains no constructor declarations, then a default constructor that takes no parameters is automatically provided:
- If the class being declared is the primordial class Object, then the default constructor has an empty body.
- Otherwise, the default constructor takes no parameters and simply invokes the superclass constructor with no arguments.
[lang spec, 1996aug]

jv'CLASS'CREATION

name::
* McsEngl.jv'CLASS'CREATION@cptIt,

jv'COMPOSITION

name::
* McsEngl.jv'COMPOSITION@cptIt,

_DEFINITION:
The simplest way to reuse a class is to place an object of that class inside a new class: we call this “creating a member object.” Your new class can be made up of any number and type of other objects, whatever is necessary to achieve the functionality desired in your new class. This concept is called COMPOSITION, since you are composing a new class from existing classes. Sometimes composition is referred to as a “has-a” relationship, as in “a car has a trunk.” Composition comes with a great deal of flexibility. The member objects of your new class are usually private, making them inaccessible to client programmers using the class. Thus you can change those members without disturbing existing client code. You can also change the member objects at run time, which provides great flexibility. Inheritance, which is described next, does not have this flexibility since the compiler must place restrictions on classes created with inheritance.

Because inheritance is so important in object-oriented programming it is often very highly emphasized, and the new programmer can get the idea that inheritance should be used everywhere. This can result in awkward and overcomplicated designs.

Instead, you should first look to composition when creating new classes, since it is simpler and more flexible. If you take this approach, your designs will stay cleaner. When you need inheritance, it will be reasonably obvious.
[B. ECKEL, Thinking In Java, 1997aug18, 27]

jv'ENCAPSULATION

name::
* McsEngl.jv'ENCAPSULATION@cptIt,

Access control is often referred to as implementation hiding. Wrapping data and methods within classes (combined with implementation hiding this is often called encapsulation)
[B. ECKEL, Thinking In Java, 1998jan]

INHERITANCE#ql:jv'inheritance#

jv'CLASS'DECLARATION

name::
* McsEngl.jv'CLASS'DECLARATION@cptIt,

jv'CLASS'DEFINITION

PRODUCTION:
A class declaration specifies a new reference type:
#jv'ClassDeclaration#:
ClassModifiers#ql:[Field JAVA:ClassModifiers]#opt class Identifier#ql:[Field JAVA:Identifier]# Super#ql:[Field JAVA:Super]#opt Interfaces#ql:[Field JAVA:Interfaces]#opt ClassBody#ql:[Field JAVA:ClassBody]#
[lang spec, 1996aug]

A class declaration looks like this:

[modifiers] class ClassName [extends SuperClassName] [implements InterfaceNames] {
. . .
}

The items between [ and ] are optional. A class declaration defines the following aspects of the class:
* modifiers declare whether the class is public, abstract, or final
* ClassName sets the name of the class you are declaring
* SuperClassName is the name of ClassName's superclass
* InterfaceNames is a comma-delimited list of the interfaces implemented by ClassName

Of the items in a class declaration, only the class keyword and the class name are required. The others are optional. If you do not make an explicit declaration for the optional items, the Java compiler assumes certain defaults (a non-final, non-public, non-abstract, subclass of Object that implements no interfaces).

class HelloWorldApp {
public static void main (String args[]) {
System.out.println("Hello World!");
}
}

The bold line in the listing above begins a class definition block. A class--the basic building block of an object-oriented language such as Java--is a template that describes the data and behavior associated with instances of that class. When you instantiate a class you create an object that looks and feels like other instances of the same class. The data associated with a class or object is stored in variables; the behavior associated with a class or object is implemented with methods.

Julia Child's recipe for rack of lamb is a real-world example of a class. Her rendition of the rack of lamb is one instance of the recipe, and mine is quite another. (While both racks of lamb may "look and feel" the same, I imagine that they "smell and taste" different.)

A more traditional example from the world of programming is a class that represents a rectangle. The class would contain variables for the origin of the rectangle, its width, and its height. The class might also contain a method that calculates the area of the rectangle. An instance of the rectangle class would contain the information for a specific rectangle, such as the dimensions of the floor of your office, or the dimensions of this page.

jv'CLASS'MODIFIER

name::
* McsEngl.jv'CLASS'MODIFIER@cptIt,

PRODUCTION:
A class declaration may include class modifiers.
#jv'ClassModifiers#:
ClassModifier
ClassModifiers ClassModifier
#jv'ClassModifier#: one of
public abstract final
[lang spec, 1996aug]

ABSTRACT:
declares that your class is an abstract class. Abstract classes are intended to be subclassed and cannot be instantiated.
[TUTORIAL]

FINAL:
declare that your class cannot be subclassed.
[TUTORIAL]

PUBLIC:
The public modifier declares that the class can be used by objects outside the current package. By default a class can only be used by other classes in the same package in which it is declared.
[Java Tutorial, 1996dec24]

jv'CLASS'DIRECT'SUBCLASS

name::
* McsEngl.jv'CLASS'DIRECT'SUBCLASS@cptIt,

The optional extends clause in a class declaration specifies the direct superclass of the current class. A class is said to be a direct subclass of the class it extends.
[lang spec, 1996aug]

jv'CLASS'DIRECT'SUPERCLASS

name::
* McsEngl.jv'CLASS'DIRECT'SUPERCLASS@cptIt,

PRODUCTION:
The optional extends clause in a class declaration specifies the direct superclass of the current class. A class is said to be a direct subclass of the class it extends. The direct superclass is the class from whose implementation the implementation of the current class is derived. The extends clause must not appear in the definition of the class java.lang.Object (§20.1), because it is the primordial class and has no direct superclass. If the class declaration for any other class has no extends clause, then the class has the class java.lang.Object as its implicit direct superclass.
#jv'Super#:
extends ClassType#ql:[Field JAVA:ClassType]#
[lang spec, 1996aug]

A Java class can implement multiple interfaces but can only inherit from a single superclass.

jv'CLASS'DIRECT'SUPERINTERFACE

name::
* McsEngl.jv'CLASS'DIRECT'SUPERINTERFACE@cptIt,

PRODUCTION:
The optional implements clause in a class declaration lists the names of interfaces that are direct superinterfaces of the class being declared:
#jv'Interfaces#:
implements InterfaceTypeList#ql:[Field JAVA:InterfaceTypeList]#
#jv'InterfaceTypeList#:
InterfaceType#ql:[Field JAVA:InterfaceType]#
InterfaceTypeList , InterfaceType
[lang spec, 1996aug]

_DEFINITION:
what's an interface? An interface declares a set of methods and constants without specifying the implementation for any of the methods.
When a class claims to implement an interface, it's claiming to provide implementations for ALL of the methods declared in the interface.
[Java Tutorial, 1996dec24]

jv'CLASS'LOAD

name::
* McsEngl.jv'CLASS'LOAD@cptIt,
* McsEngl.jv'CLASS'LOADING@cptIt,

RELATION TO TRADITIONAL LANGUAGES:
In many more traditional languages, programs are loaded all at once as part of the startup process. This is followed by initialization, and then the program begins. The process of initialization in these languages must be carefully controlled so that the order of initialization of statics doesn’t cause trouble. C++, for example, has problems if one static is expecting another static to be valid before the second one has been initialized.
Java doesn’t have this problem because it takes a different approach to loading. Because everything in Java is an object many activities become easier, and this is one of them. As you will learn in the next chapter, the code for each object exists in a separate file. That file isn’t loaded until the code is needed. In general, you can say that until an object of that class is constructed, the class code doesn’t get loaded. Since there can be some subtleties with static methods, you can also say “class code is loaded at the point of first use.”
[B. ECKEL, Thinking In Java, 1997aug18, 160]

jv'CLASS'MEMBER

name::
* McsEngl.jv'CLASS'MEMBER@cptIt,
* McsEngl.jv'member@cptIt,

=== _NOTES: members (fields and methods)
[Lang Spec, 1996aug,

_DESCRIPTION:
* API 1.1 Beta3 members(API11B3.NFO).
===
The members of a class type are all of the following:
- Members inherited from its direct superclass (§8.1.3), except in class Object, which has no direct superclass
- Members inherited from any direct superinterfaces (§8.1.4)
- Members declared in the body of the class (§8.1.5)
[lang spec, 1996aug]
===
Member variables and methods are known collectively as members. When you declare a member of a Java class, you can allow or disallow other objects of other types access to that member through the use of access specifiers.
[Κάθε έννοια έχει ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ]

A Java class can contain two different types of members:
- instance members and
- class members.
[Μιας έννοιας τα χαρακτηριστικά μπορεί να είναι γενικά ή συγκεκριμένα!!]

By default, unless otherwise specified, a member declared within a class is an instance member.
class variables (which you declare using the static modifier).

The members of a class include both declared and inherited members (§8.2).
[lang spec, 1996aug]

The scope of the name of a member
is the entire declaration of the class to which the member belongs.
[lang spec, 1996aug]

jv'classmember.FIELD

name::
* McsEngl.jv'classmember.FIELD@cptIt,
* McsEngl.jv'CLASS'FIELD@cptIt,
* McsEngl.jv'FIELD@cptIt,
* McsEngl.jv'CLASS'MEMBER'VARIABLE@cptIt,
* McsEngl.DATA-MEMBER@cptIt,

NAME:
The class body contains declarations for all instance variables and class variables (known collectively as member variables) for the class.
[Java Tutorial, 1996dec24]

FIELD is the preferred term in Java.
MEMBER VARIABLE is the preferred term in C++.
[Harold LECTURE, 1997jan29]

data members (sometimes called fields)
[B. ECKEL, Thinking In Java, 1997aug18, 51]

Notice that the member variable declaration appears within the body of the class implementation but not within a method. This positioning within the class body determines that the variable is a member variable.
[Java Tutorial, 1996dec24]

However, a member variable and a method can have the same name.
[Java Tutorial, 1996dec24]

A member variable
is a member-of-a-class-or-an-object#ql:jv'class'member Or java'object'member# and is declared within a class (but not within any of the class's methods).

instant and class member-variables

jv'FIELD'DECLARATION

name::
* McsEngl.jv'FIELD'DECLARATION@cptIt,

Field declarations (§8.3) describe class-variables#ql:jv'variable.class#, which are incarnated once, and instance-variables#ql:jv'variable.instance#, which are freshly incarnated for each instance of the class.
A field may be declared final (§8.3.1.2), in which case it cannot be assigned to except as part of its declaration.
Any field declaration may include an initializer; the declaration of a final field must include an initializer.
[lang spec, 1996aug]

PRODUCTION:
The variables of a class type are introduced by field declarations:
#jv'FieldDeclaration#:
FieldModifiers#ql:[Field JAVA:FieldModifiers]#opt Type#ql:[Field JAVA:Type]# VariableDeclarators ;
#jv'VariableDeclarators#:
VariableDeclarator
VariableDeclarators , VariableDeclarator
#jv'VariableDeclarator#:
VariableDeclaratorId
VariableDeclaratorId = VariableInitializer
#jv'VariableDeclaratorId#:
Identifier
VariableDeclaratorId [ ]
#jv'VariableInitializer#:
Expression
ArrayInitializer
[lang spec, 1996aug]

jv'FIELD'INITIALIZATION

name::
* McsEngl.jv'FIELD'INITIALIZATION@cptIt,

If a field declarator contains a variable initializer, then it has the semantics of an assignment (§15.25) to the declared variable, and:
- If the declarator is for a class variable (that is, a static field), then the variable initializer is evaluated and the assignment performed exactly once, when the class is initialized (§12.4).
- If the declarator is for an instance variable (that is, a field that is not static), then the variable initializer is evaluated and the assignment performed each time an instance of the class is created (§12.5).
[lang spec, 1996aug]

jv'FIELD'MODIFIER

name::
* McsEngl.jv'FIELD'MODIFIER@cptIt,

PRODUCTION:
#jv'FieldModifiers#:
FieldModifier
FieldModifiers FieldModifier
#jv'FieldModifier#: one of
public protected private
final static transient volatile
[lang spec, 1996aug]

FINAL:
A field can be declared final, in which case its declarator must include a variable initializer or a compile-time error occurs. Both class and instance variables (static and non-static fields) may be declared final.
[lang spec, 1996aug]

PRIVATE:

PROTECTED:

PUBLIC:

STATIC:
If a field is declared static, there exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created. A static field, sometimes called a class variable, is incarnated when the class is initialized (§12.4).
[lang spec, 1996aug]

TRANSIENT#ql:jv'keyword.transient#:
Variables may be marked transient to indicate that they are NOT part of the persistent state of an object. If an instance of the class Point:
class Point {
int x, y;
transient float rho, theta; }
were saved to persistent storage by a system service, then only the fields x and y would be saved. This specification does not yet specify details of such services; we intend to provide them in a future version of this specification.
[lang spec, 1996aug]

VOLATILE#ql:jv'keyword.volatile#:
a field may be declared volatile, in which case a thread must reconcile its working copy of the field with the master copy every time it accesses the variable. Moreover, operations on the master copies of one or more volatile variables on behalf of a thread are performed by the main memory in exactly the order that the thread requested.
[lang spec, 1996aug]

jv'FIELD.FINAL

name::
* McsEngl.jv'FIELD.FINAL@cptIt,

jv'CONSTANT

To create a constant member-variable in Java use the keyword final in your variable declaration.

class Avo {
final double AVOGADRO = 6.023e23;
}

By convention, names of constant values are spelled in all capital letters.
[Java Tutorial, 1996dec24]

jv'FIELD.NONSTATIC

name::
* McsEngl.jv'FIELD.NONSTATIC@cptIt,

A field that is NOT declared static (sometimes called a non-static field) is called an instance-variable#ql:jv'variable.instance#.
Whenever a new instance of a class is created, a new variable associated with that instance is created for every instance variable declared in that class or any of its superclasses.
[lang spec, 1996aug]

A field that is NOT declared static (sometimes called a non-static field) is called an instance variable.
Whenever a new instance of a class is created, a new variable associated with that instance is created for every instance variable declared in that class or any of its superclasses.
[lang spec, 1996aug]

Every time you create an instance of a class, the runtime system creates one copy of each the class's instance variables for the instance.

Instance variables are in constrast to class variables.

An instance variable
is a field
declared within a class declaration without using the keyword static (§8.3.1.1).
If a class T has a field a that is an instance variable, then a new instance variable a is created and initialized to a default value (§4.5.4) as part of each newly created object of class T or of any class that is a subclass of T (§8.1.3). The instance variable effectively ceases to exist when the object of which it is a field is no longer referenced, after any necessary finalization of the object (§12.6) has been completed.
[lang spec, 1996aug]

jv'FIELD.STATIC

name::
* McsEngl.jv'FIELD.STATIC@cptIt,
* McsEngl.jv'class-field@cptIt,
* McsEngl.jv'class-variable@cptIt,

Static or class fields belong to a class, NOT to an object.
You access class variables with the name of the class rather than a reference variable.
[E.R. HARROLD, LECTURE, week1/23, 1997feb05]

The system creates a single copy of all class variables for a class the first time it encounters the class in a program--all instances of that class share its class variables. For example, suppose that all bicycles had the same number of gears. In this case defining an instance variable for number of gears is inefficient--each instance would have its own copy of the variable, but the value would be the same for every instance. In situations such as this, you could define a class variable that contains the number of gears. All instances share this variable. If one object changes the variable, it changes for all other objects of that type.
[JavaSoft tutorial 1997jul08]

If a field is declared static, there exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created.
A static field, sometimes called a class-variable#ql:"jv'variable.class"#, is incarnated when the class is initialized (§12.4).
[lang spec, 1996aug]

A class variable
is a field
declared using the keyword-static#ql:jv'keyword.static# within a class declaration (§8.3.1.1), or with or without the keyword static within an interface declaration (§9.3).
A class variable is created when its class or interface is loaded (§12.2) and is initialized to a default value (§4.5.4).
The class variable effectively ceases to exist when its class or interface is unloaded (§12.8), after any necessary finalization of the class or interface (§12.6) has been completed.
[lang spec, 1996aug]

The runtime system allocates class variables once per class regardless of the number of instances created of that class. The system allocates memory for class variables the first time it encounters the class.
[Java Tutorial, 1996dec24]

Example#ql:jv'ex.field.static#.

jv'classmember.METHOD#ql:jv'class'method#

name::
* McsEngl.jv'classmember.METHOD@cptIt,

jv'CLASS'NAME

name::
* McsEngl.jv'CLASS'NAME@cptIt,
* McsEngl.jv'name.class@cptIt,

_DESCRIPTION:
* Το πρώτο γράμμα πρέπει να είναι κεφαλαίο.
===
Full-Qualified-Name:
If a class is declared in a named package (§7.4.1) with fully qualified name P (§6.7), then the class has the fully qualified name P.Identifier.
If the class is in an unnamed package (§7.4.2), then the class has the fully qualified name Identifier. In the example:
class Point { int x, y; }
the class Point is declared in a compilation unit with no package statement, and thus Point is its fully qualified name,
[lang spec, 1996aug]

Method names may be overloaded (§8.4.7).
[lang spec, 1996aug]

jv'CLASS'PACKAGE

name::
* McsEngl.jv'CLASS'PACKAGE@cptIt,

Named package OR unnamed package.

jv'CLASS'QUANTITY

name::
* McsEngl.jv'CLASS'QUANTITY@cptIt,

java classes and interfaces
* jdk 1.2      
* JDK 1.1beta3  503
* JDK 1.0.2  211

jv'CLASS'SCOPE

name::
* McsEngl.jv'CLASS'SCOPE@cptIt,

The class name has as its scope (§6.3) the entire package in which the class is declared.
[lang spec, 1996aug]

jv'CLASS'STATIC'INITIALIZER

name::
* McsEngl.jv'CLASS'STATIC'INITIALIZER@cptIt,
* McsEngl.jv'STATIC'INITIALIZER@cptIt,

Static initializers (§8.5) are blocks of executable code that may be used to help initialize a class when it is first loaded (§12.4).

Any static initializers declared in a class are executed when the class is initialized and, together with any field initializers (§8.3.2) for class variables, may be used to initialize the class variables of the class (§12.4).
#jv'StaticInitializer#:
static Block#ql:[Field JAVA:Block]#
[lang spec, 1996aug]

jv'CLASS'USE

name::
* McsEngl.jv'CLASS'USE@cptIt,

Like all Java classes, to use a class from the AWT we need to create an instance of it via "new".

SPECIFIC

jv'class.A

name::
* McsEngl.jv'class.A@cptIt,

jv'class.ABSTRACT

name::
* McsEngl.jv'class.ABSTRACT@cptIt,

An abstract class
is a class that is incomplete, or to be considered incomplete.
[lang spec, 1996aug]

An ABSTRACT class MUST be subclassed.

An abstract class is not required to have an abstract method in it. But any class that has an abstract method in it or that does not provide an implementation for any abstract methods declared in its superclasses must be declared as an abstract class.

Graphics is an abstract class, you cannot just 'new' it.

jv'class.AbstractDocument

name::
* McsEngl.jv'class.AbstractDocument@cptIt,
* McsEngl.jv'AbstractDocument@cptIt,
* McsEngl.jv'CLASS'javax.swing.text.AbstractDocument@cptIt,

An implementation of the document interface to serve as a basis for implementing various kinds of documents.
Inner Class Summary:
** class AbstractDocument.AbstractElement Implements the abstract part of an element.
** static interface AbstractDocument.AttributeContext An interface that can be used to allow MutableAttributeSet implementations to use pluggable attribute compression techniques.
** class AbstractDocument.BranchElement Implements a composite element that contains other elements.
** static interface AbstractDocument.Content Interface to describe a sequence of character content that can be edited.
** class AbstractDocument.DefaultDocumentEvent Stores document changes as the document is being modified.
** static class AbstractDocument.ElementEdit An implementation of ElementChange that can be added to the document event.
** class AbstractDocument.LeafElement Implements an element that directly represents content of some kind.
Field Summary:
** protected static String BAD_LOCATION Error message to indicate a bad location.
** static String BidiElementName Name of elements used to hold a unidirectional run
** static String ContentElementName Name of elements used to represent content
** static String ElementNameAttribute Name of the attribute used to specify element names.
** protected EventListenerList listenerList The event listener list for the document.
** static String ParagraphElementName Name of elements used to represent paragraphs
** static String SectionElementName Name of elements used to hold sections (lines/paragraphs).
Constructor Summary:
** protected AbstractDocument(AbstractDocument.Content data) Constructs a new AbstractDocument, wrapped around some specified content storage mechanism.
** protected AbstractDocument(AbstractDocument.Content data, AbstractDocument.AttributeContext context) Constructs a new AbstractDocument, wrapped around some specified content storage mechanism.
Method Summary:
** void addDocumentListener (DocumentListener listener) Adds a document listener for notification of any changes.
** void addUndoableEditListener (UndoableEditListener listener) Adds an undo listener for notification of any changes.
** protected Element createBranchElement (Element parent, AttributeSet a) Creates a document branch element, that can contain other elements.
** protected Element createLeafElement (Element parent, AttributeSet a, int p0, int p1) Creates a document leaf element.
** Position createPosition (int offs) Returns a position that will track change as the document is altered.
** void dump (PrintStream out) Gives a diagnostic dump.
** protected void fireChangedUpdate (DocumentEvent e) Notifies all listeners that have registered interest for notification on this event type.
** protected void fireInsertUpdate (DocumentEvent e) Notifies all listeners that have registered interest for notification on this event type.
** protected void fireRemoveUpdate (DocumentEvent e) Notifies all listeners that have registered interest for notification on this event type.
** protected void fireUndoableEditUpdate (UndoableEditEvent e) Notifies all listeners that have registered interest for notification on this event type.
** int getAsynchronousLoadPriority () Get the asynchronous loading priority.
** protected AbstractDocument.AttributeContext getAttributeContext () Fetches the context for managing attributes.
** Element getBidiRootElement () Returns the root element of the bidirectional structure for this document.
** protected AbstractDocument.Content getContent () Gets the content for the document.
** protected Thread getCurrentWriter () Fetches the current writing thread if there is one.
** abstract Element getDefaultRootElement () Returns the root element that views should be based upon unless some other mechanism for assigning views to element structures is provided.
** Dictionary getDocumentProperties () Support for managing a set of properties.
** Position getEndPosition () Returns a position that represents the end of the document.
** int getLength () Returns the length of the data.
** abstract Element getParagraphElement (int pos) Get the paragraph element containing the given position.
** Object getProperty (Object key) A convenience method for looking up a property value.
** Element[] getRootElements () Gets all root elements defined.
** Position getStartPosition () Returns a position that represents the start of the document.
** String getText (int offset, int length) Gets a sequence of text from the document.
** void getText (int offset, int length, Segment txt) Gets some text from the document potentially without making a copy.
** void insertString (int offs, String str, AttributeSet a) Inserts some content into the document.
** protected void insertUpdate (AbstractDocument.DefaultDocumentEvent chng, AttributeSet attr) Updates document structure as a result of text insertion.
** protected void postRemoveUpdate (AbstractDocument.DefaultDocumentEvent chng) Updates any document structure as a result of text removal.
** void putProperty (Object key, Object value) A convenience method for storing up a property value.
** void readLock () Acquires a lock to begin reading some state from the document.
** void readUnlock () Does a read unlock.
** void remove (int offs, int len) Removes some content from the document.
** void removeDocumentListener (DocumentListener listener) Removes a document listener.
** void removeUndoableEditListener (UndoableEditListener listener) Removes an undo listener.
** protected void removeUpdate (AbstractDocument.DefaultDocumentEvent chng) Updates any document structure as a result of text removal.
** void render (Runnable r) This allows the model to be safely rendered in the presence of currency, if the model supports being updated asynchronously.
** void setAsynchronousLoadPriority (int p) Set the asynchronous loading priority.
** void setDocumentProperties (Dictionary x) Replace the document properties dictionary for this document.
** protected void writeLock () Acquires a lock to begin mutating the document this lock protects.
** protected void writeUnlock () Releases the write lock held because the write operation is finished.
[jdk1.2]

jv'class.AbstractElement

name::
* McsEngl.jv'class.AbstractElement@cptIt,
* McsEngl.jv'AbstractElement@cptIt,
* McsEngl.jv'CLASS'javax.swing.text.AbstractDocument.AbstractElement@cptIt,

Implements the abstract part of an element.
Constructor:
AbstractElement(Element parent, AttributeSet a) Creates a new AbstractElement.
Method Summary:
** void addAttribute (Object name, Object value) Adds an attribute to the element.
** void addAttributes (AttributeSet attr) Adds a set of attributes to the element.
** abstract Enumeration children () Returns the children of the reciever as an Enumeration.
** boolean containsAttribute (Object name, Object value) Checks whether a given attribute name/value is defined.
** boolean containsAttributes (AttributeSet attrs) Checks whether the element contains all the attributes.
AttributeSet copyAttributes () Copies a set of attributes.
** void dump (PrintStream psOut, int indentAmount) Dumps a debugging representation of the element hierarchy.
** protected void finalize () Finalizes an AbstractElement.
** abstract boolean getAllowsChildren () Returns true if the receiver allows children.
** Object getAttribute (Object attrName) Gets the value of an attribute.
** int getAttributeCount () Gets the number of attributes that are defined.
** Enumeration getAttributeNames () Gets the names of all attributes.
** AttributeSet getAttributes () Gets the attributes for the element.
** TreeNode getChildAt (int childIndex) Returns the child TreeNode at index childIndex.
** int getChildCount () Returns the number of children TreeNodes the receiver contains.
** Document getDocument () Retrieves the underlying model.
** abstract Element getElement (int index) Gets a child element.
** abstract int getElementCount () Gets the number of children for the element.
** abstract int getElementIndex (int offset) Gets the child element index closest to the given model offset.
** abstract int getEndOffset () Gets the ending offset in the model for the element.
** int getIndex (TreeNode node) Returns the index of node in the receivers children.
** String getName () Gets the name of the element.
** TreeNode getParent () Returns the parent TreeNode of the receiver.
** Element getParentElement () Gets the parent of the element.
** AttributeSet getResolveParent () Gets the resolving parent.
** abstract int getStartOffset () Gets the starting offset in the model for the element.
** boolean isDefined (Object attrName) Checks whether a given attribute is defined.
** boolean isEqual (AttributeSet attr) Checks whether two attribute sets are equal.
** abstract boolean isLeaf () Checks whether the element is a leaf.
** void removeAttribute (Object name) Removes an attribute from the set.
** void removeAttributes (AttributeSet attrs) Removes a set of attributes for the element.
** void removeAttributes (Enumeration names) Removes a set of attributes for the element.
** void setResolveParent (AttributeSet parent) Sets the resolving parent.
[jdk1.2]

jv'class.adapter

name::
* McsEngl.jv'class.adapter@cptIt,
* McsEngl.jv'adapter'class@cptIt,

The methods in this class are empty; this class is provided as a convenience for easily creating listeners by extending this class and overriding only the methods of interest.

jv'class.Anonymous

name::
* McsEngl.jv'class.Anonymous@cptIt,
* McsEngl.jv'anonymous'class@cptIt,

USE:
Anonymous classes can make code difficult to read. You should limit their use to those classes that are very small (no more than a method or two) and whose use is well-understood (like the AWT event-handling adapter classes).
[js tutorial {1999-03-12}]

jv'class.Applet

name::
* McsEngl.jv'class.Applet@cptIt,

jv'class.BitSet

name::
* McsEngl.jv'class.BitSet@cptIt,
* McsEngl.jv'BitSet@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.bitset#.

PACKAGE: java.util.

SUPERCLASS: java.lang.Object.

A set of bits. The set automatically grows as more bits are needed.
[API]

jv'class.BorderLayout#ql:jv'borderlayout#

name::
* McsEngl.jv'class.BorderLayout@cptIt,

jv'class.BOOTSTRAP

name::
* McsEngl.jv'class.BOOTSTRAP@cptIt,
* McsEngl.conceptItsoft1012.7,
* McsEngl.bootstrap'class@cptItsoft1012.7,

Bootstrap classes are those implementing the core platform, contained in jre/lib/rt.jar and jre/lib/i18n.jar. These include classes of the public API such as java.lang, java.io, etc., and classes supporting the platform's internationalization/localization features.
[140 DOC]

jv'class.Buffer (since 1.4)

name::
* McsEngl.jv'class.Buffer (since 1.4)@cptIt,

PACKAGE: java.nio#ql:jv'nio'api#.

_DESCRIPTION:
A buffer is a container for a fixed amount of data of a specific primitive type. In addition to its content a buffer has a position, which is the index of the next element to be read or written, and a limit, which is the index of the first element that should not be read or written. The base Buffer class defines these properties as well as methods for clearing, flipping, and rewinding, for marking the current position, and for resetting the position to the previous mark.
There is a buffer class for each non-boolean primitive type. Each class defines a family of get and put methods for moving data out of and in to a buffer, methods for compacting, duplicating, and slicing a buffer, and static methods for allocating a new buffer as well as for wrapping an existing array into a buffer.
Byte buffers are distinguished in that they can be used as the sources and targets of I/O operations. They also support several features not found in the other buffer classes:
 A byte buffer can be allocated as a direct buffer, in which case the Java virtual machine will make a best effort to perform native I/O operations directly upon it.
 A byte buffer can be created by mapping a region of a file directly into memory, in which case a few additional file-related operations defined in the MappedByteBuffer class are available.
 A byte buffer provides access to its content as either a heterogenous or homogeneous sequence of binary data of any non-boolean primitive type, in either big-endian or little-endian byte order.
[140 DOC]

jv'class.BufferedInputStream

name::
* McsEngl.jv'class.BufferedInputStream@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.bufferedinputstream#.

PACKAGE: java.io.

SUPERCLASS: java.io.FilterInputStream.

COCLASS:
BufferedInputStream, DataInputStream, LineNumberInputStream, PushbackInputStream, DigestInputStream, CheckedInputStream, InflaterInputStream.

FUNCTION:
* A buffered input stream. This stream lets you read in characters from a stream without causing a read every time. The data is read into a buffer, subsequent reads result in a fast buffer access.
[API]

Example#ql:jv'ex.bufferedinputstream#.

jv'class.BufferedOutputStream

name::
* McsEngl.jv'class.BufferedOutputStream@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.bufferedoutputstream#.

PACKAGE: java.io.

SUPERCLASS: FilterOutputStream.

A buffered output stream. This stream lets you write characters to a stream without causing a write every time. The data is first written into a buffer. Data is written to the actual stream only when the buffer is full, or when the stream is flushed.

jv'class.Button#ql:jv'button#

name::
* McsEngl.jv'class.Button@cptIt,

jv'class.ByteArrayInputStream

name::
* McsEngl.jv'class.ByteArrayInputStream@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.bytearrayinputstream#.

PACKAGE: java.io.

SUPERCLASS: java.io.InputStream.

FUNCTION:
* This class implements a buffer that can be used as an InputStream.
[API]

Example#ql:jv'ex.bytearrayinputstream#.

jv'class.ByteToCharConverter

name::
* McsEngl.jv'class.ByteToCharConverter@cptIt,
* McsEngl.jv'ByteToCharConverter@cptIt,

SOURCE: JavaSoft API.

ByteToCharConverter is a base class for classes that convert characters in an external encoding into Unicode. The class java.io.CharToByteConverter is a base class for classes that convert Unicode characters into an external encoding. Note that the names ByteToChar and CharToByte derive from the fact that the char type can be used to hold only Unicode characters while byte arrays are needed to represent characters in other encodings.
Converter objects are created like this:
ByteToCharConverter toUnicode = ByteToCharConverter.getConverter("ISO-8859-1"); CharToByteConverter fromUnicode = CharToByteConverter.getConverter("CP850");
[Intl Spec 1996jun04]

jv'CLASS.C

name::
* McsEngl.jv'CLASS.C@cptIt,

jv'class.Calendar

name::
* McsEngl.jv'class.Calendar@cptIt,
* McsEngl.jv'calendar'class@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.calendar#.

PACKAGE: java.util.

SUPERCLASS: java.lang.Object.

SUBCLASS: java.util.GregorianCalendar.

FUNCTION:
Calendar is an abstract base class for converting between a Date object and a set of integer fields such as YEAR, MONTH, DAY, HOUR, and so on. (A Date object represents a specific instant in time with millisecond precision. See java.util.Date for information about the Date class.)

The class Calendar is an abstract base class which can convert between a point in time (represented as milliseconds from 00:00:00 GMT, Jan 1, 1970) and a set of integers representing the year, month, week and so on.
[Intl Spec 1996dec04]

Example#ql:jv'ex.calendar#.

jv'class.Canvas#ql:jv'canvas#

name::
* McsEngl.jv'class.Canvas@cptIt,

jv'class.CardLayout#ql:jv'cardlayout#

name::
* McsEngl.jv'class.CardLayout@cptIt,

jv'class.Character

name::
* McsEngl.jv'class.Character@cptIt,
* McsEngl.jv'CHARACTER'CLASS@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.character#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.Object.

FUNCTION:
** The Character class wraps a value of the primitive type char in an object. An object of type Character contains a single field whose type is char.
In addition, this class provides several methods for determining the type of a character and converting characters from uppercase to lowercase and vice versa.
[API1.1]

Constructor Summary
** Character(char value) Constructs a Character object and initializes it so that it represents the primitive value argument.

Method Summary
** char charValue() Returns the value of this Character object.
** int compareTo(Character anotherCharacter) Compares two Characters numerically.
** int compareTo(Object o) Compares this Character to another Object.
** static int digit(char ch, int radix) Returns the numeric value of the character ch in the specified radix.
** boolean equals(Object obj) Compares this object against the specified object.
** static char forDigit(int digit, int radix) Determines the character representation for a specific digit in the specified radix.
** static int getNumericValue(char ch) Returns the Unicode numeric value of the character as a nonnegative integer.
** static int getType(char ch) Returns a value indicating a character category.
** int hashCode() Returns a hash code for this Character.
** static boolean isDefined(char ch) Determines if a character has a defined meaning in Unicode.
** static boolean isDigit(char ch) Determines if the specified character is a digit.
** static boolean isIdentifierIgnorable(char ch) Determines if the specified character should be regarded as an ignorable character in a Java identifier or a Unicode identifier.
** static boolean isISOControl(char ch) Determines if the specified character is an ISO control character.
** static boolean isJavaIdentifierPart(char ch) Determines if the specified character may be part of a Java identifier as other than the first character.
** static boolean isJavaIdentifierStart(char ch) Determines if the specified character is permissible as the first character in a Java identifier.
** static boolean isJavaLetter(char ch) Deprecated. Replaced by isJavaIdentifierStart(char).
** static boolean isJavaLetterOrDigit(char ch) Deprecated. Replaced by isJavaIdentifierPart(char).
** static boolean isLetter(char ch) Determines if the specified character is a letter.
** static boolean isLetterOrDigit(char ch) Determines if the specified character is a letter or digit.
** static boolean isLowerCase(char ch) Determines if the specified character is a lowercase character.
** static boolean isSpace(char ch) Deprecated. Replaced by isWhitespace(char).
** static boolean isSpaceChar(char ch) Determines if the specified character is a Unicode space character.
** static boolean isTitleCase(char ch) Determines if the specified character is a titlecase character.
** static boolean isUnicodeIdentifierPart(char ch) Determines if the specified character may be part of a Unicode identifier as other than the first character.
** static boolean isUnicodeIdentifierStart(char ch) Determines if the specified character is permissible as the first character in a Unicode identifier.
** static boolean isUpperCase(char ch) Determines if the specified character is an uppercase character.
** static boolean isWhitespace(char ch) Determines if the specified character is white space according to Java.
** static char toLowerCase(char ch) The given character is mapped to its lowercase equivalent; if the character has no lowercase equivalent, the character itself is returned.
** String toString() Returns a String object representing this character's value.
** static char toTitleCase(char ch) Converts the character argument to titlecase.
** static char toUpperCase(char ch) Converts the character argument to uppercase.

jv'class.Checkbox#ql:jv'checkbox#

name::
* McsEngl.jv'class.Checkbox@cptIt,

jv'class.CheckboxMenuItem#ql:jv'checkboxmenuitem#

name::
* McsEngl.jv'class.CheckboxMenuItem@cptIt,

jv'class.Choice#ql:jv'choice#

name::
* McsEngl.jv'class.Choice@cptIt,

jv'class.Class

name::
* McsEngl.jv'class.Class@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.class#.

PACKAGE: java.lang#ql:package.java.lang#.

SUPERCLASS: java.lang.Object.

SUBCLASS:

FUNCTION:
* Instances of the class Class represent Java types in a way that allows them to be manipulated by a running Java program. Java classes and interfaces are represented at runtime by Class objects.

METHOD INDEX:
** (stat) forName(String): Returns the Class object associated with the class with the given string name.
** (inst) getClasses(): Returns an array containing Class objects representing all the public clas. & interf. that are members of the class represented by this Class object.
** (inst) getClassLoader(): Determines the class loader for the class.
** (inst) getComponentType(): If this class represents an array type, returns the Class object representing the component type of the array; otherwise returns null.
** (inst) getConstructor(Class[]): Returns a Constructor object that reflects the specified public constructor of the class represented by this Class object.
** (inst) getConstructors(): Returns an array containing Constructor objects reflecting all the public constructors of the class represented by this Class object.
** (inst) getDeclaredClasses(): Returns an array of Class objects reflecting all the classes and interfaces declared as members of the class repres. by this Class object.
** (inst) getDeclaredConstructor(Class[]): Returns a Constructor object that reflects the specified declared constructor of the class or interface repres by this Class object.
** (inst) getDeclaredConstructors(): Returns an array of Constructor objects reflecting all the constructors declared by the class represented by this Class object.
** (inst) getDeclaredField(String): Returns a Field object that reflects the specified declared field of the class or interface represented by this Class object.
** (inst) getDeclaredFields(): Returns an array of Field objects reflecting all the fields declared by the class or interface represented by this Class object.
** (inst) getDeclaredMethod(String, Class[]): Returns a Method object that reflects the specified declared method of the class or interface repres by this Class object.
** (inst) getDeclaredMethods(): Returns an array of Method objects reflecting all the methods declared by the class or interface represented by this Class object.
** (inst) getDeclaringClass(): If the class or interface represented by this Class object is a member of another class, returns the Class object representing the class of which it is a member (its declaring class).
** (inst) getField(java.lang.String): Returns a Field object that reflects the specified public member field of the class or interface represented by this Class object.
** (inst) getFields(): Returns an array containing Field objects reflecting all the accessible public fields of the class or interface represented by this Class object.
** (inst) getInterfaces(): Determines the interfaces implemented by the class or interface represented by this object.
** (inst) getMethod(String, Class[]): Returns a Method object that reflects the specified public member method of the class or interface represented by this Class object.
** (inst) getMethods(): Returns an array containing Method objects reflecting all the public member methods of the class or interface represented by this Class object, including those declared by the class or interface and and those inherited from superclasses and superinterfaces.
** (inst) getModifiers(): Returns the Java language modifiers for this class or interface, encoded in an integer.
** (inst) getName(): Returns the fully-qualified name of the type (class, interface, array, or primitive) represented by this Class object, as a String.
** (inst) getResource(java.lang.String):
** (inst) getResourceAsStream(java.lang.String): Find a resource with a given name.
** (inst) getSigners(): Get the signers of this class.
** (inst) getSuperclass(): If this object represents any class other than the class Object, then the object that represents the superclass of that class is returned.
** (inst) isArray(): If this Class object represents an array type, returns true, otherwise returns false.
** (inst) isAssignableFrom(java.lang.Class): Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter.
** (inst) isInstance(java.lang.Object): This method is the dynamic equivalent of the Java language instanceof#ql:"jv'instanceof'keyword"# operator.
** (inst) isInterface(): Determines if the specified Class object represents an interface type.
** (inst) isPrimitive(): Determines if the specified Class object represents a primitive Java type.
** (inst) newInstance(): Creates a new instance of a class.
** (inst) toString(): Converts the object to a string.


Example#ql:jv'ex.class#.

jv'class.ClassLoader

name::
* McsEngl.jv'class.ClassLoader@cptIt,
* McsEngl.jv'ClassLoader@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.classloader#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.Object.

FUNCTION:
The loading process is implemented by the class ClassLoader (§20.14) and its subclasses. Different subclasses of ClassLoader may implement different loading policies.
[lang spec, 1996aug]

jv'class.Collator

name::
* McsEngl.jv'class.Collator@cptIt,
* McsEngl.jv'Collator@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.color#.

PACKAGE: java.text.

SUPERCLASS: java.lang.Object.

FUNCTION:
* The Collator class performs locale-sensitive String comparison. You use this class to build searching and sorting routines for natural language text.

Field Summary:
** static int CANONICAL_DECOMPOSITION Decomposition mode value.
** static int FULL_DECOMPOSITION Decomposition mode value.
** static int IDENTICAL Collator strength value.
** static int NO_DECOMPOSITION Decomposition mode value.
** static int PRIMARY Collator strength value.
** static int SECONDARY Collator strength value.
** static int TERTIARY Collator strength value.

Constructor Summary
** protected Collator() Default constructor.

Method Summary
** Object clone() Overrides Cloneable int compare(Object o1, Object o2) Compares its two arguments for order.
** abstract int compare(String source, String target) Compares the source string to the target string according to the collation rules for this Collator.
** boolean equals(Object that) Compares the equality of two Collators.
** boolean equals(String source, String target) Convenience method for comparing the equality of two strings based on this Collator's collation rules.
** static Locale[] getAvailableLocales() Get the set of Locales for which Collators are installed.
** abstract CollationKey getCollationKey(String source) Transforms the String into a series of bits that can be compared bitwise to other CollationKeys.
** int getDecomposition() Get the decomposition mode of this Collator.
** static Collator getInstance() Gets the Collator for the current default locale.
** static Collator getInstance(Locale desiredLocale) Gets the Collator for the desired locale.
** int getStrength() Returns this Collator's strength property.
** abstract int hashCode() Generates the hash code for this Collator.
** void setDecomposition(int decompositionMode) Set the decomposition mode of this Collator.
** void setStrength(int newStrength) Sets this Collator's strength property.

jv'class.Color

name::
* McsEngl.jv'class.Color@cptIt,
* McsEngl.jv'Color@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.color#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
* A class to encapsulate RGB Colors.

jv'class.Component#ql:jv'component#

name::
* McsEngl.jv'class.Component@cptIt,

jv'CLASS'Container#ql:jv'container#

name::
* McsEngl.jv'CLASS'Container@cptIt,

jv'class.D

name::
* McsEngl.jv'class.D@cptIt,

jv'class.DataInputStream

name::
* McsEngl.jv'class.DataInputStream@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.datainputstream#.

PACKAGE: java.io.

SUPERCLASS: java.io.FilterInputStream.

FUNCTION:
A data input stream that lets you read primitive Java data types from a stream in a portable way. Primitive data types are well understood types with associated operations. For example, Integers are considered primitive data types.

jv'class.Date

name::
* McsEngl.jv'class.Date@cptIt,
* McsEngl.jv'Date@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.date#.

PACKAGE: java.util.

SUPERCLASS: java.lang.Object.

A Date object represents a specific instant in time with millisecond precision.
[API1.1]

Example#ql:jv'ex.date#.

jv'class.DefaultMutableTreeNode

name::
* McsEngl.jv'class.DefaultMutableTreeNode@cptIt,
* McsEngl.jv'DefaultMutableTreeNode@cptIt,

DEFINITION:
A DefaultMutableTreeNode is a general-purpose node in a tree data structure.

Method Summary:
** void add (MutableTreeNode newChild) Removes newChild from its parent and makes it a child of this node by adding it to the end of this node's child array.
** Enumeration breadthFirstEnumeration () Creates and returns an enumeration that traverses the subtree rooted at this node in breadth-first order.
** Enumeration children () Creates and returns a forward-order enumeration of this node's children.
** Object clone () Overridden to make clone public.
** Enumeration depthFirstEnumeration () Creates and returns an enumeration that traverses the subtree rooted at this node in depth-first order.
** boolean getAllowsChildren () Returns true if this node is allowed to have children.
** TreeNode getChildAfter (TreeNode aChild) Returns the child in this node's child array that immediately follows aChild, which must be a child of this node.
** TreeNode getChildAt (int index) Returns the child at the specified index in this node's child array.
** TreeNode getChildBefore (TreeNode aChild) Returns the child in this node's child array that immediately precedes aChild, which must be a child of this node.
** int getChildCount () Returns the number of children of this node.
** int getDepth () Returns the depth of the tree rooted at this node -- the longest distance from this node to a leaf.
** TreeNode getFirstChild () Returns this node's first child.
** DefaultMutableTreeNode getFirstLeaf () Finds and returns the first leaf that is a descendant of this node -- either this node or its first child's first leaf.
** int getIndex (TreeNode aChild) Returns the index of the specified child in this node's child array.
** TreeNode getLastChild () Returns this node's last child.
** DefaultMutableTreeNode getLastLeaf () Finds and returns the last leaf that is a descendant of this node -- either this node or its last child's last leaf.
** int getLeafCount () Returns the total number of leaves that are descendants of this node.
** int getLevel () Returns the number of levels above this node -- the distance from the root to this node.
** DefaultMutableTreeNode getNextLeaf () Returns the leaf after this node or null if this node is the last leaf in the tree.
** DefaultMutableTreeNode getNextNode () Returns the node that follows this node in a preorder traversal of this node's tree.
** DefaultMutableTreeNode getNextSibling () Returns the next sibling of this node in the parent's children array.
** TreeNode getParent () Returns this node's parent or null if this node has no parent.
** TreeNode[] getPath () Returns the path from the root, to get to this node.
** protected TreeNode[] getPathToRoot (TreeNode aNode, int depth) Builds the parents of node up to and including the root node, where the original node is the last element in the returned array.
** DefaultMutableTreeNode getPreviousLeaf () Returns the leaf before this node or null if this node is the first leaf in the tree.
** DefaultMutableTreeNode getPreviousNode () Returns the node that precedes this node in a preorder traversal of this node's tree.
** DefaultMutableTreeNode getPreviousSibling () Returns the previous sibling of this node in the parent's children array.
** TreeNode getRoot () Returns the root of the tree that contains this node.
** TreeNode getSharedAncestor (DefaultMutableTreeNode aNode) Returns the nearest common ancestor to this node and aNode.
** int getSiblingCount () Returns the number of siblings of this node.
** Object getUserObject () Returns this node's user object.
** Object[] getUserObjectPath () Returns the user object path, from the root, to get to this node.
** void insert (MutableTreeNode newChild, int childIndex) Removes newChild from its present parent (if it has a parent), sets the child's parent to this node, and then adds the child to this node's child array at index childIndex.
** boolean isLeaf () Returns true if this node has no children.
** boolean isNodeAncestor (TreeNode anotherNode) Returns true if anotherNode is an ancestor of this node -- if it is this node, this node's parent, or an ancestor of this node's parent.
** boolean isNodeChild (TreeNode aNode) Returns true if aNode is a child of this node.
** boolean isNodeDescendant (DefaultMutableTreeNode anotherNode) Returns true if anotherNode is a descendant of this node -- if it is this node, one of this node's children, or a descendant of one of this node's children.
** boolean isNodeRelated (DefaultMutableTreeNode aNode) Returns true if and only if aNode is in the same tree as this node.
** boolean isNodeSibling (TreeNode anotherNode) Returns true if anotherNode is a sibling of (has the same parent as) this node.
** boolean isRoot () Returns true if this node is the root of the tree.
** Enumeration pathFromAncestorEnumeration (TreeNode ancestor) Creates and returns an enumeration that follows the path from ancestor to this node.
** Enumeration postorderEnumeration () Creates and returns an enumeration that traverses the subtree rooted at this node in postorder.
** Enumeration preorderEnumeration () Creates and returns an enumeration that traverses the subtree rooted at this node in preorder.
** void remove (int childIndex) Removes the child at the specified index from this node's children and sets that node's parent to null.
** void remove (MutableTreeNode aChild) Removes aChild from this node's child array, giving it a null parent.
** void removeAllChildren () Removes all of this node's children, setting their parents to null.
** void removeFromParent () Removes the subtree rooted at this node from the tree, giving this node a null parent.
** void setAllowsChildren (boolean allows) Determines whether or not this node is allowed to have children.
** void setParent (MutableTreeNode newParent) Sets this node's parent to newParent but does not change the parent's child array.
** void setUserObject (Object userObject) Sets the user object for this node to userObject.
** String toString () Returns the result of sending toString() to this node's user object, or null if this node has no user object.

jv'class.DefaultStyledDocument

name::
* McsEngl.jv'class.DefaultStyledDocument@cptIt,
* McsEngl.jv'DefaultStyledDocument@cptIt,

SINCE: JDK1.2

PACKAGE: java.awt.swing.text. (com.sun.java.swing.text)

SUPERCLASS: java.awt.swing.text.AbstractDocument.

_DEFINITION:
A document that can be marked up with character and paragraph styles in a manner similar to the Rich Text Format. The element structure for this document represents style crossings for style runs. These style runs are mapped into a paragraph element structure (which may reside in some other structure). The style runs break at paragraph boundries since logical styles are assigned to paragraph boundries.

METHODS:
addStyle(String, Style) Adds a new style into the logical style hierarchy.
createDefaultRoot() Creates the root element to be used to represent the default document structure.
getAttributeContext() Fetch the context for managing attributes. getBackground(AttributeSet) Gets the background color from an attribute set. getCharacterElement(int) Gets a character element based on a position. getDefaultRootElement() Gets the default root element.
getFont(AttributeSet) Gets the font from an attribute set.
getForeground(AttributeSet) Gets the foreground color from an attribute set. getLogicalStyle(int) Fetches the logical style assigned to the paragraph represented by the given position.
getParagraphElement(int) Gets a paragraph element.
getStyle(String) Fetches a named style previously added.
insert(int, DefaultStyledDocument.ElementSpec[]) Inserts new elements in bulk.
insertUpdate(DefaultDocumentEvent, AttributeSet) Updates document structure as a result of text insertion.
removeStyle(String) Removes a named style previously added to the document.
removeUpdate(DefaultDocumentEvent) Updates document structure as a result of text removal.
setCharacterAttributes(int, int, AttributeSet, boolean) Sets attributes for some part of the document.
setLogicalStyle(int, Style) Sets the logical style to use for the paragraph at the given position.
setParagraphAttributes(int, int, AttributeSet, boolean) Sets attributes for a paragraph.
FROM ABSTRACTDOCUMENT:
addDocumentListener(DocumentListener) Adds a document listener for notification of any changes.
createBranchElement(Element, AttributeSet) Creates a document branch element, that can contain other elements.
createLeafElement(Element, AttributeSet, int, int) Creates a document leaf element.
createPosition(int) Returns a position that will track change as the document is altered.
dump(PrintStream) Gives a diagnostic dump.
externalNotifyChange(DocumentEvent) Notifies external listeners of a document attribute change.
externalNotifyInsert(DocumentEvent) Notifies external listeners of a document insertion. externalNotifyRemove(DocumentEvent) Notifies external listeners of a document removal.
fireChangedUpdate(DocumentEvent) Notifies all listeners that have registered interest for notification on this event type.
fireInsertUpdate(DocumentEvent) Notifies all listeners that have registered interest for notification on this event type.
fireRemoveUpdate(DocumentEvent) Notifies all listeners that have registered interest for notification on this event type.
getAttributeContext() Fetch the context for managing attributes.
getContent() Gets the content for the document. getCurrentWriter() Fetches the current writing thread if there is one. getDefaultRootElement() Returns the root element that views should be based upon unless some other mechanism for assigning views to element structures is provided. getEndPosition() Returns a position that represents the end of the document. getLength() Returns the length of the data. getProperty(Object) Gets a property for the document. getRootElements() Gets all root elements defined. getStartPosition() Returns a position that represents the start of the document. getText(int, int) Gets a subsequence of text from the document. getText(int, int, Segment) Gets some text from the document. insertString(int, String, AttributeSet) Inserts some content into the document. insertUpdate(DefaultDocumentEvent, AttributeSet) Updates document structure as a result of text insertion. notifyUnlock() Releases the notification lock. putProperty(Object, Object) Sets a property for the document. readLock() Acquires a lock to begin reading some state from the document. readUnlock() Does a read unlock. remove(int, int) Removes some content from the document. removeDocumentListener(DocumentListener) Removes a document listener. removeUpdate(DefaultDocumentEvent) Updates any document structure as a result of text removal. writeAbandoned() Releases the write/notify lock held because the write operation is being aborted. writeLock() Acquires a lock to begin mutating the document this lock protects. writeUnlockNotifyLock() Releases the write lock indicating that there will be no more mutations to the document, and acquire a lock for notifying observers of the document of the mutations to the document.

jv'class.Dialog#ql:jv'dialog#

name::
* McsEngl.jv'class.Dialog@cptIt,

jv'class.Dictionary

name::
* McsEngl.jv'class.Dictionary@cptIt,
* McsEngl.jv'DICTIONARY@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.dictionary#.

PACKAGE: java.util.

SUPERCLASS: java.lang.Object.

SUBCLASS: java.util.Hashtable.

FUNCTION:
The Dictionary class is the abstract parent of any class, such as Hashtable, which maps keys to values. Any non-null object can be used as a key and as a value.
[API1.1]

CONSTRUCTOR INDEX:
** Dictionary()


METHOD INDEX:
** (instance) elements(): Returns an enumeration of the elements.
** (instance) get(Object): Gets the object associated with the specified key in the Dictionary.
** (instance) isEmpty(): Returns true if the Dictionary contains no elements.
** (instance) keys(): Returns an enumeration of the Dictionary's keys.
** (instance) put(Object, Object): Puts the specified element into the Dictionary, using the specified key.
** (instance) remove(Object): Removes the element corresponding to the key.
** (instance) size(): Returns the number of elements contained within the Dictionary.

jv'class.Dimension

name::
* McsEngl.jv'class.Dimension@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.dimension#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
* A class to encapsulate a width and a height Dimension.
[API]


FIELD INDEX:
** (inst) height: The height dimension.
** (inst) width: The width dimension.


CONSTRUCTOR INDEX:
** Dimension(): Constructs a Dimension object with 0 width and 0 height.
** Dimension(Dimension): Constructs a Dimension and initializes it to the specified value.
** Dimension(int, int): Constructs a Dimension and initializes it to the specified width and specified height.


METHODS:
** (inst) equals(Object): Checks whether two dimension objects have equal values.
** (inst) getSize(): Returns the size of this Dimension object.
** (inst) setSize(Dimension): Set the size of this Dimension object to match the specified size.
** (inst) setSize(int, int): Set the size of this Dimension object to the specified width and height.
** (inst) toString(): Returns the String representation of this Dimension's values.

jv'class.E

name::
* McsEngl.jv'class.E@cptIt,

jv'class.ENCLOSING

name::
* McsEngl.jv'class.ENCLOSING@cptIt,
* McsEngl.jv'enclosing'class@cptIt,

DEFINETRO: the outer class. Contains a nested or inner class.

jv'class.ERROR

name::
* McsEngl.jv'class.ERROR@cptIt,
* McsEngl.jv'exception.error@cptIt,
* McsEngl.jv'error@cptIt,
* McsEngl.jv'class.error@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.error#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.Throwable#ql:"jv'class.throwable"#.

SUBCLASS:
AWTError
LinkageError
ThreadDeath
VirtualMachineError.

FUNCTION:
** An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. The ThreadDeath error, though a "normal" condition, is also a subclass of Error because most applications should not try to catch it.
A method is not required to declare in its throws clause any subclasses of Error that might be thrown during the execution of the method but not caught, since these errors are abnormal conditions that should never occur.
[API1.1]
** The class Error and its standard subclasses are exceptions from which ordinary programs are not ordinarily expected to recover.
[lang spec, 1996aug]

jv'error.ATTEMPT_to_reference_method_MMM_in_class_CCC_as_an_instance_variable.
** COMPILETIME:
I forgot to put () at the end of method MMM.

jv'error.CLASS_not_found
* RUNTIME:
- classpath does not contain current directory.

jv'error.CLASS_XXX_is_an_abstract class. It can't be instantiated.
** COMPILETIME: Class xxx wanted a constructor.

jv'error.CLASS_xxx_must_be_declared_abstract_It_does_not_define_yyy_from_interface_zzz.
(class xxx is an abstract class. It can't be instantiated.)
** import statements for method yyy, are missing.
** If any implementations for methods defined in interface zzz are missing from [class] xxx, the compiler will print an error message and refuse to compile your program.
[Java Tutorial, 1996dec24]

jv'error.CAN'T_resolve_symbol:
* COMPILETIME:
* I used the name of a constructor instead of "this".

jv'error.CAN'T_find_classs:
** RUNTIME:
- you wrote class-file-name and NOT class-name.
- Class name is case sensitive.

jv'error.CAN'T_make_static_reference_to_method_void_xxx:
** compiletime:

jv'error.CAN'T_make_a_static_reference_to_nonstatic_variable:
** compiletime:
- main() is a static method and so must be the variables inside.

jv'error.CAN'T_read_xxx.java:
** compiletime: File xxx.java is missing.

jv'error.CONCURRENT_ModificationException:
** RUNTIME: iteration "for each" while modifing. Iteration for i... does not give it.

jv'error.IDENTIFIER_expected:
** COMPILETIME: I used the reserved word 'new' as argument.

jv'error.ILLEGAL_ESCAPE_CHARACTER:
** COMPILETIME: a file string "\java\app" MUST BE: "\\java\\app"

jv'error.interface_java.awt.event.ActionListener_is_an_abstract_class. It can't be instantiated. buttonOK.addActionListener(new ActionListener()
** COMPILETIME: buttonOK must be final.

jv'error.Invalid_argument:
** compiletime: something wrong at typing javac command.

jv'error.IOException.streamClosed:
* RUNTIME: the stream closed before "null" reached.
==> put br.close() after while ( (ln=br.readLine())!=null )

jv'error.missing_method_body, or declare abstract
 public String mapAnalyticStart();
* at the end no ";"

jv'error.no_constructor_maching:
** compiletime: Yes, you have declared the constructor as:
public void ...
^^^^
If you include the void keyword java (for a reason I don't know) decides that this is not the constructor, but a method with the same name as the class. Thus it doesn't find your constructor.
** COMPILETIME: The constructor of an outside package must be public.
[nikos, 1999feb07]

jv'error.nullPointerException:
** RUNTIME: try to print something (a variable) that contains nothing.

jv'error.OutOfMemory:
* RUNTIME:
- I managed it to work by allocating more memory to the JVM, instead of changing
the code, as my intention was just to display the file.

java -Xms512m -Xmx512m <class-name>

jv'error.package_not_found:
* COMPILETIME:
- classpath does not contain current directory.

jv'error.UNDEFINED_variable_this at addWindowListener(this):
** the sentence 'addWindowListener(this)' must be located in the constructor not in main()

jv'error.VARIALBE_arrayxxx_may_not_have_been_initialized.
** If your program attempted to assign or access any values to any elements of arrayOfInts before memory for it has been allocated the compiler will print an error like this one and refuse to compile your program.
[JavaSoft Tutorial, 1996jul06]

jv'error.VARIABLE_XXX_may_not_have_been_initialized:
** COMPILETIME: i gave initial values, just to compile and it worked
[NIKOS, 1998jan04]

jv'error.VARIABLE_xxx_in_class_zzz_not_accessible_from_class_zzz.
** COMPILETIME: variable xxx must be 'public', 'static' and initialized.
[nikos, 1999jan10]

jv'error.VOID_main_is_not_defined:
jv'error.in_class_xxx_void_main_is_not_defined:
** If you try to invoke the Java interpreter on a class that does not have a main() method, the interpreter refuses to compile your program and displays an error message similar to this:
[JavaSoft Tutorial, 1996jul06]

jv'erro.WRONG_number_of_arguments_in_constructor:
** COMPILETIME

jv'AWTError

name::
* McsEngl.jv'AWTError@cptIt,

jv'LinkageError

name::
* McsEngl.jv'LinkageError@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.linkageerror#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.Error.

SUBCLASSES:
ClassCircularityError
ClassFormatError
ExceptionInInitializerError
IncompatibleClassChangeError
NoClassDefFoundError
UnsatisfiedLinkError
VerifyError

jv'ClassCircularityError

name::
* McsEngl.jv'ClassCircularityError@cptIt,

jv'ClassFormatError

name::
* McsEngl.jv'ClassFormatError@cptIt,

jv'ExceptionInInitializerError

name::
* McsEngl.jv'ExceptionInInitializerError@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.exceptionininitializererror#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.LinkageError.

FUNCTION:
Signals that an unexpected exception has occurred in a static initializer.
[API1.1]

jv'IncompatibleClassChangeError

name::
* McsEngl.jv'IncompatibleClassChangeError@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.incompatibleclasschangeerror#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.LinkageError.

SUBCLASS:
AbstractMethodError
IllegalAccessError
InstantiationError
NoSuchFieldError
NoSuchMethodError

jv'AbstractMethodError

name::
* McsEngl.jv'AbstractMethodError@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.abstractmethoderror#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.IncompatibleClassChangeError.

FUNCTION:
Thrown when an application tries to call an abstract method. Normally, this error is caught by the compiler; this error can only occur at run time if the definition of some class has incompatibly changed since the currently executing method was last compiled.
[API1.1]

jv'IllegalAccessError

name::
* McsEngl.jv'IllegalAccessError@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.illegalaccesserror#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.IncompatibleClassChangeError.

FUNCTION:
Thrown if an application attempts to access or modify a field, or to call a method that it does not have access to.
Normally, this error is caught by the compiler; this error can only occur at run time if the definition of a class has incompatibly changed.
[API1.1]

jv'InstantiationError

name::
* McsEngl.jv'InstantiationError@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.instantiationerror#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.IncompatibleClassChangeError.

FUNCTION:
** Thrown when an application tries to use the Java new construct to instantiate an abstract class or an interface.
Normally, this error is caught by the compiler; this error can only occur at run time if the definition of a class has incompatibly changed.
[API1.1]

jv'NoSuchFieldError

name::
* McsEngl.jv'NoSuchFieldError@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.nosuchfielderror#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.IncompatibleClassChangeError.

FUNCTION:
Thrown if an application tries to access or modify a specified field of an object, and that object no longer has that field.
Normally, this error is caught by the compiler; this error can only occur at run time if the definition of a class has incompatibly changed.
[API1.1]

jv'NoSuchMethodError

name::
* McsEngl.jv'NoSuchMethodError@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.nosuchmethoderror#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.IncompatibleClassChangeError.

FUNCTION:
Thrown if an application tries to call a specified method of a class (either static or instance), and that class no longer has a definition of that method.
Normally, this error is caught by the compiler; this error can only occur at run time if the definition of a class has incompatibly changed.
[API1.1]

jv'NoClassDefFoundError

name::
* McsEngl.jv'NoClassDefFoundError@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.noclassdeffounderror#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.LinkageError.

FUNCTION:
Thrown if the Java Virtual Machine or a classloader tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.
[API1.1]

jv'UnsatisfiedLinkError

name::
* McsEngl.jv'UnsatisfiedLinkError@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.unsatisfiedlinkerror#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.LinkageError.

FUNCTION:
Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native.
[API1.1]

jv'VerifyError

name::
* McsEngl.jv'VerifyError@cptIt,

jv'ThreadDeath

name::
* McsEngl.jv'ThreadDeath@cptIt,

jv'VirtualMachineError

name::
* McsEngl.jv'VirtualMachineError@cptIt,

jv'StackOverflowError

name::
* McsEngl.jv'StackOverflowError@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.stackoverflowerror#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.VirtualMachineError.

FUNCTION:
Thrown when a stack overflow occurs because an application recurses too deeply.

Example#ql:jv'ex.stackoverflowerror#.

jv'class.Event#ql:jv'event#

name::
* McsEngl.jv'class.Event@cptIt,

jv'class.F

name::
* McsEngl.jv'class.F@cptIt,

jv'FIFO-CLASS

name::
* McsEngl.jv'FIFO-CLASS@cptIt,

_SPECIFIC:
* java.util.concurrent.ArrayBlockingQueue<E>
* java.util.concurrent.ConcurrentLinkedQueue
* java.util.LinkedList

jv'class.File

name::
* McsEngl.jv'class.File@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.file#.

PACKAGE: java.io.

SUPERCLASS: java.lang.Object.

FUNCTION:
This class represents a file name of the host file system. The file name can be relative or absolute. It must use the file name conventions of the host platform. The intention is to provide an abstraction that deals with most of the system-dependent file name features such as the separator character, root, device name, etc. Not all features are currently fully implemented. Note that whenever a file name or path is used it is assumed that the host's file name conventions are used.
[API]

jv'class.FileDialog#ql:jv'filedialog#

name::
* McsEngl.jv'class.FileDialog@cptIt,

jv'class.FileInputStream

name::
* McsEngl.jv'class.FileInputStream@cptIt,
* McsEngl.jv'FileInputStream@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.fileinputstream#.

PACKAGE: java.io.

SUPERCLASS: java.io.InputStream.

COCLASS:
ByteArrayInputStream, FileInputStream, FilterInputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream.

FUNCTION:
* A file input stream is an input stream for reading data from a File or from a FileDescriptor.
[API1.1]

jv'class.FilterInputStream

name::
* McsEngl.jv'class.FilterInputStream@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.filterinputstream#.

PACKAGE: java.io.

SUPERCLASS: java.io.InputStream#ql:"jv'class.inputsteam"#.

This class is the superclass of all classes that filter input streams. These streams sit on top of an already existing input stream (the underlying input stream), but provide additional functionality.
[API 1.1]

jv'class.FINAL

name::
* McsEngl.jv'class.FINAL@cptIt,
* McsEngl.jv'FINAL'CLASS@cptIt,

_DEFINITION:
When you say that an entire class is final (by preceding its definition with the final keyword) you state that you don’t want to inherit from this class or allow anyone else to do so. For some reason the design of your class is such that there is never a need to make any changes.
[B. ECKEL, Thinking In Java, 1997aug18, 158]

A class can be declared final if
- its definition is complete and
- no subclasses are desired or required.
[lang spec, 1996aug]

jv'class.FlowLayout#ql:jv'flowlayout#

name::
* McsEngl.jv'class.FlowLayout@cptIt,

jv'class.Font

name::
* McsEngl.jv'class.Font@cptIt,
* McsEngl.jv'Font@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.font#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

SUBCLASS:

FUNCTION:
* A class that produces font objects.

* The Font class lets you get basic information about fonts and create objects representing various fonts.
[Java Tutorial, 1996dec24]

** It is important to present the concepts behind using the words character and glyph separately. A character is a symbol that represents items like letters and numbers in a particular writing system. For example, lowercase-g is a character. When a particular character has been rendered, a shape now represents this character. This shape is called a glyph.
A Font is a collection of glyphs. A Font can have many faces, such as heavy, medium, oblique, gothic and regular.
There are three different names that you can get from a Font object.
- The logical font name is the same as that used by java.awt.Font in JDK 1.1 and earlier releases.
- The font face name, or just font name for short, is the name of a particular font face, like Helvetica Bold.
- The family name is the name of the font family that determines the typographic design across several faces, like Helvetica. The font face name is the one that should be used to specify fonts. This name signifies actual fonts in the host system, and does not identify font names with the shape of font characters as the logical font name does.
[jdk1.2]

He also says that when updating a program from JDK 1.0 to 1.1, update the font names as described in the documentation for the java.awt.Toolkit.getFontList method. Examples:
Times Roman becomes Serif.
Helvetica becomes Sans-serif.
Courier becomes Monospaced.
[WebPreview 1997dec]

JDK1.2 FONTS:
serif=Times New Roman,
sansserif=Arial,
dialog=Arial (regular, bold, italic, bolditalic),
monospaced=Courier New,
dialoginput=Courier New,

alias.timesroman=serif
alias.helvetica=sansserif
alias.courier=monospaced
# for backword compatibility
zapfdingbats.0=WingDings,SYMBOL_CHARSET

JDK1.2 LOGICAL FONT NAMES:
A logical name must be either:
Dialog,
DialogInput,
Monospaced,
Serif,
SansSerif, or
Symbol.

CONSTRUCTOR INDEX:
Font(String, int, int):

Example#ql:jv'ex.font#.

jv'class.FontMetrics

name::
* McsEngl.jv'class.FontMetrics@cptIt,
* McsEngl.jv'FontMetrics@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.fontmetrics#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
** A font metrics object. Note that the implementations of these methods are inefficient, they are usually overridden with more efficient toolkit specific implementations.

Example#ql:jv'ex.fontmetrics#.

jv'class.Format#ql:jv'format#

name::
* McsEngl.jv'class.Format@cptIt,

jv'class.Frame#ql:jv'frame#

name::
* McsEngl.jv'class.Frame@cptIt,

jv'class.Graphics

name::
* McsEngl.jv'class.Graphics@cptIt,
* McsEngl.jv'Graphics@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.graphics#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
* Graphics is the abstract base class for all graphics contexts which allow an application to draw onto components realized on various devices or onto off-screen images. A Graphics object encapsulates the state information needed for the various rendering operations that Java supports.
[API]

MISTAKES:
"The AWT Component.paint and Component.update methods take a Graphics object as a parameter," Hayes explains. "This object should not be retained, as it may be a transient object valid only during the paint; an AWT implementation is free to destroy that Graphics object after the paint method returns, which makes it pointless (and dangerous) to retain the object."
Do not retain the paint Graphics object. In general, it is not safe to paint outside a call to update() (or paint(), which is called by the default Component.update()). If you do need a long-lived Graphics object, you should create a new one from the argument value, but be warned that this may fail on some platforms:
Graphics myGraphics = null; // retained void paint(Graphics g) { if (myGraphics == null) { myGraphics = g.create(); } // painting code goes here }
[WebReview 1997dec]

Example#ql:jv'ex.graphics#.

jv'class.GridBagLayout#ql:jv'gridbaglayout#

name::
* McsEngl.jv'class.GridBagLayout@cptIt,

jv'class.GridLayout#ql:jv'gridlayout#

name::
* McsEngl.jv'class.GridLayout@cptIt,

jv'class.Hashtable

name::
* McsEngl.jv'class.Hashtable@cptIt,
* McsEngl.jv'Hashtable@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.hashtable#.

PACKAGE: java.util.

SUPERCLASS: java.util.Dictionary#ql:jv'class.dictionary#.

_DEFINITION:
Hashtable is an associative array that lets you associate any object with any other object
[B. ECKEL, Thinking In Java, 1997aug18, 210]

Maps keys to values. Any object can be used as a key and/or value. To sucessfully store and retrieve objects from a hash table, the object used as the key must implement the hashCode() and equals() methods.
[API]


This class implements a hashtable, which maps keys to values.
Constructor Summary:
** Hashtable () Constructs a new, empty hashtable with a default capacity and load factor, which is 0.75.
** Hashtable (int initialCapacity) Constructs a new, empty hashtable with the specified initial capacity and default load factor, which is 0.75.
** Hashtable (int initialCapacity, float loadFactor) Constructs a new, empty hashtable with the specified initial capacity and the specified load factor.
** Hashtable (Map t) Constructs a new hashtable with the same mappings as the given Map.
Method Summary:
** Enumeration elements ()
Returns an enumeration of the values in this hashtable.
** Enumeration keys ()
Returns an enumeration of the keys in this hashtable.

** void clear () Clears this hashtable so that it contains no keys.
** Object clone () Creates a shallow copy of this hashtable.
** boolean contains (Object value) Tests if some key maps into the specified value in this hashtable.
** boolean containsKey (Object key) Tests if the specified object is a key in this hashtable.
** boolean containsValue (Object value) Returns true if this Hashtable maps one or more keys to this value. Note that this method is identical in functionality to contains (which predates the Map interface).
** Set entrySet () Returns a Set view of the entries contained in this Hashtable.
** boolean equals (Object o) Compares the specified Object with this Map for equality, as per the definition in the Map interface.
** Object get (Object key) Returns the value to which the specified key is mapped in this hashtable.
** int hashCode () Returns the hash code value for this Map as per the definition in the Map interface.
** boolean isEmpty () Tests if this hashtable maps no keys to values.
** Set keySet () Returns a Set view of the keys contained in this Hashtable.
** Object put (Object key, Object value) Maps the specified key to the specified value in this hashtable.
** void putAll (Map t)
Copies all of the mappings from the specified Map to this Hashtable
These mappings will replace any mappings that this Hashtable had
for any of the keys currently in the specified Map.
** protected void rehash () Increases the capacity of and internally reorganizes this hashtable, in order to accommodate and access its entries more efficiently.
** Object remove (Object key) Removes the key (and its corresponding value) from this hashtable.
** int size () Returns the number of keys in this hashtable.
** String toString () Returns a string representation of this Hashtable object in the form of a set of entries, enclosed in braces and separated by the ASCII characters ", " (comma and space).
** Collection values () Returns a Collection view of the values contained in this Hashtable.
[jdk1.2]

jv'CLASS.I

name::
* McsEngl.jv'CLASS.I@cptIt,

jv'class.Image

name::
* McsEngl.jv'class.Image@cptIt,
* McsEngl.jv'image@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.image#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
** The image class is an abstract class. The image must be obtained in a platform specific way.

What is an Image?

An image is a rectangular grid of pixels. It has a definite height and a definite width counted in pixels. Each pixel is square and has a fixed size on a given display. however different computer monitors may use different sized pixels.

Each pixel has a color. The color is a 32-bit integer. The first eight bits determine the redness of the pixel, the next eight bits the greenness, the next eight bits the blueness, and the remaining eight bits the transparency of the pixel.
11111111 -11111111 -11111111 -11111111
Transparency -Red -Green -Blue
Each of these values can be interpreted as an unsigned byte between 0 and 255. Within the color higher numbers are brighter. Thus a red of 0 is no red at all while a red of 255 is a very bright red.
Currently Java only supports two levels of transparency: Completely opaque (255) and completely transparent (0). Values of 1 through 254 are treated as completely transparent.

Different colors are made by mixing different levels of the three primary colors. For example, medium gray is 127 red, 127 green, and 127 blue.
255 127 127 127 Medium Grey
Pure white is 255 red, 255 green, 255 blue.
255 255 255 255 Bright White
Pure red is 255 red, 0 green, 0 blue.
255 255 0 0 Pure Red
A light cream is 255 red, 231 green, and 187 blue.
255 255 231 187 Light Cream
[Last Modified March 31, 1997 Copyright 1997 Elliotte Rusty Harold elharo@sunsite.unc.edu]

jv'class.Insets

name::
* McsEngl.jv'class.Insets@cptIt,
* McsEngl.jv'Insets@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.insets#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
The insets of a container. This class is used to layout containers.
[API1.1]

Example#ql:jv'ex.insets#.

jv'CLASS.J

name::
* McsEngl.jv'CLASS.J@cptIt,

jv'class.JTextArea

name::
* McsEngl.jv'class.JTextArea@cptIt,
* McsEngl.jv'JTextArea@cptIt,

POSITION:
It is a number that counts the SYMBOLS (characters, tabs, \n, spaces) in the textarea.
[nikos, 1997dec30]

TAB SIZE:
** default is 8.
** setTabSize() to take effect, we must first set a document for the text area.
[nikos, 1999jan21]

jv'class.JTextPane

name::
* McsEngl.jv'class.JTextPane@cptIt,
* McsEngl.jv'JTextPane@cptIt,

_DEFINITION:
JTextPane is a full-featured text editor that supports formatted text, word wrap, and image display. It uses a linked list of objects that implement the Style interface to specify formatting and supplies some convenience methods for formatting text.
[JDC]

jv'class.JTree

name::
* McsEngl.jv'class.JTree@cptIt,
* McsEngl.jv'TREE@cptIt,
* McsEngl.jv'JTree@cptIt,

_DEFINITION:

SINCE: jdk1.2

LEAF:
It is a node with no children.

LEVELS:
LEVEL 1: is the SET of children of the root.
LEVEL 2: is the set of children that have parents the level1 nodes.

NODE:

PATH OF A NODE:
is the set of parents of this node to the root.

ROOT:
is the first node.

jv'TreeCellRenderer

name::
* McsEngl.jv'TreeCellRenderer@cptIt,

The TreeCellRenderer interface is used by JTree to specify a component that will visually represent nodes in the tree. For instance, the default cell renderer is BasicTreeCellRenderer, which uses folders as root and internal nodes and filled circles as leaf nodes (see example below). Custom appearance can be defined by creating classes that implement this interface that contains only one methods:
getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) - Returns the component that will be used for rendering nodes.

jv'TreeModel

name::
* McsEngl.jv'TreeModel@cptIt,

The TreeModel interface describes a JTree's underlying data model. JTree contains a property, Model, with access methods getModel and setModel, that determine which TreeModel a JTree uses. The TreeModel interface specifies how a tree is mapped over a data structure with the following methods:
getChild (Object parent, int index)
getChildCount (Object parent)
getIndexOfChild (Object parent, Object child)
getRoot() isLeaf (Object node)
These are similar to their analogous JTree methods, except that they deal with Objects rather than TreeNodes.
[jdk training 1997dec]

jv'TreeSelectionModel

name::
* McsEngl.jv'TreeSelectionModel@cptIt,

TreeSelectionModel is an interface that specifies how the user may select a path of arbitrary objects. JTree uses it to set up selection rules.
DefaultTreeSelectionModel is a simple implementation of TreeSelectionModel. It allows for the usual selection paradigm that one is accustomed to (i.e. selecting files in a directory).

jv'CLASS.K

name::
* McsEngl.jv'CLASS.K@cptIt,

jv'CLASS.L

name::
* McsEngl.jv'CLASS.L@cptIt,

jv'class.Label#ql:jv'label#

name::
* McsEngl.jv'class.Label@cptIt,

jv'class.List#ql:jv'list#

name::
* McsEngl.jv'class.List@cptIt,

jv'CLASS.M

name::
* McsEngl.jv'CLASS.M@cptIt,

jv'class.MediaTracker

name::
* McsEngl.jv'class.MediaTracker@cptIt,
* McsEngl.jv'MediaTracker@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.mediatracker#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
** A utility class to track the status of a number of media objects. Media objects could include images as well as audio clips, though currently only images are supported. To use it, simply create an instance and then call addImage() for each image to be tracked. Each image can be assigned a unique ID for indentification purposes. The IDs control the priority order in which the images are fetched as well as identifying unique subsets of the images that can be waited on independently.
[API]

jv'CLASS.member

name::
* McsEngl.jv'CLASS.member@cptIt,

The members of a package are subpackages and all the class and interface types declared in all the compilation units of the package.
[lang spec, 1996aug]

jv'class.Menu#ql:jv'menu#

name::
* McsEngl.jv'class.Menu@cptIt,

jv'class.MenuBar#ql:jv'menubar#

name::
* McsEngl.jv'class.MenuBar@cptIt,

jv'class.MenuComponent#ql:jv'menucomponent#

name::
* McsEngl.jv'class.MenuComponent@cptIt,

jv'class.MenuItem#ql:jv'menuitem#

name::
* McsEngl.jv'class.MenuItem@cptIt,

jv'class.MessageFormat

name::
* McsEngl.jv'class.MessageFormat@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.messageformat#.

PACKAGE: java.text.

SUPERCLASS: java.text.Format.

Example#ql:jv'ex.messageformat#.

jv'class.Nested

name::
* McsEngl.jv'class.Nested@cptIt,
* McsEngl.jv'Nested'class@cptIt,

Definition: A nested class is a class that is a member of another class.
You use nested classes to reflect and enforce the relationship between two classes. You should define a class within another class when the nested class makes sense only in the context of its enclosing class or when it relies on the enclosing class for its function. For example, a text cursor makes sense only in the context of a particular text component
[js tutorial {1999-03-12}]

EXAMPLE:
class EnclosingClass{
. . .
class ANestedClass { . . . }
}
[js tutorial {1999-03-12}]

_SUBGENERAL:
* static nested-class
* nonstatic nested-class (inner)
A static nested class is called just that: a static nested class. A nonstatic nested class is called an inner-class#ql:jv'inner'class#.
[js tutorial {1999-03-12}]

jv'OUTER'CLASS

name::
* McsEngl.jv'OUTER'CLASS@cptIt,
* McsEngl.jv'outer'class@cptIt,
* McsEngl.jv'class.outer@cptIt,

_DEFINITION:
OUTER CLASS of an inner class IS the class that contains the inner class.

jv'class.nested.NONSTATIC

name::
* McsEngl.jv'class.nested.NONSTATIC@cptIt,
* McsEngl.jv'class.INNER@cptIt,
* McsEngl.jv'inner'class@cptIt,
* McsEngl.jv'nonstatic'nested'class@cptIt,

_DEFINITION:
* NON-STATIC nested-class#ql:jv'nested'class#.

In Java 1.1 it’s possible to place a class definition within another class definition. This is called an inner class. This is a useful feature because it allows you to group classes that logically belong together and to control the visibility of one within the other. However, it’s important to understand that inner classes are distinctly different from composition.
[B. ECKEL, Thinking In Java, 1997aug18, 180]

You can have an inner class IN an inner class.
[Nikos 1997may23]

You can't have STATIC variable in an inner-class.

You can have an innerclass object, in the outer class.
[1998dec25]

_GENERAL:
nested-class#ql:jv'nested'class#.

ACCESS:
You can access STATIC field/methods of the outer class in an inner class, without prefix them with the outer class name.
[nikos, 1998dec31]

jv'class.Number

name::
* McsEngl.jv'class.Number@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.number#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.Object.

The abstract class Number is the superclass of classes Byte, Double, Float, Integer, Long, and Short.

jv'class.O

name::
* McsEngl.jv'class.O@cptIt,

jv'class.Panel#ql:jv'panel#

name::
* McsEngl.jv'class.Panel@cptIt,

jv'class.PEER

name::
* McsEngl.jv'class.PEER@cptIt,

Peer classes exist mainly for the convenience of the people who wrote the Java environment. They help in translating between the AWT user interface and the native (Windows, OpenWindows, Mac etc.) interfaces. Unless you're porting Java to a new platform you shouldn't have to use them.
[Harold FAQ, 1997jan22]

jv'class.PlainDocument

name::
* McsEngl.jv'class.PlainDocument@cptIt,
* McsEngl.jv'PlainDocument@cptIt,

PACKAGE: javax.swing.text.

SUPERCLASS: javax.swing.text.AbstractDocument.

_DEFINITION:
A plain document that maintains no character attributes.
Inner classes inherited from javax.swing.text.AbstractDocument :
** AbstractDocument.AbstractElement,
** AbstractDocument.AttributeContext,
** AbstractDocument.BranchElement,
** AbstractDocument.Content,
** AbstractDocument.DefaultDocumentEvent,
** AbstractDocument.ElementEdit,
** AbstractDocument.LeafElement
Field Summary:
** static String lineLimitAttribute Name of the attribute that specifies the maximum length of a line, if there is a maximum length.
** static String tabSizeAttribute Name of the attribute that specifies the tab size for tabs contained in the content.
Fields inherited from class javax.swing.text.AbstractDocument:
** BAD_LOCATION,
** BidiElementName,
** ContentElementName,
** ElementNameAttribute,
** listenerList,
** ParagraphElementName,
** SectionElementName
Constructor Summary:
** PlainDocument() Constructs a plain text document.
** protected PlainDocument(AbstractDocument.Content c) Constructs a plain text document.
Method Summary:
** protected AbstractDocument.AbstractElement createDefaultRoot() Creates the root element to be used to represent the default document structure.
** Element getDefaultRootElement() Gets the default root element for the document model.
** Element getParagraphElement(int pos) Get the paragraph element containing the given position.
** protected void insertUpdate (AbstractDocument.DefaultDocumentEvent chng, AttributeSet attr) Updates document structure as a result of text insertion.
** protected void removeUpdate (AbstractDocument.DefaultDocumentEvent chng) Updates any document structure as a result of text removal.
Methods inherited from class javax.swing.text.AbstractDocument:
addDocumentListener,
addUndoableEditListener,
createBranchElement,
createLeafElement,
createPosition,
dump,
fireChangedUpdate,
fireInsertUpdate,
fireRemoveUpdate,
fireUndoableEditUpdate,
getAsynchronousLoadPriority,
getAttributeContext,
getBidiRootElement,
getContent,
getCurrentWriter,
getDocumentProperties,
getEndPosition,
getLength,
getProperty,
getRootElements,
getStartPosition,
getText,
getText,
insertString,
postRemoveUpdate,
putProperty,
readLock,
readUnlock,
remove,
removeDocumentListener,
removeUndoableEditListener,
render,
setAsynchronousLoadPriority,
setDocumentProperties,
writeLock,
writeUnlock
Methods inherited from class java.lang.Object:
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
toString,
wait,
wait,
wait
[jdk1.2]

jv'class.Point

name::
* McsEngl.jv'class.Point@cptIt,
* McsEngl.jv'Point@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.point#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
A point representing a location in (x, y) coordinate space.
[API1.1]

jv'class.Polygon

name::
* McsEngl.jv'class.Polygon@cptIt,
* McsEngl.jv'Polygon@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.polygon#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
A polygon consists of a list of x and y coordinates.
[API1.1]

Example#ql:jv'ex.polygon#.

jv'class.PrintStream

name::
* McsEngl.jv'class.PrintStream@cptIt,
* McsEngl.jv'PRINTSTREAM@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.printstream#.

PACKAGE: java.io#ql:package.java.io#.

SUPERCLASS: java.io.FilterOutputStream.

FUNCTION:
* DEPRECATED at 1.1 by java.io.PrintWriter#ql:class.printwriter#.
* PrintStream class (a class provided with the Java development environment) that implements the standard output stream.
[JavaSoft Tutorial, 1996jul06]

While System's out variable is a class variable, it refers to an instance of the PrintStream class (a class provided with the Java development environment) that implements the standard output stream.
When the System class is loaded into the application, it instantiates PrintStream and assigns the new PrintStream object to the out class variable. Now that you have an instance of a class, you can call one of its instance methods:
System.out.println("Hello World!");
[JavaSoft tutorial 1997jul08]

jv'class.Properties

name::
* McsEngl.jv'class.Properties@cptIt,
* McsEngl.jv'Properties@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.properties#.

_WHOLE:
PACKAGE: java.util#ql:jv'util'package#.

SUPERCLASS: java.util.Hashtable#ql:jv'class.hashtable#.

FUNCTION:
** The Properties class represents a persistent set of properties. The Properties can be saved to a stream or loaded from a stream. Each KEY and its corresponding VALUE in the property list is a string.
A property list can contain another property list as its "defaults"; this second property list is searched if the property key is not found in the original property list.
[API1.1]

Example#ql:jv'ex.properties#.

SYSTEM PROPERTIES (2000jan):
awt.toolkit=sun.awt.windows.WToolkit

file.encoding=Cp1253
file.encoding.pkg=sun.io
file.separator=\

java.awt.fonts=
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.awt.printerjob=sun.awt.windows.WPrinterJob
java.class.path=.;\JAVA\CLASSES;
java.class.version=46.0
java.compiler=symcjit
java.ext.dirs=\JAVA\JDK122\JRE\lib\ext
java.home=\JAVA\JDK122\JRE
java.io.tmpdir=\TMP\
java.specification.name=Java Platform API Specification
java.specification.vendor=Sun Microsystems Inc.
java.specification.version=1.2
java.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
java.version=1.2.2
java.vm.info=build JDK-1.2.2-001, native threads, symcjit
java.vm.name=Classic VM
java.vm.vendor=Sun Microsystems Inc.
java.vm.version=1.2.2
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Sun Microsystems Inc.
java.vm.specification.version=1.0

java.library.path=\JAVA\JDK122\BIN;.;\WINDOWS\SYSTEM;\WINDOWS;\WINDOWS;\WINDOWS\COMMAND;\;\JAVA\JDK122\BIN;\PROGRAMS\BAT;\PROGRAMS\TOOLS;\JAVA\CLASSES;\PROGRA~1\NETWOR~1\MCAFEE~1;\PROGRAMS\EDITORS\UEDIT6~1;;\WN16\BIN;

line.separator=

os.arch=x86
os.name=Windows 95
os.version=4.0

path.separator=;

sun.boot.class.path=\JAVA\JDK122\JRE\lib\rt.jar;\JAVA\JDK122\JRE\lib\i18n.jar;\JAVA\JDK122\JRE\classes
sun.boot.library.path=\JAVA\JDK122\JRE\bin
sun.io.unicode.encoding=UnicodeLittle

user.dir=\java\APP\ListProperties
user.home=\WINDOWS
user.language=el
user.name=NK
user.region=GR
user.timezone=Europe/Athens

jv'CLASS.R

name::
* McsEngl.jv'CLASS.R@cptIt,

jv'class.Reader

name::
* McsEngl.jv'class.Reader@cptIt,
* McsEngl.jv'Reader@cptIt,

_DEFINITION:
* Abstract class for reading character streams. The only methods that a subclass must implement are read(char[], int, int) and close(). Most subclasses, however, will override some of the methods defined here in order to provide higher efficiency, additional functionality, or both.
Since: JDK1.1

_HIERARCHY:
java.lang.Object
 java.io.Reader:
   BufferedReader:
     LineNumberReader,
   CharArrayReader,
   FilterReader,
   java.io.InputStreamReader:
     java.io.FileReader
   PipedReader,
   StringReader,

Field Summary:
protected Object lock The object used to synchronize operations on this stream.

Constructor Summary:
protected Reader() Create a new character-stream reader whose critical sections will synchronize on the reader itself.
protected Reader(Object lock) Create a new character-stream reader whose critical sections will synchronize on the given object.

Method Summary:
abstract void close() Close the stream.
void mark(int readAheadLimit) Mark the present position in the stream.
boolean markSupported() Tell whether this stream supports the mark() operation.
int read() Read a single character.
int read(char[] cbuf) Read characters into an array.
abstract int read(char[] cbuf, int off, int len) Read characters into a portion of an array.
boolean ready() Tell whether this stream is ready to be read.
void reset() Reset the stream.
long skip(long n) Skip characters.

int i = reader.read();
if (i < 0) EOL=true;

_EVALUATION:
* With JDK 1.0, a standard way of reading and writing text lines was to use the DataInputStream class and the readLine method.  JDK 1.1 offers a faster way of performing line-oriented text I/O using the classes FileReader, BufferedReader, FileWriter, and BufferedWriter.

jv'class.BufferedReader

name::
* McsEngl.jv'class.BufferedReader@cptIt,
* McsEngl.jv'reader.bufferedreader@cptIt,
* McsEngl.jv'bufferedreader@cptIt,

Constructor Summary
* BufferedReader(Reader in) Create a buffering character-input stream that uses a default-sized input buffer.
* BufferedReader(Reader in, int sz) Create a buffering character-input stream that uses an input buffer of the specified size.

Method Summary
* void close() Close the stream.
* void mark(int readAheadLimit) Mark the present position in the stream.
* boolean markSupported() Tell whether this stream supports the mark() operation, which it does.
* int read() Read a single character.
* int read(char[] cbuf, int off, int len) Read characters into a portion of an array.
* String readLine() Read a line of text.
* boolean ready() Tell whether this stream is ready to be read.
* void reset() Reset the stream to the most recent mark.
* long skip(long n) Skip characters.

jv'ex.BufferedReader

name::
* McsEngl.jv'ex.BufferedReader@cptIt,

FROM_FILE:
try
{
 BufferedReader br = new BufferedReader(new FileReader(fileName));
 while ( (ln=br.readLine())!=null )
 {
   if (ln.startsWith("<FO_ETO_TO_LEKSO")){
 }
 br.close();
}catch (IOException e){}

FROM_FILE_WITH_ENCONDING:
try
{
 FileInputStream fis = new FileInputStream(fileName);
 InputStreamReader isr = new InputStreamReader(fis, "UTF-16");
 BufferedReader br = new BufferedReader(isr);
 while ( (ln=br.readLine())!=null )
 {
   if (ln.startsWith("<FO_ETO_TO_LEKSO")){
 }
 br.close();
}catch (EOFException e){}
catch (FileNotFoundException e){}
catch (IOException e){}

FROM_URL:
// Convert urlString into a BufferedReader
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

jv'class.Rectangle

name::
* McsEngl.jv'class.Rectangle@cptIt,
* McsEngl.jv'Rectangle@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.rectangle#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
A rectangle defined by x, y, width and height.
[API1.1]

Example#ql:jv'ex.rectangle#.

jv'class.ResourceBundle#ql:jv'resourcebundle#

name::
* McsEngl.jv'class.ResourceBundle@cptIt,

jv'class.Runtime

name::
* McsEngl.jv'class.Runtime@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.runtime#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.Object.

Runtime objects provide two services.
- First, they communicate with the components of the runtime environment--getting information and invoking functions.
- Second, Runtime objects are also the interface to system-dependent capabilities. For example, UNIX runtime objects might support the getenv() and setenv() functions. Other runtime objects, such as MacOS, might not support getenv() and setenv() (because the host operating system doesn't support these functions) but might support others.
[Java Tutorial, 1996dec24]

jv'class.S

name::
* McsEngl.jv'class.S@cptIt,

jv'class.Scrollbar#ql:jv'scrollbar#

name::
* McsEngl.jv'class.Scrollbar@cptIt,

jv'class.SecurityManager

name::
* McsEngl.jv'class.SecurityManager@cptIt,
* McsEngl.jv'SecurityManager@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.securitymanager#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.Object.

FUNCTION:
The security manager is an abstract class that allows applications to implement a security policy. It allows an application to determine, before performing a possibly unsafe or sensitive operation, what the operation is and whether the operation is being performed by a class created via a class loader rather than installed locally. Classes loaded via a class loader (especially if they have been downloaded over a network) may be less trustworthy than classes from files installed locally. The application can allow or disallow the operation.
[API1.1]

Example#ql:jv'ex.securitymanager#.

jv'class.Stack (java.util)

name::
* McsEngl.jv'class.Stack (java.util)@cptIt,
* McsEngl.jv'Stack'Class@cptIt,
* McsEngl.jv'LIFO@cptIt,

SOURCE:
* file:///D:/JAVA/DOCS6/api/java/util/Stack.html
JavaSoft API11#ql::2nfoJAPI11.NFO:class.stack#.

PACKAGE: java.util.

SUPERCLASS: java.util.Vector.

_DEFINITION:
The Stack class represents a last-in-first-out (LIFO) stack of objects.
[API1.1]

METHODS:
boolean  empty()
Tests if this stack is empty.
E  peek()
Looks at the object at the top of this stack without removing it from the stack.
E  pop()
Removes the object at the top of this stack and returns that object as the value of this function.
E  push(E item)
Pushes an item onto the top of this stack.
int  search(Object o)
Returns the 1-based position where an object is on this stack.

jv'ex.Stack

name::
* McsEngl.jv'ex.Stack@cptIt,

 try  {lastCpt = (String)stack.peek();}//look at the objecter without removing.
 catch  (EmptyStackException e)  {lastCpt = "null";}
 if (!lastCpt.equals(cpt))  stack.push(cpt);

 stack.pop(); //removes the entity

jv'class.STREAM

name::
* McsEngl.jv'class.STREAM@cptIt,

The Stream Classes
Almost all the classes that work directly with streams are part of the java.io package. (There are also a few more in the sun.io and sun.net packages, but those are deliberately hidden from you.) The two main classes are java.io.InputStream and java.io.OutputStream. These are abstract base classes for many different subclasses with more specialized abilities, including:

•BufferedInputStream •BufferedOutputStream •ByteArrayInputStream •ByteArrayOutputStream •DataInputStream •DataOutputStream •FileInputStream •FileOutputStream •FilterInputStream •FilterOutputStream •LineNumberInputStream •ObjectInputStream •ObjectOutputStream •PipedInputStream •PipedOutputStream •PrintStream •PushbackInputStream •SequenceInputStream •StringBufferInputStream
[Last Modified April 7, 1997 Copyright 1997 Elliotte Rusty Harold elharo@sunsite.unc.edu]

A STREAM is a sequence of DATA of undetermined length. It's called a stream because it's like a stream of water that continues to flow. There's no definite end to it. ...
In Java a stream is composed of discrete bytes. The bytes may represent chars or other kinds of data. They may come faster than you can handle them, or your thread may block while waiting for the next one to arrive. It often doesn't matter. The key to processing the stream is a while loop that processes each piece of data, until you encounter the end-of-stream character or some other exceptional condition occurs. In Unix end-of-stream is indicated by Control-D. On Windows systems end-of-stream is Control-Z.
[Harold course 1997spring]

jv'class.StreamTokenizer

name::
* McsEngl.jv'class.StreamTokenizer@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.streamtokenizer#.

PACKAGE: java.io.

SUPERCLASS: java.lang.Object.

A class to turn an input stream into a stream of tokens. There are a number of methods that define the lexical syntax of tokens. By default, a StreamTokenizer recognizes numbers, Strings quoted with single and double quotes, and all the alphabetics.

jv'class.STRING

name::
* McsEngl.jv'class.STRING@cptIt,
* McsEngl.jv'String'class@cptIt,

SOURCE: API1.2index#ql::INDEX-of-JDK1.2-API:jv'string#,JavaSoft API11#ql::2nfoJAPI11.NFO:class.string#.

PACKAGE: java.lang.String

SUPERCLASS: java.lang.Object.

This special class has literal#ql:jv'literal.string#.

Example#ql:jv'ex.string'class#.

_METHODS:
** char charAt (int index) Returns the character at the specified index.
** int compareTo (Object o) Compares this String to another Object.
** int compareTo (String anotherString) Compares two strings lexicographically.
** int compareToIgnoreCase (String str) Compares two strings lexicographically, ignoring case considerations.
** String concat (String str) Concatenates the specified string to the end of this string.
** static String copyValueOf (char[] data) Returns a String that is equivalent to the specified character array.
** static String copyValueOf (char[] data, int offset, int count) Returns a String that is equivalent to the specified character array.
** boolean endsWith (String suffix) Tests if this string ends with the specified suffix.
** boolean equals (Object anObject) Compares this string to the specified object.
** boolean equalsIgnoreCase (String anotherString) Compares this String to another String, ignoring case considerations.
** byte[] getBytes () Convert this String into bytes according to the platform's default character encoding, storing the result into a new byte array.
** void getBytes (int srcBegin, int srcEnd, byte[] dst, int dstBegin) Deprecated. This method does not properly convert characters into bytes. As of JDK 1.1, the preferred way to do this is via the getBytes (String enc) method, which takes a character-encoding name, or the getBytes () method, which uses the platform's default encoding.
** byte[] getBytes (String enc) Convert this String into bytes according to the specified character encoding, storing the result into a new byte array.
** void getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin) Copies characters from this string into the destination character array.
** int hashCode () Returns a hashcode for this string.
** int jv'indexOf (int ch) Returns the index within this string of the first occurrence of the specified character.
** int indexOf (int ch, int fromIndex) Returns the index within this string of the first occurrence of the specified character, starting the search at the specified index.
** int indexOf (String str) Returns the index within this string of the first occurrence of the specified substring.
** int indexOf (String str, int fromIndex) Returns the index within this string of the first occurrence of the specified substring, starting at the specified index.
** String intern () Returns a canonical representation for the string object.
** int jv'lastIndexOf (int ch) Returns the index within this string of the last occurrence of the specified character.
** int lastIndexOf (int ch, int fromIndex) Returns the index within this string of the last occurrence of the specified character, searching backward starting at the specified index.
** int lastIndexOf (String str) Returns the index within this string of the rightmost occurrence of the specified substring.
** int lastIndexOf (String str, int fromIndex) Returns the index within this string of the last occurrence of the specified substring.
** int length () Returns the length of this string.
** boolean regionMatches (boolean ignoreCase, int toffset, String other, int ooffset, int len) Tests if two string regions are equal.
** boolean jv'regionMatches (int toffset, String other, int ooffset, int len) Tests if two string regions are equal.
** String jv'replace (char oldChar, char newChar) Returns a new string resulting from replacing all occurrences of oldChar in this string with newChar.
** boolean jv'startsWith (String prefix) Tests if this string starts with the specified prefix.
** boolean startsWith (String prefix, int toffset) Tests if this string starts with the specified prefix beginning a specified index.
** String jv'substring (int beginIndex) Returns a new string that is a substring of this string.
** String jv'substring (int beginIndex, int endIndex) Returns a new string that is a substring of this string.
** char[] toCharArray () Converts this string to a new character array.
** String toLowerCase () Converts all of the characters in this String to lower case using the rules of the default locale, which is returned by Locale.getDefault.
** String toLowerCase (Locale locale) Converts all of the characters in this String to lower case using the rules of the given Locale.
** String toString () This object (which is already a string!) is itself returned.
** String toUpperCase () Converts all of the characters in this String to upper case using the rules of the default locale, which is returned by Locale.getDefault.
** String toUpperCase (Locale locale) Converts all of the characters in this String to upper case using the rules of the given locale.
** String trim () Removes white space from both ends of this string.
** static String valueOf (boolean b) Returns the string representation of the boolean argument.
** static String valueOf (char c) Returns the string representation of the char argument.
** static String valueOf (char[] data) Returns the string representation of the char array argument.
** static String valueOf (char[] data, int offset, int count) Returns the string representation of a specific subarray of the char array argument.
** static String valueOf (double d) Returns the string representation of the double argument.
** static String valueOf (float f) Returns the string representation of the float argument.
** static String valueOf (int i) Returns the string representation of the int argument. static
** String valueOf (long l) Returns the string representation of the long argument. static
** String valueOf (Object obj) Returns the string representation of the Object argument.
[jdk1.2]

since 1.4:
** public boolean matches(String regex) Tells whether or not this string matches the given regular expression. An invocation of this method of the form str.matches(regex) yields exactly the same result as the expression
Pattern.matches(regex, str)
** String replaceAll(String regex, String replacement) Replaces each substring of this string that matches the given regular expression with the given replacement.
** String replaceFirst(String regex, String replacement) Replaces the first substring of this string that matches the given regular expression with the given replacement.
** public String[] split(String regex) Splits this string around matches of the given regular expression. This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.
The string "boo:and:foo", for example, yields the following results with these expressions:
Regex Result : { "boo", "and", "foo" } o { "b", "", ":and:f" }

String length:
String s = "nikos";
System.out.println("nikos.length = " + s.length());
System.out.println("k index = " + s.indexOf('k'));

length = 5
k index = 2
[jdk1.2]

jv'class.StringBuffer

name::
* McsEngl.jv'class.StringBuffer@cptIt,
* McsEngl.jv'StringBuffer@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.stringbuffer#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.Object.

FUNCTION:
A string buffer implements a mutable sequence of characters.

StringBuilder:
A mutable sequence of characters. This class provides an API compatible with StringBuffer, but with no guarantee of synchronization. This class is designed for use as a drop-in replacement for StringBuffer in places where the string buffer was being used by a single thread (as is generally the case). Where possible, it is recommended that this class be used in preference to StringBuffer as it will be faster under most implementations.

The principal operations on a StringBuilder are the append and insert methods, which are overloaded so as to accept data of any type. Each effectively converts a given datum to a string and then appends or inserts the characters of that string to the string builder. The append method always adds these characters at the end of the builder; the insert method adds the characters at a specified point.

For example, if z refers to a string builder object whose current contents are "start", then the method call z.append("le") would cause the string builder to contain "startle", whereas z.insert(4, "le") would alter the string builder to contain "starlet".

In general, if sb refers to an instance of a StringBuilder, then sb.append(x) has the same effect as sb.insert(sb.length(), x). Every string builder has a capacity. As long as the length of the character sequence contained in the string builder does not exceed the capacity, it is not necessary to allocate a new internal buffer. If the internal buffer overflows, it is automatically made larger.

Instances of StringBuilder are not safe for use by multiple threads. If such synchronization is required then it is recommended that StringBuffer be used.

Since:
1.5

Example#ql:jv'ex.stringbuffer#.

jv'class.StringTokenizer

name::
* McsEngl.jv'class.StringTokenizer@cptIt,
* McsEngl.jv'stringTokenizer@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.stringtokenizer#.

PACKAGE: java.util.

SUPERCLASS: java.lang.Object.

FUNCTION:
StringTokenizer is a class that controls simple linear tokenization of a String. The set of delimiters, which defaults to common whitespace characters, may be specified at creation time or on a per-token basis.

Example#ql:jv'ex.stringtokenizer#.

jv'class.SUBCLASS

name::
* McsEngl.jv'class.SUBCLASS@cptIt,
* McsEngl.jv'DERIVED'CLASS@cptIt,
* McsEngl.jv'SUBCLASS@cptIt,
* McsEngl.jv'CHILD'CLASS@cptIt,
* McsEngl.jv'INHERITED'CLASS@cptIt,

That is, subclasses
•inherit those member variables declared as public or protected
•inherit those member variables declared with no access specifier as long as the subclass is in the same package as the superclass. These variables are sometimes known as "friendly".
•don't inherit a superclass's member variable if the subclass declares a member variable using the same name. The subclass's member variable is said to hide the member variable in the superclass.
•don't inherit private member variables
[Java Tutorial, 1996dec24]

Hiding Member Variables
member variables defined in the subclass hide member variables of the same name in the superclass.
[Java Tutorial, 1996dec24]

What Methods Does a Subclass Inherit?
•inherit those methods declared as public or protected
•inherit those methods declared with no access specifier as long as the subclass is in the same package as the superclass
•don't inherit a superclass's method if the subclass declares a method using the same name. The method in the subclass is said to override the one in the superclass.
•don't inherit private methods
[Java Tutorial, 1996dec24]

You have two ways to differentiate your new derived class from the original base class it inherits from.
- The first is quite straightforward: you simply add brand new functions to the derived class. These new functions are not part of the base class interface. This means that the base class simply didn’t do as much as you wanted it to, so you add more functions. This very simple and primitive use for inheritance is, at times, the perfect solution to your problem. However, you should look closely for the possibility that your base class may need these additional functions.
- The second way, discussed in the following section, is to change the behavior of an existing base-class function by overriding it.
[B. ECKEL, Thinking In Java, 1997aug18, 28]

jv'class.SUPERCLASS

name::
* McsEngl.jv'class.SUPERCLASS@cptIt,
* McsEngl.jv'SUPERCLASS@cptIt,
* McsEngl.jv'BASECLASS@cptIt,
* McsEngl.jv'PARENTCLASS@cptIt,

In Java, as in other object-oriented programming languages, classes can be derived from other classes. The derived class (the class that is derived from another class) is called a subclass. The class from which its derived is called the superclass.
[Java Tutorial, 1996dec24]

CREATION:
Nonimero nven = new NonimeroVerberoEn("write");

jv'class.System

name::
* McsEngl.jv'class.System@cptIt,
* McsEngl.jv'SYSTEM'CLASS@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.system#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.Object.

_FUNCTION:
The system resources available through the System class include:
•standard input, output, and error streams
•system properties
•garbage collection
•loading dynamic libraries
•miscellany, including copying arrays, getting the current time, exiting the runtime environment, and using the security manager
[Java Tutorial, 1996dec24]

Example#ql:jv'ex.system#.

jv'arraycopy(Object, int, Object, int, int):
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
STATIC METHOD in class java.lang.System
Copies an array from the specified source array, beginning at the
specified position, to the specified position of the destination array.

jv'METHOD.gc'none, jv'gc():
STATIC METHOD in class java.lang.System
Runs the garbage collector.
* In Java, you don't have to free memory when you're done with it. The garbage collector runs asynchronously in the background cleaning up unreferenced objects. However, you can force the garbage collector to run using System's gc() method.
[Java Tutorial, 1996dec24]

jv'METHOD.runFinalization'none:
you can force the runtime system to perform object finalization using System's runFinalization() method.
[Java Tutorial, 1996dec24]

jv'CLASS.T

name::
* McsEngl.jv'CLASS.T@cptIt,

jv'class.TextArea#ql:jv'textarea#

name::
* McsEngl.jv'class.TextArea@cptIt,

jv'class.TextComponent#ql:jv'textcomponent#

name::
* McsEngl.jv'class.TextComponent@cptIt,

jv'class.TextField#ql:jv'textfield#

name::
* McsEngl.jv'class.TextField@cptIt,

jv'class.Thread#ql:jv'thread#

name::
* McsEngl.jv'class.Thread@cptIt,

jv'class.Toolkit

name::
* McsEngl.jv'class.Toolkit@cptIt,
* McsEngl.jv'Toolkit@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.toolkit#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
An AWT toolkit. It is used to bind the abstract AWT classes to a particular native toolkit implementation.
[API1.1]

Example#ql:jv'ex.toolkit#.

jv'class.THREAD

name::
* McsEngl.jv'class.THREAD@cptIt,
* McsEngl.jv'Thread@cptIt,
* McsEngl.jv'Thread'class@cptIt,
* McsEngl.jv'EXECUTION'CONTEXT@cptIt,
* McsEngl.jv'LIGHTWEIGHT'PROCESS@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.thread#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.Object.

_DEFINITION:
public class java.lang.Thread
extends Object
implements Runnable

A thread is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently.

Often, you also need to turn a program into separate, independently-running subtasks. Each of these independent subtasks is called a thread, and you program as if each thread runs by itself and has the CPU to itself.
[B. ECKEL, Thinking In Java, 1998jan]
** A thread is [CLASS#ql:jv'class#] a single sequential flow of control within a program.
[Java Tutorial, 1996dec24]

A thread--sometimes known as an execution context or a lightweight process--is a single sequential flow of control within a process.
[Java Tutorial, 1996dec24]

Threads independently execute Java code that operates on Java values and objects residing in a shared main memory. Threads may be supported by having many hardware processors, by time-slicing a single hardware processor, or by time-slicing many hardware processors.

Threads are created and managed by the built-in classes Thread (§20.20) and ThreadGroup (§20.21). Creating a Thread object creates a thread and that is the only way to create a thread. When the thread is created, it is not yet active; it begins to run when its start method (§20.20.14) is called.
[lang spec, 1996aug]

jv'thread'BODY

name::
* McsEngl.jv'thread'BODY@cptIt,

All of the action takes place in the thread's body--the thread's run() method. You can provide the body to a Thread in one of two ways:
- by subclassing the Thread class and overriding its run() method, or
- by creating a Thread with a Runnable object as its target.
[Java Tutorial, 1996dec24]

jv'thread'EVALUATION

name::
* McsEngl.jv'thread'EVALUATION@cptIt,

be careful when assuming that threads are the right solution. We came to threads through a series of steps, like the temperature being turned up on a frog in a pan of water. People assume that you "must have threads to do concurrency properly." But threads are fraught with problems and notoriously difficult -- some experts even say impossible -- to get right (hey, the GIL might be your friend a lot more than you know). Yes, with processes you don't get everything you get with threads, but you can use multicores and multiple machines right now and write robust code because the OS is protecting you by not allowing you to share memory. That's a good thing!
--Bruce Eckel
Read the rest in Reply to Guido's Reply
[http://www.cafeaulait.org/] 2007-10-04

jv'thread'EXAMPLE#ql:jv'ex.thread#

name::
* McsEngl.jv'thread'EXAMPLE@cptIt,

jv'thread'GROUP

name::
* McsEngl.jv'thread'GROUP@cptIt,

All threads belong to a thread group. ThreadGroup, a java.lang class, defines and implements the capabilities of a group of related threads.
[Java Tutorial, 1996dec24]

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.threadgroup#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.Object.

jv'thread'MEMBER

name::
* McsEngl.jv'thread'MEMBER@cptIt,


FIELD INDEX:
** (static) MAX_PRIORITY: The maximum priority that a Thread can have.
** (static) MIN_PRIORITY: The minimum priority that a Thread can have.
** (static) NORM_PRIORITY: The default priority that is assigned to a Thread.


CONSTRUCTOR INDEX:
** Thread(): Constructs a new Thread.
** Thread(java.lang.Runnable): Constructs a new Thread which applies the run() method of the specified target.
** Thread(java.lang.Runnable, java.lang.String): Constructs a new Thread with the specified name and applies the run() method of the specified target.
** Thread(java.lang.String): Constructs a new Thread with the specified name.
** Thread(java.lang.ThreadGroup, java.lang.Runnable): Constructs a new Thread in the specified Thread group that applies the run() method of the specified target.
** Thread(ThreadGroup, Runnable, String): Constructs a new Thr. in the specified Thr group with the specified name and applies the run() method of the specified target.
** Thread(java.lang.ThreadGroup, java.lang.String): Constructs a new Thread in the specified Thread group with the specified name.


METHOD INDEX:
** (stat) activeCount(): Returns the current number of active Threads in this Thread group.
** (inst) checkAccess(): Checks whether the current Thread is allowed to modify this Thread.
** (inst) countStackFrames(): Returns the number of stack frames in this Thread.
** (stat) currentThread(): Returns a reference to the currently executing Thread object.
** (inst) destroy(): Destroy a thread, without any cleanup, i.e.
** (stat) dumpStack(): A debugging procedure to print a stack trace for the current Thread.
** (stat) enumerate(Thread[]): Copies, into the specified array, references to every active Thread in this Thread's group.
** (inst) getName(): Gets and returns this Thread's name.
** (inst) getPriority(): Gets and returns the Thread's priority.
** (inst) getThreadGroup(): Gets and returns this Thread group.
** (inst) interrupt(): Send an interrupt to a thread.
** (stat) interrupted(): Ask if you (i.e.
** (inst) isAlive(): Returns a boolean indicating if the Thread is active.
** (inst) isDaemon(): Returns the daemon flag of the Thread.
** (inst) isInterrupted(): Ask if some Thread (not necessarily self) has been interrupted.
** (inst) join(): Waits forever for this Thread to die.
** (inst) join(long): Waits for this Thread to die.
** (inst) join(long, int): Waits for the Thread to die, with more precise time.
** (inst) resume(): Resumes this Thread execution.
** (inst) run(): The actual body of this Thread.
** (inst) setDaemon(boolean): Marks this Thread as a daemon Thread or a user Thread.
** (inst) setName(java.lang.String): Sets the Thread's name.
** (inst) setPriority(int): Sets the Thread's priority.
** (stat) sleep(long): Causes the currently executing Thread to sleep for the specified number of milliseconds.
** (stat) sleep(long, int): Sleep, in milliseconds and additional nanosecond.
** (inst) start(): Starts this Thread.
** (inst) stop(): Stops a Thread by tossing an object.
** (inst) stop(java.lang.Throwable): Stops a Thread by tossing an object.
** (inst) suspend(): Suspends this Thread's execution.
** (inst) toString(): Returns a String representation of the Thread, including the thread's name, priority and thread group.
** (stat) yield(): Causes the currently executing Thread object to yield.

jv'thread'PRIORITY

name::
* McsEngl.jv'thread'PRIORITY@cptIt,

Every thread has a priority. When there is competition for processing resources, threads with higher priority are generally executed in preference to threads with lower priority. Such preference is not, however, a guarantee that the highest priority thread will always be running, and thread priorities cannot be used to reliably implement mutual exclusion.
[lang spec, 1996aug]

Thread priorities are integers ranging between MIN_PRIORITY and MAX_PRIORITY (constants defined in the Thread class). The higher the integer, the higher the priority.
[Java Tutorial, 1996dec24]

jv'thread'START

name::
* McsEngl.jv'thread'START@cptIt,

With the start() method.
* From the component you start the thread, usally a button, must have NOTHING after the start() method, because starts a new process and you don't know when it will stop.
* You can have the next process at the end of run() method.
[hknu_{2000-03-09}]

jv'thread'STATE

name::
* McsEngl.jv'thread'STATE@cptIt,

Throughout its life, a Java thread is in one of several states. A thread's state indicates what the Thread is doing and what it is capable of doing at that time of its life: is it running? is it sleeping? is it dead?
[Java Tutorial, 1996dec24]

New Thread state
The following statement creates a new thread but does not start it, thereby leaving the thread in the "New Thread" state.
Thread myThread = new MyThreadClass();
When a thread is in the "New Thread" state, it is merely an empty Thread object. No system resources have been allocated for it yet.
[Java Tutorial, 1996dec24]

Runnable STATE
The start() method creates the system resources necessary to run the thread, schedules the thread to run, and calls the thread's run() method. At this point the thread is in the "Runnable" state. This state is called "Runnable" rather than "Running" because the thread might not actually be running when it is in this state.
[Java Tutorial, 1996dec24]

Not Runnable state
A thread enters the "Not Runnable" state when one of these four events occurs:
- Someone invokes its sleep() method.
- Someone invokes its suspend() method.
- The thread uses its wait() method to wait on a condition variable.
- The thread is blocking on I/O.
[Java Tutorial, 1996dec24]

Dead STATE:
A thread can die in two ways: either from natural causes, or by being killed (stopped). A thread dies naturally when its run() method exits normally.
[Java Tutorial, 1996dec24]

jv'thread'WORKING'MEMORY

name::
* McsEngl.jv'thread'WORKING'MEMORY@cptIt,

Every thread has a working memory in which it keeps its own working copy of variables that it must use or assign. As the thread executes a Java program, it operates on these working copies. The main-memory contains the master copy of every variable. There are rules about when a thread is permitted or required to transfer the contents of its working copy of a variable into the master copy or vice versa
[lang spec, 1996aug]

jv'thread.Event-dispatching-thread

name::
* McsEngl.jv'thread.Event-dispatching-thread@cptIt,

The event dispatching thread (EDT) is a background thread used in Java to process events from the Abstract Window Toolkit (AWT) graphical user interface event queue. These events are primarily update events that cause user interface components to redraw themselves, or input events from input devices such as the mouse or keyboard. The AWT uses a single-threaded painting model in which all screen updates must be performed from a single thread. The event dispatching thread is the only valid thread to update the visual state of visible user interface components. Updating visible components from other threads is the source of many common bugs in Java programs that use Swing [1].
[http://en.wikipedia.org/wiki/Event_dispatching_thread]

Long-running computations or input/output (I/O) bound tasks should never run on the Swing EDT.
...
Ideally, any task that requires more than 30 to 100 milliseconds should not run on the EDT. Otherwise, users will sense a pause between their input and the UI response.
[http://java.sun.com/developer/technicalArticles/javase/swingworker/]

jv'thread.DAEMON

name::
* McsEngl.jv'thread.DAEMON@cptIt,

Daemon threads are those that provide a service for other threads in the system. Any Java thread can be a daemon thread.
[Java Tutorial, 1996dec24]

jv'class.Throwable

name::
* McsEngl.jv'class.Throwable@cptIt,
* McsEngl.jv'Throwable@cptIt,

DEFINETRO:
public class java.lang.Throwable
extends Object
implements Serializable

SOURCE: JavaSoft API1.1#ql::2nfoJAPI11.NFO:class.throwable#.

_WHOLE:
PACKAGE: java.lang.

_GENERIC:
* Interface: Serializable#ql:jv'serializable#,
* SUPERCLASS: java.lang.Object.

_SPESIFEPTO:
Error#ql:jv'error#,
Exception#ql:jv'exception#

FUNCTION:
** The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or of one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement. Similarly, only this class or one of its subclasses can be the argument type in a catch clause.
[API1.1]
** Exceptions are represented by instances of the class Throwable and instances of its subclasses. These classes are, collectively, the exception classes.
[lang spec, 1996aug]

Example#ql:jv'ex.throwable#.

jv'CLASS.U

name::
* McsEngl.jv'CLASS.U@cptIt,

jv'class.URL

name::
* McsEngl.jv'class.URL@cptIt,
* McsEngl.jv'url@cptIt,

_DEFINETRO:
public final class java.net.URL
extends Object
implements Serializable

Class URL represents a Uniform Resource Locator, a pointer to a "resource" on the World Wide Web. A resource can be something as simple as a file or a directory, or it can be a reference to a more complicated object, such as a query to a database or to a search engine. More information on the types of URLs and their formats can be found at:
http://archive.ncsa.uiuc.edu/SDG/Software/Mosaic/Demo/url-primer.html

_WHOLE:
PACKAGE: java.net.

_GENERIC:
extends java.lang.Object
implements java.io.Serializable

_Since:
JDK1.0

_ADDRESS.WPG:
* JavaSoft API11#ql::2nfoJAPI11.NFO:class.url#.

CONSTRUCTOR INDEX:
URL(String):
URL(String, String, int, String):
URL(String, String, String):
URL(URL, String):

TIP:
compiled with 1.1.1 for a local file
URL("Act.txt") does not works.
needs
URL("file:///c:/java/applet/gettingstarted/Act.txt")
with two // doesn't works, needs three ///.
1997may11

compiled with 1.0, Works the first constructor.

jv'CLASS.V

name::
* McsEngl.jv'CLASS.V@cptIt,

jv'class.Window#ql:jv'window#

name::
* McsEngl.jv'class.Window@cptIt,

jv'CLASS.X

name::
* McsEngl.jv'CLASS.X@cptIt,

jv'codeSrc.collection.INTERFACE

name::
* McsEngl.jv'codeSrc.collection.INTERFACE@cptIt,
* McsEngl.jv'protocol@cptIt,

=== _NOTES: So the interface is used to establish a “protocol” between classes (some object-oriented programming languages have a keyword called protocol to do the same thing).
[B. ECKEL, Thinking In Java, 1997aug18, 174]

_DEFINITION:
INTERFACE is a REFERENCE-DATATYPE#ql:jv'type.reference# that declares a set of methods and constants without specifying the implementation for any of the methods.

what's an interface? An interface declares a set of methods and constants without specifying the implementation for any of the methods.
When a class claims to implement an interface, it's claiming to provide implementations for all of the methods declared in the interface.
[Java Tutorial, 1996dec24]

interface: In the Java language, a GROUP OF METHODS that can be implemented by several classes, regardless of where the classes are in the class hierarchy.
[Hotjava DOCS]

Interfaces are useful for:
* capturing similarities between unrelated classes without forcing a class relationship
* declaring methods that one or more classes are expected to implement
* revealing an object's programming interface without revealing its class (objects such as these are called anonymous objects and can be useful when shipping a package of classes to other developers)

>Out of interest, does anyone know why protected methods are not allowed in interfaces?
If you think about it, an interface exists for the benefit of callers. It defines a protocol that callers can use on any class that implements the interface. So it would not make sense to add anything to an interface (eg protected methods) that a caller cannot access. Protected methods exist for the benefit of subclasses, not callers.
[adv-java {2001-03-26}]

MEMORY:
(this is the point of an interface – it’s only a description and doesn’t use any storage or even have a physical representation).
[B. ECKEL, Thinking In Java, 1997aug18, 174]

jv'INTERFACE'DECLARATION

name::
* McsEngl.jv'INTERFACE'DECLARATION@cptIt,

interface'CREATION (DEFINITION)

An interface declaration specifies a new reference type:
#jv'InterfaceDeclaration#:
InterfaceModifiers#ql:[Field JAVA:InterfaceModifiers]#opt interface Identifier
ExtendsInterfacesopt InterfaceBody
[lang spec, 1996aug]

Defining an interface is similar to creating a new class. An interface definition has two components: the interface declaration and the interface body.
interfaceDeclaration {
interfaceBody
}
The interfaceDeclaration declares various attributes about the interface such as its name and whether it extends another interface. The interfaceBody contains the constant and method declarations within the interface.

interface'DECLARATION
[public] interface InterfaceName [extends listOfSuperInterfaces]
. . .
}

interface'BODY

name::
* McsEngl.interface'BODY@cptIt,

The body of an interface may declare members of the interface:
#jv'InterfaceBody#:
{ InterfaceMemberDeclarationsopt }
#jv'InterfaceMemberDeclarations#:
InterfaceMemberDeclaration
InterfaceMemberDeclarations InterfaceMemberDeclaration
#jv'InterfaceMemberDeclaration#:
ConstantDeclaration
AbstractMethodDeclaration
[lang spec, 1996aug]

The interface body contains method declarations for the methods defined within the interface. In addition to method declarations, an interface can contain constant declarations.

Example#ql:jv'ex.interface#.

jv'INTERFACE'CREATION

name::
* McsEngl.jv'INTERFACE'CREATION@cptIt,
* McsEngl.jv'INTERFACE'IMPLEMENTATION@cptIt,

A CLASS that IMPLEMENTS an interface:
1) inherites the fields of interface.
2) must implement all methods of the interface.

AN INTERFACE CAN EXTENDS ANOTHER:
public interface FeatureSet extends Dumpable

We create an interface through a class that implements it:
Queue q = new LinkedList();
List l = new LinkedList();

BUT eventhough q and l have created from a LinkedList, l have only the methods of a List and q the methods of a Queue.

jv'INTERFACE'DIRECT'SUPERINTERFACE

name::
* McsEngl.jv'INTERFACE'DIRECT'SUPERINTERFACE@cptIt,

If an extends clause is provided, then the interface being declared extends each of the other named interfaces and therefore inherits the methods and constants of each of the other named interfaces. These other named interfaces are the direct superinterfaces of the interface being declared. Any class that implements the declared interface is also considered to implement all the interfaces that this interface extends and that are accessible to the class.
#jv'ExtendsInterfaces#:
extends InterfaceType#ql:[Field JAVA:InterfaceType]#
ExtendsInterfaces , InterfaceType
[lang spec, 1996aug]

jv'INTERFACE'IDENTIFIER

name::
* McsEngl.jv'INTERFACE'IDENTIFIER@cptIt,

Any interface-identifier it is good to begin with I.
This way we can understand them from its name.
[hknu_2003-03-09]

jv'INTERFACE'MEMBER

name::
* McsEngl.jv'INTERFACE'MEMBER@cptIt,

The members of an interface type (§9.2) are fields and methods. The members of an interface are all of the following:
- Members inherited from any direct superinterfaces (§9.1.3)
- Members declared in the body of the interface (§9.1.4)
An interface may have two or more fields with the same simple name if they are declared in different interfaces and inherited. An attempt to refer to any such field by its simple name results in a compile-time error (§6.5.5.1, §9.2).

The interface inherits, from the interfaces it extends, all members of those interfaces, except for fields that it hides and methods that it overrides.
[lang spec, 1996aug]

An interface declaration introduces a new reference type whose members are
- constants and
- abstract methods.
[lang spec, 1996aug]

jv'INTERFACE'CONSTANT

name::
* McsEngl.jv'INTERFACE'CONSTANT@cptIt,

jv'CONSTANT

Field (Constant) Declarations
#jv'ConstantDeclaration#:
ConstantModifiers Type#ql:[Field JAVA:Type]# VariableDeclarator#ql:[Field JAVA:VariableDeclarator]#
#jv'ConstantModifiers#: one of
public static final
Every field declaration in the body of an interface is implicitly public, static, and final. It is permitted, but strongly discouraged as a matter of style, to redundantly specify any or all of these modifiers for such fields.

A constant declaration in an interface must not include any of the modifiers synchronized, transient, or volatile, or a compile-time error occurs.
[lang spec, 1996aug]

jv'INTERFACE'METHOD

name::
* McsEngl.jv'INTERFACE'METHOD@cptIt,

PRODUCTION:
#jv'AbstractMethodDeclaration#:
AbstractMethodModifiersopt ResultType MethodDeclarator#ql:[Field JAVA:MethodDeclarator]# Throws#ql:[Field JAVA:Throws]#opt ;
#jv'AbstractMethodModifiers#:
AbstractMethodModifier
AbstractMethodModifiers AbstractMethodModifier
#jv'AbstractMethodModifier#: one of
public abstract
[lang spec, 1996aug]

jv'INTERFACE'MODIFIER

name::
* McsEngl.jv'INTERFACE'MODIFIER@cptIt,

An interface declaration may be preceded by interface modifiers:
#jv'InterfaceModifiers#:
InterfaceModifier
InterfaceModifiers InterfaceModifier
#jv'InterfaceModifier#: one of
public abstract
[lang spec, 1996aug]

jv'INTERFACE.Element

name::
* McsEngl.jv'INTERFACE.Element@cptIt,
* McsEngl.jv'Element@cptIt,

LONG-NAME: javax.swing.text.Element

_DEFINITION:
Interface to describe a structural piece of a document. It is intended to capture the spirit of an SGML element.

Method Summary:
** AttributeSet  getAttributes() Fetches the collection of attributes this element contains.
** Document  getDocument() Fetches the document associated with this element.
** Element  getElement(int index) Fetches the child element at the given index.
** int    getElementCount() Gets the number of child elements contained by this element.
** int    getElementIndex(int offset) Gets the child element index closest to the given offset.
** int    getEndOffset() Fetches the offset from the beginning of the document that this element ends at.
** String  getName() Fetches the name of the element.
** Element  getParentElement() Fetches the parent element.
** int    getStartOffset() Fetches the offset from the beginning of the document that this element begins at.
** boolean  isLeaf() Is this element a leaf element?

jv'INTERFACE.Enumeration

name::
* McsEngl.jv'INTERFACE.Enumeration@cptIt,
* McsEngl.jv'enumeration@cptIt,
* McsEngl.jv'iterator@cptIt,

NAME:
I suspect that since the term iterator is so common in C++ and elsewhere in OOP, the Java team used a strange name just to be different, which will no doubt simply cause confusion and nothing else.
[B. ECKEL, Thinking In Java, 1997aug18, 214]

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:interface.enumeration#.

PACKAGE: java.util.

_DEFINITION:
The Java Enumeration is an example of an ITERATOR with these kinds of constraints - there’s not much you can do with one except:
1. Ask a container to hand you an Enumeration using a method called elements( ). This Enumeration will be selecting the first element in the sequence)
2. Get the next object in the sequence with nextElement( )
3. See if there are any more objects in the sequence with hasMoreElements( )
[B. ECKEL, Thinking In Java, 1997aug18, 214]

The Enumeration interface specifies a set of methods that may be used to enumerate, or count through, a set of values. The enumeration is consumed by use; its values may only be counted once.
[API]

Example#ql:jv'ex.enumeration#.

jv'INTERFACE.EventListener#ql:jv'eventlistener#

name::
* McsEngl.jv'INTERFACE.EventListener@cptIt,

jv'INTERFACE.Iterator

name::
* McsEngl.jv'INTERFACE.Iterator@cptIt,
* McsEngl.jv'Iterator@cptIt,

PACKAGE: java.util

_DEFINITION:
An iterator over a collection.
[JDK1.2]

Method Summary:
** boolean hasNext () Returns true if the iteration has more elements.
** Object next () Returns the next element in the interation.
** void remove () Removes from the underlying collection the last element returned by the iterator (optional operation).
[JDK1.2]

jv'INTERFACE.LayoutManager#ql:jv'layout'manager#

name::
* McsEngl.jv'INTERFACE.LayoutManager@cptIt,

jv'INTERFACE.RUNNABLE

name::
* McsEngl.jv'INTERFACE.RUNNABLE@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:interface.runnable#.

PACKAGE: java.lang.

This interface is designed to provide a common protocol for Objects that wish to execute code while they are active. For example, Runnable is implemented by class Thread. Being active simply means that a thread has been started and has not yet been stopped. In addition, Runnable provides the means for a class to be active while not subclassing Thread. A class that implements Runnable can run without subclassing Thread by instantiating a Thread instance and passing itself in as the target. In most cases, the Runnable interface should be used if you are only planning to override the run() method and no other Thread methods. This is important because classes should not be subclassed unless the programmer intends on modifying or enhancing the fundamental behavior of the class.
[API]

METHOD INDEX:
** (instance) run(): The method that is executed when a Runnable object is activated.

jv'INTERFACE.Serializable (Since JDK1.1)

name::
* McsEngl.jv'INTERFACE.Serializable (Since JDK1.1)@cptIt,
* McsEngl.jv'serialization@cptIt,
* McsEngl.jv'Object'Serialization@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:interface.serializable#.

PACKAGE: java.io.

_DEFINITION:
Serializability of a class is enabled by the class implementing the java.io.Serializable interface. Classes that do not implement this interface will not have any of their state serialized or deserialized. All subtypes of a serializable class are themselves serializable. The serialization interface has no methods or fields and serves only to identify the semantics of being serializable.
[API1.1]

Example#ql:jv'ex.serialization#.

jv'codeSrc.CHAR

name::
* McsEngl.jv'codeSrc.CHAR@cptIt,
* McsEngl.char.java@cptIt,
* McsEngl.jv'CHAR@cptIt,
* McsEngl.jv'CHAR'TYPE@cptIt,
* McsEngl.jv'TYPE.CHAR@cptIt,

_DEFINITION:
* chars above \uFFFF are-represented with 2 surrogates, because Java uses in machine-code the-UTF-16.
[hmnSngo.2019-07-09]
===
** char, whose values are 16-bit unsigned integers representing Unicode characters.
from '\u0000' to '\uffff' inclusive, that is, from 0 to 65535
[lang spec, 1996aug]
** A char variable holds ONE Unicode character.

This type is declared like this:
char z = '\u1234', y='j';

char VALUES are enclosed in single quotes.

_GENERIC
* integral#ql:jv'integral'type# data type.

_CODE.JAVA:
char z = '\u1234',
y='j';

jv'char.INSTANCE

name::
* McsEngl.jv'char.INSTANCE@cptIt,
* McsEngl.jv'char@cptIt,
* McsEngl.jv'Character'literal@cptIt,

PRODUCTION:
#jv'CharacterLiteral#:
' SingleCharacter '
' EscapeSequence#ql:[Field JAVA:EscapeSequence]# '
#jv'SingleCharacter#:
InputCharacter#ql:[Field JAVA: inputcharacter]# but not ' or \
[lang spec, 1996aug]

_DEFINITION:
A character literal is a character (or group of characters representing a single character) enclosed in single quotes. Characters have type char and are drawn from the Unicode character set (see Character Types ). The following escape sequences allow for the representation of some non-graphic characters as well as the single quote, "`" and the backslash "\", in Java code:
continuation  <newline>  \
new-line    NL (LF)    \n
horizontal tabe  HT    \t
back space    BS    \b
carriage return  CR    \r
form feed    FF    \f
backslash    \    \\
single quote    '    \'
double quote  "    \"
octal bit pattern  0ddd    \ddd
hex bit pattern  0xdd    \xdd
unicode char  0xdddd    \udddd

jv'ESCAPE'SEQUENCE:
The character and string escape sequences allow for the representation of some nongraphic characters as well as the single quote, double quote, and backslash characters in character literals (§3.10.4) and string literals (§3.10.5).
#jv'EscapeSequence#:
\ b /* \u0008: backspace BS */
\ t /* \u0009: horizontal tab HT */
\ n /* \u000a: linefeed LF */
\ f /* \u000c: form feed FF */
\ r /* \u000d: carriage return CR */
\ " /* \u0022: double quote " */
\ ' /* \u0027: single quote ' */
\ \ /* \u005c: backslash \ */
OctalEscape /* \u0000 to \u00ff: from octal value */
#jv'OctalEscape#:
\ OctalDigit
\ OctalDigit OctalDigit
\ ZeroToThree OctalDigit OctalDigit
#jv'OctalDigit#: one of
0 1 2 3 4 5 6 7
#jv'ZeroToThree#: one of
0 1 2 3
[lang spec, 1996aug]

_CODE.JAVA:
char c='a';
char c='\u0391';  //UNICODE ESCAPE
char c = '\6';  //octal-escape
char c = '\77';  //octal-escape
char c = '\377';  //largest octal-escape

jv'codeSrc.NUMBER

name::
* McsEngl.jv'codeSrc.NUMBER@cptIt,
* McsEngl.jvn@cptIt,
* McsEngl.jv'number@cptIt,
* McsEngl.jv'DataStructure.NUMBER-(nmb)@cptIt,
* McsEngl.number-DataStructure-in-Java-1012i@cptIt,
* McsEngl.jv'NUMERIC'TYPE@cptIt,
* McsEngl.jv'TYPE.NUMERIC@cptIt,

_DEFINITION:
* PRODUCTION:
#jv'NumericType#:
IntegralType#ql:[Field JAVA:IntegralType]#
FloatingPointType
[lang spec, 1996aug]

* The numeric types are
- the integral types byte, short, int, long, and char, and
- the floating-point types float and double.
[lang spec, 1996aug]

* Remember that these basic types are not objects. You can, however, convert the numeric types (double, float, int, and long) to objects of the Double, Float, Integer or Long classes from the java.lang.math package.

_SPECIFIC:
* int,

jv'TYPE.INTEGRAL

name::
* McsEngl.jv'TYPE.INTEGRAL@cptIt,
* McsEngl.jv'INTEGRAL'TYPE@cptIt,
* McsEngl.jv'number.integral@cptIt,

_DEFINITION:
The numeric-types#ql:jv'type.numeric# are
- the integral types byte, short, int, long, and char, and
- the floating-point types float and double.
[lang spec, 1996aug]

* PRODUCTION:
#jv'IntegralType#: one of
byte short int long char
[lang spec, 1996aug]

* The integral types are byte, short, int, and long, whose values are 8-bit, 16-bit, 32-bit and 64-bit signed two's-complement integers, respectively, and char, whose values are 16-bit unsigned integers representing Unicode characters.

The values of the integral types are integers in the following ranges:
For byte, from -128 to 127, inclusive
For short, from -32768 to 32767, inclusive
For int, from -2147483648 to 2147483647, inclusive
For long, from -9223372036854775808 to 9223372036854775807, inclusive
For char, from '\u0000' to '\uffff' inclusive, that is, from 0 to 65535
[lang spec, 1996aug]
===
* Hexadecimal (base 16), which works with all the integral data types, is denoted by a leading 0x or 0X followed by 0–9 and a–f either in upper or lower case.
[B. ECKEL, Thinking In Java, 1998jan]

jv'TYPE.BYTE

name::
* McsEngl.jv'TYPE.BYTE@cptIt,
* McsEngl.jv'number.byte@cptIt,
* McsEngl.jv'BYTE@cptIt,
* McsEngl.jv'BYTE'TYPE@cptIt,

_DEFINITION:
A 8 bit integer.
The VALUES are
8-bit
from -128 to 127, inclusive
[lang spec, 1996aug]

GENERIC:
integral#ql:jv'integral'type# data type.

EXAMPLE#ql:jv'ex.byte#

jv'TYPE.SHORT

name::
* McsEngl.jv'TYPE.SHORT@cptIt,
* McsEngl.jv'number.short@cptIt,
* McsEngl.jv'SHORT'TYPE@cptIt,
* McsEngl.jv'SHORT@cptIt,

_DEFINITION:
A 16 bit integer.
16-bit
For short, from -32.768 to 32767, inclusive
[lang spec, 1996aug]

GENERIC:
integral#ql:jv'integral'type# data type.

EXAMPLE#ql:jv'ex.short#.

jv'TYPE.INT

name::
* McsEngl.jv'TYPE.INT@cptIt,
* McsEngl.jv'number.int@cptIt,
* McsEngl.jv'INT@cptIt,
* McsEngl.jv'INT'TYPE@cptIt,

_DEFINITION:
32-bit
For int, from -2.147.483.648 to 2.147.483.647, inclusive
[lang spec, 1996aug]

GENERIC:
integral#ql:jv'integral'type# data type.

EXAMPLE#ql:jv'ex.int#

jv'TYPE.LONG

name::
* McsEngl.jv'TYPE.LONG@cptIt,
* McsEngl.jv'number.long@cptIt,
* McsEngl.jv'LONG@cptIt,
* McsEngl.jv'LONG'TYPE@cptIt,

_DEFINITION:
64-bit
For long, from -9223372036854775808 to 9223372036854775807, inclusive
[lang spec, 1996aug]

GENERIC:
integral#ql:jv'integral'type# data type.

EXAMPLE#ql:jv'ex.long#.

jv'TYPE.FLOATING'POINT

name::
* McsEngl.jv'TYPE.FLOATING'POINT@cptIt,
* McsEngl.jv'number.floating-point@cptIt,
* McsEngl.jv'FLOATING'POINT'TYPE@cptIt,

_DEFINITION:
The numeric-types#ql:jv'type.numeric# are
- the integral types byte, short, int, long, and char, and
- the floating-point types float and double.
[lang spec, 1996aug]

In computer-speak DECIMAL-NUMBERS are called "floating point numbers".
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

PRODUCTION:
#jv'FloatingPointType#: one of
float double
[lang spec, 1996aug]

The floating-point types are
- float, whose values are 32-bit IEEE 754 floating-point numbers, and
- double, whose values are 64-bit IEEE 754 floating-point numbers.

A floating-point literal has the following parts:
* a whole-number part,
* a decimal point (represented by an ASCII period character),
* a fractional part,
* an exponent, and
* a type suffix.
The exponent, if present, is indicated by the ASCII letter e or E followed by an optionally signed integer.
[lang spec, 1996aug]

A floating-point number has four parts -- a sign, a mantissa, a radix, and an exponent. The sign is either a 1 or -1. The mantissa, always a positive number, holds the significant digits of the floating-point number. The exponent indicates the positive or negative power of the radix that the mantissa and sign should be multiplied by. The four components are combined as follows to get the floating-point value:

sign * mantissa * radix exponent

Floating-point numbers have multiple representations, because one can always multiply the mantissa of any floating-point number by some power of the radix and change the exponent to get the original number. For example, the number -5 can be represented equally by any of the following forms in radix 10:
Forms of -5 Sign  Mantissa  Radix exponent
-1  50  10 -1
-1  5  10 0
-1  0.5  10 1
-1  0.05  10 2
For each floating-point number there is one representation that is said to be normalized. A floating-point number is normalized if its mantissa is within the range defined by the following relation:
1/radix <= mantissa < 1
A normalized radix 10 floating-point number has its decimal point just to the left of the first non-zero digit in the mantissa. The normalized floating-point representation of -5 is -1 * 0.5 * 10 1. In other words, a normalized floating-point number's mantissa has no non-zero digits to the left of the decimal point and a non-zero digit just to the right of the decimal point. Any floating-point number that doesn't fit into this category is said to be denormalized. Note that the number zero has no normalized representation, because it has no non-zero digit to put just to the right of the decimal point. "Why be normalized?" is a common exclamation among zeros.
[http://www.javaworld.com/javaworld/jw-10-1996/jw-10-hood.html?page=1]

jv'TYPE.FLOAT

name::
* McsEngl.jv'TYPE.FLOAT@cptIt,
* McsEngl.jv'number.float@cptIt,
* McsEngl.jv'FLOAT@cptIt,
* McsEngl.jv'FLOAT'TYPE@cptIt,

_DEFINETRO:
The floating-point types are
- float, whose values are 32-bit IEEE 754 floating-point numbers, and
- double, whose values are 64-bit IEEE 754 floating-point numbers.
[lang spec, 1996aug]

_GENERIC:
* FLOATING-POINT#ql:jv'floating'point'type#

FLOAT-LITERAL#ql:jv'literal.float#

jv'TYPE.DOUBLE

name::
* McsEngl.jv'TYPE.DOUBLE@cptIt,
* McsEngl.jv'number.double@cptIt,
* McsEngl.jv'DOUBLE@cptIt,
* McsEngl.jv'DOUBLE'TYPE@cptIt,

_DEFINETRO:
The floating-point types are
- float, whose values are 32-bit IEEE 754 floating-point numbers, and
- double, whose values are 64-bit IEEE 754 floating-point numbers.
[lang spec, 1996aug]

_GENERIC:
* FLOATING-POINT#ql:jv'floating'point'type#

DOUBLE-LITERAL#ql:jv'literal.double#

jvn.HEXADECIMAL

name::
* McsEngl.jvn.HEXADECIMAL@cptIt,
* McsEngl.jv'number.hexadecimal@cptIt,

_CODE.JAVA:
int i1 = 0x2f; // Hexadecimal (lowercase)
int i2 = 0X2F; // Hexadecimal (uppercase)

jvn.OCTAL

name::
* McsEngl.jvn.OCTAL@cptIt,
* McsEngl.jv'number.octal@cptIt,

_CODE.JAVA:
int i3 = 0177; // Octal (leading zero)

jv'codeSrc.STRING

name::
* McsEngl.jv'codeSrc.STRING@cptIt,
* McsEngl.jv'DataStructure.TEXT-(txt)@cptIt,
* McsEngl.text-DataStructure-in-Java-1012i@cptIt,

_SPECIFIC:
* StringClass,

jv'string'code

name::
* McsEngl.jv'string'code@cptIt,

jv'string.INSTANCE

name::
* McsEngl.jv'string.INSTANCE@cptIt,
* McsEngl.jv'string@cptIt,
* McsEngl.jv'String'literal@cptIt,

PRODUCTION:
#jv'StringLiteral#:
" StringCharactersopt "
#jv'StringCharacters#:
StringCharacter
StringCharacters StringCharacter
#jv'StringCharacter#:
InputCharacter#ql:[Field JAVA: inputcharacter]# but not " or \
EscapeSequence#ql:[Field JAVA:EscapeSequence]#
[lang spec, 1996aug]

_DEFINITION:
A string literal is zero or more characters enclosed in double quotes. Each string literal is implemented as a String object (not as an array of characters). For example, "abc" creates an new instance of class String. The following are all legal string literals:

"" \\ the empty string
"\""
"This is a string"
"This is a \
two-line string"

A sequence of character data is called a string and is implemented in the Java environment by the String class.
[JavaSoft Tutorial, 1996jul06]

Java strings act a little differently than strings in most other languages. The Java language does not treat them as arrays of characters, but rather as objects. They are the first true objects we'll see and have all the properties associated with objects.

Strings should be enclosed in double quotes. You can declare them just like the primitive types:

String s = "Hello World Wide Web!";
[DSWgroup TUTORIAL, 1996]

The double quote marks tell you this is a String. A String is an ordered collection of characters (letters, digits, punctuation marks, etc.). Although the String may have meaning to a human being reading the code, the computer sees it as no more than a particular set of letters in a particular order. It has no concept of the meaning of the characters. For instance it does not know that "two" + "two" is "four." In fact the computer thinks that "two" + "two" is "twotwo"
The quote marks show where the String begins and ends. However the quote marks themselves are not a part of the String. The value of this string is Hello World!, not "Hello World!" You can change the output of the program by changing Hello World to some other line of text.
A String in a Java program has no concept of italics, bold face, font family or other formatting. It cares only about the characters that compose it. Even if you're using an editor like NisusWriter that lets you format text files, "Hello World!" is identical to "Hello World!" as far as Java is concerned.
[Harold course 1997spring]

It is the only literal that has a CLASS#ql:jv'class.string#.

jv'codeSrc.TYPE

name::
* McsEngl.jv'codeSrc.TYPE@cptIt,
* McsEngl.jv'DataStructure@cptIt,
* McsEngl.data'type'of'java@cptItsoft1012i,
* McsEngl.jv'DATATYPE@cptIt,
* McsEngl.jv'TYPE@cptIt,
* McsEngl.jv'DATA'STRUCTURE@cptIt,
* McsEngl.jv'data-structure@cptIt,
* McsEngl.jv'data'type@cptIt,

_DEFINITION:
* PRODUCTION:
There are two kinds of types in Java: primitive types (§4.2) and reference types (§4.3). There are, correspondingly, two kinds of data values that can be stored in variables, passed as arguments, returned by methods, and operated on: primitive values (§4.2) and reference values (§4.3).
#jv'Type#:
PrimitiveType#ql:[Field JAVA:PrimitiveType]#
ReferenceType#ql:[Field JAVA:ReferenceType]#
[lang spec, 1996aug]

* every VARIABLE#ql:jv'variable# and every EXPRESSION#ql:jv'expression# has a type that is known at compile time. Types limit the values that a variable (§4.5) can hold or that an expression can produce, limit the operations supported on those values, and determine the meaning of the operations.
[lang spec, 1996aug]

* Any concept is a data'structure
[NIKOS, 1997apr]

* Java is a strongly typed language and VARIABLES must be declared before they are used.
Unlike most programming languages, fundamental types are not implementation dependent. This means, for instance, that when you declare an int variable it will always be treated as a 32 bit signed integer, no matter how the computer's processor handles integers.
[DSWgroup TUTORIAL, 1996]

Sometimes a variable or expression is said to have a "run-time type" but that is an abuse of terminology; it refers to the class of the object referred to by the value of the variable or expression at run time, assuming that the value is not null. Properly speaking, type is a compile-time notion. A variable or expression has a type; an object or array has no type, but belongs to a class.
[lang spec, 1996aug]

The type of a variable is always declared, and the type of an expression can be deduced at compile time. The type limits the possible values that the variable can hold or the expression can produce at run time.
[lang spec, 1996aug]

Note to C and C++ Programmers:
There are three C Data Types Not Supported By the Java Language. They are
- pointer,
- struct, and
- union.
These data types are not necessary in Java; you use classes and objects instead.
[JavaSoft Tutorial, 1996jul06]

jv'type'CHECKING

name::
* McsEngl.jv'type'CHECKING@cptIt,

The Java virtual machine expects that nearly all type checking is done prior to run time, typically by a compiler, and does not have to be done by the Java virtual machine itself. Values of primitive types need not be tagged or otherwise be inspectable to determine their types at run time, or to be distinguished from values of reference types. Instead, the instruction set of the Java virtual machine distinguishes its operand types using instructions intended to operate on values of specific types. For instance, iadd, ladd, fadd, and dadd are all Java virtual machine instructions that add two numeric values and produce numeric results, but each is specialized for its operand type: int, long, float, and double, respectively.
[spec jvm 2, 1999]

jv'type'CONVERSION

name::
* McsEngl.jv'type'CONVERSION@cptIt,

_DEFINITION:
A conversion from type S to type T allows an expression of type S to be treated at compile time as if it were of type T instead. In some cases this will require a corresponding action at run time to check the validity of the conversion or to translate the runtime value of the expression into a form appropriate for the new type T.
[spec jvm 2, 1999]

SPECIFIC:
In the Java programming language, there are six broad kinds of conversions:
Identity conversions
Widening primitive conversions
Narrowing primitive conversions
Widening reference conversions
Narrowing reference conversions
String conversions
[spec jvm 2, 1999]

jv'type'DECLARATION

name::
* McsEngl.jv'type'DECLARATION@cptIt,

A type declaration declares a class type (§8) or an interface type (§9):
#jv'TypeDeclaration#:
ClassDeclaration#ql:[Field JAVA:ClassDeclaration]#
InterfaceDeclaration#ql:[Field JAVA:interfacedeclaration]#
;
[lang spec, 1996aug]

DECLARATION-OF-GENEREPTO:
IF an object implements an interface, THEN we can declare its type and the type of interface. "instanceof" operator finds out the SPESIFEPTO type of the object.
EXAMPLE: the class ArrayList can be declared Collection, because the ArrayList implements the List interface AND the List extends Collection.
[hknu_2006-12-31]

SPECIFIC

String is not the only type that exists: Java comes with a plethora of READY-MADE TYPES. But what’s more important is that you can create YOUR OWN TYPES. In fact, that’s the fundamental activity in Java programming, and it’s what you’ll be learning about in the rest of the book.
[B. ECKEL, Thinking In Java, 1997aug18, 46]

jv'type.COLLECTION

name::
* McsEngl.jv'type.COLLECTION@cptIt,

jv'type.NULL

name::
* McsEngl.jv'type.NULL@cptIt,
* McsEngl.jv'NULL'TYPE@cptIt,

There is also a special null type.
[lang spec, 1996aug]

jv'type.PRIMITIVE

name::
* McsEngl.jv'type.PRIMITIVE@cptIt,
* McsEngl.jv'PRIMITIVE'TYPE@cptIt,
* McsEngl.jv'PRIMITIVE'DATATYPE@cptIt,

_DEFINITION:
** There is a group of types that gets special treatment; you can think of these as “primitive” types that you use quite often in your programming. The reason for the special treatment is that to create an object with new, especially a small, simple variable, isn’t very efficient because new places objects on the heap#ql:jv'heap#. For these types Java falls back on the approach taken by C and C++. That is, instead of creating the variable [REFERENCE VARIABLE] using new, an “automatic” variable [PRIMITIVE VARIABLE] is created that is not a handle. The variable holds the value, and it’s placed on the stack#ql:jv'stack# so it’s much more efficient.
[B. ECKEL, Thinking In Java, 1998jan]
** Primitive types [are DATA-TYPES#ql:jv'type# that] contain a single value and include types such as integer, floating point, character, and boolean. The following table lists, by keyword, all of the primitive data types supported by Java, their size and format, and a brief description of each.

Type Size/Format Description
(whole numbers)
byte 8-bit two's complement Byte-length integer
short 16-bit two's complement Short integer
int 32-bit two's complement Integer
long 64-bit two's complement Long integer
(real numbers)
float 32-bit IEEE 754 Single-precision floating point
double 64-bit IEEE 754 Double-precision floating point
(other types)
char 16-bit Unicode character A single character
boolean true/faulse A boolean value (true or false)

* PRODUCTION:
A primitive type is predefined by the Java language and named by its reserved keyword (§3.9):
#jv'PrimitiveType#:
NumericType#ql:[Field JAVA:NumericType]#
boolean
[lang spec, 1996aug]

_SPECIFIC:
There are only three groups of primitive data types, namely, numeric types, Boolean types, and arrays.
[white paper]
{Tutorial says Arrays are reference data types}

jv'TYPE.BOOLEAN

name::
* McsEngl.jv'TYPE.BOOLEAN@cptIt,
* McsEngl.jv'BOOLEAN'TYPE@cptIt,

The boolean type has exactly two values: true and false.
[lang spec, 1996aug]

jv'type.REFERENCE

name::
* McsEngl.jv'type.REFERENCE@cptIt,
* McsEngl.jv'REFERENCE'TYPE@cptIt,

_DEFINITION:
Packages and reference-types#ql:jv'reference'type# (that is, class types, interface types, and array types) have members.
[lang spec, 1996aug]
===
Reference types [are DATATYPES#ql:jv'data'type# that] are called such because the value of a reference variable is a reference (a pointer in other terminology) to the actual value or set of values represented by the variable.
For example, the character-counting program declares (but never uses) one variable of reference type, args, which is declared to be an array of String objects. When used in a statement or expression, the name args evaluates to the address of the memory location where the array lives.
[JavaSoft Tutorial, 1996jul06]

There are two kinds of TYPES#ql:jv'type# in Java: primitive types (§4.2) and reference types (§4.3). There are, correspondingly, two kinds of data values that can be stored in variables, passed as arguments, returned by methods, and operated on: primitive values (§4.2) and reference values (§4.3).
[lang spec, 1996aug]

PRODUCTION:
There are three kinds of reference types: class types (§8), interface types (§9), and array types (§10).
#jv'ReferenceType#:
ClassOrInterfaceType
ArrayType
#jv'ClassOrInterfaceType#:
ClassType
InterfaceType
#jv'ClassType#:
TypeName#ql:[Field JAVA:TypeName]#
#jv'InterfaceType#:
TypeName#ql:[Field JAVA:TypeName]#
#jv'ArrayType#:
Type#ql:[Field JAVA:Type]# [ ]
[lang spec, 1996aug]

jv'TYPE.CLASS#ql:jv'class rl4#

name::
* McsEngl.jv'TYPE.CLASS@cptIt,

jv'TYPE.INTERFACE#ql:jv'interface rl4#

name::
* McsEngl.jv'TYPE.INTERFACE@cptIt,

jv'DataStructure.LIST (lst)

name::
* McsEngl.jv'DataStructure.LIST (lst)@cptIt,
* McsEngl.list-DataStructure-in-Java-1012i@cptIt,

_SPECIFIC:
* Array,
* ArrayList,
* CollectionInterface,
* HashSet,
* StackClass,
* VectorClass,

All Known Implementing Classes:
AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayDeque, ArrayList, AttributeList, BeanContextServicesSupport, BeanContextSupport, ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, Stack, SynchronousQueue, TreeSet, Vector,

jv'DataStructure.KEY-VALUE-PAIR (kvp)

name::
* McsEngl.jv'DataStructure.KEY-VALUE-PAIR (kvp)@cptIt,
* McsEngl.key-value-pair-DataStructure-in-Java-1012i@cptIt,
* McsEngl.map-DataStructure-in-Java-1012i@cptIt,

jv'codeSrc.TYPE.NO (literal)

name::
* McsEngl.jv'codeSrc.TYPE.NO (literal)@cptIt,
* McsEngl.jv'TOKEN.LITERAL@cptIt,
* McsEngl.jv'type.LITERAL@cptIt,

_DEFINITION:
* LITERAL is the SOURCE-CODE-REPRESENTATION of an INSTANCE of
- a primitive-type#ql:jv'primitive'datatype#,
- the String-type#ql:jv'string'class#, or
- the null-type#ql:jv'type.null#,
[hknu_2002-04-30]

* A literal is the source code representation of a VALUE of
- a primitive-type#ql:jv'primitive'datatype#,
- the String-type#ql:jv'string'class#, or
- the null type
[lang spec, 1996aug]

* The TOKENS#ql:jv'token# are the
- identifiers,
- keywords,
- literals,
- separators, and
- operators
of the Java syntactic grammar.
[lang spec, 1996aug]

* Literals are pieces of Java source code that mean exactly what they say. For instance "Hello World!" is a String literal and its meaning is the the words Hello World!
[Harold course 1997spring]

* A literal denotes a fixed, unchanging value.
[lang spec, 1996aug]

* Literals are the basic representation of any
- integer,
- floating point,
- boolean,
- character, or
- string value.

_GENERIC
The TOKENS#ql:jv'token# are the
- identifiers,
- keywords,
- literals,
- separators, and
- operators
of the Java syntactic grammar.
[lang spec, 1996aug]

_PRODUCTION:
#jv'Literal#:
IntegerLiteral
FloatingPointLiteral
BooleanLiteral
CharacterLiteral
StringLiteral
NullLiteral
[lang spec, 1996aug]

_SPECIFIC:
- integer#ql:jv'literal.integer#,
- floating point,
- boolean,
- character#ql:jv'literal.character#,
- string,

* However there are only seven kinds of literals, and one of those [String] is not a primitive data type:
•boolean:  true or false
•int:  89, -945, 37865
•long:  89L, -945L, 5123567876L
•float:  89.5f, -32.5f,
•double:  89.5, -32.5, 87.6E45
•char:  'c', '9', 't'
•String:  "This is a string literal"
There are no short or byte literals.
[Harold Course 1997]

int i1 = 0x2f;  // Hexadecimal (lowercase)
int i2 = 0X2F;  // Hexadecimal (uppercase)
int i3 = 0177;  // Octal (leading zero)

char c='a';
char c='\u0391';  //UNICODE ESCAPE
char c = 0xffff;  // max char hex-value

* The type of a literal is determined as follows:
- The type of an integer literal that ends with L or l is long; the type of any other integer literal is int.
- The type of a floating-point literal that ends with F or f is float; the type of any other floating-point literal is double.
- The type of a boolean literal is boolean.
- The type of a character literal is char.
- The type of a string literal is String.
- The type of the null literal null is the null type; its value is the null reference.
[lang spec, 1996aug]

jv'LITERAL.BOOLEAN

name::
* McsEngl.jv'LITERAL.BOOLEAN@cptIt,
* McsEngl.jv'Boolean'Literal@cptIt,

PRODUCTION:
#jv'BooleanLiteral#: one of
true false
[lang spec, 1996aug]

_DEFINITION:
The boolean type has two values, denoted by the literals true and false.
[spec jvm 2, 1999]
The boolean type has two values, represented by the literals true and false, formed from ASCII letters.

SPECIFIC:
** jv'literal.true,
** jv'literal.false,

jv'LITERAL.CHARACTER

name::
* McsEngl.jv'LITERAL.CHARACTER@cptIt,

jv'LITERAL.FLOATING'POINT

name::
* McsEngl.jv'LITERAL.FLOATING'POINT@cptIt,
* McsEngl.jv'FloatingPoint'Literal@cptIt,

PRODUCTION:
#jv'FloatingPointLiteral#:
Digits . Digitsopt ExponentPartopt FloatTypeSuffixopt
. Digits ExponentPartopt FloatTypeSuffixopt
Digits ExponentPart FloatTypeSuffixopt
Digits ExponentPartopt FloatTypeSuffix
#jv'ExponentPart#:
ExponentIndicator SignedInteger
#jv'ExponentIndicator#: one of
e E
#jv'SignedInteger#:
Signopt Digits
#jv'Sign#: one of
+ -
#jv'FloatTypeSuffix#: one of
f F d D
[lang spec, 1996aug]

STRUCTURE:
A floating point literal can have the following parts: a decimal integer, a decimal point ("."), a fraction (another decimal number), an exponent, and a type suffix. The exponent part is an e or E followed by an integer, which can be signed. A floating point literal must have at least one digit, plus either a decimal point or e (or E). Some examples of floating point literals are:
3.1415 3.1E12 .1e12 2E12

_SUBGENERAL:
As described in Floating Point Types , the Java language has two floating point types: float (IEEE 754 single precision) and double (IEEE 754 double precision). You specify the type of a floating point literal as follows:
* 2.0d or 2.0D double
* 2.0f or 2.0F or 2.0 float

jv'LITERAL.DOUBLE

name::
* McsEngl.jv'LITERAL.DOUBLE@cptIt,
* McsEngl.jv'DOUBLE'LITERAL@cptIt,

You specify the type of a floating point literal as follows:
* 2.0d or 2.0D double
* 2.0f or 2.0F or 2.0 float

Examples of double literals:
1e1 2. .3 0.0 3.14 1e-9d 1e137
[lang spec, 1996aug]

jv'LITERAL.FLOAT

name::
* McsEngl.jv'LITERAL.FLOAT@cptIt,
* McsEngl.jv'FLOAT'LITERAL@cptIt,

You specify the type of a floating point literal as follows:
* 2.0d or 2.0D double
* 2.0f or 2.0F or 2.0 float

1e1f 2.f .3f 0f 3.14f 6.022137e+23f
[lang spec, 1996aug]

jv'LITERAL.INTEGER

name::
* McsEngl.jv'LITERAL.INTEGER@cptIt,
* McsEngl.jv'Integer'literal@cptIt,

PRODUCTION:
#jv'IntegerLiteral#:
DecimalIntegerLiteral
HexIntegerLiteral
OctalIntegerLiteral
#jv'DecimalIntegerLiteral#:
DecimalNumeral IntegerTypeSuffixopt
#jv'HexIntegerLiteral#:
HexNumeral IntegerTypeSuffixopt
#jv'OctalIntegerLiteral#:
OctalNumeral IntegerTypeSuffixopt
#jv'IntegerTypeSuffix#: one of
l L

#jv'DecimalNumeral#:
0
NonZeroDigit Digitsopt
#jv'Digits#:
Digit
Digits Digit
#jv'Digit#:
0
NonZeroDigit
#jv'NonZeroDigit#: one of
1 2 3 4 5 6 7 8 9

#jv'HexNumeral#:
0 x HexDigit
0 X HexDigit
HexNumeral HexDigit
#jv'HexDigit#: one of
0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

#jv'OctalNumeral#:
0 OctalDigit
OctalNumeral OctalDigit
#jv'OctalDigit#: one of
0 1 2 3 4 5 6 7
[lang spec, 1996aug]

Integers can be expressed in
- decimal (base 10),
- hexadecimal (base 16), or
- octal (base 8) format.
A decimal integer literal consists of a sequence of digits (optionally suffixed as described below) without a leading 0 (zero).
An integer can be expressed in octal or hexadecimal rather than decimal.
A leading 0 (zero) on an integer literal means it is in octal;
a leading 0x (or 0X) means hexadecimal. Hexadecimal integers can include digits (0-9) and the letters a-f and A-F. Octal integers can include only the digits 0-7.

_TYPE:
Integer literals are of type int unless they are larger than 32-bits, in which case they are of type long#ql:jv'long'type# (see Integer Types). A literal can be forced to be long by appending an L or l to its value.

_SPESIFEPTO:
* jv'literal.integer.HEXADECIMAL (base 16): a leading 0x (or 0X) means hexadecimal.

* jv'literal.integer.DECIMAL (base 10): A decimal integer literal consists of a sequence of digits (optionally suffixed as described below) without a leading 0 (zero).

* jv'literal.integer.OCTAL (base 8): A leading 0 (zero) on an integer literal means it is in octal;

_EXAMPLE:
int i1 = 0x2f;  // Hexadecimal (lowercase)
int i2 = 0X2F;  // Hexadecimal (uppercase)
int i3 = 0177;  // Octal (leading zero)
int i3 = 00;    // Octal 0
int i4 = 0;    // Decimal 0
int i4 = 177;  // Decimal

The following are all legal integer literals:
2, 2L 0777 0xDeadBeef

jv'LITERAL.NULL

name::
* McsEngl.jv'LITERAL.NULL@cptIt,
* McsEngl.jv'NULL'literal@cptIt,

The null-type#ql:jv'type.null# has one value, the null reference, represented by the literal null, which is formed from ASCII characters. A null literal is always of the null type.
#jv'NullLiteral#:
null
[lang spec, 1996aug]

jv'LITERAL.STRING

name::
* McsEngl.jv'LITERAL.STRING@cptIt,

jv'codeSrc.API

name::
* McsEngl.jv'codeSrc.API@cptIt,
* McsEngl.conceptItsoft1012.1,
* McsEngl.jsAPI@cptIt,
* McsEngl.jv'APPLICATION'PROGRAM'INTERFACE-1012.1@cptIt,
* McsEngl.jv'CLASS'LIBRARY-1012.1@cptIt,
* McsEngl.jv'LIBRARY-1012.1@cptIt,

_DEFINITION:
** synthetic-definition:
* J-API is a collection of PACKAGES.
[hknu_2003-02-13]

_GENERIC
* LIBRARY#cptIt80#

_STRUCTURE:
* PACKAGE#cptItsoft1012.2: attPar#

FOLIOVIEWS-NFO:
* api 140: I have a process.txt file that desrcibes the process on views30\nfo

_SPECIFIC:
* CORE-PACKAGE
* OPTIONAL-PACKAGE

** DIVISION ON EDITION:
* J2SE
* J2EE
* J2ME

jv'api.CORE

name::
* McsEngl.jv'api.CORE@cptIt,
* McsEngl.conceptItsoft1012.6,
* McsEngl.jv'core'api@cptIt,

_DEFINITION:
* Core-Package is any package that comes with the jre.

jv'api.OPTIONAL (EXTENSION)

name::
* McsEngl.jv'api.OPTIONAL (EXTENSION)@cptIt,
* McsEngl.conceptItsoft1012.5,
* McsEngl.jv'standard'extension@cptItsoft1012.5,
* McsEngl.jv'extension@cptItsoft1012.5,

_DEFINITION:
* What an optional package is
Note: Optional packages were formerly known as standard extensions or just extensions. Optional packages are packages of Java classes and associated native code that application developers can use to extend the functionality of the core platform. The extension mechanism allows the Java virtual machine (VM) to use the optional-package classes in much the same way as the VM uses bootstrap classes. (Bootstrap classes are those implementing the core platform, contained in jre/lib/rt.jar and jre/lib/i18n.jar. These include classes of the public API such as java.lang, java.io, etc., and classes supporting the platform's internationalization/localization features.). Like bootstrap classes, classes in optional packages do not have to be placed on the class path. The extension mechanism also provides a way for needed optional packages to be retrieved from specified URLs when they are not already installed in the Java 2 Runtime Environment or Java 2 SDK.
Optional packages are embodied in JAR files, and every JAR file is a potential optional package. A JAR file can be made to play the role of an optional package in two ways:
- by being placed in a special location in the Java 2 Runtime Environment or Java 2 SDK directory structure - in which case it is an installed optional package.
- by being referenced in a specified way from the manifest of the JAR file of an applet or application - in which case it is a download optional package.
When the VM is searching for a class of a particular name, it will first look among the bootstrap classes. If it fails to find the desired class there, it will next look for the class among any installed optional packages. If it doesn't find the class among either the bootstrap classes or the installed optional packages, the VM will search among any download optional packages referenced by the application or applet. The VM only searches the class path if it fails to find a class among the bootstrap classes or optional package classes.
[140 docs]

SINCE:
* 1.2

SPECIFIC:
* INSTALLED-OPTIONAL-PACKAGE,
* DOWNLOAD-OPTIONAL-PACKAGE,

jv'api.1.5.0

name::
* McsEngl.jv'api.1.5.0@cptIt,
* McsEngl.jv'API.j2SE50@cptIt,

DEFINETRO:
This document is the API specification for the Java 2 Platform Standard Edition 5.0.

_ADDRESS.WPG:
* HTML-FORMAT#pl:file:///\pgmJAVA/DOCS/150/api/index.html#:

_PART:
Java 2 Platform Packages
java.applet  Provides the classes necessary to create an applet and the classes an applet uses to communicate with its applet context.
java.awt  Contains all of the classes for creating user interfaces and for painting graphics and images.
java.awt.color  Provides classes for color spaces.
java.awt.datatransfer  Provides interfaces and classes for transferring data between and within applications.
java.awt.dnd  Drag and Drop is a direct manipulation gesture found in many Graphical User Interface systems that provides a mechanism to transfer information between two entities logically associated with presentation elements in the GUI.
java.awt.event  Provides interfaces and classes for dealing with different types of events fired by AWT components.
java.awt.font  Provides classes and interface relating to fonts.
java.awt.geom  Provides the Java 2D classes for defining and performing operations on objects related to two-dimensional geometry.
java.awt.im  Provides classes and interfaces for the input method framework.
java.awt.im.spi  Provides interfaces that enable the development of input methods that can be used with any Java runtime environment.
java.awt.image  Provides classes for creating and modifying images.
java.awt.image.renderable  Provides classes and interfaces for producing rendering-independent images.
java.awt.print  Provides classes and interfaces for a general printing API.
java.beans  Contains classes related to developing beans -- components based on the JavaBeansTM architecture.
java.beans.beancontext  Provides classes and interfaces relating to bean context.
java.io  Provides for system input and output through data streams, serialization and the file system.
java.lang  Provides classes that are fundamental to the design of the Java programming language.
java.lang.annotation  Provides library support for the Java programming language annotation facility.
java.lang.instrument  Provides services that allow Java programming language agents to instrument programs running on the JVM.
java.lang.management  Provides the management interface for monitoring and management of the Java virtual machine as well as the operating system on which the Java virtual machine is running.
java.lang.ref  Provides reference-object classes, which support a limited degree of interaction with the garbage collector.
java.lang.reflect  Provides classes and interfaces for obtaining reflective information about classes and objects.
java.math  Provides classes for performing arbitrary-precision integer arithmetic (BigInteger) and arbitrary-precision decimal arithmetic (BigDecimal).
java.net  Provides the classes for implementing networking applications.
java.nio  Defines buffers, which are containers for data, and provides an overview of the other NIO packages.
java.nio.channels  Defines channels, which represent connections to entities that are capable of performing I/O operations, such as files and sockets; defines selectors, for multiplexed, non-blocking I/O operations.
java.nio.channels.spi  Service-provider classes for the java.nio.channels package.
java.nio.charset  Defines charsets, decoders, and encoders, for translating between bytes and Unicode characters.
java.nio.charset.spi  Service-provider classes for the java.nio.charset package.
java.rmi  Provides the RMI package.
java.rmi.activation  Provides support for RMI Object Activation.
java.rmi.dgc  Provides classes and interface for RMI distributed garbage-collection (DGC).
java.rmi.registry  Provides a class and two interfaces for the RMI registry.
java.rmi.server  Provides classes and interfaces for supporting the server side of RMI.
java.security  Provides the classes and interfaces for the security framework.
java.security.acl  The classes and interfaces in this package have been superseded by classes in the java.security package.
java.security.cert  Provides classes and interfaces for parsing and managing certificates, certificate revocation lists (CRLs), and certification paths.
java.security.interfaces  Provides interfaces for generating RSA (Rivest, Shamir and Adleman AsymmetricCipher algorithm) keys as defined in the RSA Laboratory Technical Note PKCS#1, and DSA (Digital Signature Algorithm) keys as defined in NIST's FIPS-186.
java.security.spec  Provides classes and interfaces for key specifications and algorithm parameter specifications.
java.sql  Provides the API for accessing and processing data stored in a data source (usually a relational database) using the JavaTM programming language.
java.text  Provides classes and interfaces for handling text, dates, numbers, and messages in a manner independent of natural languages.
java.util  Contains the collections framework, legacy collection classes, event model, date and time facilities, internationalization, and miscellaneous utility classes (a string tokenizer, a random-number generator, and a bit array).
java.util.concurrent  Utility classes commonly useful in concurrent programming.
java.util.concurrent.atomic  A small toolkit of classes that support lock-free thread-safe programming on single variables.
java.util.concurrent.locks  Interfaces and classes providing a framework for locking and waiting for conditions that is distinct from built-in synchronization and monitors.
java.util.jar  Provides classes for reading and writing the JAR (Java ARchive) file format, which is based on the standard ZIP file format with an optional manifest file.
java.util.logging  Provides the classes and interfaces of the JavaTM 2 platform's core logging facilities.
java.util.prefs  This package allows applications to store and retrieve user and system preference and configuration data.
java.util.regex  Classes for matching character sequences against patterns specified by regular expressions.
java.util.zip  Provides classes for reading and writing the standard ZIP and GZIP file formats.
javax.accessibility  Defines a contract between user-interface components and an assistive technology that provides access to those components.
javax.crypto  Provides the classes and interfaces for cryptographic operations.
javax.crypto.interfaces  Provides interfaces for Diffie-Hellman keys as defined in RSA Laboratories' PKCS#3.
javax.crypto.spec  Provides classes and interfaces for key specifications and algorithm parameter specifications.
javax.imageio  The main package of the Java Image I/O API.
javax.imageio.event  A package of the Java Image I/O API dealing with synchronous notification of events during the reading and writing of images.
javax.imageio.metadata  A package of the Java Image I/O API dealing with reading and writing metadata.
javax.imageio.plugins.bmp  Package containing the public classes used by the built-in BMP plug-in.
javax.imageio.plugins.jpeg  Classes supporting the built-in JPEG plug-in.
javax.imageio.spi  A package of the Java Image I/O API containing the plug-in interfaces for readers, writers, transcoders, and streams, and a runtime registry.
javax.imageio.stream  A package of the Java Image I/O API dealing with low-level I/O from files and streams.
javax.management  Provides the core classes for the Java Management Extensions.
javax.management.loading  Provides the classes which implement advanced dynamic loading.
javax.management.modelmbean  Provides the definition of the ModelMBean classes.
javax.management.monitor  Provides the definition of the monitor classes.
javax.management.openmbean  Provides the open data types and Open MBean descriptor classes.
javax.management.relation  Provides the definition of the Relation Service.
javax.management.remote  Interfaces for remote access to JMX MBean servers.
javax.management.remote.rmi  The RMI connector is a connector for the JMX Remote API that uses RMI to transmit client requests to a remote MBean server.
javax.management.timer  Provides the definition of the Timer MBean.
javax.naming  Provides the classes and interfaces for accessing naming services.
javax.naming.directory  Extends the javax.naming package to provide functionality for accessing directory services.
javax.naming.event  Provides support for event notification when accessing naming and directory services.
javax.naming.ldap  Provides support for LDAPv3 extended operations and controls.
javax.naming.spi  Provides the means for dynamically plugging in support for accessing naming and directory services through the javax.naming and related packages.
javax.net  Provides classes for networking applications.
javax.net.ssl  Provides classes for the secure socket package.
javax.print  Provides the principal classes and interfaces for the JavaTM Print Service API.
javax.print.attribute  Provides classes and interfaces that describe the types of JavaTM Print Service attributes and how they can be collected into attribute sets.
javax.print.attribute.standard  Package javax.print.attribute.standard contains classes for specific printing attributes.
javax.print.event  Package javax.print.event contains event classes and listener interfaces.
javax.rmi  Contains user APIs for RMI-IIOP.
javax.rmi.CORBA  Contains portability APIs for RMI-IIOP.
javax.rmi.ssl  Provides implementations of RMIClientSocketFactory and RMIServerSocketFactory over the Secure Sockets Layer (SSL) or Transport Layer Security (TLS) protocols.
javax.security.auth  This package provides a framework for authentication and authorization.
javax.security.auth.callback  This package provides the classes necessary for services to interact with applications in order to retrieve information (authentication data including usernames or passwords, for example) or to display information (error and warning messages, for example).
javax.security.auth.kerberos  This package contains utility classes related to the Kerberos network authentication protocol.
javax.security.auth.login  This package provides a pluggable authentication framework.
javax.security.auth.spi  This package provides the interface to be used for implementing pluggable authentication modules.
javax.security.auth.x500  This package contains the classes that should be used to store X500 Principal and X500 Private Crendentials in a Subject.
javax.security.cert  Provides classes for public key certificates.
javax.security.sasl  Contains class and interfaces for supporting SASL.
javax.sound.midi  Provides interfaces and classes for I/O, sequencing, and synthesis of MIDI (Musical Instrument Digital Interface) data.
javax.sound.midi.spi  Supplies interfaces for service providers to implement when offering new MIDI devices, MIDI file readers and writers, or sound bank readers.
javax.sound.sampled  Provides interfaces and classes for capture, processing, and playback of sampled audio data.
javax.sound.sampled.spi  Supplies abstract classes for service providers to subclass when offering new audio devices, sound file readers and writers, or audio format converters.
javax.sql  Provides the API for server side data source access and processing from the JavaTM programming language.
javax.sql.rowset  Standard interfaces and base classes for JDBC RowSet implementations.
javax.sql.rowset.serial  Provides utility classes to allow serializable mappings between SQL types and data types in the Java programming language.
javax.sql.rowset.spi  The standard classes and interfaces that a third party vendor has to use in its implementation of a synchronization provider.
javax.swing  Provides a set of "lightweight" (all-Java language) components that, to the maximum degree possible, work the same on all platforms.
javax.swing.border  Provides classes and interface for drawing specialized borders around a Swing component.
javax.swing.colorchooser  Contains classes and interfaces used by the JColorChooser component.
javax.swing.event  Provides for events fired by Swing components.
javax.swing.filechooser  Contains classes and interfaces used by the JFileChooser component.
javax.swing.plaf  Provides one interface and many abstract classes that Swing uses to provide its pluggable look-and-feel capabilities.
javax.swing.plaf.basic  Provides user interface objects built according to the Basic look and feel.
javax.swing.plaf.metal  Provides user interface objects built according to the Java look and feel (once codenamed Metal), which is the default look and feel.
javax.swing.plaf.multi  Provides user interface objects that combine two or more look and feels.
javax.swing.plaf.synth  Synth is a skinnable look and feel in which all painting is delegated.
javax.swing.table  Provides classes and interfaces for dealing with javax.swing.JTable.
javax.swing.text  Provides classes and interfaces that deal with editable and noneditable text components.
javax.swing.text.html  Provides the class HTMLEditorKit and supporting classes for creating HTML text editors.
javax.swing.text.html.parser  Provides the default HTML parser, along with support classes.
javax.swing.text.rtf  Provides a class (RTFEditorKit) for creating Rich-Text-Format text editors.
javax.swing.tree  Provides classes and interfaces for dealing with javax.swing.JTree.
javax.swing.undo  Allows developers to provide support for undo/redo in applications such as text editors.
javax.transaction  Contains three exceptions thrown by the ORB machinery during unmarshalling.
javax.transaction.xa  Provides the API that defines the contract between the transaction manager and the resource manager, which allows the transaction manager to enlist and delist resource objects (supplied by the resource manager driver) in JTA transactions.
javax.xml  Defines core XML constants and functionality from the XML specifications.
javax.xml.datatype  XML/Java Type Mappings.
javax.xml.namespace  XML Namespace processing.
javax.xml.parsers  Provides classes allowing the processing of XML documents.
javax.xml.transform  This package defines the generic APIs for processing transformation instructions, and performing a transformation from source to result.
javax.xml.transform.dom  This package implements DOM-specific transformation APIs.
javax.xml.transform.sax  This package implements SAX2-specific transformation APIs.
javax.xml.transform.stream  This package implements stream- and URI- specific transformation APIs.
javax.xml.validation  This package provides an API for validation of XML documents.
javax.xml.xpath  This package provides an object-model neutral API for the evaluation of XPath expressions and access to the evaluation environment.
org.ietf.jgss  This package presents a framework that allows application developers to make use of security services like authentication, data integrity and data confidentiality from a variety of underlying security mechanisms like Kerberos, using a unified API.
org.omg.CORBA  Provides the mapping of the OMG CORBA APIs to the JavaTM programming language, including the class ORB, which is implemented so that a programmer can use it as a fully-functional Object Request Broker (ORB).
org.omg.CORBA_2_3  The CORBA_2_3 package defines additions to existing CORBA interfaces in the Java 2 Standard Edition. These changes occurred in recent revisions to the CORBA API defined by the OMG. The new methods were added to interfaces derived from the corresponding interfaces in the CORBA package. This provides backward compatibility and avoids breaking the JCK tests.
org.omg.CORBA_2_3.portable  Provides methods for the input and output of value types, and contains other updates to the org/omg/CORBA/portable package.
org.omg.CORBA.DynAnyPackage  Provides the exceptions used with the DynAny interface (InvalidValue, Invalid, InvalidSeq, and TypeMismatch).
org.omg.CORBA.ORBPackage  Provides the exception InvalidName, which is thrown by the method ORB.resolve_initial_references and the exception InconsistentTypeCode, which is thrown by the Dynamic Any creation methods in the ORB class.
org.omg.CORBA.portable  Provides a portability layer, that is, a set of ORB APIs that makes it possible for code generated by one vendor to run on another vendor's ORB.
org.omg.CORBA.TypeCodePackage  Provides the user-defined exceptions BadKind and Bounds, which are thrown by methods in in the class TypeCode.
org.omg.CosNaming  Provides a naming service for Java IDL.
org.omg.CosNaming.NamingContextExtPackage  This package contains the following classes, which are used in org.omg.CosNaming.NamingContextExt:
org.omg.CosNaming.NamingContextPackage  This package contains Exception classes for the org.omg.CosNaming package.
org.omg.Dynamic  This package contains the Dynamic module specified in the OMG Portable Interceptor specification, http://cgi.omg.org/cgi-bin/doc?ptc/2000-08-06, section 21.9.
org.omg.DynamicAny  Provides classes and interfaces that enable traversal of the data value associated with an any at runtime, and extraction of the primitive constituents of the data value.
org.omg.DynamicAny.DynAnyFactoryPackage  This package contains classes and exceptions from the DynAnyFactory interface of the DynamicAny module specified in the OMG The Common Object Request Broker: Architecture and Specification, http://cgi.omg.org/cgi-bin/doc?formal/99-10-07, section 9.2.2.
org.omg.DynamicAny.DynAnyPackage  This package contains classes and exceptions from the DynAny interface of the DynamicAny module specified in the OMG The Common Object Request Broker: Architecture and Specification, http://cgi.omg.org/cgi-bin/doc?formal/99-10-07, section 9.2.
org.omg.IOP  This package contains the IOP module specified in the OMG document The Common Object Request Broker: Architecture and Specification, http://cgi.omg.org/cgi-bin/doc?formal/99-10-07, section 13.6.
org.omg.IOP.CodecFactoryPackage  This package contains the exceptions specified in the IOP::CodeFactory interface (as part of the Portable Interceptors spec).
org.omg.IOP.CodecPackage  This package is generated from the IOP::Codec IDL interface definition.
org.omg.Messaging  This package contains the Messaging module specified in the OMG CORBA Messaging specification, http://cgi.omg.org/cgi-bin/doc?formal/99-10-07.
org.omg.PortableInterceptor  Provides a mechanism to register ORB hooks through which ORB services can intercept the normal flow of execution of the ORB.
org.omg.PortableInterceptor.ORBInitInfoPackage  This package contains the exceptions and typedefs from the ORBInitInfo local interface of the PortableInterceptor module specified in the OMG Portable Interceptor specification, http://cgi.omg.org/cgi-bin/doc?ptc/2000-08-06, section 21.7.2.
org.omg.PortableServer  Provides classes and interfaces for making the server side of your applications portable across multivendor ORBs.
org.omg.PortableServer.CurrentPackage  Provides method implementations with access to the identity of the object on which the method was invoked.
org.omg.PortableServer.POAManagerPackage  Encapsulates the processing state of the POAs it is associated with.
org.omg.PortableServer.POAPackage  Allows programmers to construct object implementations that are portable between different ORB products.
org.omg.PortableServer.portable  Provides classes and interfaces for making the server side of your applications portable across multivendor ORBs.
org.omg.PortableServer.ServantLocatorPackage  Provides classes and interfaces for locating the servant.
org.omg.SendingContext  Provides support for the marshalling of value types.
org.omg.stub.java.rmi  Contains RMI-IIOP Stubs for the Remote types that occur in the java.rmi package.
org.w3c.dom  Provides the interfaces for the Document Object Model (DOM) which is a component API of the Java API for XML Processing.
org.w3c.dom.bootstrap  
org.w3c.dom.events  
org.w3c.dom.ls  
org.xml.sax  This package provides the core SAX APIs.
org.xml.sax.ext  This package contains interfaces to SAX2 facilities that conformant SAX drivers won't necessarily support.
org.xml.sax.helpers  This package contains "helper" classes, including support for bootstrapping SAX-based applications.


Other Packages
javax.activity  Contains Activity service related exceptions thrown by the ORB machinery during unmarshalling.

jv'api.1.4.0

name::
* McsEngl.jv'api.1.4.0@cptIt,

release: {2002-02-14}

_OVERVIEW:
** PACKAGES: 135
** CLASSES: 2009
** INTERFACES: 626

PACKAGES: (135)
PACKAGE140.java.applet PACKAGE140.java.awt PACKAGE140.java.awt.color PACKAGE140.java.awt.datatransfer PACKAGE140.java.awt.dnd PACKAGE140.java.awt.event PACKAGE140.java.awt.font PACKAGE140.java.awt.geom PACKAGE140.java.awt.im PACKAGE140.java.awt.im.spi PACKAGE140.java.awt.image PACKAGE140.java.awt.image.renderable PACKAGE140.java.awt.print PACKAGE140.java.beans PACKAGE140.java.beans.beancontext PACKAGE140.java.io PACKAGE140.java.lang PACKAGE140.java.lang.ref PACKAGE140.java.lang.reflect PACKAGE140.java.math PACKAGE140.java.net PACKAGE140.java.nio PACKAGE140.java.nio.channels PACKAGE140.java.nio.channels.spi PACKAGE140.java.nio.charset PACKAGE140.java.nio.charset.spi PACKAGE140.java.rmi PACKAGE140.java.rmi.activation PACKAGE140.java.rmi.dgc PACKAGE140.java.rmi.registry PACKAGE140.java.rmi.server PACKAGE140.java.security PACKAGE140.java.security.acl PACKAGE140.java.security.cert PACKAGE140.java.security.interfaces PACKAGE140.java.security.spec PACKAGE140.java.sql PACKAGE140.java.text PACKAGE140.java.util PACKAGE140.java.util.jar PACKAGE140.java.util.logging PACKAGE140.java.util.prefs PACKAGE140.java.util.regex PACKAGE140.java.util.zip PACKAGE140.javax.accessibility PACKAGE140.javax.crypto PACKAGE140.javax.crypto.interfaces PACKAGE140.javax.crypto.spec PACKAGE140.javax.imageio PACKAGE140.javax.imageio.event PACKAGE140.javax.imageio.metadata PACKAGE140.javax.imageio.plugins.jpeg PACKAGE140.javax.imageio.spi PACKAGE140.javax.imageio.stream PACKAGE140.javax.naming PACKAGE140.javax.naming.directory PACKAGE140.javax.naming.event PACKAGE140.javax.naming.ldap PACKAGE140.javax.naming.spi PACKAGE140.javax.net PACKAGE140.javax.net.ssl PACKAGE140.javax.print PACKAGE140.javax.print.attribute PACKAGE140.javax.print.attribute.standard PACKAGE140.javax.print.event PACKAGE140.javax.rmi PACKAGE140.javax.rmi.CORBA PACKAGE140.javax.security.auth PACKAGE140.javax.security.auth.callback PACKAGE140.javax.security.auth.kerberos PACKAGE140.javax.security.auth.login PACKAGE140.javax.security.auth.spi PACKAGE140.javax.security.auth.x500 PACKAGE140.javax.security.cert PACKAGE140.javax.sound.midi PACKAGE140.javax.sound.midi.spi PACKAGE140.javax.sound.sampled PACKAGE140.javax.sound.sampled.spi PACKAGE140.javax.sql PACKAGE140.javax.swing PACKAGE140.javax.swing.border PACKAGE140.javax.swing.colorchooser PACKAGE140.javax.swing.event PACKAGE140.javax.swing.filechooser PACKAGE140.javax.swing.plaf PACKAGE140.javax.swing.plaf.basic PACKAGE140.javax.swing.plaf.metal PACKAGE140.javax.swing.plaf.multi PACKAGE140.javax.swing.table PACKAGE140.javax.swing.text PACKAGE140.javax.swing.text.html PACKAGE140.javax.swing.text.html.parser PACKAGE140.javax.swing.text.rtf PACKAGE140.javax.swing.tree PACKAGE140.javax.swing.undo PACKAGE140.javax.transaction PACKAGE140.javax.transaction.xa PACKAGE140.javax.xml.parsers PACKAGE140.javax.xml.transform PACKAGE140.javax.xml.transform.dom PACKAGE140.javax.xml.transform.sax PACKAGE140.javax.xml.transform.stream PACKAGE140.org.ietf.jgss PACKAGE140.org.omg.CORBA PACKAGE140.org.omg.CORBA.DynAnyPackage PACKAGE140.org.omg.CORBA.ORBPackage PACKAGE140.org.omg.CORBA.TypeCodePackage PACKAGE140.org.omg.CORBA.portable PACKAGE140.org.omg.CORBA_2_3 PACKAGE140.org.omg.CORBA_2_3.portable PACKAGE140.org.omg.CosNaming PACKAGE140.org.omg.CosNaming.NamingContextExtPackage PACKAGE140.org.omg.CosNaming.NamingContextPackage PACKAGE140.org.omg.Dynamic PACKAGE140.org.omg.DynamicAny PACKAGE140.org.omg.DynamicAny.DynAnyFactoryPackage PACKAGE140.org.omg.DynamicAny.DynAnyPackage PACKAGE140.org.omg.IOP PACKAGE140.org.omg.IOP.CodecFactoryPackage PACKAGE140.org.omg.IOP.CodecPackage PACKAGE140.org.omg.Messaging PACKAGE140.org.omg.PortableInterceptor PACKAGE140.org.omg.PortableInterceptor.ORBInitInfoPackage PACKAGE140.org.omg.PortableServer PACKAGE140.org.omg.PortableServer.CurrentPackage PACKAGE140.org.omg.PortableServer.POAManagerPackage PACKAGE140.org.omg.PortableServer.POAPackage PACKAGE140.org.omg.PortableServer.ServantLocatorPackage PACKAGE140.org.omg.PortableServer.portable PACKAGE140.org.omg.SendingContext PACKAGE140.org.omg.stub.java.rmi PACKAGE140.org.w3c.dom PACKAGE140.org.xml.sax PACKAGE140.org.xml.sax.ext PACKAGE140.org.xml.sax.helpers

CLASSES: 2009

INTERFACES: 626

jv'api.1.2Beta2#ql:API12.NFO#

name::
* McsEngl.jv'api.1.2Beta2@cptIt,

RELEASE: 1997dec

jv'api.1.1#ql:JAPI11.NFO#

name::
* McsEngl.jv'api.1.1@cptIt,

RELEASE: 1997feb17

NEW in 1.1 CLASSES & INTERFACES (297)
java.awt.AWTEvent
java.awt.AWTEventMulticaster
java.awt.Adjustable
java.awt.Cursor
java.awt.EventQueue
java.awt.IllegalComponentStateException
java.awt.ItemSelectable
java.awt.LayoutManager2
java.awt.MenuShortcut
java.awt.PopupMenu
java.awt.PrintGraphics
java.awt.PrintJob
java.awt.ScrollPane
java.awt.Shape
java.awt.SystemColor
java.awt.datatransfer.Clipboard
java.awt.datatransfer.ClipboardOwner
java.awt.datatransfer.DataFlavor
java.awt.datatransfer.StringSelection
java.awt.datatransfer.Transferable
java.awt.datatransfer.UnsupportedFlavorException
java.awt.event.ActionEvent
java.awt.event.ActionListener
java.awt.event.AdjustmentEvent
java.awt.event.AdjustmentListener
java.awt.event.ComponentAdapter
java.awt.event.ComponentEvent
java.awt.event.ComponentListener
java.awt.event.ContainerAdapter
java.awt.event.ContainerEvent
java.awt.event.ContainerListener
java.awt.event.FocusAdapter
java.awt.event.FocusEvent
java.awt.event.FocusListener
java.awt.event.InputEvent
java.awt.event.ItemEvent
java.awt.event.ItemListener
java.awt.event.KeyAdapter
java.awt.event.KeyEvent
java.awt.event.KeyListener
java.awt.event.MouseAdapter
java.awt.event.MouseEvent
java.awt.event.MouseListener
java.awt.event.MouseMotionAdapter
java.awt.event.MouseMotionListener
java.awt.event.PaintEvent
java.awt.event.TextEvent
java.awt.event.TextListener
java.awt.event.WindowAdapter
java.awt.event.WindowEvent
java.awt.event.WindowListener
java.awt.image.AreaAveragingScaleFilter
java.awt.image.ReplicateScaleFilter
java.awt.peer.FontPeer
java.awt.peer.LightweightPeer
java.awt.peer.PopupMenuPeer
java.awt.peer.ScrollPanePeer
java.beans.BeanDescriptor
java.beans.BeanInfo
java.beans.Beans
java.beans.Customizer
java.beans.EventSetDescriptor
java.beans.FeatureDescriptor
java.beans.IndexedPropertyDescriptor
java.beans.IntrospectionException
java.beans.Introspector
java.beans.MethodDescriptor
java.beans.ParameterDescriptor
java.beans.PropertyChangeEvent
java.beans.PropertyChangeListener
java.beans.PropertyChangeSupport
java.beans.PropertyDescriptor
java.beans.PropertyEditor
java.beans.PropertyEditorManager
java.beans.PropertyEditorSupport
java.beans.PropertyVetoException
java.beans.SimpleBeanInfo
java.beans.VetoableChangeListener
java.beans.VetoableChangeSupport
java.beans.Visibility
java.io.BufferedReader
java.io.BufferedWriter
java.io.CharArrayReader
java.io.CharArrayWriter
java.io.CharConversionException
java.io.Externalizable
java.io.FileReader
java.io.FileWriter
java.io.FilterReader
java.io.FilterWriter
java.io.InputStreamReader
java.io.InvalidClassException
java.io.InvalidObjectException
java.io.LineNumberReader
java.io.NotActiveException
java.io.NotSerializableException
java.io.ObjectInput
java.io.ObjectInputStream
java.io.ObjectInputValidation
java.io.ObjectOutput
java.io.ObjectOutputStream
java.io.ObjectStreamClass
java.io.ObjectStreamException
java.io.OptionalDataException
java.io.OutputStreamWriter
java.io.PipedReader
java.io.PipedWriter
java.io.PrintWriter
java.io.PushbackReader
java.io.Reader
java.io.Serializable
java.io.StreamCorruptedException
java.io.StringReader
java.io.StringWriter
java.io.SyncFailedException
java.io.UnsupportedEncodingException
java.io.WriteAbortedException
java.io.Writer
java.lang.Byte
java.lang.ExceptionInInitializerError
java.lang.IllegalStateException
java.lang.NoSuchFieldException
java.lang.Short
java.lang.Void
java.lang.reflect.Array
java.lang.reflect.Constructor
java.lang.reflect.Field
java.lang.reflect.InvocationTargetException
java.lang.reflect.Member
java.lang.reflect.Method
java.lang.reflect.Modifier
java.math.BigDecimal
java.math.BigInteger
java.net.BindException
java.net.ConnectException
java.net.DatagramSocketImpl
java.net.FileNameMap
java.net.HttpURLConnection
java.net.MulticastSocket
java.net.NoRouteToHostException
java.rmi.AccessException
java.rmi.AlreadyBoundException
java.rmi.ConnectException
java.rmi.ConnectIOException
java.rmi.MarshalException
java.rmi.Naming
java.rmi.NoSuchObjectException
java.rmi.NotBoundException
java.rmi.RMISecurityException
java.rmi.RMISecurityManager
java.rmi.Remote
java.rmi.RemoteException
java.rmi.ServerError
java.rmi.ServerException
java.rmi.ServerRuntimeException
java.rmi.StubNotFoundException
java.rmi.UnexpectedException
java.rmi.UnknownHostException
java.rmi.UnmarshalException
java.rmi.dgc.DGC
java.rmi.dgc.Lease
java.rmi.dgc.VMID
java.rmi.registry.LocateRegistry
java.rmi.registry.Registry
java.rmi.registry.RegistryHandler
java.rmi.server.ExportException
java.rmi.server.LoaderHandler
java.rmi.server.LogStream
java.rmi.server.ObjID
java.rmi.server.Operation
java.rmi.server.RMIClassLoader
java.rmi.server.RMIFailureHandler
java.rmi.server.RMISocketFactory
java.rmi.server.RemoteCall
java.rmi.server.RemoteObject
java.rmi.server.RemoteRef
java.rmi.server.RemoteServer
java.rmi.server.RemoteStub
java.rmi.server.ServerCloneException
java.rmi.server.ServerNotActiveException
java.rmi.server.ServerRef
java.rmi.server.Skeleton
java.rmi.server.SkeletonMismatchException
java.rmi.server.SkeletonNotFoundException
java.rmi.server.SocketSecurityException
java.rmi.server.UID
java.rmi.server.UnicastRemoteObject
java.rmi.server.Unreferenced
java.security.Certificate
java.security.DigestException
java.security.DigestInputStream
java.security.DigestOutputStream
java.security.Identity
java.security.IdentityScope
java.security.InvalidKeyException
java.security.InvalidParameterException
java.security.Key
java.security.KeyException
java.security.KeyManagementException
java.security.KeyPair
java.security.KeyPairGenerator
java.security.MessageDigest
java.security.NoSuchAlgorithmException
java.security.NoSuchProviderException
java.security.Principal
java.security.PrivateKey
java.security.Provider
java.security.ProviderException
java.security.PublicKey
java.security.SecureRandom
java.security.Security
java.security.Signature
java.security.SignatureException
java.security.Signer
java.security.acl.Acl
java.security.acl.AclEntry
java.security.acl.AclNotFoundException
java.security.acl.Group
java.security.acl.LastOwnerException
java.security.acl.NotOwnerException
java.security.acl.Owner
java.security.acl.Permission
java.security.interfaces.DSAKey
java.security.interfaces.DSAKeyPairGenerator
java.security.interfaces.DSAParams
java.security.interfaces.DSAPrivateKey
java.security.interfaces.DSAPublicKey
java.sql.CallableStatement
java.sql.Connection
java.sql.DataTruncation
java.sql.DatabaseMetaData
java.sql.Date
java.sql.Driver
java.sql.DriverManager
java.sql.DriverPropertyInfo
java.sql.PreparedStatement
java.sql.ResultSet
java.sql.ResultSetMetaData
java.sql.SQLException
java.sql.SQLWarning
java.sql.Statement
java.sql.Time
java.sql.Timestamp
java.sql.Types
java.text.BreakIterator
java.text.CharacterIterator
java.text.ChoiceFormat
java.text.CollationElementIterator
java.text.CollationKey
java.text.Collator
java.text.DateFormat
java.text.DateFormatSymbols
java.text.DecimalFormat
java.text.DecimalFormatSymbols
java.text.FieldPosition
java.text.Format
java.text.MessageFormat
java.text.NumberFormat
java.text.ParseException
java.text.ParsePosition
java.text.RuleBasedCollator
java.text.SimpleDateFormat
java.text.StringCharacterIterator
java.util.Calendar
java.util.EventListener
java.util.EventObject
java.util.GregorianCalendar
java.util.ListResourceBundle
java.util.Locale
java.util.MissingResourceException
java.util.PropertyResourceBundle
java.util.ResourceBundle
java.util.SimpleTimeZone
java.util.TimeZone
java.util.TooManyListenersException
java.util.zip.Adler32
java.util.zip.CRC32
java.util.zip.CheckedInputStream
java.util.zip.CheckedOutputStream
java.util.zip.Checksum
java.util.zip.DataFormatException
java.util.zip.Deflater
java.util.zip.DeflaterOutputStream
java.util.zip.GZIPInputStream
java.util.zip.GZIPOutputStream
java.util.zip.Inflater
java.util.zip.InflaterInputStream
java.util.zip.ZipEntry
java.util.zip.ZipException
java.util.zip.ZipFile
java.util.zip.ZipInputStream
java.util.zip.ZipOutputStream
sun.tools.debug.NoSessionException
sun.tools.debug.NoSuchLineNumberException
sunw.io.Serializable
sunw.util.EventListener
sunw.util.EventObject

jv'api.1.1.B3

name::
* McsEngl.jv'api.1.1.B3@cptIt,

RELEASE:1997jan17

ENTITIES:
JDK 1.0.2 JDK 1.1beta3
Public java.* packages 8 23
Public java.* classes and interfaces 211 503

Java API Packages
java.applet
java.awt
java.awt.datatransfer
java.awt.event
java.awt.image
java.awt.peer
new java.beans
java.io
java.lang
java.lang.reflect
new java.math
java.net
java.rmi
java.rmi.dgc
java.rmi.registry
java.rmi.server
java.security
java.security.acl
java.security.interfaces
java.sql
java.text
java.util
java.util.zip

Other Packages
sun.tools.debug
new sunw.io
new sunw.util

jv'api.1.1.B2

name::
* McsEngl.jv'api.1.1.B2@cptIt,

Java Packages
package java.applet
package java.awt
package java.awt.datatransfer
package java.awt.event
package java.awt.image
package java.awt.peer
package java.io
package java.lang
package java.lang.reflect
package java.net
package java.rmi
package java.rmi.dgc
package java.rmi.registry
package java.rmi.server
package java.security
package java.security.acl
package java.security.interfaces
package java.sql
package java.text
package java.util
package java.util.zip
[JDK1.1B2, 1996dec]

Other Packages
package sun.tools.debug
[JDK1.1B2, 1996dec]

jv'api.1.0.2

name::
* McsEngl.jv'api.1.0.2@cptIt,

The API contains the following packages:

Volumn I: Core Packages
java.lang: The Java Language Package
java.io: The Java I/O Package
java.util: Miscellaneous Java utilities and data structures
java.net: The Java Networking Package

Volume II: Window Toolkit and Applets
java.awt: The Abstract Window Toolkit (AWT) Package
java.awt.image: The AWT Image Package
java.awt.peer: The AWT Peer Package
java.applet: The Java Applet Package

jv'api.1.0.1#ql:JAPI101.NFO#

name::
* McsEngl.jv'api.1.0.1@cptIt,

Packages:
java.lang
Package that contains essential Java classes, including numerics, strings, objects, compiler, runtime, security and threads. Unlike other packages, java.lang is automatically imported into every Java program.

java.util
Package containing miscellaneous utility classes, including generic data structures, settable bits class, time, date, string manipulation, random number generation, system properties, notification, and enumeration of data structures.

java.io
Package that provides a set of input and output streams to read and write data to files, strings, and other sources.

java.net
Package for network support, including URLs, TCP sockets, UDP sockets, IP addresses and a binary-to-text converter.

java.applet
Package that enables construction of applets. It also provides information about an applet's parent document, about other applets in that document, and enables an applet to play audio.

java.awt
Package that provides user interface features such as windows, dialog boxes, buttons, checkboxes, lists, menus, scrollbars and text fields. (Abstract Window Toolkit)

java.awt.image
Package for managing image data, such as the setting the color model, cropping, color filtering, setting pixel values and grabbing snapshots.

java.awt.peer
Package that connects AWT components to their platform-specific implementation (such as Motif widgets or Microsoft Windows controls).

Other Packages
sun.tools.debug
Package to support Java debugging and object inspection tools.

jv'api.1.0

name::
* McsEngl.jv'api.1.0@cptIt,

RELEASE: 1996jan23

jv'api.AWT (since 1.0)

name::
* McsEngl.jv'api.AWT (since 1.0)@cptIt,
* McsEngl.conceptItsoft1012.13,
* McsEngl.jv'awt'api@cptItsoft1012.13,

_DEFINITION:
* The Abstract Window Toolkit (AWT) supports Graphical User Interface (GUI) programming. AWT features include: a rich set of user interface components; a robust event-handling model; graphics and imaging tools, including shape, color, and font classes; layout managers, for flexible window layouts that don't depend on a particular window size or screen resolution; data transfer classes, for cut-and-paste through the native platform clipboard. The AWT is part of the Java Foundation Classes (JFC). For other JFC features, see below.
[1.4 DOCS]
* The Abstract Window Toolkit (AWT) contains a complete set of classes for writing GUI programs.
- standard GUI components such as buttons, lists, menus, and text areas.
- It also includes containers (such as windows and menu bars)
- and higher-level components (such as a dialog for opening or saving files).

* The AWT contains more than components. It contains a variety of classes related to drawing and event handling.
[Java Tutorial, 1996dec24]

_WHOLE:
* JFC#cptItsoft1012.11#

SINCE:
* 1.0

PACKAGE:
* package.java.awt,
* java.awt.event Package
* java.awt.datatransfer Package

SOURCE:
* http://java.sun.com/products/jdk/awt/

jv'AWT'hierarchy:
Classes:
BorderLayout
CardLayout
CheckboxGroup
Color
Component
Button
Canvas
Checkbox
Choice
Container
Panel
Window
Dialog
Frame
Label
List
Scrollbar
TextCompoment
TextArea
TextField
Dimension
Event
FileDialog
FlowLayout
Font
FontMetrics
Graphics
GridLayout
GridBagConstraints
GridBagLayout
Image
Insets
MediaTracker
MenuComponent
MenuBar
MenuItem
CheckboxMenuItem
Menu
Point
Polygon
Rectangle
Toolkit

Interfaces:
LayoutManager
MenuComponent

jv'api.CHARSET (Package java.nio.charset; since 1.4)

name::
* McsEngl.jv'api.CHARSET (Package java.nio.charset@cptIt, since 1.4),
* McsEngl.jv'charset'api@cptIt,

_DESCRIPTION:
* Defines charsets, decoders, and encoders, for translating between bytes and Unicode characters.
- Charset      A named mapping between characters and bytes
- CharsetDecoder    Decodes bytes into characters
- CharsetEncoder    Encodes characters into bytes
- CoderResult    Describes coder results
- CodingErrorAction  Describes actions to take when coding errors are detected
A charset is named mapping between sequences of sixteen-bit Unicode characters and sequences of bytes, in the sense defined in RFC 2278. A decoder is an engine which transforms bytes in a specific charset into characters, and an encoder is an engine which transforms characters into bytes. Encoders and decoders operate on byte and character buffers. They are collectively referred to as coders.
The Charset class defines methods for creating coders for a given charset and for retrieving the various names associated with a charset. It also defines static methods for testing whether a particular charset is supported, for locating charset instances by name, and for constructing a map that contains every charset for which support is available in the current Java virtual machine.
Most users will not use these classes directly; instead they will use the existing charset-related constructors and methods in the String class, together with the existing InputStreamReader and OutputStreamWriter classes, all of whose implementations have been reworked to make use of the charset facilities defined in this package. A small number of changes have been made to the InputStreamReader and OutputStreamWriter classes in order to allow explicit charset objects to be specified in the construction of instances of those classes.
Support for new charsets can be made available via the interface defined in the CharsetProvider class in the java.nio.charset.spi package.

Since: 1.4

jv'api.COLLECTIONS'FRAMEWORK (since 1.2)

name::
* McsEngl.jv'api.COLLECTIONS'FRAMEWORK (since 1.2)@cptIt,
* McsEngl.jv'collections'framework@cptIt,

_DEFINITION:
* The Java 2 platform includes a new collections framework. A collection is an object that represents a group of objects (such as the familiar Vector class). A collections framework is a unified architecture for representing and manipulating collections, allowing them to be manipulated independently of the details of their representation.
[1.4 DOCS]

SINCE:
* 1.2

STRUCTURE:
The collections framework consists of:

* Collection Interfaces - The primary means by which collections are manipulated.
o Collection - A group of objects. No assumptions are made about the order of the collection (if any), or whether it may contain duplicate elements.
o Set - The familiar set abstraction. No duplicate elements permitted. May or may not be ordered. Extends the Collection interface.
o List - Ordered collection, also known as a sequence. Duplicates are generally permitted. Allows positional access. Extends the Collection interface.
o Queue - A collection designed for holding elements prior to processing. Besides basic Collection operations, queues provide additional insertion, extraction, and inspection operations.
o Map - A mapping from keys to values. Each key can map to at most one value.
o SortedSet - A set whose elements are automatically sorted, either in their natural ordering (see the Comparable interface), or by a Comparator object provided when a SortedSet instance is created. Extends the Set interface.
o SortedMap - A map whose mappings are automatically sorted by key, either in the keys' natural ordering or by a comparator provided when a SortedMap instance is created. Extends the Map interface.
o BlockingQueue - A Queue with operations that wait for the queue to become non-empty when retrieving an element, and that wait for space to become available in the queue when storing an element. (This interface is part of the package java.util.concurrent.)
o ConcurrentMap - A Map with atomic putIfAbsent, remove, and replace methods. (This interface is part of the package java.util.concurrent.)

* General-Purpose Implementations - The primary implementations of the collection interfaces.
o HashSet - Hash table implementation of the Set interface. The best all-around implementation of the Set interface.
o TreeSet Red-black tree implementation of the SortedSet interface.
o LinkedHashSet - Hash table and linked list implementation of the Set interface. An insertion-ordered Set implementation that runs nearly as fast as HashSet.
o ArrayList - Resizable-array implementation of the List interface. (Essentially an unsynchronized Vector.) The best all-around implementation of the List interface.
o LinkedList - Doubly-linked list implementation of the List interface. May provide better performance than the ArrayList implementation if elements are frequently inserted or deleted within the list. Can be used as a double-ended queue (deque). Also implements the Queue interface. When accessed via the Queue interface, LinkedList behaves as a FIFO queue.
o PriorityQueue - Heap implementation of an unbounded priority queue.
o HashMap - Hash table implementation of the Map interface. (Essentially an unsynchronized Hashtable that supports null keys and values.) The best all-around implementation of the Map interface.
o TreeMap Red-black tree implementation of the SortedMap interface.
o LinkedHashMap - Hash table and linked list implementation of the Map interface. An insertion-ordered Map implementation that runs nearly as fast as HashMap. Also useful for building caches (see removeEldestEntry(Map.Entry) ).

* Wrapper Implementations - Functionality-enhancing implementations for use with other implementations. Accessed solely through static factory methods.
o Collections.unmodifiableInterface - Return an unmodifiable view of a specified collection that throws an UnsupportedOperationException if the user attempts to modify it.
o Collections.synchronizedInterface - Return a synchronized collection that is backed by the specified (typically unsynchronized) collection. As long as all accesses to the backing collection are through the returned collection, thread-safety is guaranteed.
o Collections.checkedInterface - Return a dynamically typesafe view of the specified collection, which throws a ClassCastException if a client attempts to add an element of the wrong type. The generics mechanism in the language provides compile-time (static) type checking, but it is possible to defeat this mechanism. Dynamically typesafe views eliminate this possibility entirely.

* Convenience Implementations - High-performance "mini-implementations" of the collection interfaces.
o Arrays.asList - Allows an array to be viewed as a list.
o EMPTY_SET, EMPTY_LIST and EMPTY_MAP - Constants representing the empty set and list (immutable).
o singleton, singletonList, and singletonMap - Returns an immutable "singleton" set, list, or map, containing only the specified object (or key-value mapping).
o nCopies - Returns an immutable list consisting of n copies of a specified object.

* Legacy Implementations - Older collection classes have been retrofitted to implement the collection interfaces.
o Vector - Synchronized resizable-array implementation of the List interface with additional "legacy methods."
o Hashtable - Synchronized hash table implementation of the Map interface that does not allow null keys or values, with additional "legacy methods."

* Special Purpose Implementations
o WeakHashMap - An implementation of the Map interface that stores only weak references to its keys. Storing only weak references allows key-value pairs to be garbage-collected when the key is no longer referenced outside of the WeakHashMap. This class provides the easiest way to harness the power of weak references. It is useful for implementing "registry-like" data structures, where the utility of an entry vanishes when its key is no longer reachable by any thread.
o IdentityHashMap - Identity-based Map implementation based on a hash table. This class is useful for topology-preserving object graph transformations (such as serialization or deep-copying). To perform such transformations, you need to maintain an identity-based "node table" that keeps track of which objects have already been seen. Identity-based maps are also used to maintain object-to-meta-information mappings in dynamic debuggers and similar systems. Finally, identity-based maps are useful in thwarting "spoof attacks" resulting from intentionally perverse equals methods. (IdentityHashMap never invokes the equals method on its keys.) An added benefit of this implementation is that it is fast.
o CopyOnWriteArrayList - a List implementation backed by an copy-on-write array. All mutative operations (such as add, set, and remove) are implemented by making a new copy of the array. No synchronization is necessary, even during iteration, and iterators are guaranteed never to throw ConcurrentModificationException. This implementation is well-suited to maintaining event-handler lists (where change is infrequent, and traversal is frequent and potentially time-consuming).
o CopyOnWriteArraySet - A Set implementation backed by a copy-on-write array. This implementation is similar in nature to CopyOnWriteArrayList. Unlike most Set implementations, the add, remove, and contains methods require time proportional to the size of the set. This implementation is well-suited to maintaining event-handler lists that must prevent duplicates.
o EnumSet - a high-performance Set implementation backed by a bit-vector. All elements of each EnumSet instance must be elements of a single enum type.
o EnumMap - a high-performance Map implementation backed by an array. All keys in each EnumMap instance must be elements of a single enum type.

* Concurrent Implementations - These implementations are part of the package java.util.concurrent.
o ConcurrentLinkedQueue - An unbounded FIFO (first-in first-out) queue based on linked nodes.
o LinkedBlockingQueue - An optionally bounded FIFO blocking queue backed by linked nodes.
o ArrayBlockingQueue - A bounded FIFO blocking queue backed by an array.
o PriorityBlockingQueue - An unbounded blocking priority queue backed by a priority heap.
o DelayQueue - A time-based scheduling queue backed by a priority heap.
o SynchronousQueue - A simple rendezvous mechanism utilizing the BlockingQueue interface.
o ConcurrentHashMap - A highly concurrent, high-performance ConcurrentMap implementation based on a hash table. This implementation never blocks when performing retrievals and allows the client to select the concurrency level for updates. It is intended as a drop-in replacement for Hashtable: in addition to implementing ConcurrentMap, it supports all of the "legacy" methods peculiar to Hashtable.

* Abstract Implementations - Skeletal implementations of the collection interfaces to facilitate custom implementations.
o AbstractCollection - Skeletal Collection implementation that is neither a set nor a list (such as a "bag" or multiset).
o AbstractSet - Skeletal Set implementation.
o AbstractList - Skeletal List implementation backed by a random-access data store (such as an array).
o AbstractSequentialList - Skeletal List implementation backed by a sequential-access data store (such as a linked list).
o AbstractQueue - Skeletal Queue implementation.
o AbstractMap - Skeletal Map implementation.

* Algorithms
o sort(List) - Sorts a list using a merge sort algorithm, which provides average-case performance comparable to a high-quality quicksort, guaranteed O(n*log n) performance (unlike quicksort), and stability (unlike quicksort). (A stable sort is one that does not reorder equal elements.)
o binarySearch(List, Object) - Searches for an element in an ordered list using the binary search algorithm.
o reverse(List) - Reverses the order of the elements in the a list.
o shuffle(List) - Randomly permutes the elements in a list.
o fill(List, Object) - Overwrites every element in a list with the specified value.
o copy(List dest, List src) - Copies the source list into the destination list.
o min(Collection) - Returns the minimum element in a collection.
o max(Collection) - Returns the maximum element in a collection.
o rotate(List list, int distance) - Rotates all of the elements in the list by the specified distance.
o replaceAll(List list, Object oldVal, Object newVal) - Replaces all occurrences of one specified value with another.
o indexOfSubList(List source, List target) - Returns the index of the first sublist of source that is equal to target.
o lastIndexOfSubList(List source, List target) - Returns the index of the last sublist of source that is equal to target.
o swap(List, int, int) - Swaps the elements at the specified positions in the specified list.
o frequency(Collection, Object) - Counts the number of times the specified element occurs in the specified collection.
o disjoint(Collection, Collection) - Determines whether two collections are disjoint, in other words, whether they contain no elements in common.
o addAll(Collection<? super T>, T...) - Adds all of the elements in the specified array to the specified collection.

* Infrastructure
o Iterators - Similar to the familiar Enumeration interface, but more powerful, and with improved method names.
+ Iterator - In addition to the functionality of the Enumeration interface, allows the user to remove elements from the backing collection with well defined, useful semantics.
+ ListIterator - Iterator for use with lists. In addition to the functionality of the Iterator interface, supports bi-directional iteration, element replacement, element insertion and index retrieval.
o Ordering
+ Comparable - Imparts a natural ordering to classes that implement it. The natural ordering may be used to sort a list or maintain order in a sorted set or map. Many classes have been retrofitted to implement this interface.
+ Comparator - Represents an order relation, which may be used to sort a list or maintain order in a sorted set or map. Can override a type's natural ordering, or order objects of a type that does not implement the Comparable interface.
o Runtime Exceptions
+ UnsupportedOperationException - Thrown by collections if an unsupported optional operation is called.
+ ConcurrentModificationException - Thrown by iterators and list iterators if the backing collection is modified unexpectedly while the iteration is in progress. Also thrown by sublist views of lists if the backing list is modified unexpectedly.
o Performance
+ RandomAccess - Marker interface that allows List implementations to indicate that they support fast (generally constant time) random access. This allows generic algorithms to alter their behavior to provide good performance when applied to either random or sequential access lists.

* Array Utilities
o Arrays - Contains static methods to sort, search, compare, hash, convert to String, and fill arrays of primitives and Objects.
[1.5 DOCS]

jv'api.CORE'REFLECTON

name::
* McsEngl.jv'api.CORE'REFLECTON@cptIt,

jv'api.DOCUMENT (TEXT)

name::
* McsEngl.jv'api.DOCUMENT (TEXT)@cptIt,
* McsEngl.jv'DOCUMENT-1012i@cptIt,
* McsEngl.jv'TEXT-1012i@cptIt,

_DEFINITION:
The Document is a container for text that serves as the model for swing text components. The goal for this interface is to scale from very simple needs (a plain text textfield) to complex needs (an HTML or XML document, for example).
[file:///D:/JAVA/DOCS/DOCS6/api/index.html]

_IMPLEMENTATION:
All Known Implementing Classes:
* AbstractDocument,
* DefaultStyledDocument,
* HTMLDocument,
* PlainDocument

jv'CONTENT-OF-DOC

name::
* McsEngl.jv'CONTENT-OF-DOC@cptIt,

_DEFINITION:
At the simplest level, text can be modeled as a linear sequence of characters. To support internationalization, the Swing text model uses unicode characters. The sequence of characters displayed in a text component is generally referred to as the component's content.
[file:///D:/JAVA/DOCS/DOCS6/api/index.html]

jv'LOCATION-OF-DOC

name::
* McsEngl.jv'LOCATION-OF-DOC@cptIt,
* McsEngl.jv'offset-1012i@cptIt,
* McsEngl.jv'position-1012i@cptIt,

_DEFINITION:
To refer to locations within the sequence, the coordinates used are the location between two characters. As the diagram below shows, a location in a text document can be referred to as a position, or an offset. This position is zero-based.
[file:///D:/JAVA/DOCS/DOCS6/api/index.html]

jv'ELEMENT-OF-DOC

name::
* McsEngl.jv'ELEMENT-OF-DOC@cptIt,

_DEFINITION:
The unit of structure [of a text] (i.e. a node of the tree) is referred to by the Element interface. Each Element can be tagged with a set of attributes. These attributes (name/value pairs) are defined by the AttributeSet interface.
[file:///D:/JAVA/DOCS/DOCS6/api/index.html]

_INTERFACE:
* javax.swing.text.Element_Interface

_IMPLEMENTATION:
All Known Implementing Classes:
* AbstractDocument.AbstractElement,
* AbstractDocument.BranchElement,
* AbstractDocument.LeafElement,
* DefaultStyledDocument.SectionElement,
* HTMLDocument.BlockElement,
* HTMLDocument.RunElement

_METHOD:
Element getParentElement();
int getElementCount();
int getElement(int index);
boolean isLeaf();
Document getDocument();
String getName();
AttributeSet getAttributes();
int getStartOffset();
int getEndOffset();
[http://java.sun.com/products/jfc/tsc/articles/text/element_interface/]

jv'ELEMENT.ROOT

name::
* McsEngl.jv'ELEMENT.ROOT@cptIt,
* McsEngl.jv'RootElement-1012i@cptIt,

You can obtain the root Element (or Elements) of a Document by calling the methods getDefaultRootElement() and getRootElements(), which are defined in the Document interface.

jv'ELEMENT.BRANCE

name::
* McsEngl.jv'ELEMENT.BRANCE@cptIt,
* McsEngl.jv'BranceElement-1012i@cptIt,

_DEFINITION:
Every Element is either a branch or a leaf. If an element is a branch, the isLeaf() method returns false. If an element is a a leaf,isLeaf() returns true.
Branches can have any number of children. Leaves do not have children. To determine how many children a branch has, you can call getElementCount(). To determine the parent of an Element, you can call getParentElement(). Root elements don't have parents, so calling getParentElement() on a root returns null.
[http://java.sun.com/products/jfc/tsc/articles/text/element_interface/]

_LOCATION:
An Element represents a specific region in a Document that begins with startOffset and ends just before endOffset. The start offset of a branch Element is usually the start offset of its first child. Similarly, the end offset of a branch Element is usually the end offset of its last child.
[http://java.sun.com/products/jfc/tsc/articles/text/element_interface/]

jv'ELEMENT.HTML

name::
* McsEngl.jv'ELEMENT.HTML@cptIt,

jv'ELEMENT.HEAD

name::
* McsEngl.jv'ELEMENT.HEAD@cptIt,

jv'ELEMENT.BODY

name::
* McsEngl.jv'ELEMENT.BODY@cptIt,

jv'ELEMENT.P

name::
* McsEngl.jv'ELEMENT.P@cptIt,

jv'ELEMENT.P-IMPLIED

name::
* McsEngl.jv'ELEMENT.P-IMPLIED@cptIt,

jv'ELEMENT.LEAF

name::
* McsEngl.jv'ELEMENT.LEAF@cptIt,
* McsEngl.jv'LeafElement-1012i@cptIt,

jv'ELEMENT.CONTENT

name::
* McsEngl.jv'ELEMENT.CONTENT@cptIt,

tagEmpty: content (last leaf of <title>)
java.lang.String, java.lang.Boolean          (CR, true)
javax.swing.text.StyleConstants, javax.swing.text.html.HTML$Tag    (name, content)

tagEmpty: content: (<a name="h0c0"/>)
javax.swing.text.html.HTML$Tag, javax.swing.text.SimpleAttributeSet  (a, name=h0c0)
javax.swing.text.StyleConstants, javax.swing.text.html.HTML$Tag    (name, content)

tagEmpty: content: (<a name="nlMisc"/>)
javax.swing.text.html.HTML$Tag, javax.swing.text.SimpleAttributeSet  (a, name=nlMisc)
javax.swing.text.StyleConstants, javax.swing.text.html.HTML$Tag    (name, content)

tagEmpty: content: (<a class="hide">#...#</a>)
javax.swing.text.html.HTML$Tag, javax.swing.text.SimpleAttributeSet  (a, class=hide)
javax.swing.text.StyleConstants, javax.swing.text.html.HTML$Tag    (name, content)

tagEmpty: content: (\n of <p>)
javax.swing.text.html.HTML$Tag, javax.swing.text.SimpleAttributeSet  (CR, true)
javax.swing.text.StyleConstants, javax.swing.text.html.HTML$Tag    (name, content)

jv'ELEMENT.BR

name::
* McsEngl.jv'ELEMENT.BR@cptIt,

_ATTRIBUTES:
javax.swing.text.html.HTML$Tag, javax.swing.text.SimpleAttributeSet  (a, name=nlMisc)
javax.swing.text.StyleConstants, javax.swing.text.html.HTML$Tag    (name, br)

jv'ELEMENT.TITLE

name::
* McsEngl.jv'ELEMENT.TITLE@cptIt,

tagEmpty: title
javax.swing.text.StyleConstants, javax.swing.text.html.HTML$Tag    (name, title)

tagEmpty: title
javax.swing.text.html.HTML$Attribute, java.lang.String      (endTag, true)
javax.swing.text.StyleConstants, javax.swing.text.html.HTML$Tag    (name, title)

jv'NOTIFICATION-OF-DOC

name::
* McsEngl.jv'NOTIFICATION-OF-DOC@cptIt,

_DESCRIPTION:
Mutations to the Document must be communicated to interested observers. The notification of change follows the event model guidelines that are specified for JavaBeans. In the JavaBeans event model, once an event notification is dispatched, all listeners must be notified before any further mutations occur to the source of the event. Further, order of delivery is not guaranteed.
[file:///D:/JAVA/DOCS/DOCS6/api/index.html]

jv'DOCUMENT-LISTENER

name::
* McsEngl.jv'DOCUMENT-LISTENER@cptIt,

_DEFINITION:
Interface for an observer to register to receive notifications of changes to a text document.
[file:///D:/JAVA/DOCS/DOCS6/api/index.html]

_CONCEPT:
javax.swing.event
Interface DocumentListener

_IMPLEMENTATION:
All Known Implementing Classes:
* JEditorPane.AccessibleJEditorPane,
* JEditorPane.AccessibleJEditorPaneHTML,
* JEditorPane.JEditorPaneAccessibleHypertextSupport,
* JPasswordField.AccessibleJPasswordField,
* JTextArea.AccessibleJTextArea,
* JTextComponent.AccessibleJTextComponent,
* JTextField.AccessibleJTextField

jv'PROPERTY-OF-DOC

name::
* McsEngl.jv'PROPERTY-OF-DOC@cptIt,

_DESCRIPTION:
Document implementations will generally have some set of properties associated with them at runtime. Two well known properties are the StreamDescriptionProperty, which can be used to describe where the Document came from, and the TitleProperty, which can be used to name the Document. The methods related to the properties are:
* getProperty(Object)
* putProperty(Object, Object)
[file:///D:/JAVA/DOCS/DOCS6/api/index.html]

jv'DOC.PLAIN

name::
* McsEngl.jv'DOC.PLAIN@cptIt,
* McsEngl.jv'PLAIN-DOCUMENT-1012i@cptIt,

_STRUCTURE:
The PlainDocument class defines an Element structure in which the root node has a child node for each line of text in the model.
[http://java.sun.com/products/jfc/tsc/articles/text/element_interface/]

jv'DOC.STYLED

name::
* McsEngl.jv'DOC.STYLED@cptIt,
* McsEngl.jv'STYLED-DOCUMENT-1012i@cptIt,

_STRUCTURE:
The DefaultStyledDocument class, used for styled text, contains another level of Elements. This extra level is needed so that each paragraph can contain different styles of text.
[http://java.sun.com/products/jfc/tsc/articles/text/element_interface/]

jv'DOC.HTMLDocument extends DefaultStyledDocument

name::
* McsEngl.jv'DOC.HTMLDocument extends DefaultStyledDocument@cptIt,
* McsEngl.jv'HTML-DOCUMENT-1012i@cptIt,

jv'api.IO

name::
* McsEngl.jv'api.IO@cptIt,
* McsEngl.jv'io'api@cptIt,
* McsEngl.jv'io'system@cptIt,

PACKAGE:
java.io#ql:jv'io'package#  Provides for system input and output through data streams, serialization and the file system.
java.nio  Defines buffers, which are containers for data, and provides an overview of the other NIO packages.
java.nio.channels  Defines channels, which represent connections to entities that are capable of performing I/O operations, such as files and sockets; defines selectors, for multiplexed, non-blocking I/O operations.
java.nio.channels.spi  Service-provider classes for the java.nio.channels package.
java.nio.charset  Defines charsets, decoders, and encoders, for translating between bytes and Unicode characters.
java.nio.charset.spi  Service-provider classes for the java.nio.charset package.

jv'IO.CONSOLE

name::
* McsEngl.jv'IO.CONSOLE@cptIt,

jv'IO.FILE

name::
* McsEngl.jv'IO.FILE@cptIt,

jv'IO.INTERNET

name::
* McsEngl.jv'IO.INTERNET@cptIt,

jv'IO.MEMORY

name::
* McsEngl.jv'IO.MEMORY@cptIt,

jv'api.NIO (since 1.4)

name::
* McsEngl.jv'api.NIO (since 1.4)@cptIt,
* McsEngl.jv'nio'api@cptIt,

_DEFINITION:
* Defines buffers, which are containers for data, and provides an overview of the other NIO packages.

PACKAGE:
* java.nio Defines buffers, which are containers for data, and provides an overview of the other NIO packages.
* java.nio.channels Defines channels, which represent connections to entities that are capable of performing I/O operations, such as files and sockets; defines selectors, for multiplexed, non-blocking I/O operations.
* java.nio.channels.spi Service-provider classes for the java.nio.channels package.
* java.nio.charset Defines charsets, decoders, and encoders, for translating between bytes and Unicode characters.
* java.nio.charset.spi Service-provider classes for the java.nio.charset package.

jv'api.JDBC

name::
* McsEngl.jv'api.JDBC@cptIt,
* McsEngl.jv'JDBC@cptIt,
* McsEngl.jv'Java'DataBase'Connectivity@cptIt,
* McsEngl.jv'SQL'PACKAGE@cptIt,

_DEFINITION:
JDBCTM is a JavaTM-API#ql:jv'api1.1# for executing SQL statements. (As a point of interest, JDBC is a trademarked name and is not an acronym; nevertheless, JDBC is often thought of as standing for "Java Database Connectivity".) It consists of a set of classes and interfaces written in the Java programming language. JDBC provides a standard API for tool/database developers and makes it possible to write database applications using a pure Java API.

Simply put, JDBC makes it possible to do three things:
- establish a connection with a database
- send SQL statements
- process the results.
[JDK1.1]

Example#ql:jv'ex.jdbc#.

TWO'TIER MODEL

name::
* McsEngl.TWO'TIER MODEL@cptIt,

In the two-tier model, a Java applet or application talks directly to the database. This requires a JDBC driver that can communicate with the particular database management system being accessed. A user's SQL statements are delivered to the database, and the results of those statements are sent back to the user. The database may be located on another machine to which the user is connected via a network. This is referred to as a client/server configuration, with the user's machine as the client, and the machine housing the database as the server. The network can be an intranet, which, for example, connects employees within a corporation, or it can be the Internet.
[JDK1.1]

THREE'TIER MODEL

name::
* McsEngl.THREE'TIER MODEL@cptIt,

In the three-tier model, commands are sent to a "middle tier" of services, which then send SQL statements to the database. The database processes the SQL statements and sends the results back to the middle tier, which then sends them to the user. MIS directors find the three-tier model very attractive because the middle tier makes it possible to maintain control over access and the kinds of updates that can be made to corporate data. Another advantage is that when there is a middle tier, the user can employ an easy-to-use higher-level API which is translated by the middle tier into the appropriate low-level calls. Finally, in many cases the three-tier architecture can provide performance advantages.
[JDK1.1]

jv'api.JavaHelp

name::
* McsEngl.jv'api.JavaHelp@cptIt,
* McsEngl.conceptItsoft1012.17,
* McsEngl.jv'JavaHelp-1012.17@cptIt,
* McsEngl.javaHelp-1012.17@cptIt,
* McsEngl.jh-1012.17@cptIt,

_DEFINITION:
Most interactive applications require online help and Java applications are no exception. The JavaHelpTM system is specifically tailored to the JavaTM platform. The JavaHelp system provides developers and authors a standard, fully-featured, easy-to-use system for presenting online information to Java application users. Providing a help system that is a standard extension to the JavaTM 2 Software Development Kit, Standard Edition (the J2SETM SDK), relieves developers and authors of having to implement their own proprietary help systems.

jh'FILES

name::
* McsEngl.jh'FILES@cptIt,

jh'HelpsetFile

name::
* McsEngl.jh'HelpsetFile@cptIt,

When the JavaHelp system is activated by your application, the first thing it does is read the helpset file specified by the application. The helpset file defines the helpset for that application. A helpset is the set of data that comprises your help system. The helpset file includes the following information:
Map file  The map file is used to associate topic IDs with the URL or path name of HTML topic files.
View information  Information that describes the navigators being used in the helpset. The standard navigators are: table of contents, index, and full-text search. Additional navigators are the glossary and the favorites navigators. Information about custom navigators is included here as well.
Helpset title  The <title> defined in the helpset (.hs) file. This title appears at the top of the main window and any secondary windows defined in your helpset file.
Home ID  The name of the (default) ID that is displayed when the help viewer is called without specifying an ID.
Presentation  The windows in which to display the help topics. This is a new feature of the JavaHelp 2 software that is described in more detail below under <presentation>.
Sub-helpsets  This optional section statically includes other helpsets by using the <subhelpset> tag. The helpsets indicated by this tag are merged automatically into the helpset that contains the tag. More details about merging can be found in Merging Helpsets.
Implementation  This optional section creates a registry that provides key data mapping to define the HelpBroker class to use in the HelpSet.createHelpBroker method. The registry also determines the content viewer to user for a given MIME type. See <impl> below.

After your product is installed on your user's system, your Java program must be able to find the helpset file. The application specifies the path to the helpset file when it starts the JavaHelp system. By convention, the name of the helpset file ends with the .hs extension.

jh'MapFile

name::
* McsEngl.jh'MapFile@cptIt,

The map file is used to associate topic IDs with URLs (paths to HTML topic files) and to define the window that can display help topics. By convention, map file names use the .jhm suffix.

The format of the map file is based on the World Wide Web Consortium Extended Markup Language (XML).

The following code listing is an example of a short map file:

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE map
PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Map Version 2.0//EN"
"http://java.sun.com/products/javahelp/map_2_0.dtd">
<map version="2.0">
<mapID target="toplevelfolder" url="images/toplevel.gif" >
<mapID target="hol_intro" url="hol/hol.html" />
<mapID target="halloween" url="hol/hall.html"/>
<mapID target="althanksproc" url="hol/thanks4.html" />
<mapID target="valentine" url="hol/val.html" />
<mapID target="onlove" url="hol/love.html" />
</mapID>
</map>

jh'VERSION

name::
* McsEngl.jh'VERSION@cptIt,

2.0_02 ==> 2004.Octomber

jv'api.JAVAX

name::
* McsEngl.jv'api.JAVAX@cptIt,
* McsEngl.jv'javax'api@cptIt,

PART-PACKAGE:
javax.accessibility  Defines a contract between user-interface components and an assistive technology that provides access to those components.
javax.crypto  Provides the classes and interfaces for cryptographic operations.
javax.crypto.interfaces  Provides interfaces for Diffie-Hellman keys as defined in RSA Laboratories' PKCS#3.
javax.crypto.spec  Provides classes and interfaces for key specifications and algorithm parameter specifications.
javax.imageio  The main package of the Java Image I/O API.
javax.imageio.event  A package of the Java Image I/O API dealing with synchronous notification of events during the reading and writing of images.
javax.imageio.metadata  A package of the Java Image I/O API dealing with reading and writing metadata.
javax.imageio.plugins.bmp  Package containing the public classes used by the built-in BMP plug-in.
javax.imageio.plugins.jpeg  Classes supporting the built-in JPEG plug-in.
javax.imageio.spi  A package of the Java Image I/O API containing the plug-in interfaces for readers, writers, transcoders, and streams, and a runtime registry.
javax.imageio.stream  A package of the Java Image I/O API dealing with low-level I/O from files and streams.
javax.management  Provides the core classes for the Java Management Extensions.
javax.management.loading  Provides the classes which implement advanced dynamic loading.
javax.management.modelmbean  Provides the definition of the ModelMBean classes.
javax.management.monitor  Provides the definition of the monitor classes.
javax.management.openmbean  Provides the open data types and Open MBean descriptor classes.
javax.management.relation  Provides the definition of the Relation Service.
javax.management.remote  Interfaces for remote access to JMX MBean servers.
javax.management.remote.rmi  The RMI connector is a connector for the JMX Remote API that uses RMI to transmit client requests to a remote MBean server.
javax.management.timer  Provides the definition of the Timer MBean.
javax.naming  Provides the classes and interfaces for accessing naming services.
javax.naming.directory  Extends the javax.naming package to provide functionality for accessing directory services.
javax.naming.event  Provides support for event notification when accessing naming and directory services.
javax.naming.ldap  Provides support for LDAPv3 extended operations and controls.
javax.naming.spi  Provides the means for dynamically plugging in support for accessing naming and directory services through the javax.naming and related packages.
javax.net  Provides classes for networking applications.
javax.net.ssl  Provides classes for the secure socket package.
javax.print  Provides the principal classes and interfaces for the JavaTM Print Service API.
javax.print.attribute  Provides classes and interfaces that describe the types of JavaTM Print Service attributes and how they can be collected into attribute sets.
javax.print.attribute.standard  Package javax.print.attribute.standard contains classes for specific printing attributes.
javax.print.event  Package javax.print.event contains event classes and listener interfaces.
javax.rmi  Contains user APIs for RMI-IIOP.
javax.rmi.CORBA  Contains portability APIs for RMI-IIOP.
javax.rmi.ssl  Provides implementations of RMIClientSocketFactory and RMIServerSocketFactory over the Secure Sockets Layer (SSL) or Transport Layer Security (TLS) protocols.
javax.security.auth  This package provides a framework for authentication and authorization.
javax.security.auth.callback  This package provides the classes necessary for services to interact with applications in order to retrieve information (authentication data including usernames or passwords, for example) or to display information (error and warning messages, for example).
javax.security.auth.kerberos  This package contains utility classes related to the Kerberos network authentication protocol.
javax.security.auth.login  This package provides a pluggable authentication framework.
javax.security.auth.spi  This package provides the interface to be used for implementing pluggable authentication modules.
javax.security.auth.x500  This package contains the classes that should be used to store X500 Principal and X500 Private Crendentials in a Subject.
javax.security.cert  Provides classes for public key certificates.
javax.security.sasl  Contains class and interfaces for supporting SASL.
javax.sound.midi  Provides interfaces and classes for I/O, sequencing, and synthesis of MIDI (Musical Instrument Digital Interface) data.
javax.sound.midi.spi  Supplies interfaces for service providers to implement when offering new MIDI devices, MIDI file readers and writers, or sound bank readers.
javax.sound.sampled  Provides interfaces and classes for capture, processing, and playback of sampled audio data.
javax.sound.sampled.spi  Supplies abstract classes for service providers to subclass when offering new audio devices, sound file readers and writers, or audio format converters.
javax.sql  Provides the API for server side data source access and processing from the JavaTM programming language.
javax.sql.rowset  Standard interfaces and base classes for JDBC RowSet implementations.
javax.sql.rowset.serial  Provides utility classes to allow serializable mappings between SQL types and data types in the Java programming language.
javax.sql.rowset.spi  The standard classes and interfaces that a third party vendor has to use in its implementation of a synchronization provider.
javax.swing  Provides a set of "lightweight" (all-Java language) components that, to the maximum degree possible, work the same on all platforms.
javax.swing.border  Provides classes and interface for drawing specialized borders around a Swing component.
javax.swing.colorchooser  Contains classes and interfaces used by the JColorChooser component.
javax.swing.event  Provides for events fired by Swing components.
javax.swing.filechooser  Contains classes and interfaces used by the JFileChooser component.
javax.swing.plaf  Provides one interface and many abstract classes that Swing uses to provide its pluggable look-and-feel capabilities.
javax.swing.plaf.basic  Provides user interface objects built according to the Basic look and feel.
javax.swing.plaf.metal  Provides user interface objects built according to the Java look and feel (once codenamed Metal), which is the default look and feel.
javax.swing.plaf.multi  Provides user interface objects that combine two or more look and feels.
javax.swing.plaf.synth  Synth is a skinnable look and feel in which all painting is delegated.
javax.swing.table  Provides classes and interfaces for dealing with javax.swing.JTable.
javax.swing.text  Provides classes and interfaces that deal with editable and noneditable text components.
javax.swing.text.html  Provides the class HTMLEditorKit and supporting classes for creating HTML text editors.
javax.swing.text.html.parser  Provides the default HTML parser, along with support classes.
javax.swing.text.rtf  Provides a class (RTFEditorKit) for creating Rich-Text-Format text editors.
javax.swing.tree  Provides classes and interfaces for dealing with javax.swing.JTree.
javax.swing.undo  Allows developers to provide support for undo/redo in applications such as text editors.
javax.transaction  Contains three exceptions thrown by the ORB machinery during unmarshalling.
javax.transaction.xa  Provides the API that defines the contract between the transaction manager and the resource manager, which allows the transaction manager to enlist and delist resource objects (supplied by the resource manager driver) in JTA transactions.
javax.xml  Defines core XML constants and functionality from the XML specifications.
javax.xml.datatype  XML/Java Type Mappings.
javax.xml.namespace  XML Namespace processing.
javax.xml.parsers  Provides classes allowing the processing of XML documents.
javax.xml.transform  This package defines the generic APIs for processing transformation instructions, and performing a transformation from source to result.
javax.xml.transform.dom  This package implements DOM-specific transformation APIs.
javax.xml.transform.sax  This package implements SAX2-specific transformation APIs.
javax.xml.transform.stream  This package implements stream- and URI- specific transformation APIs.
javax.xml.validation  This package provides an API for validation of XML documents.
javax.xml.xpath  This package provides an object-model neutral API for the evaluation of XPath expressions and access to the evaluation environment.

jv'api.JAXP (since 1.4)

name::
* McsEngl.jv'api.JAXP (since 1.4)@cptIt,
* McsEngl.conceptItsoft1012.9,
* McsEngl.jv'jaxp@cptItsoft1012.9,
* McsEngl.jv'xml'processing@cptItsoft1012.9,

_DEFINITION:
* The JavaTM API for XML processing includes the basic facilities for working with XML documents through the following standardized set of Java Platform APIs.
- Document Object Model (DOM) Level 2
- Simple API For XML Parsing (SAX) 2.0
- XSLT 1.0
- Pluggability Layer
[1.4 docs]

_PACKAGE:
** javax.xml.parsers: Provides classes allowing the processing of XML documents.
** javax.xml.transform: Provides classes allowing the transformation of XML documents.
** org.w3c.dom#ql:xml'dom#:
** org.xml.sax#ql:xml'sax#:
** org.xml.sax.ext
** org.xml.sax.helpers

javax.xml.parsers

name::
* McsEngl.javax.xml.parsers@cptIt,

_DESCRIPTION:
Provides classes allowing the processing of XML documents. Two types of pluggable parsers are supported:
** SAX (Simple API for XML)
** DOM (Document Object Model)

SUMMARY:
Class Summary
** DocumentBuilder Defines the API to obtain DOM Document instances from an XML document.
** DocumentBuilderFactory Defines a factory API that enables applications to obtain a parser that produces DOM object trees from XML documents.
** SAXParser Defines the API that wraps an org.xml.sax.XMLReader implementation class.
** SAXParserFactory Defines a factory API that enables applications to configure and obtain a SAX based parser to parse XML documents.

Exception Summary
** ParserConfigurationException Indicates a serious configuration error.

Error Summary
** FactoryConfigurationError Thrown when a problem with configuration with the Parser Factories exists.

javax.xml.transform

name::
* McsEngl.javax.xml.transform@cptIt,

Class Summary
** Transform Implements a Transform based on an XSLT stylesheet.
** TransformFactory Defines a factory API that enables applications to obtain a Transform object.

jv'api.JCR

_CREATED: {2013-04-03}.

name::
* McsEngl.jv'api.JCR@cptIt,
* McsEngl.content-repository-API-for-java@cptItsoft,
* McsEngl.JCR@cptItsoft,

_DESCRIPTION:
Content Repository API for Java (JCR) is a specification for a Java platform application programming interface (API) to access content repositories in a uniform manner.[1][dead link][2][not in citation given] The content repositories are used in content management systems to keep the content data and also the metadata used in content management systems (CMS) such as versioning metadata. The specification was developed under the Java Community Process as JSR-170 (Version 1).[3][4] and as JSR-283 (version 2)[5] The main Java package is javax.jcr.
[http://en.wikipedia.org/wiki/JSR-170]

jv'api.JFC

name::
* McsEngl.jv'api.JFC@cptIt,
* McsEngl.conceptItsoft1012.11,
* McsEngl.jv'JFC@cptItsoft1012.11= Java Foundation Classes,

_DEFINITION:
* JFC is an umbrella term which represents a large collection of classes designed for building visual applications in Java, including the existing AWT, the upcoming Java2D, the new Swing set of components, and additional application framework functionality based on some of the great ideas provided in Netscape's Internet Foundation Classes (IFC) toolkit. Engineering teams from JavaSoft, Netscape, and Lighthouse Design are currently working closely together to define and develop JFC (including the Swing set of components) for release in the near future. You will see more details on the JFC in the coming months.
[http://www.javasoft.com/products/jdk/awt/swing/ 1997apr]

_STRUCTURE:
* AWT#ql:jv'awt'api_itsoft1012.13#,
* Swing-Components#cptItsoft1012.12#
* Drag-and-Drop Data Transfer
* 2D - Advanced graphics and imaging
* Accessibility API

_ADDRESS.WPG:
* HOME-PAGE: http://java.sun.com/products/jfc/index.jsp

jv'api.DRAG'AND'DROP

name::
* McsEngl.jv'api.DRAG'AND'DROP@cptIt,
* McsEngl.jv'dnd@cptIt,
* McsEngl.jv'drag'and'drop@cptIt,

_DEFINITION:
* Provides interfaces and classes for supporting drag-and-drop operations. It defines classes for the drag-source and the drop-target, as well as events for transferring the data being dragged, and giving visual feedback to the user performing the operation.
[1.2 DOCS]

SINCE:
* 1.2,

PACKAGE:
* java.awt.dnd

jv'api.LANG (since 1.0)

name::
* McsEngl.jv'api.LANG (since 1.0)@cptIt,
* McsEngl.jv'lang'api@cptIt,

_DEFINITION:
* Provides classes that are fundamental to the design of the Java programming language. The most important classes are Object, which is the root of the class hierarchy, and Class, instances of which represent classes at run time.

PACKAGE:
java.lang#ql:jv'lang'package#  Provides classes that are fundamental to the design of the Java programming language.
java.lang.annotation  Provides library support for the Java programming language annotation facility.
java.lang.instrument  Provides services that allow Java programming language agents to instrument programs running on the JVM.
java.lang.management  Provides the management interface for monitoring and management of the Java virtual machine as well as the operating system on which the Java virtual machine is running.
java.lang.ref  Provides reference-object classes, which support a limited degree of interaction with the garbage collector.
java.lang.reflect  Provides classes and interfaces for obtaining reflective information about classes and objects.

jv'api.LOGGING (since 1.4)

name::
* McsEngl.jv'api.LOGGING (since 1.4)@cptIt,
* McsEngl.conceptItsoft1012.14,
* McsEngl.jv'logging'api@cptItsoft1012.14,

_DEFINITION:
* Provides the classes and interfaces of the JavaTM 2 platform's core logging facilities. The central goal of the logging APIs is to support maintaining and servicing software at customer sites.
There are four main target uses of the logs:
Problem diagnosis by end users and system administrators. This consists of simple logging of common problems that can be fixed or tracked locally, such as running out of resources, security failures, and simple configuration errors. Problem diagnosis by field service engineers. The logging information used by field service engineers may be considerably more complex and verbose than that required by system administrators. Typically such information will require extra logging within particular subsystems. Problem diagnosis by the development organization. When a problem occurs in the field, it may be necessary to return the captured logging information to the original development team for diagnosis. This logging information may be extremely detailed and fairly inscrutable. Such information might include detailed tracing on the internal execution of particular subsystems. Problem diagnosis by developers. The Logging APIs may also be used to help debug an application under development. This may include logging information generated by the target application as well as logging information generated by lower-level libraries. Note however that while this use is perfectly reasonable, the logging APIs are not intended to replace the normal debugging and profiling tools that may already exist in the development environment.
The key elements of this package include: Logger: The main entity on which applications make logging calls. A Logger object is used to log messages for a specific system or application component. LogRecord: Used to pass logging requests between the logging framework and individual log handlers. Handler: Exports LogRecord objects to a variety of destinations including memory, output streams, consoles, files, and sockets. A variety of Handler subclasses exist for this purpose. Additional Handlers may be developed by third parties and delivered on top of the core platform. Level: Defines a set of standard logging levels that can be used to control logging output. Programs can be configured to output logging for some levels while ignoring output for others. Filter: Provides fine-grained control over what gets logged, beyond the control provided by log levels. The logging APIs support a general-purpose filter mechanism that allows application code to attach arbitrary filters to control logging output. Formatter: Provides support for formatting LogRecord objects. This package includes two formatters, SimpleFormatter and XMLFormatter, for formatting log records in plain text or XML respectively. As with Handlers, additional Formatters may be developed by third parties. The Logging APIs offer both static and dynamic configuration control. Static control enables field service staff to set up a particular configuration and then re-launch the application with the new logging settings. Dynamic control allows for updates to the logging configuration within a currently running program. The APIs also allow for logging to be enabled or disabled for different functional areas of the system. For example, a field service engineer might be interested in tracing all AWT events, but might have no interest in socket events or memory management.
[1.4 DOCS]

SINCE:
* 1.4

PACKAGE:
* java.util.logging

jv'api.MEDIA'FRAMEWORK

name::
* McsEngl.jv'api.MEDIA'FRAMEWORK@cptIt,
* McsEngl.conceptItsoft1012.3,
* McsEngl.jv'media'framework@cptItsoft1012.3,
* McsEngl.jv'jmf@cptItsoft1012.3,

_DEFINITION:
The Java Media Framework (JMF) is a higher-level API that is currently available as a Standard Extension to the Java platform. JMF specifies a unified architecture, messaging protocol, and programming interface for capturing and playing back time-based media. JMF provides a simpler solution for basic media-player application programs, and it enables synchronization between different media types, such as audio and video.
[\JAVA\JDK140\docs\guide\sound\programmer_guide\chapter1.html]

EVOLUTION:
JMF 2.0:
JMF 2.0 is the second release of the JMF API. Where JMF 1.0 and 1.1 provide a versatile player for time-based media, JMF 2.0 features media capture, streaming, transcoding, a pluggable codec architecture, and greater control over media data so that developers can make greater customizations and optimizations.
Sun and IBM worked together to define the API and release three sample implementations of JMF 2.0: one written entirely in the Java programming language, and optimized versions for Solaris/SPARC and Windows.

JMF 1.0:
The JMF API is being developed in stages. JMF 1.0, also known as the "Java Media Player", is the first release of the JMF API and concentrates on media "playback", that is the synchronization, control, processing, and presentation of compressed streaming and stored time-based media, such as audio, video and MIDI.
Sun released two reference implementations of JMF 1.0 for Windows and Solaris.

jv'PLAYER:
A Player processes an input stream of media data and renders it at a precise time. A DataSource is used to deliver the input media-stream to the Player.The rendering destination depends on the type of media being presented.
A Player does not provide any control over the processing that it performs or how it renders the media data.
[jmf2_0-guid.pdf]

jv'MEDIA'CAPTURING

name::
* McsEngl.jv'MEDIA'CAPTURING@cptIt,

You can use JMF to capture media data from a capture device such as a microphone or video camera. Captured media data can be processed and rendered or stored for future use. To capture media data, you:
1. Locate the capture device you want to use by querying the CaptureDeviceManager .
2. Get a CaptureDeviceInfo object for the device.
3. Get a MediaLocator from the CaptureDeviceInfo object and use it to create a DataSource.
4. Create a Player or Processor using the DataSource.
5. Start the Player or Processor to begin the capture process.
When you use a capture DataSource with a Player, you can only render the captured media data. To explicitly process or store the captured media data, you need to use a Processor.
[jmf2_0-guid.pdf]

jv'api.NETWORKING

name::
* McsEngl.jv'api.NETWORKING@cptIt,
* McsEngl.jv'network'programming@cptIt,
* McsEngl.jv'NETWORKING@cptIt,
* McsEngl.jv'NET@cptIt,

_PACKAGE:
* java.net Package
* javax.net Package
* javax.net.ssl Package

jv'java.net'PACKAGE

name::
* McsEngl.jv'java.net'PACKAGE@cptIt,
* McsEngl.jv'net.java@cptIt,

jv'javax.net'PACKAGE

name::
* McsEngl.jv'javax.net'PACKAGE@cptIt,
* McsEngl.jv'net.javax@cptIt,

jv'javax.net.ssl'PACKAGE

name::
* McsEngl.jv'javax.net.ssl'PACKAGE@cptIt,
* McsEngl.jv'ssl'package@cptIt,

jv'net'INTERNET'CONNECTION

name::
* McsEngl.jv'net'INTERNET'CONNECTION@cptIt,
* McsEngl.jv'internet'connection@cptIt,

remember that an Internet connection is determined uniquely by these four pieces of data:
- clientHost,
- clientPortNumber,
- serverHost, and
- serverPortNumber.
[B. ECKEL, Thinking In Java, 1998jan]

jv'net'MACHINE'IDENTIFICATION

name::
* McsEngl.jv'net'MACHINE'IDENTIFICATION@cptIt,
* McsEngl.jv'MACHINE'IDENTIFICATION@cptIt,

This is accomplished with the IP (Internet Protocol) address that can exist in two forms:
1. The familiar DNS (Domain Name Service) form. My domain name is bruceeckel.com, so suppose I have a computer called Opus in my domain. Its domain name would be Opus.bruceeckel.com. This is exactly the kind of name that you use when you send email to people, and is often incorporated into a World-Wide-Web address.
2. Alternatively, you can use the “dotted quad” form, which is four numbers separated by dots, such as 123.255.28.120.
In both cases, the IP address is represented internally as a 32-bit number 1 (so each of the quad numbers cannot exceed 255), and you can get a special Java object to represent this number from either of the forms above by using the static InetAddress.getByName( ) method that’s in java.net.
...
consider what happens if you have a dial-up Internet service provider (ISP). Each time you dial up, you are assigned a temporary IP address. But while you’re connected, your IP address has the same validity as any other IP address on the Internet. If someone connects to your machine using your IP address then they can connect to a Web server or FTP server that you have running on your machine.
[B. ECKEL, Thinking In Java, 1998jan]

Testing programs without a network
For many reasons, you might not have a client machine, a server machine, and a network available to test your programs. You might be performing exercises in a classroom situation, or you could be writing programs that aren’t yet stable enough to put onto the network.
The creators of the Internet Protocol were aware of this issue, and they created a special address called localhost to be the “local loopback” IP address for testing without a network.
The generic way to produce this address in Java is:
InetAddress addr = InetAddress.getByName(null);
If you hand getByName( ) a null, it defaults to using the localhost. The InetAddress is what you use to refer to the particular machine, and you must produce this before you can go any further. You can’t manipulate the contents of an InetAddress (but you can print them out, as you’ll see in the next example). The only way you can create an InetAddress is through one of that class’s static member methods getByName( ) (which is what you’ll usually use), getAllByName( ), or getLocalHost( ).
You can also produce the local loopback address by handing it the string localhost: InetAddress.getByName("localhost");
or by using its dotted quad form to name the reserved IP number for the loopback: InetAddress.getByName("127.0.0.1");
All three forms produce the same result.
[B. ECKEL, Thinking In Java, 1998jan]

jv'net'PORT

name::
* McsEngl.jv'net'PORT@cptIt,
* McsEngl.jv'PORT@cptIt,

An IP address isn’t enough to identify a unique server, since many servers can exist on one machine. Each IP machine also contains ports, and when you’re setting up a client or a server you must choose a port where both client and server agree to connect; if you’re meeting someone, the IP address is the neighborhood and the port is the bar.
The port is not a physical location in a machine, but a software abstraction (mainly for bookkeeping purposes). The client program knows how to connect to the machine via its IP address, but how does it connect to a desired service (potentially one of many on that machine)? That’s where the port numbers come in as second level of addressing. The idea is that if you ask for a particular port, you’re requesting the service that’s associated with the port number. The time of day is a simple example of a service. Typically, each service is associated with a unique port number on a given server machine. It’s up to the client to know ahead of time which port number the desired service is running on.
The system services reserve the use of ports 1 through 1024, so you shouldn’t use those or any other port that you know to be in use. The first choice for examples in this book will be port 8080 (in memory of the venerable old 8-bit Intel 8080 chip in my first computer, a CP/M machine).
[B. ECKEL, Thinking In Java, 1998jan]

jv'net'SERVER

name::
* McsEngl.jv'net'SERVER@cptIt,
* McsEngl.jv'SERVER@cptIt,

The machine that “stays in one place” is called the server, and the one that seeks is called the client. This distinction is important only while the client is trying to connect to the server.
Once they’ve connected, it becomes a two-way communication process and it doesn’t matter anymore that one happened to take the role of server and the other happened to take the role of the client.
So the job of the server is to listen for a connection, and that’s performed by the special server object that you create. The job of the client is to try to make a connection to a server, and this is performed by the special client object you create. Once the connection is made, you’ll see that at both server and client ends, the connection is just magically turned into an IO stream object, and from then on you can treat the connection as if you were reading from and writing to a file. Thus, after the connection is made you will just use the familiar IO commands from Chapter 10. This is one of the nice features of Java networking.
[B. ECKEL, Thinking In Java, 1998jan]

jv'net'SERVLET

name::
* McsEngl.jv'net'SERVLET@cptIt,
* McsEngl.jv'servlet@cptIt,

Servlets are a means of extending the functionality of servers. For example, servlets can extend a web server's functionality in the same way that CGI scripts do. Servlets, however, are much less resource intensive than CGI scripts. Because servlets are written entirely in Java, again unlike CGI scripts, they are cross-platform as well.
[JDK1.2B2]

jv'net'SOCKET

name::
* McsEngl.jv'net'SOCKET@cptIt,
* McsEngl.jv'SOCKET@cptIt,

The socket is the software abstraction used to represent the “terminals” of a connection between two machines. For a given connection, there’s a socket on each machine, and you can imagine a hypothetical “cable” running between the two machines, with each end of the “cable” plugged into a socket. Of course, the physical hardware and cabling between machines is completely unknown. The whole point of the abstraction is that we don’t have to know more than is necessary.
[B. ECKEL, Thinking In Java, 1997aug18, 490]

jv'api.OBJECT'SERIALIZATION

name::
* McsEngl.jv'api.OBJECT'SERIALIZATION@cptIt,

its main persistence mechanism, and that mechanism has been designed to work well with beans.

jv'api.RMI

name::
* McsEngl.jv'api.RMI@cptIt,
* McsEngl.jv'RMI@cptIt,
* McsEngl.jv'Remote'Method'Invocation@cptIt,

_DEFINITION:
* RMI is a JAVA-API#ql:jv'api#.

* RMI - Summary
•Pure Java object model
•Pass arbitrary objects and graphs
•Pass behavior
•Dynamic stub and class loading
•Java safety and security
[http://chatsubo.javasoft.com/arnold/JSE_Overview/JSE_Overview.fm20.html]

PACKAGE: java.rmi

INTERFACES:
Remote

CLASSES
Naming
RMISecurityManager

EXCEPTIONS
AccessException
AlreadyBoundException
ConnectException
ConnectIOException
MarshalException
NoSuchObjectException
NotBoundException
RMISecurityException
RemoteException
ServerError
ServerException
ServerRuntimeException
StubNotFoundException
UnexpectedException
UnknownHostException
UnmarshalException

jv'api.SECURITY

name::
* McsEngl.jv'api.SECURITY@cptIt,
* McsEngl.jv'SECURITY'API@cptIt,

_DEFINITION:
The Java Security API#ql:jv'api1.1# is designed to allow developers to incorporate both low-level and high-level security functionality into their Java applications. The first release of Java Security in JDK 1.1 contains a subset of this functionality, including APIs for digital signatures and message digests. In addition, there are abstract interfaces for key management, certificate management and access control. Specific APIs to support X.509 v3 certificates and other certificate formats, and richer functionality in the area of access control, will follow in subsequent JDK releases.
JDK 1.1 also provides a tool that can sign Java ARchive (JAR) files, which can contain classes and other data (such as images and sounds). The appletviewer allows any downloaded applets in JAR files signed (using the tool) by a trusted entity to run with the same full rights as local applications. That is, such applets are not subject to the "sandbox" restrictions of the original Java security model. Later releases will provide more sophisticated security policies, including greater granularity in the allowable trust levels.
[JavaSoft tutorial 1997jul08]

jv'api.SOUND (since 1.3)

name::
* McsEngl.jv'api.SOUND (since 1.3)@cptIt,
* McsEngl.conceptItsoft1012.4,
* McsEngl.jv'sound@cptItsoft1012.4,
* McsEngl.java'sound'api@cptItsoft1012.4,

_DEFINITION:
The JavaTM 2 Platform includes a powerful API for capturing, processing, and playing back audio and MIDI (Musical Intstrument Digital Interface) data. This API is supported by an efficient sound engine which guarantees high-quality audio mixing and MIDI synthesis capabilities for the platform.
The provided reference implementation of this API supports the following features:
-- Audio file formats: AIFF, AU and WAV
-- Music file formats: MIDI Type 0, MIDI Type 1, and Rich Music Format (RMF)
-- Sound formats: 8- and 16-bit audio data, in mono and stereo, with sample rates from 8 kHz to 48 kHz
-- Linear, a-law, and mu-law encoded data in any of the supported audio file formats
-- MIDI wavetable synthesis and sequencing in software, and access to hardware MIDI devices
-- An all-software mixer that can mix and render up to 64 total channels of digital audio and synthesized MIDI music.
The above list describes the reference implementation, not the API itself. The API permits flexible configuration of the audio and MIDI system, including ways for applications to ask the system exactly what resources are installed and available.
[1.4.0 docs]

_GENERIC
* digital-sound#ql:[Level CONCEPT:rl? conceptIt550]##cptIt550#

_ADDRESS.WPG:
* HTML-PROGRAMER'S-GUIDE 140#pl:\JAVA\DOCS\140\guide\sound\programmer_guide\contents.html#:

_PACKAGES:
* javax.sound.midi  Provides interfaces and classes for I/O, sequencing, and synthesis of MIDI (Musical Instrument Digital Interface) data.
* javax.sound.midi.spi  Supplies interfaces for service providers to implement when offering new MIDI devices, MIDI file readers and writers, or sound bank readers.
* javax.sound.sampled  Provides interfaces and classes for capture, processing, and playback of sampled audio data.
* javax.sound.sampled.spi#ql:jv'package.spi.sampled.sound.javax#  Supplies abstract classes for service providers to subclass when offering new audio devices, sound file readers and writers, or audio format converters.

jv'sound'FORMATED'AUDIO'DATA

name::
* McsEngl.jv'sound'FORMATED'AUDIO'DATA@cptIt,
* McsEngl.jv'sampled'audio@cptIt,
* McsEngl.jv'digital'audio'data@cptIt,

The accuracy of the digital approximation of the analog signal depends on its
- resolution in time (the sampling rate) and
- its quantization, or resolution in amplitude (the number of bits used to represent each sample).
As a point of reference, the audio recorded for storage on compact discs is sampled 44,100 times per second and represented with 16 bits per sample.

The term "sampled audio" is used here slightly loosely. A sound wave could be sampled at discrete intervals while being left in an analog form. For purposes of the Java Sound API, however, "sampled audio" is equivalent to "digital audio." Typically, sampled audio on a computer comes from a sound recording, but the sound could instead be synthetically generated (for example, to create the sounds of a touch-tone telephone). The term "sampled audio" refers to the type of data, not its origin.
[1.4.0 docs]

jv'sound'DATA'FORMAT

name::
* McsEngl.jv'sound'DATA'FORMAT@cptIt,
* McsEngl.jv'sound'encoding@cptIt,

_DEFINITION:
Formatted audio data refers to sound in any of a number of standard formats. The Java Sound API distinguishes between data formats and file formats.
Data Formats:
A data format tells you how to interpret a series of bytes of "raw" sampled audio data, such as samples that have already been read from a sound file, or samples that have been captured from the microphone input.
In the Java Sound API, a data format is represented by an AudioFormat object, which includes the following attributes:
- Encoding technique, usually pulse code modulation (PCM)
- Number of channels (1 for mono, 2 for stereo, etc.)
- Sample rate (number of samples per second, per channel)
- Number of bits per sample (per channel)
- Frame rate
- Frame size in bytes
- Byte order (big-endian or little-endian)
[1.4.0 docs]

jv'sound'FRAME:
A frame contains the data for all channels at a particular time. For PCM-encoded data, the frame is simply the set of simultaneous samples in all channels, for a given instant in time, without any additional information. In this case, the frame rate is equal to the sample rate, and the frame size in bytes is the number of channels multiplied by the sample size in bits, divided by the number of bits in a byte.
For other kinds of encodings, a frame might contain additional information besides the samples, and the frame rate might be completely different from the sample rate. For example, consider the MP3 (MPEG-1 Audio Layer 3) encoding, which is not explicitly mentioned in the current version of the Java Sound API, but which could be supported by an implementation of the Java Sound API or by a third-party service provider. In MP3, each frame contains a bundle of compressed data for a series of samples, not just one sample per channel. Because each frame encapsulates a whole series of samples, the frame rate is slower than the sample rate. The frame also contains a header. Despite the header, the frame size in bytes is less than the size in bytes of the equivalent number of PCM frames. (After all, the purpose of MP3 is to be more compact than PCM data.) For such an encoding, the sample rate and sample size refer to the PCM data that the encoded sound will eventually be converted into before being delivered to a digital-to-analog converter (DAC).
[jdk 140]

jv'sound'FILE'AUDIOFORMAT

name::
* McsEngl.jv'sound'FILE'AUDIOFORMAT@cptIt,

A file format specifies the structure of a sound file, including not only the format of the raw audio data in the file, but also other information that can be stored in the file. Sound files come in various standard varieties, such as WAVE (also known as WAV, and often associated with PCs), AIFF (often associated with Macintoshes), and AU (often associated with UNIX systems). The different types of sound file have different structures. For example, they might have a different arrangement of data in the file's "header." A header contains descriptive information that typically precedes the file's actual audio samples, although some file formats allow successive "chunks" of descriptive and audio data. The header includes a specification of the data format that was used for storing the audio in the sound file. Any of these types of sound file can contain various data formats (although usually there is only one data format within a given file), and the same data format can be used in files that have different file formats.
In the Java Sound API, a file format is represented by an AudioFileFormat object, which contains:
- The file type (WAVE, AIFF, etc.)
- The file's length in bytes
- The length, in frames, of the audio data contained in the file
- An AudioFormat object that specifies the data format of the audio data contained in the file.

jv'sound'MIDI

name::
* McsEngl.jv'sound'MIDI@cptIt,
* McsEngl.jv'midi'sound@cptIt,
* McsEngl.jv'midi'data@cptIt,
* McsEngl.jv'midi'audio@cptIt,
* McsEngl.jv'Musical'Intstrument'Digital'Interface@cptIt,

_DEFINITION:
Whereas sampled-audio is a direct representation of a sound itself, MIDI-data can be thought of as a recipe for creating a sound, especially a musical-sound. MIDI data, unlike audio data, does not describe sound directly. Instead, it describes events that affect the sound a synthesizer is making. MIDI data is analogous to a graphical user interface's keyboard and mouse events. In the case of MIDI, the events can be thought of as actions upon a musical keyboard, along with actions on various pedals, sliders, switches, and knobs on that musical instrument. These events need not actually originate with a hardware musical instrument; they can be simulated in software, and they can be stored in MIDI files. A program that can create, edit, and perform these files is called a sequencer. Many computer sound-cards include MIDI-controllable music synthesizer chips to which sequencers can send their MIDI events. Synthesizers can also be implemented entirely in software. The synthesizers interpret the MIDI events that they receive and produce audio output. Usually the sound synthesized from MIDI data is musical sound (as opposed to speech, for example). MIDI synthesizers are also capable of generating various kinds of sound effects.
[1.4.0 docs]

jv'SEQUENCER:
A sequencer is a software or hardware device that can read a sequence and deliver the MIDI messages contained in it at the right time. A sequencer is a bit like an orchestra conductor: it has the information for all the notes, including their timings, and it tells some other entity when to perform the notes.
[\JAVA\JDK140\docs\guide\sound\programmer_guide\chapter8.html]

In the world of MIDI, a sequencer is any hardware or software device that can precisely play or record a sequence of time-stamped MIDI messages. Similarly, in the JavaTM Sound API, the Sequencer abstract interface defines the properties of an object that can play and record Sequences of MidiEvent objects.
...To develop an intuitive understanding of what a Sequencer is, think of it by analogy with a tape recorder, which a sequencer resembles in many respects. Whereas a tape recorder plays audio, a sequencer plays MIDI data. A sequence is a multi-track, linear, time-ordered recording of MIDI musical data, which a sequencer can play at various speeds, rewind, shuttle to particular points, record into, or copy to a file for storage.
[\JAVA\JDK140\docs\guide\sound\programmer_guide\chapter11.html]

jv'sound'CAPTURING

name::
* McsEngl.jv'sound'CAPTURING@cptIt,
* McsEngl.jv'audio'capture@cptIt,
* McsEngl.jv'sound'recording@cptIt,

_DEFINITION:
Capturing refers to the process of obtaining a signal from outside the computer. A common application of audio capture is recording, such as recording the microphone input to a sound file. However, capturing isn't synonymous with recording, because recording implies that the application always saves the sound data that's coming in. An application that captures audio doesn't necessarily store the audio. Instead it might do something with the data as it's coming in—such as transcribe speech into text—but then discard each buffer of audio as soon as it's finished with that buffer.
[\JAVA\JDK140\docs\guide\sound\programmer_guide\chapter5.html]

_STRUCTURE:
a typical audio-input system in an implementation of the JavaTM Sound API consists of:
1. An input port#ql:jv'port'interface#, such as a microphone port or a line-in port, which feeds its incoming audio data into:
2. A mixer#ql:jv'mixer'interface#, which places the input data in:
3. One or more target-data-lines#ql:jv'targetdataline'interface#, from which an application can retrieve the data.

_ALGORITHM:
AudioFormat format = AudioFormat#ql:jv'audioformat'class# (float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian) Constructs an AudioFormat with a linear PCM encoding,
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);

// get and open the target data line for capture.
try {
 TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);
 line.open(format, line.getBufferSize());  
}  catch (LineUnavailableException ex) {shutDown("Unable to open the line: " + ex); return;      }
 catch (SecurityException ex) { shutDown(ex.toString());  return;      }
 catch (Exception ex) {  shutDown(ex.toString());        return;      }


// play back the captured audio data
ByteArrayOutputStream out = new ByteArrayOutputStream();
int frameSizeInBytes = format.getFrameSize();
int bufferLengthInFrames = line.getBufferSize() / 8;
int bufferLengthInBytes = bufferLengthInFrames * frameSizeInBytes;
byte[] data = new byte[bufferLengthInBytes];
int numBytesRead;
line.start();
while (thread != null)      {
 if ((numBytesRead = line.read(data, 0, bufferLengthInBytes)) == -1)
   {        break;        }    
 out.write(data, 0, numBytesRead);      }
// we reached the end of the stream. stop and close the line.
line.stop();      
line.close();      
line = null;
// stop and close the output stream
try  {        out.flush();        out.close();      }
catch (IOException ex)      {        ex.printStackTrace();    }

// load bytes into the audio input stream for playback
byte audioBytes[] = out.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(audioBytes);
AudioInputStream audioInputStream = new AudioInputStream(bais, format, audioBytes.length / frameSizeInBytes);
long milliseconds = (long)((audioInputStream.getFrameLength() * 1000) / format.getFrameRate());
double duration = milliseconds / 1000.0;

jv'sound'PROCESSING

name::
* McsEngl.jv'sound'PROCESSING@cptIt,
* McsEngl.jv'singal'processing@cptIt,
* McsEngl.jv'DSP@cptIt,
* McsEngl.jv'audio'DSP@cptIt,

The Java Sound API specifies the following abstract subclasses of Control:

* BooleanControl—represents a binary-state (true or false) control. For example, mute, solo, and on/off switches would be good candidates for BooleanControls.

* FloatControl—data model providing control over a range of floating-point values. For example, volume and pan are FloatControls that could be manipulated via a dial or slider.

* EnumControl—offers a choice from a set of objects. For example, you might associate a set of buttons in the user interface with an EnumControl to select one of several preset reverberation settings.

* CompoundControl—provides access to a collection of related items, each of which is itself an instance of a Control subclass. CompoundControls represent multi-control modules such as graphic equalizers. (A graphic equalizer would typically be depicted by a set of sliders, each affecting a FloatControl.)

_SPESIFEPTO:
There are two ways to apply signal processing:
* You can use any processing supported by the mixer or its component lines, by querying for Control objects and then setting the controls as the user desires. Typical controls supported by mixers#ql:jv'mixer'interface# and lines#ql:jv'line'interface# include gain, pan, and reverberation controls.
* If the kind of processing you need isn't provided by the mixer or its lines, your program can operate directly on the audio bytes, manipulating them as desired.
[\JAVA\JDK140\docs\guide\sound\programmer_guide\chapter6.html]

Manipulating the Audio Data Directly

The Control API allows an implementation of the Java Sound API, or a third-party provider of a mixer, to supply arbitrary sorts of signal processing through controls. But what if no mixer offers the kind of signal processing you need? It will take more work, but you might be able to implement the signal processing in your program. Because the Java Sound API gives you access the audio data as an array of bytes, you can alter these bytes in any way you choose.

If you're processing incoming sound, you can read the bytes from a TargetDataLine and then manipulate them. An algorithmically trivial example that can yield sonically intriguing results is to play a sound backwards by arranging its frames in reverse order. This trivial example may not be of much use for your program, but there are numerous sophisticated digital signal processing (DSP) techniques that might be more appropriate. Some examples are equalization, dynamic-range compression, peak limiting, and time stretching or compression, as well as special effects such as delay, chorus, flanging, distortion, and so on.
[\JAVA\JDK140\docs\guide\sound\programmer_guide\chapter6.html]

jv'sound'PLAYBACK

name::
* McsEngl.jv'sound'PLAYBACK@cptIt,
* McsEngl.jv'rendering@cptIt,
* McsEngl.jv'presentation'audio@cptIt,

_DESCRIPTION:
Playback is sometimes referred to as presentation or rendering. These are general terms that are applicable to other kinds of media besides sound.
[\JAVA\JDK140\docs\guide\sound\programmer_guide\chapter4.html]

To play back processed sound, you can place your manipulated array of bytes into a SourceDataLine#ql:jv'sourcedataline'interface# or Clip#ql:jv'clip'interface#.

jv'sound'Service'Provider'Interfaces

name::
* McsEngl.jv'sound'Service'Provider'Interfaces@cptIt,

The javax.sound.sampled.spi and javax.sound.midi.spi packages contain APIs that let software developers create new audio or MIDI resources that can be provided separately to the user and "plugged in" to an existing implementation of the Java Sound API. Here are some examples of services (resources) that can be added in this way:
An audio mixer A MIDI synthesizer A file parser that can read or write a new type of audio or MIDI file A converter that translates between different sound data formats
In some cases, services are software interfaces to the capabilities of hardware devices, such as sound cards, and the service provider might be the same as the vendor of the hardware. In other cases, the services exist purely in software. For example, a synthesizer or a mixer could be an interface to a chip on a sound card, or it could be implemented without any hardware support at all.
An implementation of the Java Sound API contains a basic set of services, but the service provider interface (SPI) packages allow third parties to create new services. These third-party services are integrated into the system in the same way as the built-in services. The AudioSystem class in the sampled package and the MidiSystem class in the midi package act as coordinators that let application programs access the services explicitly or implicitly. Often the existence of a service is completely transparent to an application program that uses it. The service-provider mechanism benefits users of application programs based on the Java Sound API, because new sound features can be added to a program without requiring a new release of the Java SDK or runtime environment, and, in many cases, without even requiring a new release of the application program itself.
[1.4.0 docs]

jv'api.SPEECH

name::
* McsEngl.jv'api.SPEECH@cptIt,
* McsEngl.jv'jsapi@cptIt,
* McsEngl.jv'speech'api@cptIt,

JSAPI1
JSAPI2

Major Changes from JSAPI 1

* Compatibility with JSAPI 1.0 maintained where possible and desirable.
* Primarily aimed at J2ME, runs on J2SE as well.
* Designed for CLDC 1.0 and MIDP 1.0 and above.
* All use of floating point has been removed.
* No dependence on AWT.
* Integration with Event Queues via SpeechEventExecutor.
* Uses getResourceAsStream to find engines.
* Uses of URL class replaced by string.
* Need for StringReader eliminated.
* Dictation has been removed, but can be added in the future.
* Supports W3C SRGS recognition markup rather than JSGF.
* Supports W3C SSML synthesis markup rather than JSML.
* Markup-specific prefixes/suffixes removed from Class/Interface/Method names.
* References to "vendor" removed from Class/Interface/Method names.
* Event masks added to filter events.
* Includes a full-fledged AudioManager compatible with JSR-135.
* AudioSegment class introduced to contain audio data.
* The Word class now supports specification of audio for use with recognition and synthesis.
* Clearer delineation between engine implementations and instances.
* Support for priorities.
* Support for trusted vs. untrusted applications.
* More complete support for "built-in" grammars.
* Recognition result confidence added.
* Support for Synthesizer focus
* Includes a building block for java.beans compatibility.
* Includes a building block for Locale compatibility.
* Includes building blocks for EventObject and EventListener.

jv'api.SWING

name::
* McsEngl.jv'api.SWING@cptIt,
* McsEngl.conceptItsoft1012.12,
* McsEngl.jv'swing'api@cptItsoft1012.12,

_DEFINITION:
* remember that Swing is just a small part of the Java Foundation Classes (JFC). Other new parts of JFC include the Accessibility API, Java2D API, Drag and Drop (Glasgow/Beans), and various application services (Undo, Custom Cursors, Keyboard Navigation).
[jdc 1997dec]

* "Swing" is a project name which represents a new set of GUI components being developed by JavaSoft which are implemented 100% in common Java code and are based on the Lightweight UI Framework introduced in the JDK1.1. This new set of components will include both 100%-Java versions of the existing AWT component set (Button, Scrollbar, List, etc.) and will also include a rich set of higher level components (TreeView, ListView, TabbedFolder, etc..).
[http://www.javasoft.com/products/jdk/awt/swing/ 1997apr]

* Project Swing is the part of the JavaTM Foundation Classes (JFC) software that implements a set of GUI components with a pluggable look and feel. Project Swing is implemented entirely in the Java programming language, and is based on the JDKTM 1.1 Lightweight UI Framework. The pluggable look and feel lets you design a single set of GUI components that can automatically have the look and feel of any OS platform (Microsoft Windows, SolarisTM, Macintosh). Project Swing components include both 100% Pure JavaTM certified versions of the existing AWT component set (Button, Scrollbar, Label, etc.), plus a rich set of higher-level components (such as tree view, list box, and tabbed panes).

_WHOLE:
* JFC#cptItsoft1012-11#

_SINCE:
* 1.2

_PACKAGE:
* javax.swing
* javax.swing.border
* javax.swing.colorchooser
* javax.swing.event
* javax.swing.filechooser
* javax.swing.plaf
* javax.swing.plaf.basic
* javax.swing.plaf.metal
* javax.swing.plaf.multi
* javax.swing.table
* javax.swing.text
* javax.swing.text.html
* javax.swing.text.html.parser
* javax.swing.text.rtf
* javax.swing.tree
* javax.swing.undo

jv'swing'thread:
Swing applications have three types of threads:
* An initial thread
* A UI event dispatch thread (EDT)
* Worker threads
[http://java.sun.com/developer/technicalArticles/javase/swingworker/]

jv'api.TEXT (javax.swing.text)

name::
* McsEngl.jv'api.TEXT (javax.swing.text)@cptIt,
* McsEngl.jv'text-package-1012i@cptIt,

jv'DefaultStyledDocument

name::
* McsEngl.jv'DefaultStyledDocument@cptIt,

public class DefaultStyledDocument
extends AbstractDocument
implements StyledDocument

jv'api.UTIL

name::
* McsEngl.jv'api.UTIL@cptIt,
* McsEngl.jv'util'api@cptIt,

PACKAGE:
java.util#ql:jv'util'package#  Contains the collections framework, legacy collection classes, event model, date and time facilities, internationalization, and miscellaneous utility classes (a string tokenizer, a random-number generator, and a bit array).
java.util.concurrent  Utility classes commonly useful in concurrent programming.
java.util.concurrent.atomic  A small toolkit of classes that support lock-free thread-safe programming on single variables.
java.util.concurrent.locks  Interfaces and classes providing a framework for locking and waiting for conditions that is distinct from built-in synchronization and monitors.
java.util.jar  Provides classes for reading and writing the JAR (Java ARchive) file format, which is based on the standard ZIP file format with an optional manifest file.
java.util.logging  Provides the classes and interfaces of the JavaTM 2 platform's core logging facilities.
java.util.prefs  This package allows applications to store and retrieve user and system preference and configuration data.
java.util.regex#ql:jv'regex'package#  Classes for matching character sequences against patterns specified by regular expressions.
java.util.zip  Provides classes for reading and writing the standard ZIP and GZIP file formats.

jv'api.POI

name::
* McsEngl.jv'api.POI@cptIt,

The Apache Jakarta Project has released POI 3.6, an open source Java library "for reading and writing Microsoft Office file formats, such as Excel, PowerPoint, Visio and Word." Version 3.6 focuses on improving performance and reucing memory usage.
[http://www.cafeaulait.org/]

jv'codeSrc.BEAN

name::
* McsEngl.jv'codeSrc.BEAN@cptIt,

_DESCRIPTION:
In visual-application-builder-environments Beans are sometimes referred to as reusable software components, or custom controls.
[Java Tutorial {1997-03-03}]

_DEFINITION:
** A Bean is a Java-class#ql:jv'class# which adheres to certain property and event interface conventions.
[BDK 1997feb17]

** A Java Bean is a reusable software component that can be visually manipulated in builder tools.
[Java Tutorial {1997-03-03}]

** Bean: An Object that knows about its own properties (can introspect) and has several other capabilities. Any Java Object can be a Bean but some Objects have more Bean functionality.
[ChiMu Java Guidelines 1998feb28]

** Beans are to Java what
- OCX/ActiveX objects are to OLE and
- Live Objects are to OpenDoc.
Some Beans are visual components that you add to forms in visual-development tools; other Beans are faceless objects that do something in the background.

JavaSoft defines a Bean as any Java object that implements at least one of these features.
-- Introspection/reflection lets a Bean expose its data structures to other programs and to programmers. For example, a development tool could have an object inspector that lets a programmer examine a Bean's methods, instance variables, properties, and interfaces.
-- A new event mechanism streamlines event handling and works with AWT components. (Java still supports the existing handleEvents() method for backward compatibility.) Because the new model uses less indirection and is more strongly typed, it's much more efficient, especially for high-frequency events like mouse movements.
- Serialization/persistence lets Beans permanently remember changes to their properties. Currently, objects always revert to their default properties.
-- Interoperability lets Beans work anyplace where ActiveX objects or Live Objects can work. You could use a Bean with Visual Basic or in an OpenDoc container such as ClarisWorks. The bridging technology does practically all the work, so Bean authors have to write little or no code to get OLE and OpenDoc compatibility. JavaSoft already has some existing Java applets working with Visual Basic.
[BYTE 1997jan]

Beans v. Class Libraries
Not all useful software modules should necessarily turn into beans. Beans are appropriate for software components that can be visually manipulated and customized to achieve some effect. Class libraries are an appropriate way of providing functionality that is useful to programmers, but which doesn't benefit from visual manipulation.
[BEANS SPEC 1996december4]

The three most important features of a Java Bean are
- the set of properties it exposes,
- the set of methods it allows other components to call, and
- the set of events it fires.
[BEANS SPEC 1996december4]

IMPORTANCE:
[bean technology] is fundamental for the creation of Rapid-Application Development (RAD) program-building tools.
[B. ECKEL, Thinking In Java, 1997aug18, Preface]

jv'BEAN'CLASSES

name::
* McsEngl.jv'BEAN'CLASSES@cptIt,

jv'BeanDescriptor#ql:java.beans.BeanDescriptor rl3#

name::
* McsEngl.jv'BeanDescriptor@cptIt,

A BeanDescriptor provides global information about a "bean", including its Java class, its displayName, etc.
This is one of the kinds of descriptor returned by a BeanInfo object, which also returns descriptors for properties, method, and events.

jv'Beans#ql:java.beans.Beans rl3#

name::
* McsEngl.jv'Beans@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.beans#.

PACKAGE: java.beans#ql:package.java.beans#.

SUPERCLASS: java.lang.Object.

METHODS:
** Beans():
** (stat) getInstanceOf(java.lang.Object, java.lang.Class): From a given bean, obtain an object representing a specified type view of that source object.
** (stat) instantiate(java.lang.ClassLoader, java.lang.String): Instantiate a bean.
** (stat) isDesignTime(): Test if we are in design-mode.
** (stat) isGuiAvailable():
** (stat) isInstanceOf(java.lang.Object, java.lang.Class): Check if a bean can be viewed as a given target type.
** (stat) setDesignTime(boolean): Used to indicate whether of not we are running in an application builder environment.
** (stat) setGuiAvailable(boolean): Used to indicate whether of not we are running in an environment where GUI interaction is available.

jv'EventSetDescriptor#ql:java.beans.EventSetDescriptor rl3#

name::
* McsEngl.jv'EventSetDescriptor@cptIt,

jv'FeatureDescriptor#ql:java.beans.FeatureDescriptor rl3#

name::
* McsEngl.jv'FeatureDescriptor@cptIt,

jv'IndexedPropertyDescriptor#ql:java.beans.IndexedPropertyDescriptor rl3#

name::
* McsEngl.jv'IndexedPropertyDescriptor@cptIt,

jv'Introspector#ql:java.beans.Introspector rl3#

name::
* McsEngl.jv'Introspector@cptIt,

jv'MethodDescriptor#ql:java.beans.MethodDescriptor rl3#

name::
* McsEngl.jv'MethodDescriptor@cptIt,

jv'ParameterDescriptor#ql:java.beans.ParameterDescriptor rl3#

name::
* McsEngl.jv'ParameterDescriptor@cptIt,

jv'PropertyChangeEvent#ql:java.beans.PropertyChangeEvent rl3#

name::
* McsEngl.jv'PropertyChangeEvent@cptIt,

jv'PropertyChangeSupport#ql:java.beans.PropertyChangeSupport rl3#

name::
* McsEngl.jv'PropertyChangeSupport@cptIt,

jv'PropertyDescriptor#ql:java.beans.PropertyDescriptor rl3#

name::
* McsEngl.jv'PropertyDescriptor@cptIt,

jv'PropertyEditorManager#ql:java.beans.PropertyEditorManager rl3#

name::
* McsEngl.jv'PropertyEditorManager@cptIt,

jv'PropertyEditorSupport#ql:java.beans.PropertyEditorSupport rl3#

name::
* McsEngl.jv'PropertyEditorSupport@cptIt,

jv'SimpleBeanInfo#ql:java.beans.SimpleBeanInfo rl3#

name::
* McsEngl.jv'SimpleBeanInfo@cptIt,

jv'VetoableChangeSupport#ql:java.beans.VetoableChangeSupport rl3#

name::
* McsEngl.jv'VetoableChangeSupport@cptIt,

jv'BEAN'EVENT

name::
* McsEngl.jv'BEAN'EVENT@cptIt,

Events provide a way for one component to notify other components that something interesting has happened. Under the new AWT event model an event listener object can be registered with an event source. When the event source detects that something interesting happens it will call an appropriate method on the event lis-tener object.
[BEAN SPEC 1996dec04]

EXAMPLE#ql:jv'ex.bean#.

jv'BEAN'EXCEPTIONS

name::
* McsEngl.jv'BEAN'EXCEPTIONS@cptIt,


jv'IntrospectionException#ql:java.beans.IntrospectionException rl3###
jv'PropertyVetoException#ql:java.beans.PropertyVetoException rl3###

jv'BEAN'Instatiation

name::
* McsEngl.jv'BEAN'Instatiation@cptIt,

A bean must be instantiated in one of two different ways, depending on whether it provides a serialized prototype object or not.

Non-serialized beans may be instantiated by simply using “new” as for normal classes: JellyBean fred = new JellyBean();

If a bean provides a serialized template, then it must be instantiated by opening the resource file associated with the serialized state and reading in the serialized object. To make this more convenient we provide a utility method java.beans.Beans.instantiate that can read in a serialized object from a named resource file at a target class loader:
ClassLoader cl = Class.forName(“acme.widgets.Foo”).getClassLoader();
MutantWombat w = (MutantWombat) Beans.instantiate(cl, “/acme/widgets/PurpleMutantWombat.ser”);
[BEAN SPEC 1996dec04]

jv'BEAN'INTERFACES

name::
* McsEngl.jv'BEAN'INTERFACES@cptIt,

jv'BeanInfo#ql:java.beans.BeanInfo rl3#

name::
* McsEngl.jv'BeanInfo@cptIt,

BeanInfo interface provides METHODS for learning about the events, properties, methods and global information about a target bean.

jv'Customizer#ql:java.beans.Customizer rl3#

name::
* McsEngl.jv'Customizer@cptIt,

jv'PropertyChangeListener#ql:java.beans.PropertyChangeListener rl3#

name::
* McsEngl.jv'PropertyChangeListener@cptIt,

jv'PropertyEditor#ql:java.beans.PropertyEditor rl3#

name::
* McsEngl.jv'PropertyEditor@cptIt,

jv'VetoableChangeListener#ql:java.beans.VetoableChangeListener rl3#

name::
* McsEngl.jv'VetoableChangeListener@cptIt,

jv'Visibility#ql:java.beans.Visibility rl3#

name::
* McsEngl.jv'Visibility@cptIt,

jv'BEAN'METHOD

name::
* McsEngl.jv'BEAN'METHOD@cptIt,

The methods a Java Bean exports are just normal Java methods which can be called from other components or from a scripting environment. By default all of a bean’s public methods will be exported, but a bean can choose to export only a subset of its public methods.
[BEAN SPEC 1996dec04]

jv'BEAN'PROPERTY

name::
* McsEngl.jv'BEAN'PROPERTY@cptIt,

Basically properties are named-attributes associated with a bean that can be read or written by calling appropriate methods on the bean. Thus for example, a bean might have a “foreground” property that represents its foreground color. This property might be read by calling a “Color getForeground()” method and updated by calling a “void setForeground(Color c)” method.
[BEAN SPEC 1996dec04]

jv'BEAN'PROPERTY'accessor'methods

name::
* McsEngl.jv'BEAN'PROPERTY'accessor'methods@cptIt,

Properties are ALWAYS accessed via method colls on their owning object.
For simple properties the accessor type signatures are:
 void setFoo(PropertyType value); // simple setter
 PropertyType getFoo(); // simple getter
[BEAN SPEC 1996dec04]

jv'BEAN'PROPERTY'type

name::
* McsEngl.jv'BEAN'PROPERTY'type@cptIt,

jv'BEAN'PROPERTY'value

name::
* McsEngl.jv'BEAN'PROPERTY'value@cptIt,

For readable properties there will be a getter method to read the PROPERTY VALUE. For writable properties there will be a setter method to allow the property value to be updated.
[BEAN SPEC 1996dec04]

jv'BEAN'PROPERTY.bound

name::
* McsEngl.jv'BEAN'PROPERTY.bound@cptIt,

A component can chose to provide a change notification service for some or all of its proper-ties. Such properties are commonly known as bound properties, as they allow other compo-nents to bind special behaviour to property changes.
[BEAN SPEC 1996dec04]

jv'BEAN'PROPERTY.constrained

name::
* McsEngl.jv'BEAN'PROPERTY.constrained@cptIt,

Sometimes when a property change occurs some other bean may wish to validate the change and reject it if it is inappropriate.
We refer to properties that undergo this kind of checking as constrained properties.
[BEAN SPEC 1996dec04]

jv'BEAN'PROPERTY.indexed

name::
* McsEngl.jv'BEAN'PROPERTY.indexed@cptIt,

In addition to simple single-value properties, we also support indexed properties. An indexed property supports a range of values.
[BEAN SPEC 1996dec04]

jv'BEAN'PROPERTY.readable

name::
* McsEngl.jv'BEAN'PROPERTY.readable@cptIt,

jv'BEAN'PROPERTY.writable

name::
* McsEngl.jv'BEAN'PROPERTY.writable@cptIt,

jv'BEAN'PROPERTY'EDITOR

name::
* McsEngl.jv'BEAN'PROPERTY'EDITOR@cptIt,
* McsEngl.jv'property'editor@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:interface.propertyeditor#.

A property editor is a class that exists to allow GUI editing of a property value such as a String or Color. Bean developers may also deliver new property editors for any new data types that they deliver as part of their bean.
The PropertyEditor class provides a number of different ways of reading and writing the prop-erty value. Not all property editors need support all the different options. At the low-end a Prop-ertyEditor may simply support reading and writing a value as a String. At the high-end, a PropertyEditor is allowed to provide a full-blown java.awt.Component that can be popped-up to edit its value.
A property editor may be instantiated either as part of a property sheet, or as a field within a more complex component customizer. If a PropertyEditor allows itself to be represented in sev-eral different ways (as a String, as a painted rectangle, as a full-blown custom editor compo-nent, etc.) is the responsibility of the higher-level tool to decide how best to represent a given PropertyEditor.
[Bean spec 1996dec04]

jv'BEAN'storage

name::
* McsEngl.jv'BEAN'storage@cptIt,

those beans that allow their properties to be edited will provide a way for storing away and reloading the changes.
[Bean spec 1996dec04]

jv'codeSrc.Software-System

_CREATED: {2012-03-04}

name::
* McsEngl.jv'codeSrc.Software-System@cptIt,

_PART:
* java-enduser-data,
* java-program#ql:jv'program_itsoft1200#

jv'codeSrc.PROGRAM#cptItsoft1200: attPar#

name::
* McsEngl.jv'codeSrc.PROGRAM@cptIt,

jv'codeSrc.PACKAGE

name::
* McsEngl.jv'codeSrc.PACKAGE@cptIt,
* McsEngl.conceptItsoft1012.2,
* McsEngl.jv'package@cptIt,

=== _NOTES: the name "class-library" is better aplyed for an api because many "libraries" have many packages.
[hknu_2003-02-13]

_DEFINITION:
* Package is the whole-part organization in java.
[hknu_2007-04-03]
===
Packages are groups of classes#ql:jv'class# and interfaces#ql:jv'interface#.
They are a tool for managing a large namespace and avoiding conflicts. Every class and interface name is contained in some package. By convention, package names consist of period-separated words, with the first name representing the organization that developed the package.
[SPEC]

In Java, a CLASS LIBRARY is called a package. Packages can also contain interface definitions.
[TUTORIAL]

_WHOLE:
* Every package is part of an API.
* J-API#cptItsoft1012.1#

_STRUCTURE:
a package, which is a library of classes (in other languages, a library could consist of functions and data as well as classes, but remember that all code in Java must be written inside a class).
[B. ECKEL, Thinking In Java, 1997aug18, 54]

The .class files generated by the compiler when you compile the file that contains the source must be placed in a directory (or folder) named <package-name> somewhere in your CLASSPATH.
[JavaSoft tutorial 1997jul08]

A package consists of a number of compilation units (§7.3). A compilation unit automatically has access to all types declared in its package and also automatically imports each of the types declared in the predefined package java.lang.
[lang spec, 1996aug]

The package that a compilation unit is in is specified by a package statement. When this statement is present, it must be the first non-comment, non-white space line in the compilation unit. It has the following format:
package packageName;
When a compilation unit has no package statement, the unit is placed in a default package, which has no name.

A package declaration appears within a compilation-unit#ql:jv'compilation'unit# to indicate the package to which the compilation unit belongs.
A compilation unit that has no package declaration is part of an unnamed package.
#jv'PackageDeclaration#:
package PackageName ;
The package name mentioned in a package declaration must be the fully qualified name (§6.7) of the package.
[lang spec, 1996aug]

* McsEngl.jv'PACKAGE'CREATION@cptIt,
* McsEngl.jv'PACKAGE'STATEMENT@cptIt,

EXAMPLE#ql:jv'ex.package#.

For later versions of Java (1.1.4 and on), when your main( ) is inside a file with a package statement, you must give the full package name before the program name in order to run the program. [FROM the superdirectory]
[B. ECKEL, Thinking In Java, 1998jan]

A package can have members of either or both of the following kinds:
- Subpackages of the package
- Types declared in the compilation units (§7.3) of the package
[lang spec, 1996aug]

Whether access to members of a package is allowed is determined by the host system. The package java should always be accessible, and its standard subpackages lang, io, and util should always be accessible.
It is strongly recommended that the protections of a file system or database used to store Java programs be set to make all compilation units of a package available whenever any of the compilation units is available.
[lang spec, 1996aug]

Note that the convention for Java packages is to use all lowercase letters, even for intermediate words.
...by convention, the first part of the package name is the Internet domain name of the creator of the class, reversed. Since Internet domain names are guaranteed to be unique (by InterNIC [ftp.internic.net] , who controls their assignment) if you follow this convention it’s guaranteed that your package name will be unique and thus you’ll never have a name clash. Of course, if you don’t have your own domain name then you’ll need to fabricate an unlikely combination (such as your first and last name) to create unique package names. However, if you’ve decided to start publishing Java code it’s worth the relatively small effort to get a domain name.
[B. ECKEL, Thinking In Java, 1997aug18, 127]

The naming structure for packages is hierarchical (§7.1).
[lang spec, 1996aug]

If the fully qualified name (§6.7) of a package is P, and Q is a subpackage of P, then P.Q is the fully qualified name of the subpackage.
[lang spec, 1996aug]

A package may NOT contain
- a type declaration and
- a subpackage of the same name,
or a compile-time error results.
[lang spec, 1996aug]

The packages may be stored in
- a local file system in simple implementations of Java.
- Other implementations may use a distributed file system or
- some form of database to store Java source and/or binary code.
[lang spec, 1996aug]

Packages that are stored in a file system have certain constraints on the organization of their compilation units to allow a simple implementation to find classes easily.
[lang spec, 1996aug]

The .class files for all classes and interfaces defined in the package must be in that package directory.

jv'package'compilation

name::
* McsEngl.jv'package'compilation@cptIt,

jv'package'COMPILATION'UNIT

name::
* McsEngl.jv'package'COMPILATION'UNIT@cptIt,

jv'package'DECLARATION

name::
* McsEngl.jv'package'DECLARATION@cptIt,

jv'package'EXECUTION

name::
* McsEngl.jv'package'EXECUTION@cptIt,

jv'package'MEMBER

name::
* McsEngl.jv'package'MEMBER@cptIt,

jv'package'NAME

name::
* McsEngl.jv'package'NAME@cptIt,

jv'package'namespace

name::
* McsEngl.jv'package'namespace@cptIt,
* McsEngl.jv'namespace@cptIt,

_DESCRIPTION:
There's no such term as "namespace" in Java - a package acts as a namespace in Java though, in terms of providing a scope for names. It's also part of the accessibility model.

From section 7 of the Java Language Specification:

Programs are organized as sets of packages. Each package has its own set of names for types, which helps to prevent name conflicts. A top level type is accessible (§6.6) outside the package that declares it only if the type is declared public.

EDIT: Okay, after the clarification: a Java package is similar to a C# namespace - except that it has an impact on accessibility, whereas in C# namespaces and accessibility are entirely orthogonal.
[http://stackoverflow.com/a/9249401]

jv'package'STORAGE

name::
* McsEngl.jv'package'STORAGE@cptIt,
* McsEngl.jv'package'directory-structure@cptIt,

_DESCRIPTION:
There are a few details that differ.

In Java the directory structure should match the package structure. No such restriction in C#.

In C# you can have multiple namespaces in one file. In Java one file belongs to one package (see previous).

Java has default/package accessibility. C# internal accessibility goes in assemblies.

If you use VS and Eclipse and let them structure the project, then you will not feel the differences much.
[http://stackoverflow.com/a/9249408]

jv'package'Using-Classes-and-Interfaces-from-Other-Packages

name::
* McsEngl.jv'package'Using-Classes-and-Interfaces-from-Other-Packages@cptIt,

The language provides a mechanism for making the definitions and implementations of classes and interfaces available across packages. The import keyword is used to mark classes as being imported into the current package. A compilation unit automatically imports every class and interface in its own package.

Code in one package can specify classes or interfaces from another package in one of two ways:

· By prefacing each reference to the class or interface name with the name of its package:
// prefacing with a package
acme.project.FooBar obj = new acme.project.FooBar();

· By importing the class or interface or the package that contains it, using an import statement. Importing a class or interface makes the name of the class or interface available in the current namespace. Importing a package makes the names of all of its public classes and interfaces available. The construct:
// import all classes from acme.project
import acme.project.*;
means that every public class from acme.project is imported.

The following construct imports a single class, Employee_List, from the acme.project package:
// import Employee_List from acme.project
import acme.project.Employee_List;
Employee_List obj = new Employee_List();
It is illegal to specify an ambiguous class name and doing so always generates a compile-time error. Class names may be disambiguated through the use of a fully qualified class name, i.e., one that includes the name of the class's package.

SPECIFIC

jv'package.A

name::
* McsEngl.jv'package.A@cptIt,

jv'package.AWT.java (since 1.0)

name::
* McsEngl.jv'package.AWT.java (since 1.0)@cptIt,
* McsEngl.jv'awt'package@cptIt,

_WHOLE:
* AWT-API#ql:jv'awt'api_itsoft1012.13#

Interface Summary
ActiveEvent  An interface for events that know how to dispatch themselves.
Adjustable  The interface for objects which have an adjustable numeric value contained within a bounded range of values.
Composite  The Composite interface, along with CompositeContext, defines the methods to compose a draw primitive with the underlying graphics area.
CompositeContext  The CompositeContext interface defines the encapsulated and optimized environment for a compositing operation.
ItemSelectable  The interface for objects which contain a set of items for which zero or more can be selected.
KeyEventDispatcher  A KeyEventDispatcher cooperates with the current KeyboardFocusManager in the targeting and dispatching of all KeyEvents.
KeyEventPostProcessor  A KeyEventPostProcessor cooperates with the current KeyboardFocusManager in the final resolution of all unconsumed KeyEvents.
LayoutManager  Defines the interface for classes that know how to lay out Containers.
LayoutManager2  Defines an interface for classes that know how to layout Containers based on a layout constraints object.
MenuContainer  The super class of all menu related containers.
Paint  This Paint interface defines how color patterns can be generated for Graphics2D operations.
PaintContext  The PaintContext interface defines the encapsulated and optimized environment to generate color patterns in device space for fill or stroke operations on a Graphics2D.
PrintGraphics  An abstract class which provides a print graphics context for a page.
Shape  The Shape interface provides definitions for objects that represent some form of geometric shape.
Stroke  The Stroke interface allows a Graphics2D object to obtain a Shape that is the decorated outline, or stylistic representation of the outline, of the specified Shape.
Transparency  The Transparency interface defines the common transparency modes for implementing classes.

Class Summary
AlphaComposite  The AlphaComposite class implements basic alpha compositing rules for combining source and destination colors to achieve blending and transparency effects with graphics and images.
AWTEvent#ql:jv'awtevent#  The root event class for all AWT events.
AWTEventMulticaster  A class which implements efficient and thread-safe multi-cast event dispatching for the AWT events defined in the java.awt.event package.
AWTKeyStroke  An AWTKeyStroke represents a key action on the keyboard, or equivalent input device.
AWTPermission  This class is for AWT permissions.
BasicStroke  The BasicStroke class defines a basic set of rendering attributes for the outlines of graphics primitives, which are rendered with a Graphics2D object that has its Stroke attribute set to this BasicStroke.
BorderLayout  A border layout lays out a container, arranging and resizing its components to fit in five regions: north, south, east, west, and center.
BufferCapabilities  Capabilities and properties of buffers.
BufferCapabilities.FlipContents  A type-safe enumeration of the possible back buffer contents after page-flipping
Button  This class creates a labeled button.
Canvas  A Canvas component represents a blank rectangular area of the screen onto which the application can draw or from which the application can trap input events from the user.
CardLayout  A CardLayout object is a layout manager for a container.
Checkbox  A check box is a graphical component that can be in either an "on" (true) or "off" (false) state.
CheckboxGroup  The CheckboxGroup class is used to group together a set of Checkbox buttons.
CheckboxMenuItem  This class represents a check box that can be included in a menu.
Choice  The Choice class presents a pop-up menu of choices.
Color  The Color class is used to encapsulate colors in the default sRGB color space or colors in arbitrary color spaces identified by a ColorSpace.
Component  A component is an object having a graphical representation that can be displayed on the screen and that can interact with the user.
ComponentOrientation  The ComponentOrientation class encapsulates the language-sensitive orientation that is to be used to order the elements of a component or of text.
Container  A generic Abstract Window Toolkit(AWT) container object is a component that can contain other AWT components.
ContainerOrderFocusTraversalPolicy  A FocusTraversalPolicy that determines traversal order based on the order of child Components in a Container.
Cursor  A class to encapsulate the bitmap representation of the mouse cursor.
DefaultFocusTraversalPolicy  A FocusTraversalPolicy that determines traversal order based on the order of child Components in a Container.
DefaultKeyboardFocusManager  The default KeyboardFocusManager for AWT applications.
Dialog  A Dialog is a top-level window with a title and a border that is typically used to take some form of input from the user.
Dimension  The Dimension class encapsulates the width and height of a component (in integer precision) in a single object.
DisplayMode  The DisplayMode class encapsulates the bit depth, height, width, and refresh rate of a GraphicsDevice.
Event  NOTE: The Event class is obsolete and is available only for backwards compatilibility.
EventQueue  EventQueue is a platform-independent class that queues events, both from the underlying peer classes and from trusted application classes.
FileDialog  The FileDialog class displays a dialog window from which the user can select a file.
FlowLayout  A flow layout arranges components in a directional flow, much like lines of text in a paragraph.
FocusTraversalPolicy  A FocusTraversalPolicy defines the order in which Components with a particular focus cycle root are traversed.
Font  The Font class represents fonts, which are used to render text in a visible way.
FontMetrics  The FontMetrics class defines a font metrics object, which encapsulates information about the rendering of a particular font on a particular screen.
Frame  A Frame is a top-level window with a title and a border.
GradientPaint  The GradientPaint class provides a way to fill a Shape with a linear color gradient pattern.
Graphics  The Graphics class is the abstract base class for all graphics contexts that allow an application to draw onto components that are realized on various devices, as well as onto off-screen images.
Graphics2D  This Graphics2D class extends the Graphics class to provide more sophisticated control over geometry, coordinate transformations, color management, and text layout.
GraphicsConfigTemplate  The GraphicsConfigTemplate class is used to obtain a valid GraphicsConfiguration.
GraphicsConfiguration  The GraphicsConfiguration class describes the characteristics of a graphics destination such as a printer or monitor.
GraphicsDevice  The GraphicsDevice class describes the graphics devices that might be available in a particular graphics environment.
GraphicsEnvironment  The GraphicsEnvironment class describes the collection of GraphicsDevice objects and Font objects available to a Java(tm) application on a particular platform.
GridBagConstraints  The GridBagConstraints class specifies constraints for components that are laid out using the GridBagLayout class.
GridBagLayout  The GridBagLayout class is a flexible layout manager that aligns components vertically and horizontally, without requiring that the components be of the same size.
GridLayout  The GridLayout class is a layout manager that lays out a container's components in a rectangular grid.
Image  The abstract class Image is the superclass of all classes that represent graphical images.
ImageCapabilities  Capabilities and properties of images.
Insets  An Insets object is a representation of the borders of a container.
JobAttributes  A set of attributes which control a print job.
JobAttributes.DefaultSelectionType  A type-safe enumeration of possible default selection states.
JobAttributes.DestinationType  A type-safe enumeration of possible job destinations.
JobAttributes.DialogType  A type-safe enumeration of possible dialogs to display to the user.
JobAttributes.MultipleDocumentHandlingType  A type-safe enumeration of possible multiple copy handling states.
JobAttributes.SidesType  A type-safe enumeration of possible multi-page impositions.
KeyboardFocusManager  The KeyboardFocusManager is responsible for managing the active and focused Windows, and the current focus owner.
Label  A Label object is a component for placing text in a container.
List  The List component presents the user with a scrolling list of text items.
MediaTracker  The MediaTracker class is a utility class to track the status of a number of media objects.
Menu  A Menu object is a pull-down menu component that is deployed from a menu bar.
MenuBar  The MenuBar class encapsulates the platform's concept of a menu bar bound to a frame.
MenuComponent  The abstract class MenuComponent is the superclass of all menu-related components.
MenuItem  All items in a menu must belong to the class MenuItem, or one of its subclasses.
MenuShortcut  The MenuShortcutclass represents a keyboard accelerator for a MenuItem.
MouseInfo  MouseInfo provides methods for getting information about the mouse, such as mouse pointer location and the number of mouse buttons.
PageAttributes  A set of attributes which control the output of a printed page.
PageAttributes.ColorType  A type-safe enumeration of possible color states.
PageAttributes.MediaType  A type-safe enumeration of possible paper sizes.
PageAttributes.OrientationRequestedType  A type-safe enumeration of possible orientations.
PageAttributes.OriginType  A type-safe enumeration of possible origins.
PageAttributes.PrintQualityType  A type-safe enumeration of possible print qualities.
Panel  Panel is the simplest container class.
Point  A point representing a location in (x, y) coordinate space, specified in integer precision.
PointerInfo  A class that describes the pointer position.
Polygon  The Polygon class encapsulates a description of a closed, two-dimensional region within a coordinate space.
PopupMenu  A class that implements a menu which can be dynamically popped up at a specified position within a component.
PrintJob  An abstract class which initiates and executes a print job.
Rectangle  A Rectangle specifies an area in a coordinate space that is enclosed by the Rectangle object's top-left point (x, y) in the coordinate space, its width, and its height.
RenderingHints  The RenderingHints class contains rendering hints that can be used by the Graphics2D class, and classes that implement BufferedImageOp and Raster.
RenderingHints.Key  Defines the base type of all keys used to control various aspects of the rendering and imaging pipelines.
Robot  This class is used to generate native system input events for the purposes of test automation, self-running demos, and other applications where control of the mouse and keyboard is needed.
Scrollbar  The Scrollbar class embodies a scroll bar, a familiar user-interface object.
ScrollPane  A container class which implements automatic horizontal and/or vertical scrolling for a single child component.
ScrollPaneAdjustable  This class represents the state of a horizontal or vertical scrollbar of a ScrollPane.
SystemColor  A class to encapsulate symbolic colors representing the color of native GUI objects on a system.
TextArea  A TextArea object is a multi-line region that displays text.
TextComponent  The TextComponent class is the superclass of any component that allows the editing of some text.
TextField  A TextField object is a text component that allows for the editing of a single line of text.
TexturePaint  The TexturePaint class provides a way to fill a Shape with a texture that is specified as a BufferedImage.
Toolkit  This class is the abstract superclass of all actual implementations of the Abstract Window Toolkit.
Window  A Window object is a top-level window with no borders and no menubar.

Exception Summary
AWTException  Signals that an Absract Window Toolkit exception has occurred.
FontFormatException  Thrown by method createFont in the Font class to indicate that the specified font is bad.
HeadlessException  Thrown when code that is dependent on a keyboard, display, or mouse is called in an environment that does not support a keyboard, display, or mouse.
IllegalComponentStateException  Signals that an AWT component is not in an appropriate state for the requested operation.

Error Summary
AWTError  Thrown when a serious Abstract Window Toolkit error has occurred.

jv'AWTEvent (since 1.1)

name::
* McsEngl.jv'AWTEvent (since 1.1)@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.awtevent#.

PACKAGE: java.awt.

SUPERCLASS: java.util.EventObject.

SUBCLASS:
ActionEvent,
AdjustmentEvent,
ComponentEvent#ql:jv'ComponentEvent#,
ItemEvent,
TextEvent,

_DEFINETRO:
public abstract class java.awt.AWTEvent
extends EventObject

The root event class for all AWT events. This class and its subclasses supercede the original java.awt.Event class. The event masks defined in this class are needed ONLY by component subclasses which are using Component.enableEvents() to select for event types not selected by registered listeners. If a listener is registered on a component, the appropriate event mask is already set internally by the component.
[API1.1]

SPESIFEPTO:
Direct Known Subclasses:
ActionEvent, AdjustmentEvent, AncestorEvent, ComponentEvent, HierarchyEvent, InputMethodEvent, InternalFrameEvent, InvocationEvent, ItemEvent, TextEvent

jv'ActionEvent

name::
* McsEngl.jv'ActionEvent@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.actionevent#.

jv'AdjustmentEvent

name::
* McsEngl.jv'AdjustmentEvent@cptIt,

jv'ComponentEvent

name::
* McsEngl.jv'ComponentEvent@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.componentevent#.

PACKAGE: java.awt.event.

SUPERCLASS: java.awt.AWTEvent

SUBCLASS:
ContainerEvent,
FocusEvent,
InputEvent,
PaintEvent,
WindowEvent,

FUNCTION:
The root event class for all component-level events. These events are provided for notification purposes ONLY; The AWT will automatically handle component moves and resizes internally so that GUI layout works properly regardless of whether a program is receiving these events or not.
[API1.1]

jv'ContainerEvent

name::
* McsEngl.jv'ContainerEvent@cptIt,

jv'FocusEvent

name::
* McsEngl.jv'FocusEvent@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.focusevent#.

PACKAGE: java.awt.event.

SUPERCLASS: java.awt.event.ComponentEvent.

The component-level focus event. There are two levels of focus change events: permanent and temporary. Permanent focus change events occur when focus is directly moved from one component to another, such as through calls to requestFocus() or as the user uses the Tab key to traverse components. Temporary focus change events occur when focus is temporarily gained or lost for a component as the indirect result of another operation, such as window deactivation or a scrollbar drag. In this case, the original focus state will automatically be restored once that operation is finished, or, for the case of window deactivation, when the window is reactivated. Both permanent and temporary focus events are delivered using the FOCUS_GAINED and FOCUS_LOST event ids; the levels may be distinguished in the event using the isTemporary() method.
[API1.1]

jv'InputEvent

name::
* McsEngl.jv'InputEvent@cptIt,

SUBCLASS:
KeyEvent
MouseEvent

jv'KeyEvent

name::
* McsEngl.jv'KeyEvent@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.keyevent#.

SUPERCLASS: java.awt.event.InputEvent.

A KeyEvent is sent to a component when a key is pressed while the component has the focus. There are three types of KeyEvents, each represented by an integer constant:
KeyEvent.KEY_PRESSED A key was pressedKeyEvent.KEY_RELEASEDA key was released KeyEvent.KEY_TYPEDA key press followed by a key release.

jv'MouseEvent

name::
* McsEngl.jv'MouseEvent@cptIt,

jv'PaintEvent

name::
* McsEngl.jv'PaintEvent@cptIt,

jv'WindowEvent

name::
* McsEngl.jv'WindowEvent@cptIt,

jv'ItemEvent

name::
* McsEngl.jv'ItemEvent@cptIt,

jv'TextEvent

name::
* McsEngl.jv'TextEvent@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.textevent#.

The text event emitted by TextComponents.
[API1.1]

jv'package.C

name::
* McsEngl.jv'package.C@cptIt,

jv'package.D

name::
* McsEngl.jv'package.D@cptIt,

jv'package.F

name::
* McsEngl.jv'package.F@cptIt,

jv'package.H

name::
* McsEngl.jv'package.H@cptIt,

jv'package.IO.java (since 1.0)

name::
* McsEngl.jv'package.IO.java (since 1.0)@cptIt,
* McsEngl.jv'io'package@cptIt,

_DEFINETRO:
Package java.io Description

Provides for system input and output through data streams, serialization and the file system. Unless otherwise noted, passing a null argument to a constructor or method in any class or interface in this package will cause a NullPointerException to be thrown.

_WHOLE:
* IO-SYSTEM#ql:jv'io'api#

Interface Summary
Closeable  A Closeable is a source or destination of data that can be closed.
DataInput  The DataInput interface provides for reading bytes from a binary stream and reconstructing from them data in any of the Java primitive types.
DataOutput  The DataOutput interface provides for converting data from any of the Java primitive types to a series of bytes and writing these bytes to a binary stream.
Externalizable  Only the identity of the class of an Externalizable instance is written in the serialization stream and it is the responsibility of the class to save and restore the contents of its instances.
FileFilter  A filter for abstract pathnames.
FilenameFilter  Instances of classes that implement this interface are used to filter filenames.
Flushable  A Flushable is a destination of data that can be flushed.
ObjectInput  ObjectInput extends the DataInput interface to include the reading of objects.
ObjectInputValidation  Callback interface to allow validation of objects within a graph.
ObjectOutput  ObjectOutput extends the DataOutput interface to include writing of objects.
ObjectStreamConstants  Constants written into the Object Serialization Stream.
Serializable  Serializability of a class is enabled by the class implementing the java.io.Serializable interface.

Class Summary
BufferedInputStream  A BufferedInputStream adds functionality to another input stream-namely, the ability to buffer the input and to support the mark and reset methods.
BufferedOutputStream  The class implements a buffered output stream.
BufferedReader  Read text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines.
BufferedWriter  Write text to a character-output stream, buffering characters so as to provide for the efficient writing of single characters, arrays, and strings.
ByteArrayInputStream  A ByteArrayInputStream contains an internal buffer that contains bytes that may be read from the stream.
ByteArrayOutputStream  This class implements an output stream in which the data is written into a byte array.
CharArrayReader  This class implements a character buffer that can be used as a character-input stream.
CharArrayWriter  This class implements a character buffer that can be used as an Writer.
DataInputStream  A data input stream lets an application read primitive Java data types from an underlying input stream in a machine-independent way.
DataOutputStream  A data output stream lets an application write primitive Java data types to an output stream in a portable way.
File  An abstract representation of file and directory pathnames.
FileDescriptor  Instances of the file descriptor class serve as an opaque handle to the underlying machine-specific structure representing an open file, an open socket, or another source or sink of bytes.
FileInputStream  A FileInputStream obtains input bytes from a file in a file system.
FileOutputStream  A file output stream is an output stream for writing data to a File or to a FileDescriptor.
FilePermission  This class represents access to a file or directory.
FileReader  Convenience class for reading character files.
FileWriter  Convenience class for writing character files.
FilterInputStream  A FilterInputStream contains some other input stream, which it uses as its basic source of data, possibly transforming the data along the way or providing additional functionality.
FilterOutputStream  This class is the superclass of all classes that filter output streams.
FilterReader  Abstract class for reading filtered character streams.
FilterWriter  Abstract class for writing filtered character streams.
InputStream  This abstract class is the superclass of all classes representing an input stream of bytes.
InputStreamReader  An InputStreamReader is a bridge from byte streams to character streams: It reads bytes and decodes them into characters using a specified charset.
LineNumberInputStream  Deprecated. This class incorrectly assumes that bytes adequately represent characters.
LineNumberReader  A buffered character-input stream that keeps track of line numbers.
ObjectInputStream  An ObjectInputStream deserializes primitive data and objects previously written using an ObjectOutputStream.
ObjectInputStream.GetField  Provide access to the persistent fields read from the input stream.
ObjectOutputStream  An ObjectOutputStream writes primitive data types and graphs of Java objects to an OutputStream.
ObjectOutputStream.PutField  Provide programmatic access to the persistent fields to be written to ObjectOutput.
ObjectStreamClass  Serialization's descriptor for classes.
ObjectStreamField  A description of a Serializable field from a Serializable class.
OutputStream  This abstract class is the superclass of all classes representing an output stream of bytes.
OutputStreamWriter  An OutputStreamWriter is a bridge from character streams to byte streams: Characters written to it are encoded into bytes using a specified charset.
PipedInputStream  A piped input stream should be connected to a piped output stream; the piped input stream then provides whatever data bytes are written to the piped output stream.
PipedOutputStream  A piped output stream can be connected to a piped input stream to create a communications pipe.
PipedReader  Piped character-input streams.
PipedWriter  Piped character-output streams.
PrintStream  A PrintStream adds functionality to another output stream, namely the ability to print representations of various data values conveniently.
PrintWriter  Print formatted representations of objects to a text-output stream.
PushbackInputStream  A PushbackInputStream adds functionality to another input stream, namely the ability to "push back" or "unread" one byte.
PushbackReader  A character-stream reader that allows characters to be pushed back into the stream.
RandomAccessFile  Instances of this class support both reading and writing to a random access file.
Reader  Abstract class for reading character streams.
SequenceInputStream  A SequenceInputStream represents the logical concatenation of other input streams.
SerializablePermission  This class is for Serializable permissions.
StreamTokenizer  The StreamTokenizer class takes an input stream and parses it into "tokens", allowing the tokens to be read one at a time.
StringBufferInputStream  Deprecated. This class does not properly convert characters into bytes.
StringReader  A character stream whose source is a string.
StringWriter  A character stream that collects its output in a string buffer, which can then be used to construct a string.
Writer  Abstract class for writing to character streams.

Exception Summary
CharConversionException  Base class for character conversion exceptions.
EOFException  Signals that an end of file or end of stream has been reached unexpectedly during input.
FileNotFoundException  Signals that an attempt to open the file denoted by a specified pathname has failed.
InterruptedIOException  Signals that an I/O operation has been interrupted.
InvalidClassException  Thrown when the Serialization runtime detects one of the following problems with a Class.
InvalidObjectException  Indicates that one or more deserialized objects failed validation tests.
IOException  Signals that an I/O exception of some sort has occurred.
NotActiveException  Thrown when serialization or deserialization is not active.
NotSerializableException  Thrown when an instance is required to have a Serializable interface.
ObjectStreamException  Superclass of all exceptions specific to Object Stream classes.
OptionalDataException  Exception indicating the failure of an object read operation due to unread primitive data, or the end of data belonging to a serialized object in the stream.
StreamCorruptedException  Thrown when control information that was read from an object stream violates internal consistency checks.
SyncFailedException  Signals that a sync operation has failed.
UnsupportedEncodingException  The Character Encoding is not supported.
UTFDataFormatException  Signals that a malformed string in modified UTF-8 format has been read in a data input stream or by any class that implements the data input interface.
WriteAbortedException  Signals that one of the ObjectStreamExceptions was thrown during a write operation.

jv'Serializable'INTERFACE (since 1.1)

name::
* McsEngl.jv'Serializable'INTERFACE (since 1.1)@cptIt,
* McsEngl.jv'Serializable@cptIt,

DEFINETRO:
public interface java.io.Serializable

Serializability of a class is enabled by the class implementing the java.io.Serializable interface. Classes that do not implement this interface will not have any of their state serialized or deserialized. All subtypes of a serializable class are themselves serializable. The serialization interface has no methods or fields and serves only to identify the semantics of being serializable.

jv'InputStream'CLASS

name::
* McsEngl.jv'InputStream'CLASS@cptIt,
* McsEngl.jv'inputstream@cptIt,

DEFINETRO:
public abstract class java.io.InputStream
extends Object
implements Closeable

This abstract class is the superclass of all classes representing an input stream of bytes.

Applications that need to define a subclass of InputStream must always provide a method that returns the next byte of input.

Since:
JDK1.0

SOURCE: API1.2index#ql::INDEX-of-JDK1.2-API:jv'inputstream#, API1.1#ql::2nfoJAPI11.NFO:class.inputstream#.

PACKAGE: java.io.

SUPERCLASS: java.lang.Object.

COCLASS:

SPESIFEPTO:
SUBCLASS: ByteArrayInputStream, FileInputStream, FilterInputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream.

FUNCTION:
** This abstract class is the superclass of all classes representing an input stream of bytes.
[API1.2]
** An abstract class representing an input stream of bytes. All InputStreams are based on this class.
[API]

jv'PrintWriter'CLASS (Since: JDK1.1 )

name::
* McsEngl.jv'PrintWriter'CLASS (Since: JDK1.1 )@cptIt,

public class java.io.PrintWriter
extends Writer

Print formatted representations of objects to a text-output stream. This class implements all of the print methods found in PrintStream. It does not contain methods for writing raw bytes, for which a program should use unencoded byte streams.

Unlike the PrintStream class, if automatic flushing is enabled it will be done only when one of the println, printf, or format methods is invoked, rather than whenever a newline character happens to be output. These methods use the platform's own notion of line separator rather than the newline character.

EXAMPLE (jv'ex.PrintWriter):
PrintWriter pw = new PrintWriter(System.out);

jv'package.L

name::
* McsEngl.jv'package.L@cptIt,

jv'package.LOGGING.util.java (since 1.4)

name::
* McsEngl.jv'package.LOGGING.util.java (since 1.4)@cptIt,
* McsEngl.jv'logging'package@cptIt,

_DESCRIPTION:
Provides the classes and interfaces of the JavaTM 2 platform's core logging facilities. The central goal of the logging APIs is to support maintaining and servicing software at customer sites.

Interface Summary
Filter  A Filter can be used to provide fine grain control over what is logged, beyond the control provided by log levels.
LoggingMXBean  The management interface for the logging facility.

Class Summary
ConsoleHandler  This Handler publishes log records to System.err.
ErrorManager  ErrorManager objects can be attached to Handlers to process any error that occur on a Handler during Logging.
FileHandler  Simple file logging Handler.
Formatter  A Formatter provides support for formatting LogRecords.
Handler  A Handler object takes log messages from a Logger and exports them.
jv'Level  The Level class defines a set of standard logging levels that can be used to control logging output. The levels in descending order are:
* SEVERE (highest value)
* WARNING
* INFO
* CONFIG
* FINE
* FINER
* FINEST (lowest value)
jv'Logger  A Logger object is used to log messages for a specific system or application component.
LoggingPermission  The permission which the SecurityManager will check when code that is running with a SecurityManager calls one of the logging control methods (such as Logger.setLevel).
LogManager  There is a single global LogManager object that is used to maintain a set of shared state about Loggers and log services.
LogRecord  LogRecord objects are used to pass logging requests between the logging framework and individual log Handlers.
MemoryHandler  Handler that buffers requests in a circular buffer in memory.
SimpleFormatter  Print a brief summary of the LogRecord in a human readable format.
SocketHandler  Simple network logging Handler.
StreamHandler  Stream based logging Handler.
XMLFormatter  Format a LogRecord into a standard XML format.

jv'package.LANG.java (since 1.0)

name::
* McsEngl.jv'package.LANG.java (since 1.0)@cptIt,
* McsEngl.jv'lang'package@cptIt,

DEFINETRO:
Provides classes that are fundamental to the design of the Java programming language. The most important classes are Object, which is the root of the class hierarchy, and Class, instances of which represent classes at run time.

Interface Summary
Appendable  An object to which char sequences and values can be appended.
CharSequence  A CharSequence is a readable sequence of char values.
Cloneable  A class implements the Cloneable interface to indicate to the Object.clone() method that it is legal for that method to make a field-for-field copy of instances of that class.
Comparable<T>  This interface imposes a total ordering on the objects of each class that implements it.
Iterable<T>  Implementing this interface allows an object to be the target of the "foreach" statement.
Readable  A Readable is a source of characters.
Runnable  The Runnable interface should be implemented by any class whose instances are intended to be executed by a thread.
Thread.UncaughtExceptionHandler  Interface for handlers invoked when a Thread abruptly terminates due to an uncaught exception.

Class Summary
Boolean  The Boolean class wraps a value of the primitive type boolean in an object.
Byte  The Byte class wraps a value of primitive type byte in an object.
Character  The Character class wraps a value of the primitive type char in an object.
Character.Subset  Instances of this class represent particular subsets of the Unicode character set.
Character.UnicodeBlock  A family of character subsets representing the character blocks in the Unicode specification.
Class<T>  Instances of the class Class represent classes and interfaces in a running Java application.
ClassLoader  A class loader is an object that is responsible for loading classes.
Compiler  The Compiler class is provided to support Java-to-native-code compilers and related services.
Double  The Double class wraps a value of the primitive type double in an object.
Enum<E extends Enum<E>>  This is the common base class of all Java language enumeration types.
Float  The Float class wraps a value of primitive type float in an object.
InheritableThreadLocal<T>  This class extends ThreadLocal to provide inheritance of values from parent thread to child thread: when a child thread is created, the child receives initial values for all inheritable thread-local variables for which the parent has values.
Integer  The Integer class wraps a value of the primitive type int in an object.
Long  The Long class wraps a value of the primitive type long in an object.
Math  The class Math contains methods for performing basic numeric operations such as the elementary exponential, logarithm, square root, and trigonometric functions.
Number  The abstract class Number is the superclass of classes BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, and Short.
Object  Class Object is the root of the class hierarchy.
Package  Package objects contain version information about the implementation and specification of a Java package.
Process  The ProcessBuilder.start() and Runtime.exec methods create a native process and return an instance of a subclass of Process that can be used to control the process and obtain information about it.
ProcessBuilder  This class is used to create operating system processes.
Runtime  Every Java application has a single instance of class Runtime that allows the application to interface with the environment in which the application is running.
RuntimePermission  This class is for runtime permissions.
SecurityManager  The security manager is a class that allows applications to implement a security policy.
Short  The Short class wraps a value of primitive type short in an object.
StackTraceElement  An element in a stack trace, as returned by Throwable.getStackTrace().
StrictMath  The class StrictMath contains methods for performing basic numeric operations such as the elementary exponential, logarithm, square root, and trigonometric functions.
String  The String class represents character strings.
StringBuffer  A thread-safe, mutable sequence of characters.
StringBuilder  A mutable sequence of characters.
System  The System class contains several useful class fields and methods.
Thread  A thread is a thread of execution in a program.
ThreadGroup  A thread group represents a set of threads.
ThreadLocal<T>  This class provides thread-local variables.
Throwable  The Throwable class is the superclass of all errors and exceptions in the Java language.
Void  The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.

Enum Summary
Thread.State  A thread state.

Exception Summary
ArithmeticException  Thrown when an exceptional arithmetic condition has occurred.
ArrayIndexOutOfBoundsException  Thrown to indicate that an array has been accessed with an illegal index.
ArrayStoreException  Thrown to indicate that an attempt has been made to store the wrong type of object into an array of objects.
ClassCastException  Thrown to indicate that the code has attempted to cast an object to a subclass of which it is not an instance.
ClassNotFoundException  Thrown when an application tries to load in a class through its string name using: The forName method in class Class.
CloneNotSupportedException  Thrown to indicate that the clone method in class Object has been called to clone an object, but that the object's class does not implement the Cloneable interface.
EnumConstantNotPresentException  Thrown when an application tries to access an enum constant by name and the enum type contains no constant with the specified name.
Exception  The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.
IllegalAccessException  An IllegalAccessException is thrown when an application tries to reflectively create an instance (other than an array), set or get a field, or invoke a method, but the currently executing method does not have access to the definition of the specified class, field, method or constructor.
IllegalArgumentException  Thrown to indicate that a method has been passed an illegal or inappropriate argument.
IllegalMonitorStateException  Thrown to indicate that a thread has attempted to wait on an object's monitor or to notify other threads waiting on an object's monitor without owning the specified monitor.
IllegalStateException  Signals that a method has been invoked at an illegal or inappropriate time.
IllegalThreadStateException  Thrown to indicate that a thread is not in an appropriate state for the requested operation.
IndexOutOfBoundsException  Thrown to indicate that an index of some sort (such as to an array, to a string, or to a vector) is out of range.
InstantiationException  Thrown when an application tries to create an instance of a class using the newInstance method in class Class, but the specified class object cannot be instantiated because it is an interface or is an abstract class.
InterruptedException  Thrown when a thread is waiting, sleeping, or otherwise paused for a long time and another thread interrupts it using the interrupt method in class Thread.
NegativeArraySizeException  Thrown if an application tries to create an array with negative size.
NoSuchFieldException  Signals that the class doesn't have a field of a specified name.
NoSuchMethodException  Thrown when a particular method cannot be found.
NullPointerException  Thrown when an application attempts to use null in a case where an object is required.
NumberFormatException  Thrown to indicate that the application has attempted to convert a string to one of the numeric types, but that the string does not have the appropriate format.
RuntimeException  RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.
SecurityException  Thrown by the security manager to indicate a security violation.
StringIndexOutOfBoundsException  Thrown by String methods to indicate that an index is either negative or greater than the size of the string.
TypeNotPresentException  Thrown when an application tries to access a type using a string representing the type's name, but no definition for the type with the specified name can be found.
UnsupportedOperationException  Thrown to indicate that the requested operation is not supported.

Error Summary
AbstractMethodError  Thrown when an application tries to call an abstract method.
AssertionError  Thrown to indicate that an assertion has failed.
ClassCircularityError  Thrown when a circularity has been detected while initializing a class.
ClassFormatError  Thrown when the Java Virtual Machine attempts to read a class file and determines that the file is malformed or otherwise cannot be interpreted as a class file.
Error  An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch.
ExceptionInInitializerError  Signals that an unexpected exception has occurred in a static initializer.
IllegalAccessError  Thrown if an application attempts to access or modify a field, or to call a method that it does not have access to.
IncompatibleClassChangeError  Thrown when an incompatible class change has occurred to some class definition.
InstantiationError  Thrown when an application tries to use the Java new construct to instantiate an abstract class or an interface.
InternalError  Thrown to indicate some unexpected internal error has occurred in the Java Virtual Machine.
LinkageError  Subclasses of LinkageError indicate that a class has some dependency on another class; however, the latter class has incompatibly changed after the compilation of the former class.
NoClassDefFoundError  Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.
NoSuchFieldError  Thrown if an application tries to access or modify a specified field of an object, and that object no longer has that field.
NoSuchMethodError  Thrown if an application tries to call a specified method of a class (either static or instance), and that class no longer has a definition of that method.
OutOfMemoryError  Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector.
StackOverflowError  Thrown when a stack overflow occurs because an application recurses too deeply.
ThreadDeath  An instance of ThreadDeath is thrown in the victim thread when the stop method with zero arguments in class Thread is called.
UnknownError  Thrown when an unknown but serious exception has occurred in the Java Virtual Machine.
UnsatisfiedLinkError  Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native.
UnsupportedClassVersionError  Thrown when the Java Virtual Machine attempts to read a class file and determines that the major and minor version numbers in the file are not supported.
VerifyError  Thrown when the "verifier" detects that a class file, though well formed, contains some sort of internal inconsistency or security problem.
VirtualMachineError  Thrown to indicate that the Java Virtual Machine is broken or has run out of resources necessary for it to continue operating.

Annotation Types Summary
Deprecated  A program element annotated @Deprecated is one that programmers are discouraged from using, typically because it is dangerous, or because a better alternative exists.
Override  Indicates that a method declaration is intended to override a method declaration in a superclass.
SuppressWarnings  Indicates that the named compiler warnings should be suppressed in the annotated element (and in all program elements contained in the annotated element).

jv'Runnable'INTERFACE (since 1.0)

name::
* McsEngl.jv'Runnable'INTERFACE (since 1.0)@cptIt,

DEFINETRO:
public interface java.lang.Runnable

The Runnable interface should be implemented by any class whose instances are intended to be executed by a thread. The class must define a method of no arguments called run.

This interface is designed to provide a common protocol for objects that wish to execute code while they are active. For example, Runnable is implemented by class Thread. Being active simply means that a thread has been started and has not yet been stopped.

In addition, Runnable provides the means for a class to be active while not subclassing Thread. A class that implements Runnable can run without subclassing Thread by instantiating a Thread instance and passing itself in as the target. In most cases, the Runnable interface should be used if you are only planning to override the run() method and no other Thread methods. This is important because classes should not be subclassed unless the programmer intends on modifying or enhancing the fundamental behavior of the class.

Method Summary
void  run()
When an object implementing interface Runnable is used to create a thread, starting the thread causes the object's run method to be called in that separately executing thread.

SPESIFEPTO:
All Known Implementing Classes:
AsyncBoxView.ChildState, FutureTask, RenderableImageProducer, Thread#ql:jv'thread#, TimerTask,

jv'Object'CLASS (since 1.0)

name::
* McsEngl.jv'Object'CLASS (since 1.0)@cptIt,
* McsEngl.jv'class.Object@cptIt,

SOURCE: JavaSoft API1.1#ql::2nfoJAPI11.NFO:class.object#.

PACKAGE: java.lang#ql:jv'lang'package#.

SUPERCLASS: none.

SUBCLASS:
143 classes in API1.1

_DEFINETRO:
public class java.lang.Object

Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.

FUNCTION:
* it is the primordial class and has no direct superclass.
[lang spec, 1996aug]

* In fact, in Java, all classes must be derived from some class. Which leads to the question "Where does it all begin?" The top-most class, the class from which all other classes are derived, is the Object class defined in java.lang. Object is the patriarch of a hierarchy of classes.

* The Object class defines the basic state and behavior that all objects must have such as the ability to compare oneself to another object, to convert to a string, to wait on a condition variable, to notify other objects that a condition variable has changed, and so on. Thus, as descendents of this class, all objects in the Java environment inherit this behavior from the the Object class.


CONSTRUCTOR INDEX:
** Object():

METHOD INDEX:
** (inst) clone(): Creates a new object of the same class as this object.
** (inst) equals(Object): Compares two Objects for equality.
** (inst) finalize(): Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
** (inst) getClass(): Returns the runtime class of an object.
** (inst) jv'hashCode(): Returns a hash code value for the object.
The value returned by hashCode() is the object's hash code, which is the object's memory address in hexadecimal.
** (inst) notify(): Wakes up a single thread that is waiting on this object's monitor.
** (inst) notifyAll(): Wakes up all threads that are waiting on this object's monitor.
** (inst) toString(): Returns a string representation of the object.
** (inst) wait(): Waits to be notified by another thread of a change in this object.
** (inst) wait(long): Waits to be notified by another thread of a change in this object.
** (inst) wait(long, int): Waits to be notified by another thread of a change in this object.

jv'package.M

name::
* McsEngl.jv'package.M@cptIt,
* McsEngl.jv''package@cptIt,

jv'package.MIDI.sound.javax (since 1.3)

name::
* McsEngl.jv'package.MIDI.sound.javax (since 1.3)@cptIt,
* McsEngl.jv'midi'package@cptIt,

_DESCRIPTION:
Package javax.sound.midi
Provides interfaces and classes for I/O, sequencing, and synthesis of MIDI (Musical Instrument Digital Interface) data.

Interface Summary
ControllerEventListener  The ControllerEventListener interface should be implemented by classes whose instances need to be notified when a Sequencer has processed a requested type of MIDI control-change event.
MetaEventListener  The MetaEventListener interface should be implemented by classes whose instances need to be notified when a Sequencer has processed a MetaMessage.
MidiChannel  A MidiChannel object represents a single MIDI channel.
MidiDevice  MidiDevice is the base interface for all MIDI devices.
Receiver  A Receiver receives MidiEvent objects and typically does something useful in response, such as interpreting them to generate sound or raw MIDI output.
Sequencer  A hardware or software device that plays back a MIDI sequence is known as a sequencer.
Soundbank  A Soundbank contains a set of Instruments that can be loaded into a Synthesizer.
Synthesizer  A Synthesizer generates sound.
Transmitter  A Transmitter sends MidiEvent objects to one or more Receivers.


Class Summary
Instrument  An instrument is a sound-synthesis algorithm with certain parameter settings, usually designed to emulate a specific real-world musical instrument or to achieve a specific sort of sound effect.
MetaMessage  A MetaMessage is a MidiMessage that is not meaningful to synthesizers, but that can be stored in a MIDI file and interpreted by a sequencer program.
MidiDevice.Info  A MidiDevice.Info object contains assorted data about a MidiDevice, including its name, the company who created it, and descriptive text.
MidiEvent  MIDI events contain a MIDI message and a corresponding time-stamp expressed in ticks, and can represent the MIDI event information stored in a MIDI file or a Sequence object.
MidiFileFormat  A MidiFileFormat object encapsulates a MIDI file's type, as well as its length and timing information.
MidiMessage  MidiMessage is the base class for MIDI messages.
MidiSystem  The MidiSystem class provides access to the installed MIDI system resources, including devices such as synthesizers, sequencers, and MIDI input and output ports.
Patch  A Patch object represents a location, on a MIDI synthesizer, into which a single instrument is stored (loaded).
Sequence  A Sequence is a data structure containing musical information (often an entire song or composition) that can be played back by a Sequencer object.
Sequencer.SyncMode  A SyncMode object represents one of the ways in which a MIDI sequencer's notion of time can be synchronized with a master or slave device.
ShortMessage  A ShortMessage contains a MIDI message that has at most two data bytes following its status byte.
SoundbankResource  A SoundbankResource represents any audio resource stored in a Soundbank.
SysexMessage  A SysexMessage object represents a MIDI system exclusive message.
Track  A MIDI track is an independent stream of MIDI events (time-stamped MIDI data) that can be stored along with other tracks in a standard MIDI file.
VoiceStatus  A VoiceStatus object contains information about the current status of one of the voices produced by a Synthesizer.


Exception Summary
InvalidMidiDataException  An InvalidMidiDataException indicates that inappropriate MIDI data was encountered.
MidiUnavailableException  A MidiUnavailableException is thrown when a requested MIDI component cannot be opened or created because it is unavailable.

jv'package.N

name::
* McsEngl.jv'package.N@cptIt,
* McsEngl.jv''package@cptIt,

jv'package.O

name::
* McsEngl.jv'package.O@cptIt,
* McsEngl.jv''package@cptIt,

jv'package.P

name::
* McsEngl.jv'package.P@cptIt,
* McsEngl.jv''package@cptIt,

jv'package.Q

name::
* McsEngl.jv'package.Q@cptIt,
* McsEngl.jv''package@cptIt,

jv'package.R

name::
* McsEngl.jv'package.R@cptIt,
* McsEngl.jv''package@cptIt,

jv'package.REFLECT.lang.java (since 1.1)

name::
* McsEngl.jv'package.REFLECT.lang.java (since 1.1)@cptIt,
* McsEngl.jv'reflect'package@cptIt,

Package java.lang.reflect Description
Provides classes and interfaces for obtaining reflective information about classes and objects. Reflection allows programmatic access to information about the fields, methods and constructors of loaded classes, and the use reflected fields, methods, and constructors to operate on their underlying counterparts on objects, within security restrictions.

AccessibleObject allows supression of access checks if the necessary ReflectPermission is available.

Arrays provides static methods to dynamically create and access arrays.

Classes in this package, along with java.lang.Class accommodate applications such as debuggers, interpreters, object inspectors, class browsers, and services such as Object Serialization and JavaBeans that need access to either the public members of a target object (based on its runtime class) or the members declared by a given class.

Since:
JDK1.1

Interface Summary
AnnotatedElement  Represents an annotated element of the program currently running in this VM.
GenericArrayType  GenericArrayType represents an array type whose component type is either a parameterized type or a type variable.
GenericDeclaration  A common interface for all entities that declare type variables.
InvocationHandler  InvocationHandler is the interface implemented by the invocation handler of a proxy instance.
Member  Member is an interface that reflects identifying information about a single member (a field or a method) or a constructor.
ParameterizedType  ParameterizedType represents a parameterized type such as Collection<String>.
Type  Type is the common superinterface for all types in the Java programming language.
TypeVariable<D extends GenericDeclaration>  TypeVariable is the common superinterface for type variables of kinds.
WildcardType  WildcardType represents a wildcard type expression, such as ?, ? extends Number, or ? super Integer.

Class Summary
AccessibleObject  The AccessibleObject class is the base class for Field, Method and Constructor objects.
Array  The Array class provides static methods to dynamically create and access Java arrays.
Constructor<T>  Constructor provides information about, and access to, a single constructor for a class.
Field  A Field provides information about, and dynamic access to, a single field of a class or an interface.
Method  A Method provides information about, and access to, a single method on a class or interface.
Modifier  The Modifier class provides static methods and constants to decode class and member access modifiers.
Proxy  Proxy provides static methods for creating dynamic proxy classes and instances, and it is also the superclass of all dynamic proxy classes created by those methods.
ReflectPermission  The Permission class for reflective operations.


Exception Summary
InvocationTargetException  InvocationTargetException is a checked exception that wraps an exception thrown by an invoked method or constructor.
MalformedParameterizedTypeException  Thrown when a semantically malformed parameterized type is encountered by a reflective method that needs to instantiate it.
UndeclaredThrowableException  Thrown by a method invocation on a proxy instance if its invocation handler's invoke method throws a checked exception (a Throwable that is not assignable to RuntimeException or Error) that is not assignable to any of the exception types declared in the throws clause of the method that was invoked on the proxy instance and dispatched to the invocation handler.


Error Summary
GenericSignatureFormatError  Thrown when a syntactically malformed signature attribute is encountered by a reflective method that needs to interpret the generic signature information for a type, method or constructor.

jv'Type'INTERFACE (since 1.5)

name::
* McsEngl.jv'Type'INTERFACE (since 1.5)@cptIt,

DEFINETRO:
public interface java.lang.reflect.Type
Type is the common superinterface for all types in the Java programming language. These include raw types, parameterized types, array types, type variables and primitive types.

_SPESIFEPTO:
All Known Subinterfaces:
GenericArrayType, ParameterizedType, TypeVariable<D>, WildcardType

All Known Implementing Classes:
Class

jv'package.REGEX.util (since 1.4)

name::
* McsEngl.jv'package.REGEX.util (since 1.4)@cptIt,
* McsEngl.conceptItsoft1012.8,
* McsEngl.jv'regex'package@cptIt,
* McsEngl.jv'regex'api@cptIt,
* McsEngl.jv'api.REGULAR'EXPRESSION@cptIt,
* McsEngl.jv'regular'expression@cptItsoft1012.8,
* McsEngl.jv'regex@cptItsoft1012.8,

_DESCRIPTION:
* Package java.util.regex
Classes for matching character sequences against patterns specified by regular expressions.
An instance of the Pattern class represents a regular expression that is specified in string form in a syntax similiar to that used by Perl.
Instances of the Matcher class are used to match character sequences against a given pattern. Input is provided to matchers via the CharSequence interface in order to support matching against characters from a wide variety of input sources.
Related Documentation An excellent tutorial and overview of regular expressions is Mastering Regular Expressions, Jeffrey E. F. Friedl, O'Reilly and Associates, 1997.
Since: 1.4
[1.4 doc]

CLASS:
* (jv'Matcher'class) Matcher: An engine that performs match operations on a character sequence by interpreting a Pattern.
* (jv'Pattern'class) Pattern: A compiled representation of a regular expression.

EXAMPLE#ql:jv'ex.regex#

jv'package.S

name::
* McsEngl.jv'package.S@cptIt,

jv'package.SAMPLED.sound.javax

name::
* McsEngl.jv'package.SAMPLED.sound.javax@cptIt,
* McsEngl.jv'sampled'package@cptIt,

_DESCRIPTION:
Package javax.sound.sampled
Provides interfaces and classes for capture, processing, and playback of sampled audio data.

_WHOLE:
* SOUND-API#ql:jv'api.sound#

Interface Summary
* Clip#ql:jv'clip'interface#  The Clip interface represents a special kind of data line whose audio data can be loaded prior to playback, instead of being streamed in real time.
* DataLine#ql:jv'dataline'interface#  DataLine adds media-related functionality to its superinterface, Line.
* Line#ql:jv'line'interface#  The Line interface represents a mono or multi-channel audio feed.
jv'LineListener  Instances of classes that implement the LineListener interface can register to receive events when a line's status changes.
* Mixer#ql:jv'mixer'interface#  A mixer is an audio device with one or more lines.
* Port#ql:jv'port'interface#  Ports are simple lines for input or output of audio to or from audio devices.
* SourceDataLine#ql:jv'sourcedataline'interface#  A source data line is a data line to which data may be written.
* TargetDataLine#ql:jv'targetdataline'interface#  A target data line is a type of DataLine from which audio data can be read.

Class Summary
jv'AudioFileFormat  An instance of the AudioFileFormat class describes an audio file, including the file type, the file's length in bytes, the length in sample frames of the audio data contained in the file, and the format of the audio data.
jv'AudioFileFormat.Type  An instance of the Type class represents one of the standard types of audio file.
* AudioFormat#ql:jv'audioformat'class#  AudioFormat is the class that specifies a particular arrangement of data in a sound stream.
* AudioFormat.Encoding  The Encoding class names the specific type of data representation used for an audio stream.
jv'AudioInputStream  An audio input stream is an input stream with a specified audio format and length.
jv'AudioPermission  The AudioPermission class represents access rights to the audio system resources.
* AudioSystem#ql:jv'audiosystem#  The AudioSystem class acts as the entry point to the sampled-audio system resources.
jv'BooleanControl  A BooleanControl provides the ability to switch between two possible settings that affect a line's audio.
jv'BooleanControl.Type  An instance of the BooleanControl.Type class identifies one kind of boolean control.
jv'CompoundControl  A CompoundControl, such as a graphic equalizer, provides control over two or more related properties, each of which is itself represented as a Control.
jv'CompoundControl.Type  An instance of the CompoundControl.Type inner class identifies one kind of compound control.
jv'Control  Lines often have a set of controls, such as gain and pan, that affect the audio signal passing through the line.
jv'Control.Type  An instance of the Type class represents the type of the control.
jv'DataLine.Info  Besides the class information inherited from its superclass, DataLine.Info provides additional information specific to data lines.
jv'EnumControl  A EnumControl provides control over a set of discrete possible values, each represented by an object.
jv'EnumControl.Type  An instance of the EnumControl.Type inner class identifies one kind of enumerated control.
jv'FloatControl  A FloatControl object provides control over a range of floating-point values.
jv'FloatControl.Type  An instance of the FloatControl.Type inner class identifies one kind of float control.
jv'Line.Info  A Line.Info object contains information about a line.
jv'LineEvent  The LineEvent class encapsulates information that a line sends its listeners whenever the line opens, closes, starts, or stops.
jv'LineEvent.Type  The LineEvent.Type inner class identifies what kind of event occurred on a line.
jv'Mixer.Info  The Mixer.Info class represents information about an audio mixer, including the product's name, version, and vendor, along with a textual description.
jv'Port.Info  The Port.Info class extends Line.Info with additional information specific to ports, including the port's name and whether it is a source or a target for its mixer.
jv'ReverbType  The ReverbType class provides methods for accessing various reverberation settings to be applied to an audio signal.


Exception Summary
jv'LineUnavailableException  A LineUnavailableException is an exception indicating that a line cannot be opened because it is unavailable.
jv'UnsupportedAudioFileException  An UnsupportedAudioFileException is an exception indicating that an operation failed because a file did not contain valid data of a recognized file type and format.

jv'Clip'INTERFACE

name::
* McsEngl.jv'Clip'INTERFACE@cptIt,

DEFINETRO:
public interface javax.sound.sampled.Clip
extends DataLine

A Clip is a data line into which audio data can be loaded prior to playback. Because the data is pre-loaded rather than streamed, the clip's duration is known before playback, and you can choose any starting position in the media. Clips can be looped, meaning that upon playback, all the data between two specified loop points will repeat a specified number of times, or indefinitely.

There are two kinds of line that you can use for playing sound: a Clip and a SourceDataLine.
The chief difference between the two is that with a Clip you specify all the sound data at one time, before playback, whereas with a SourceDataLine you keep writing new buffers of data continuously during playback.
[\JAVA\JDK140\docs\guide\sound\programmer_guide\chapter4.html]

USE:
Use a Clip when you have non-real-time sound data that can be preloaded into memory.
For example, you might read a short sound file into a clip. If you want the sound to play back more than once, a Clip is more convenient than a SourceDataLine, especially if you want the playback to loop (cycle repeatedly through all or part of the sound). If you need to start the playback at an arbitrary position in the sound, the Clip interface provides a method to do that easily. Finally, playback from a Clip generally has less latency than buffered playback from a SourceDataLine. In other words, because the sound is preloaded into a clip, playback can start immediately instead of having to wait for the buffer to be filled.

_PROCESS:
1. OBTAIN-CLIP: Construct a DataLine.Info object with Clip.class for the first argument, and pass this DataLine.Info as an argument to the getLine method of AudioSystem or Mixer.
2. OPEN-CLIP: void open(AudioInputStream stream)
void open(AudioFormat format, byte[] data, int offset, int bufferSize)
3. SET-START-POINT: After opening the clip, you can specify at what point in the data it should start playback, using Clip's setFramePosition or setMicroSecondPosition methods. Otherwise, it will start at the beginning. You can also configure the playback to cycle repeatedly, using the setLoopPoints method.
4. START-CLIP: When you're ready to start playback, simply invoke the start method. To stop or pause the clip, invoke the stop method, and to resume playback, invoke start again. The clip remembers the media position where it stopped playback, so there's no need for explicit pause and resume methods. If you don't want it to resume where it left off, you can "rewind" the clip to the beginning (or to any other position, for that matter) using the frame- or microsecond-positioning methods mentioned above.

VOLUME:
A Clip's volume level and activity status (active versus inactive) can be monitored by invoking the DataLine methods getLevel and isActive, respectively. An active Clip is one that is currently playing sound.

jv'DataLine'INTERFACE

name::
* McsEngl.jv'DataLine'INTERFACE@cptIt,

DEFINETRO:
public interface javax.sound.sampled.DataLine
extends Line

The DataLine interface supplies the following additional media-related features beyond those of a Line:
* Audio format Each data line has an audio format associated with its data stream.
* Media position A data line can report its current position in the media, expressed in sample frames. This represents the number of sample frames captured by or rendered from the data line since it was opened.
* Buffer size This is the size of the data line's internal buffer in bytes. For a source data line, the internal buffer is one to which data can be written, and for a target data line it's one from which data can be read. Level (the current amplitude of the audio signal)
Start and stop playback or capture
Pause and resume playback or capture
Flush (discard unprocessed data from the queue)
Drain (block until all unprocessed data has been drained from the queue, and the data line's buffer has become empty)
Active status A data line is considered active if it is engaged in active presentation or capture of audio data to or from a mixer. Events START and STOP events are produced when active presentation or capture of data from or to the data line starts or stops.
[\JAVA\JDK140\docs\guide\sound\programmer_guide\chapter2.html]

_SPESIFEPTO:
All Known Subinterfaces:
Clip, SourceDataLine, TargetDataLine

jv'Line'INTERFACE

name::
* McsEngl.jv'Line'INTERFACE@cptIt,
* McsEngl.jv'line'sound@cptIt,

_DEFINITION:
public interface javax.sound.sampled.Line

The Line interface represents a mono or multi-channel audio feed. A line is an element of the digital audio "pipeline," such as a mixer, an input or output port, or a data path into or out of a mixer.

To play or capture sound using the Java Sound API, you need at least three things: formatted audio data, a mixer, and a line.

The metaphor of a physical mixing console is also useful for understanding the Java Sound API's concept of a line.
A line is an element of the digital audio "pipeline"—that is, a path for moving audio into or out of the system. Usually the line is a path into or out of a mixer (although technically the mixer itself is also a kind of line).
[1.4.0 docs]

_SPESIFEPTO:
* Port,
* Mixer,
* DataLine#ql:jv'dataline'interface#, (SourceDataLine, TargetDataLine, Clip)
All Known Subinterfaces:
Clip, DataLine, Mixer, Port, SourceDataLine, TargetDataLine

jv'Mixer'INTERFACE (since 1.3)

name::
* McsEngl.jv'Mixer'INTERFACE (since 1.3)@cptIt,
* McsEngl.jv'mixer@cptIt,

_DEFINITION:
public interface javax.sound.sampled.Mixer
extends Line#ql:jv'line'interface#

A mixer is an audio device with one or more lines. It need not be designed for mixing audio signals. A mixer that actually mixes audio has multiple input (source) lines and at least one output (target) line. The former are often instances of classes that implement SourceDataLine, and the latter, TargetDataLine. Port objects, too, are either source lines or target lines. A mixer can accept prerecorded, loopable sound as input, by having some of its source lines be instances of objects that implement the Clip interface.

To play or capture sound using the Java Sound API, you need at least three things: formatted audio data, a mixer, and a line.

jv'Port'INTERFACE

name::
* McsEngl.jv'Port'INTERFACE@cptIt,

DEFINETRO:
public interface javax.sound.sampled.Port
extends Line#ql:jv'line'interface#

Ports are simple lines for input or output of audio to or from audio devices. As mentioned earlier, some common types of ports are the microphone, line input, CD-ROM drive, speaker, headphone, and line output. Ports that act as target lines (mixer outputs) include the speaker, headphone, and line output. You can access port using a Port.Info object.
[\JAVA\JDK140\docs\guide\sound\programmer_guide\chapter2.html]

jv'SourceDataLine'INTERFACE

name::
* McsEngl.jv'SourceDataLine'INTERFACE@cptIt,

DEFINETRO:
public interface javax.sound.sampled.SourceDataLine
extends DataLine

A source data line is a data line to which data may be written. It acts as a source to its mixer. An application writes audio bytes to a source data line, which handles the buffering of the bytes and delivers them to the mixer. The mixer may mix the samples with those from other sources and then deliver the mix to a target such as an output port (which may represent an audio output device on a sound card).

There are two kinds of line that you can use for playing sound: a Clip and a SourceDataLine.

_USE:
Use a SourceDataLine for streaming data, such as a long sound file that won't all fit in memory at once, or a sound whose data can't be known in advance of playback.

jv'TargetDataLine'INTERFACE

name::
* McsEngl.jv'TargetDataLine'INTERFACE@cptIt,

DEFINETRO:
public interface javax.sound.sampled.TargetDataLine
extends DataLine

A target data line is a type of DataLine from which audio data can be read. The most common example is a data line that gets its data from an audio capture device. (The device is implemented as a mixer that writes to the target data line.)

_GENERIC:
All Superinterfaces:
DataLine, Line

jv'AudioFileFormat'CLASS

name::
* McsEngl.jv'AudioFileFormat'CLASS@cptIt,

DEFINETRO:
It is the class that represents a file format.

jv'AudioFormat'CLASS

name::
* McsEngl.jv'AudioFormat'CLASS@cptIt,

_DEFINITION:
public class javax.sound.sampled.AudioFormat
extends Object

It is the java-class that represents a audio data format.

PART: CONSTRUCTOR:
AudioFormat af = new AudioFormat(16000.0f, 16, 1, true, true);
- sample rate = 16000 Hz
- sample size = 16 bit
- channels = 1
- signed = true
- bigendian = true.
Constructs an AudioFormat with a linear PCM encoding and the given parameters. The frame size is set to the number of bytes required to contain one sample from each channel, and the frame rate is set to the sample rate.

jv'AudioFormat.Encoding'CLASS

name::
* McsEngl.jv'AudioFormat.Encoding'CLASS@cptIt,

CLASS:
public static class AudioFormat.Encoding extends Object

_SPECIFIC:
- ALAW
- PCM_SIGNED
- PCM_UNSIGNED
- ULAW

The AudioFormat class accommodates a number of common sound-file encoding techniques, including pulse-code modulation (PCM), mu-law encoding, and a-law encoding. These encoding techniques are predefined, but service providers can create new encoding types. The encoding that a specific format uses is named by its encoding field.

jv'PCM'ENCODING, jv'Pulse'Code'Modulation:
PCM is one kind of encoding of the sound waveform. The Java Sound API includes two PCM encodings that use linear quantization of amplitude, and signed or unsigned integer values. Linear quantization means that the number stored in each sample is directly proportional (except for any distortion) to the original sound pressure at that instant and similarly proportional to the displacement of a loudspeaker or eardrum that is vibrating with the sound at that instant. Compact discs, for example, use linear PCM-encoded sound. Mu-law encoding and a-law encoding are common nonlinear encodings that provide a more compressed version of the audio data; these encodings are typically used for telephony or recordings of speech. A nonlinear encoding maps the original sound's amplitude to the stored value using a nonlinear function, which can be designed to give more amplitude resolution to quiet sounds than to loud sounds.
[1.4.0 docs]

jv'MULAW'ENCONDING:
nonlinear encodings that provide a more compressed version of the audio data; these encodings are typically used for telephony or recordings of speech.

jv'ALAW'ENCONDING:
nonlinear encodings that provide a more compressed version of the audio data; these encodings are typically used for telephony or recordings of speech.

jv'AudioInputStream'CLASS

name::
* McsEngl.jv'AudioInputStream'CLASS@cptIt,

An audio input stream is an input stream with a specified audio format and length. The length is expressed in sample frames, not bytes. Several methods are provided for reading a certain number of bytes from the stream, or an unspecified number of bytes. The audio input stream keeps track of the last byte that was read. You can skip over an arbitrary number of bytes to get to a later position for reading. An audio input stream may support marks. When you set a mark, the current position is remembered so that you can return to it later.

CONSTRUCTOR:
byte audioBytes[] = out.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(audioBytes);
AudioFormat format = new AudioFormat(16000.0f, 16, 1, true, true);
int frameSizeInBytes = format.getFrameSize();
AudioInputStream audioInputStream = new AudioInputStream(bais, format, audioBytes.length / frameSizeInBytes);

AudioInputStream(InputStream stream, AudioFormat format, long numOfFrames)

jv'AudioSystem'CLASS

name::
* McsEngl.jv'AudioSystem'CLASS@cptIt,
* McsEngl.jv'AudioSystem@cptIt,

DEFINETRO:
public class javax.sound.sampled.AudioSystem
extends Object

The AudioSystem class acts as the entry point to the sampled-audio system resources. This class lets you query and access the mixers that are installed on the system. AudioSystem includes a number of methods for converting audio data between different formats, and for translating between audio files and streams. It also provides a method for obtaining a Line directly from the AudioSystem without dealing explicitly with mixers.
[1.5]

The AudioSystem class acts as a clearinghouse for audio components, including built-in services and separately installed services from third-party providers. AudioSystem serves as an application program's entry point for accessing these installed sampled-audio resources. You can query the AudioSystem to learn what sorts of resources have been installed, and then you can obtain access to them. For example, an application program might start out by asking the AudioSystem class whether there is a mixer that has a certain configuration, such as one of the input or output configurations illustrated earlier in the discussion of lines. From the mixer, the program would then obtain data lines, and so on.
[jdk 140]

jv'package.SPEECH.javax

name::
* McsEngl.jv'package.SPEECH.javax@cptIt,
* McsEngl.jv'speech'package@cptIt,

VERSION:
* JSAPI 2.0: 14-May-2004  JSAPI2, Community Draft, v0.8.0.61  JSAPI 2 Community review draft version
* Version 1.0 - October 26, 1998

jv'package.SPI.midi.sound.javax

name::
* McsEngl.jv'package.SPI.midi.sound.javax@cptIt,
* McsEngl.jv'spi.midi'package@cptIt,

jv'package.SPI.sampled.sound.javax

name::
* McsEngl.jv'package.SPI.sampled.sound.javax@cptIt,
* McsEngl.jv'spi.sampled'package@cptIt,

_DESCRIPTION:
Package javax.sound.sampled.spi
Supplies abstract classes for service providers to subclass when offering new audio devices, sound file readers and writers, or audio format converters.

Class Summary
* jv'AudioFileReader  Provider for audio file reading services.
* jv'AudioFileWriter  Provider for audio file writing services.
* jv'FormatConversionProvider  A format conversion provider provides format conversion services from one or more input formats to one or more output formats.
* jv'MixerProvider  A provider or factory for a particular mixer type.

jv'package.T

name::
* McsEngl.jv'package.T@cptIt,
* McsEngl.jv''package@cptIt,

jv'package.U

name::
* McsEngl.jv'package.U@cptIt,
* McsEngl.jv''package@cptIt,

jv'package.UTIL.java (since 1.0)

name::
* McsEngl.jv'package.UTIL.java (since 1.0)@cptIt,
* McsEngl.jv'util'package@cptIt,

DEFINETRO:
Package java.util
Contains the collections framework, legacy collection classes, event model, date and time facilities, internationalization, and miscellaneous utility classes (a string tokenizer, a random-number generator, and a bit array).

_WHOLE:
* UTIL-API#ql:jv'util'api#

Interface Summary
Collection<E>  The root interface in the collection hierarchy.
Comparator<T>  A comparison function, which imposes a total ordering on some collection of objects.
Enumeration<E>  An object that implements the Enumeration interface generates a series of elements, one at a time.
EventListener  A tagging interface that all event listener interfaces must extend.
Formattable  The Formattable interface must be implemented by any class that needs to perform custom formatting using the 's' conversion specifier of Formatter.
Iterator<E>  An iterator over a collection.
List<E>  An ordered collection (also known as a sequence).
ListIterator<E>  An iterator for lists that allows the programmer to traverse the list in either direction, modify the list during iteration, and obtain the iterator's current position in the list.
Map<K,V>#ql:"jv'map"#  An object that maps keys to values.
Map.Entry<K,V>  A map entry (key-value pair).
Observer  A class can implement the Observer interface when it wants to be informed of changes in observable objects.
Queue<E>  A collection designed for holding elements prior to processing.
RandomAccess  Marker interface used by List implementations to indicate that they support fast (generally constant time) random access.
Set<E>  A collection that contains no duplicate elements.
SortedMap<K,V>  A map that further guarantees that it will be in ascending key order, sorted according to the natural ordering of its keys (see the Comparable interface), or by a comparator provided at sorted map creation time.
SortedSet<E>  A set that further guarantees that its iterator will traverse the set in ascending element order, sorted according to the natural ordering of its elements (see Comparable), or by a Comparator provided at sorted set creation time.

Class Summary
AbstractCollection<E>  This class provides a skeletal implementation of the Collection interface, to minimize the effort required to implement this interface.
AbstractList<E>  This class provides a skeletal implementation of the List interface to minimize the effort required to implement this interface backed by a "random access" data store (such as an array).
AbstractMap<K,V>  This class provides a skeletal implementation of the Map interface, to minimize the effort required to implement this interface.
AbstractQueue<E>  This class provides skeletal implementations of some Queue operations.
AbstractSequentialList<E>  This class provides a skeletal implementation of the List interface to minimize the effort required to implement this interface backed by a "sequential access" data store (such as a linked list).
AbstractSet<E>  This class provides a skeletal implementation of the Set interface to minimize the effort required to implement this interface.
ArrayList<E>  Resizable-array implementation of the List interface.
Arrays  This class contains various methods for manipulating arrays (such as sorting and searching).
BitSet  This class implements a vector of bits that grows as needed.
Calendar  The Calendar class is an abstract class that provides methods for converting between a specific instant in time and a set of calendar fields such as YEAR, MONTH, DAY_OF_MONTH, HOUR, and so on, and for manipulating the calendar fields, such as getting the date of the next week.
Collections  This class consists exclusively of static methods that operate on or return collections.
Currency  Represents a currency.
Date  The class Date represents a specific instant in time, with millisecond precision.
Dictionary<K,V>  The Dictionary class is the abstract parent of any class, such as Hashtable, which maps keys to values.
EnumMap<K extends Enum<K>,V>  A specialized Map implementation for use with enum type keys.
EnumSet<E extends Enum<E>>  A specialized Set implementation for use with enum types.
EventListenerProxy  An abstract wrapper class for an EventListener class which associates a set of additional parameters with the listener.
* EventObject#ql:jv'eventobject#  The root class from which all event state objects shall be derived.
FormattableFlags  FomattableFlags are passed to the Formattable.formatTo() method and modify the output format for Formattables.
Formatter  An interpreter for printf-style format strings.
GregorianCalendar  GregorianCalendar is a concrete subclass of Calendar and provides the standard calendar system used by most of the world.
HashMap<K,V>  Hash table based implementation of the Map interface.
HashSet<E>  This class implements the Set interface, backed by a hash table (actually a HashMap instance).
Hashtable<K,V>  This class implements a hashtable, which maps keys to values.
IdentityHashMap<K,V>  This class implements the Map interface with a hash table, using reference-equality in place of object-equality when comparing keys (and values).
LinkedHashMap<K,V>  Hash table and linked list implementation of the Map interface, with predictable iteration order.
LinkedHashSet<E>  Hash table and linked list implementation of the Set interface, with predictable iteration order.
* LinkedList<E>#ql:"jv'linkedlist'class"#  Linked list implementation of the List interface.
ListResourceBundle  ListResourceBundle is an abstract subclass of ResourceBundle that manages resources for a locale in a convenient and easy to use list.
Locale  A Locale object represents a specific geographical, political, or cultural region.
Observable  This class represents an observable object, or "data" in the model-view paradigm.
PriorityQueue<E>  An unbounded priority queue based on a priority heap.
Properties  The Properties class represents a persistent set of properties.
PropertyPermission  This class is for property permissions.
PropertyResourceBundle  PropertyResourceBundle is a concrete subclass of ResourceBundle that manages resources for a locale using a set of static strings from a property file.
Random  An instance of this class is used to generate a stream of pseudorandom numbers.
ResourceBundle  Resource bundles contain locale-specific objects.
Scanner  A simple text scanner which can parse primitive types and strings using regular expressions.
SimpleTimeZone  SimpleTimeZone is a concrete subclass of TimeZone that represents a time zone for use with a Gregorian calendar.
Stack<E>  The Stack class represents a last-in-first-out (LIFO) stack of objects.
StringTokenizer  The string tokenizer class allows an application to break a string into tokens.
Timer  A facility for threads to schedule tasks for future execution in a background thread.
TimerTask  A task that can be scheduled for one-time or repeated execution by a Timer.
TimeZone  TimeZone represents a time zone offset, and also figures out daylight savings.
TreeMap<K,V>  Red-Black tree based implementation of the SortedMap interface.
TreeSet<E>  This class implements the Set interface, backed by a TreeMap instance.
UUID  A class that represents an immutable universally unique identifier (UUID).
Vector<E>  The Vector class implements a growable array of objects.
WeakHashMap<K,V>  A hashtable-based Map implementation with weak keys.

Enum Summary
Formatter.BigDecimalLayoutForm  

Exception Summary
ConcurrentModificationException  This exception may be thrown by methods that have detected concurrent modification of an object when such modification is not permissible.
DuplicateFormatFlagsException  Unchecked exception thrown when duplicate flags are provided in the format specifier.
EmptyStackException  Thrown by methods in the Stack class to indicate that the stack is empty.
FormatFlagsConversionMismatchException  Unchecked exception thrown when a conversion and flag are incompatible.
FormatterClosedException  Unchecked exception thrown when the formatter has been closed.
IllegalFormatCodePointException  Unchecked exception thrown when a character with an invalid Unicode code point as defined by Character.isValidCodePoint(int) is passed to the Formatter.
IllegalFormatConversionException  Unchecked exception thrown when the argument corresponding to the format specifier is of an incompatible type.
IllegalFormatException  Unchecked exception thrown when a format string contains an illegal syntax or a format specifier that is incompatible with the given arguments.
IllegalFormatFlagsException  Unchecked exception thrown when an illegal combination flags is given.
IllegalFormatPrecisionException  Unchecked exception thrown when the precision is a negative value other than -1, the conversion does not support a precision, or the value is otherwise unsupported.
IllegalFormatWidthException  Unchecked exception thrown when the format width is a negative value other than -1 or is otherwise unsupported.
InputMismatchException  Thrown by a Scanner to indicate that the token retrieved does not match the pattern for the expected type, or that the token is out of range for the expected type.
InvalidPropertiesFormatException  Thrown to indicate that an operation could not complete because the input did not conform to the appropriate XML document type for a collection of properties, as per the Properties specification.
MissingFormatArgumentException  Unchecked exception thrown when there is a format specifier which does not have a corresponding argument or if an argument index refers to an argument that does not exist.
MissingFormatWidthException  Unchecked exception thrown when the format width is required.
MissingResourceException  Signals that a resource is missing.
NoSuchElementException  Thrown by the nextElement method of an Enumeration to indicate that there are no more elements in the enumeration.
TooManyListenersException  The TooManyListenersException Exception is used as part of the Java Event model to annotate and implement a unicast special case of a multicast Event Source.
UnknownFormatConversionException  Unchecked exception thrown when an unknown conversion is given.
UnknownFormatFlagsException  Unchecked exception thrown when an unknown flag is given.

jv'Collection'INTERFACE

name::
* McsEngl.jv'Collection'INTERFACE@cptIt,
* McsEngl.jv'interface.Collection@cptIt,

_DEFINITION:
The root interface in the collection hierarchy.

Method Summary:
** boolean add (Object o) Ensures that this collection contains the specified element (optional operation).
** boolean addAll (Collection c) Adds all of the elements in the specified collection to this collection (optional operation).
** void clear () Removes all of the elements from this collection (optional operation).
** boolean contains (Object o) Returns true if this collection contains the specified element.
** boolean containsAll (Collection c) Returns true if this collection contains all of the elements in the specified collection.
** boolean equals (Object o) Compares the specified object with this collection for equality.
** int hashCode () Returns the hash code value for this collection.
** boolean isEmpty () Returns true if this collection contains no elements.
** Iterator iterator () Returns an iterator over the elements in this collection.
** boolean remove (Object o) Removes a single instance of the specified element from this collection, if it is present (optional operation).
** boolean removeAll (Collection c) Removes all this collection's elements that are also contained in the specified collection (optional operation).
** boolean retainAll (Collection c) Retains only the elements in this collection that are contained in the specified collection (optional operation).
** int size () Returns the number of elements in this collection.
** Object[] toArray () Returns an array containing all of the elements in this collection.
** Object[] toArray (Object[] a) Returns an array containing all of the elements in this collection whose runtime type is that of the specified array.
[jdk1.2]

> What is the best way to store, for example, a collection of > Employee objects that you set with information you got back in a > result set. Currently I'm storing these employee objects in a vector > and then use an iterator to pull out the Employee objects and get > the information I need (ie-phone number, etc). Would it be better > (faster? less overhead?) to just store these objects using the > generic Collection class?>
Hi Rick,

There is no generic Collection class; java.util.Collection is an interface, so you still have to decide what concrete implementation to use. Also, how you store the objects is a separate decision from what reference type you require the caller use to access the objects. Here are three factors to consider:
(1) Synchronization: The Vector class is synchronized everywhere. The Collection implementation most similar to Vector is ArrayList, which is not synchronized by default, but can be synchronized in a variety of ways. I personally prefer to add synchronization where I need it, so I almost always start with ArrayList, unless I know for sure that the synchronization provided by Vector is exactly what I need.
(2) Abstraction: Does the caller really care what data structure is used?If not, it is better abstraction to use the iterator provided by the base Collection interface. OTOH, if the situation truly calls for a feature specific to certain data structures, it is probably better design to use a type that mandates the appropriate collection subtype.
(3) Performance: As a general rule, adding another layer of abstraction reduces performance. So, you should expect to see better performance by exposing the implementation type (e.g. ArrayList) directly to the caller.The speed improvement comes from two sources: (1) the caller does not need an iterator and (2) a smart JITter might be able to treat all ArrayList methods as final and avoid virtual invocation overhead. In my experience these performance differences are relatively minor, so I would begin by choosing the "best" abstraction, and then make sure the implementation gets synchronization right. The only time I would then undo the abstractions in the design is if performance becomes critical, and profiling identifies the abstractions as the bottleneck.
Stuart Halloway DevelopMentor http://staff.develop.com/halloway

jv'EventListener'INTERFACE (since 1.1)

name::
* McsEngl.jv'EventListener'INTERFACE (since 1.1)@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:interface.eventlistener#.

DEFINETRO:
public interface java.util.EventListener

** A tagging interface that all event listener interfaces must extend.
[API1.1]
** To respond to an event a-component-receives you register an EventListener for the event type with the component.
EventListeners are classes which implement a java.util.EventListener interface.
[Harold Course 1997]

SPESIFEPTO:
All Known Subinterfaces:
Action, ActionListener, AdjustmentListener, AncestorListener, AWTEventListener, BeanContextMembershipListener, BeanContextServiceRevokedListener, BeanContextServices, BeanContextServicesListener, CaretListener, CellEditorListener, ChangeListener, ComponentListener, ConnectionEventListener, ContainerListener, ControllerEventListener, DocumentListener, DragGestureListener, DragSourceListener, DragSourceMotionListener, DropTargetListener, FlavorListener, FocusListener, HandshakeCompletedListener, HierarchyBoundsListener, HierarchyListener, HyperlinkListener, IIOReadProgressListener, IIOReadUpdateListener, IIOReadWarningListener, IIOWriteProgressListener, IIOWriteWarningListener, InputMethodListener, InternalFrameListener, ItemListener, KeyListener, LineListener, ListDataListener, ListSelectionListener, MenuDragMouseListener, MenuKeyListener, MenuListener, MetaEventListener, MouseInputListener, MouseListener, MouseMotionListener, MouseWheelListener, NamespaceChangeListener, NamingListener, NodeChangeListener, NotificationListener, ObjectChangeListener, PopupMenuListener, PreferenceChangeListener, PropertyChangeListener, RowSetListener, SSLSessionBindingListener, TableColumnModelListener, TableModelListener, TextListener, TreeExpansionListener, TreeModelListener, TreeSelectionListener, TreeWillExpandListener, UndoableEditListener, UnsolicitedNotificationListener, VetoableChangeListener, WindowFocusListener, WindowListener, WindowStateListener

All Known Implementing Classes:
AbstractAction, AbstractButton.ButtonChangeListener, AWTEventListenerProxy, AWTEventMulticaster, BasicButtonListener, BasicColorChooserUI.PropertyHandler, BasicComboBoxEditor, BasicComboBoxEditor.UIResource, BasicComboBoxUI.FocusHandler, BasicComboBoxUI.ItemHandler, BasicComboBoxUI.KeyHandler, BasicComboBoxUI.ListDataHandler, BasicComboBoxUI.PropertyChangeHandler, BasicComboPopup.InvocationKeyHandler, BasicComboPopup.InvocationMouseHandler, BasicComboPopup.InvocationMouseMotionHandler, BasicComboPopup.ItemHandler, BasicComboPopup.ListDataHandler, BasicComboPopup.ListMouseHandler, BasicComboPopup.ListMouseMotionHandler, BasicComboPopup.ListSelectionHandler, BasicComboPopup.PropertyChangeHandler, BasicDesktopIconUI.MouseInputHandler, BasicDesktopPaneUI.CloseAction, BasicDesktopPaneUI.MaximizeAction, BasicDesktopPaneUI.MinimizeAction, BasicDesktopPaneUI.NavigateAction, BasicDesktopPaneUI.OpenAction, BasicDirectoryModel, BasicFileChooserUI.ApproveSelectionAction, BasicFileChooserUI.CancelSelectionAction, BasicFileChooserUI.ChangeToParentDirectoryAction, BasicFileChooserUI.DoubleClickListener, BasicFileChooserUI.GoHomeAction, BasicFileChooserUI.NewFolderAction, BasicFileChooserUI.SelectionListener, BasicFileChooserUI.UpdateAction, BasicInternalFrameTitlePane.CloseAction, BasicInternalFrameTitlePane.IconifyAction, BasicInternalFrameTitlePane.MaximizeAction, BasicInternalFrameTitlePane.MoveAction, BasicInternalFrameTitlePane.PropertyChangeHandler, BasicInternalFrameTitlePane.RestoreAction, BasicInternalFrameTitlePane.SizeAction, BasicInternalFrameUI.BasicInternalFrameListener, BasicInternalFrameUI.BorderListener, BasicInternalFrameUI.ComponentHandler, BasicInternalFrameUI.GlassPaneDispatcher, BasicInternalFrameUI.InternalFramePropertyChangeListener, BasicLabelUI, BasicListUI.FocusHandler, BasicListUI.ListDataHandler, BasicListUI.ListSelectionHandler, BasicListUI.MouseInputHandler, BasicListUI.PropertyChangeHandler, BasicMenuItemUI.MouseInputHandler, BasicMenuUI.ChangeHandler, BasicMenuUI.MouseInputHandler, BasicOptionPaneUI.ButtonActionListener, BasicOptionPaneUI.PropertyChangeHandler, BasicProgressBarUI.ChangeHandler, BasicRootPaneUI, BasicScrollBarUI.ArrowButtonListener, BasicScrollBarUI.ModelListener, BasicScrollBarUI.PropertyChangeHandler, BasicScrollBarUI.ScrollListener, BasicScrollBarUI.TrackListener, BasicScrollPaneUI.HSBChangeListener, BasicScrollPaneUI.MouseWheelHandler, BasicScrollPaneUI.PropertyChangeHandler, BasicScrollPaneUI.ViewportChangeHandler, BasicScrollPaneUI.VSBChangeListener, BasicSliderUI.ActionScroller, BasicSliderUI.ChangeHandler, BasicSliderUI.ComponentHandler, BasicSliderUI.FocusHandler, BasicSliderUI.PropertyChangeHandler, BasicSliderUI.ScrollListener, BasicSliderUI.TrackListener, BasicSplitPaneDivider, BasicSplitPaneDivider.MouseHandler, BasicSplitPaneUI.FocusHandler, BasicSplitPaneUI.KeyboardDownRightHandler, BasicSplitPaneUI.KeyboardEndHandler, BasicSplitPaneUI.KeyboardHomeHandler, BasicSplitPaneUI.KeyboardResizeToggleHandler, BasicSplitPaneUI.KeyboardUpLeftHandler, BasicSplitPaneUI.PropertyHandler, BasicTabbedPaneUI.FocusHandler, BasicTabbedPaneUI.MouseHandler, BasicTabbedPaneUI.PropertyChangeHandler, BasicTabbedPaneUI.TabSelectionHandler, BasicTableHeaderUI.MouseInputHandler, BasicTableUI.FocusHandler, BasicTableUI.KeyHandler, BasicTableUI.MouseInputHandler, BasicTextUI.BasicCaret, BasicToolBarUI.DockingListener, BasicToolBarUI.FrameListener, BasicToolBarUI.PropertyListener, BasicToolBarUI.ToolBarContListener, BasicToolBarUI.ToolBarFocusListener, BasicTreeUI.CellEditorHandler, BasicTreeUI.ComponentHandler, BasicTreeUI.FocusHandler, BasicTreeUI.KeyHandler, BasicTreeUI.MouseHandler, BasicTreeUI.MouseInputHandler, BasicTreeUI.PropertyChangeHandler, BasicTreeUI.SelectionModelPropertyChangeHandler, BasicTreeUI.TreeCancelEditingAction, BasicTreeUI.TreeExpansionHandler, BasicTreeUI.TreeHomeAction, BasicTreeUI.TreeIncrementAction, BasicTreeUI.TreeModelHandler, BasicTreeUI.TreePageAction, BasicTreeUI.TreeSelectionHandler, BasicTreeUI.TreeToggleAction, BasicTreeUI.TreeTraverseAction, BeanContextChildSupport, BeanContextServicesSupport, BeanContextServicesSupport.BCSSProxyServiceProvider, BeanContextSupport, Checkbox.AccessibleAWTCheckbox, Component.AccessibleAWTComponent.AccessibleAWTComponentHandler, Component.AccessibleAWTComponent.AccessibleAWTFocusHandler, ComponentAdapter, Container.AccessibleAWTContainer.AccessibleContainerHandler, ContainerAdapter, DefaultCaret, DefaultCellEditor.EditorDelegate, DefaultEditorKit.BeepAction, DefaultEditorKit.CopyAction, DefaultEditorKit.CutAction, DefaultEditorKit.DefaultKeyTypedAction, DefaultEditorKit.InsertBreakAction, DefaultEditorKit.InsertContentAction, DefaultEditorKit.InsertTabAction, DefaultEditorKit.PasteAction, DefaultTableColumnModel, DefaultTreeCellEditor, DragSourceAdapter, DragSourceContext, DropTarget, DropTarget.DropTargetAutoScroller, DropTargetAdapter, EventListenerProxy, FocusAdapter, FormView, FormView.MouseEventListener, HierarchyBoundsAdapter, HTMLEditorKit.HTMLTextAction, HTMLEditorKit.InsertHTMLTextAction, HTMLEditorKit.LinkController, InternalFrameAdapter, JCheckBox.AccessibleJCheckBox, JCheckBoxMenuItem.AccessibleJCheckBoxMenuItem, JComboBox, JComponent.AccessibleJComponent.AccessibleContainerHandler, JComponent.AccessibleJComponent.AccessibleFocusHandler, JEditorPane.AccessibleJEditorPane, JEditorPane.AccessibleJEditorPaneHTML, JEditorPane.JEditorPaneAccessibleHypertextSupport, JList.AccessibleJList, JMenu.AccessibleJMenu, JMenu.WinListener, JMenuItem.AccessibleJMenuItem, JPasswordField.AccessibleJPasswordField, JPopupMenu.AccessibleJPopupMenu, JRadioButton.AccessibleJRadioButton, JRadioButtonMenuItem.AccessibleJRadioButtonMenuItem, JScrollPane.AccessibleJScrollPane, JSpinner.AccessibleJSpinner, JSpinner.DateEditor, JSpinner.DefaultEditor, JSpinner.ListEditor, JSpinner.NumberEditor, JTabbedPane.AccessibleJTabbedPane, JTabbedPane.ModelListener, JTable, JTable.AccessibleJTable, JTableHeader, JTextArea.AccessibleJTextArea, JTextComponent.AccessibleJTextComponent, JTextField.AccessibleJTextField, JToggleButton.AccessibleJToggleButton, JTree.AccessibleJTree, JTree.TreeModelHandler, JTree.TreeSelectionRedirector, JViewport.ViewListener, KeyAdapter, List.AccessibleAWTList, MetalComboBoxEditor, MetalComboBoxEditor.UIResource, MetalComboBoxUI.MetalPropertyChangeListener, MetalFileChooserUI.DirectoryComboBoxAction, MetalFileChooserUI.FilterComboBoxModel, MetalFileChooserUI.SingleClickListener, MetalLabelUI, MetalRootPaneUI, MetalSliderUI.MetalPropertyListener, MetalToolBarUI.MetalContainerListener, MetalToolBarUI.MetalDockingListener, MetalToolBarUI.MetalRolloverListener, MouseAdapter, MouseDragGestureRecognizer, MouseInputAdapter, MouseMotionAdapter, ProgressMonitor.AccessibleProgressMonitor, PropertyChangeListenerProxy, RelationService, StyledEditorKit.AlignmentAction, StyledEditorKit.BoldAction, StyledEditorKit.FontFamilyAction, StyledEditorKit.FontSizeAction, StyledEditorKit.ForegroundAction, StyledEditorKit.ItalicAction, StyledEditorKit.StyledTextAction, StyledEditorKit.UnderlineAction, TextAction, TextArea.AccessibleAWTTextArea, TextComponent.AccessibleAWTTextComponent, TextField.AccessibleAWTTextField, ToolTipManager, ToolTipManager.insideTimerAction, ToolTipManager.outsideTimerAction, ToolTipManager.stillInsideTimerAction, UndoManager, VetoableChangeListenerProxy, WindowAdapter

jv'ActionListener

name::
* McsEngl.jv'ActionListener@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:interface.actionlistener#.

PACKAGE: java.awt.event.

SUPERINTERFACE: java.util.EventListener

The listener interface for receiving action events.

jv'AdjustmentListener

name::
* McsEngl.jv'AdjustmentListener@cptIt,

jv'ComponentListener

name::
* McsEngl.jv'ComponentListener@cptIt,

jv'ContainerListener

name::
* McsEngl.jv'ContainerListener@cptIt,

jv'FocusListener

name::
* McsEngl.jv'FocusListener@cptIt,

jv'ItemListener

name::
* McsEngl.jv'ItemListener@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:interface.itemlistener#.

PACKAGE: java.awt.event.

SUPERINTERFACE: java.util.EventListener

The listener interface for receiving item events.

jv'KeyListener

name::
* McsEngl.jv'KeyListener@cptIt,

jv'MouseListener

name::
* McsEngl.jv'MouseListener@cptIt,

BE CAREFUL: You must remove first the mouselistener from a componet and then add again if you dispose the frame on which lies and then create another one. This happen to me when I change locales.
[hknu_2000jan24]

jv'MouseMotionListener

name::
* McsEngl.jv'MouseMotionListener@cptIt,

jv'TextListener

name::
* McsEngl.jv'TextListener@cptIt,

jv'WindowListener

name::
* McsEngl.jv'WindowListener@cptIt,

jv'PropertyChangeListener

name::
* McsEngl.jv'PropertyChangeListener@cptIt,

jv'VetoableChangeListener

name::
* McsEngl.jv'VetoableChangeListener@cptIt,

jv'List'INTERFACE (since 1.2)

name::
* McsEngl.jv'List'INTERFACE (since 1.2)@cptIt,

DEFINETRO:
public interface java.uti.List<E>
extends Collection<E>

An ordered collection (also known as a sequence). The user of this interface has precise control over where in the list each element is inserted. The user can access elements by their integer index (position in the list), and search for elements in the list.

jv'Map'INTERFACE (since 1.2)

name::
* McsEngl.jv'Map'INTERFACE (since 1.2)@cptIt,
* McsEngl.jv'MapInterface@cptIt,

_DEFINETRO:
public interface Map<K,V>

An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value.

SOURCE:
* HTML-API150#pl:/JAVA/DOCS/150/api/java/util/Map.html#:

PACKAGE: java.util,

Inner Class Summary:
** static interface Map.Entry A map entry (key-value pair).

Method Summary:
** void clear ()
Removes all mappings from this map (optional operation).
** boolean containsKey (Object key)
Returns true if this map contains a mapping for the specified key.
** boolean containsValue (Object value)
Returns true if this map maps one or more keys to the specified value.
** Set entrySet ()
Returns a set view of the mappings contained in this map.
** boolean equals (Object o)
Compares the specified object with this map for equality.
** Object get (Object key)
Returns the value to which this map maps the specified key.
** int hashCode ()
Returns the hash code value for this map.
** boolean isEmpty ()
Returns true if this map contains no key-value mappings.
** Set keySet ()
Returns a set view of the keys contained in this map.
** Object put (Object key, Object value)
Associates the specified value with the specified key in this map (optional operation).
** void putAll (Map t)
Copies all of the mappings from the specified map to this map (optional operation).
** Object remove (Object key)
Removes the mapping for this key from this map if present (optional operation).
** int size ()
Returns the number of key-value mappings in this map.
** Collection values ()
Returns a collection view of the values contained in this map.
[jdk1.2]

_SPESIFEPTO:
All Known Subinterfaces:
ConcurrentMap<K,V>, SortedMap<K,V>

All Known Implementing Classes:
AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, EnumMap, HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider, RenderingHints, TabularDataSupport, TreeMap, UIDefaults, WeakHashMap

* EXAMPLE#ql:jv'ex.map#:

* jv'HashMap: Hash table based implementation of the Map interface. This implementation provides all of the optional map operations, and permits null values and the null key. (The HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized and permits nulls.) This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.

* jv'TreeMap: Red-Black tree based implementation of the SortedMap interface. This class guarantees that the map will be in ascending key order, sorted according to the natural order for the key's class (see Comparable), or by the comparator provided at creation time, depending on which constructor is used.
- firstKey(): the only class you get a key without iteration.
- get(firstKey())
- EXAMPLE#ql:jv'ex.treemap#

jv'ArrayList'CLASS (since 1.2)

name::
* McsEngl.jv'ArrayList'CLASS (since 1.2)@cptIt,

DEFINETRO:
public class java.util.ArrayList<E>
extends AbstractList<E>
implements List#ql:jv'list'interface#<E>, RandomAccess, Cloneable, Serializable

Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is used internally to store the list. (This class is roughly equivalent to Vector#ql:jv'vector#, except that it is unsynchronized#ql:jv'synchronized'statement#.)

jv'Collections'CLASS (since 1.2)

name::
* McsEngl.jv'Collections'CLASS (since 1.2)@cptIt,

public class java.uti.Collections
extends Object

This class consists exclusively of static methods that operate on or return collections. It contains polymorphic algorithms that operate on collections, "wrappers", which return a new collection backed by a specified collection, and a few other odds and ends.

public static <T> List<T> jv'synchronizedList(List<T> list)
Returns a synchronized (thread-safe) list backed by the specified list. In order to guarantee serial access, it is critical that all access to the backing list is accomplished through the returned list.

It is imperative that the user manually synchronize on the returned list when iterating over it:
List list = Collections.synchronizedList(new ArrayList());
...
synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}

Failure to follow this advice may result in non-deterministic behavior.
The returned list will be serializable if the specified list is serializable.

jv'EventObject'CLASS (since 1.1)

name::
* McsEngl.jv'EventObject'CLASS (since 1.1)@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:java.util.eventobject rl3#.

DEFINETRO:
public class java.uti.EventObject
extends Object
implements Serializable

The root class from which all event state objects shall be derived.

All Events are constructed with a reference to the object, the "source", that is logically deemed to be the object upon which the Event in question initially occurred upon.
[api15]

PACKAGE: java.util.

SUPERCLASS: java.lang.Object.

jv'LinkedList'CLASS (since 1.2)

name::
* McsEngl.jv'LinkedList'CLASS (since 1.2)@cptIt,

public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Queue<E>, Cloneable, Serializable

Linked list implementation of the List interface. Implements all optional list operations, and permits all elements (including null). In addition to implementing the List interface, the LinkedList class provides uniformly named methods to get, remove and insert an element at the beginning and end of the list. These operations allow linked lists to be used as a stack, queue, or double-ended queue (deque).

The class implements the Queue interface, providing first-in-first-out queue operations for add, poll, etc. Other stack and deque operations could be easily recast in terms of the standard list operations. They're included here primarily for convenience, though they may run slightly faster than the equivalent List operations.

All of the operations perform as could be expected for a doubly-linked list. Operations that index into the list will traverse the list from the beginning or the end, whichever is closer to the specified index.

Note that this implementation is not synchronized. If multiple threads access a list concurrently, and at least one of the threads modifies the list structurally, it must be synchronized externally. (A structural modification is any operation that adds or deletes one or more elements; merely setting the value of an element is not a structural modification.) This is typically accomplished by synchronizing on some object that naturally encapsulates the list. If no such object exists, the list should be "wrapped" using the Collections.synchronizedList method. This is best done at creation time, to prevent accidental unsynchronized access to the list:

List list = Collections.synchronizedList(new LinkedList(...));


The iterators returned by the this class's iterator and listIterator methods are fail-fast: if the list is structurally modified at any time after the iterator is created, in any way except through the Iterator's own remove or add methods, the iterator will throw a ConcurrentModificationException. Thus, in the face of concurrent modification, the iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future.

Note that the fail-fast behavior of an iterator cannot be guaranteed as it is, generally speaking, impossible to make any hard guarantees in the presence of unsynchronized concurrent modification. Fail-fast iterators throw ConcurrentModificationException on a best-effort basis. Therefore, it would be wrong to write a program that depended on this exception for its correctness: the fail-fast behavior of iterators should be used only to detect bugs.

This class is a member of the Java Collections Framework.

EXAMPLE#ql:jv'ex.linkedlist#

jv'Vector'CLASS

name::
* McsEngl.jv'Vector'CLASS@cptIt,
* McsEngl.jv'Vector@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.vector#.

PACKAGE: java.util.

SUPERCLASS: java.lang.Object.

_DEFINITION:
The Vector class implements a growable array of objects. Like an array, it contains components that can be accessed using an integer index. However, the size of a Vector can grow or shrink as needed to accommodate adding and removing items after the Vector has been created.
Each vector tries to optimize storage management by maintaining a capacity and a capacityIncrement. The capacity is always at least as large as the vector size; it is usually larger because as components are added to the vector, the vector's storage increases in chunks the size of capacityIncrement. An application can increase the capacity of a vector before inserting a large number of components; this reduces the amount of incremental reallocation.
[API1.1]

Collections are a new feature of the Java 2 Platform,
Collections are used to organize and operate on groups of data elements.
For example, ArrayList is a replacement for Vector, and HashMap is similar to Hashtable.
[jdk1.2]

Field Summary:
** protected int capacityIncrement The amount by which the capacity of the vector is automatically incremented when its size becomes greater than its capacity.
** protected int elementCount The number of valid components in this Vector object.
** protected Object[] elementData The array buffer into which the components of the vector are stored.
Fields inherited from class java.util.AbstractList:
** Constructor Summary:
** Vector () Constructs an empty vector so that its internal data array has size 10 and its standard capacity increment is zero.
** Vector (Collection c) Constructs a vector containing the elements of the specified collection, in the order they are returned by the collection's iterator.
** Vector (int initialCapacity) Constructs an empty vector with the specified initial capacity and with its capacity increment equal to zero.
** Vector (int initialCapacity, int capacityIncrement) Constructs an empty vector with the specified initial capacity and capacity increment.
Method Summary:
** void add (int index, Object element) Inserts the specified element at the specified position in this Vector.
** boolean add (Object o) Appends the specified element to the end of this Vector.
** boolean addAll (Collection c) Appends all of the elements in the specified Collection to the end of this Vector, in the order that they are returned by the specified Collection's Iterator.
** boolean addAll (int index, Collection c) Inserts all of the elements in in the specified Collection into this Vector at the specified position.
** void addElement (Object obj) Adds the specified component to the end of this vector, increasing its size by one.
** void insertElementAt (Object obj, int index) Inserts the specified object as a component in this vector at the specified index.
** Object set (int index, Object element) Replaces the element at the specified position in this Vector with the specified element.
** void setElementAt (Object obj, int index) Sets the component at the specified index of this vector to be the specified object.

** Object remove (int index) Removes the element at the specified position in this Vector.
** boolean remove (Object o) Removes the first occurrence of the specified element in this Vector If the Vector does not contain the element, it is unchanged.
** boolean removeAll (Collection c) Removes from this Vector all of its elements that are contained in the specified Collection.
** void removeAllElements () Removes all components from this vector and sets its size to zero. This method is identical in functionality to the clear method (which is part of the List interface).
** boolean removeElement (Object obj) Removes the first (lowest-indexed) occurrence of the argument from this vector.
** void removeElementAt (int index) Deletes the component at the specified index.
** protected void removeRange (int fromIndex, int toIndex) Removes from this List all of the elements whose index is between fromIndex, inclusive and toIndex, exclusive.

** Object elementAt (int index) Returns the component at the specified index. This method is identical in functionality to the get method (which is part of the List interface).
** Object firstElement () Returns the first component (the item at index 0) of this vector.
** Object get (int index) Returns the element at the specified position in this Vector.
** Object lastElement () Returns the last component of the vector.

** boolean contains (Object elem) Tests if the specified object is a component in this vector.
** boolean containsAll (Collection c) Returns true if this Vector contains all of the elements in the specified Collection.
** int indexOf (Object elem) Searches for the first occurence of the given argument, testing for equality using the equals method.
** int indexOf (Object elem, int index) Searches for the first occurence of the given argument, beginning the search at index, and testing for equality using the equals method.
** int lastIndexOf (Object elem) Returns the index of the last occurrence of the specified object in this vector.
** int lastIndexOf (Object elem, int index) Searches backwards for the specified object, starting from the specified index, and returns an index to it.


** int capacity () Returns the current capacity of this vector.
** void clear () Removes all of the elements from this Vector.
** Object clone () Returns a clone of this vector.
** void copyInto (Object[] anArray) Copies the components of this vector into the specified array.
** Enumeration elements () Returns an enumeration of the components of this vector.
** void ensureCapacity (int minCapacity) Increases the capacity of this vector, if necessary, to ensure that it can hold at least the number of components specified by the minimum capacity argument.
** boolean equals (Object o) Compares the specified Object with this Vector for equality.
** int hashCode () Returns the hash code value for this Vector.
** boolean isEmpty () Tests if this vector has no components.
** boolean retainAll (Collection c) Retains only the elements in this Vector that are contained in the specified Collection.
** void setSize (int newSize) Sets the size of this vector.
** int size () Returns the number of components in this vector.
** List subList (int fromIndex, int toIndex) Returns a view of the portion of this List between fromIndex, inclusive, and toIndex, exclusive.
** Object[] toArray () Returns an array containing all of the elements in this Vector in the correct order.
** Object[] toArray (Object[] a) Returns an array containing all of the elements in this Vector in the correct order.
** String toString () Returns a string representation of this Vector, containing the String representation of each element.
** void trimToSize () Trims the capacity of this vector to be the vector's current size.
Methods inherited from class java.util.AbstractList:
iterator, listIterator, listIterator
[jdk1.2]

Example#ql:jv'ex.vector#.

jv'package.V

name::
* McsEngl.jv'package.V@cptIt,

jv'package.W

name::
* McsEngl.jv'package.W@cptIt,

jv'package.X

name::
* McsEngl.jv'package.X@cptIt,

jv'package.Y

name::
* McsEngl.jv'package.Y@cptIt,

jv'package.Z

name::
* McsEngl.jv'package.Z@cptIt,

jv'codeSrc.SENTENCE

name::
* McsEngl.jv'codeSrc.SENTENCE@cptIt,
* McsEngl.jv'INSTRUCTION@cptIt, {2014-02-25}
* McsEngl.jv'instruction.STATEMENT@cptIt,
* McsEngl.jv'statement@cptIt,

_DEFINITION:
** A statement is a PROCEDURE-INSTRUCTION (CALLING or NOT-CALLING).
[hknu_2002-05-10]
===
** The sequence of execution of a Java-program#ql:jv'program# is controlled by statements, which are executed for their effect and do not have values.
Some statements contain other statements as part of their structure; such other statements are substatements of the statement. We say that statement S immediately contains statement U if there is no statement T different from S and U such that S contains T and T contains U.
In the same manner, some statements contain expressions#ql:jv'expression# (§15) as part of their structure.
[lang spec, 1996aug]

PRODUCTION:
#jv'Statement#:
 StatementWithoutTrailingSubstatement#ql:[Field JAVA:StatementWithoutTrailingSubstatement]#
 LabeledStatement
 IfThenStatement
 IfThenElseStatement
 WhileStatement
 ForStatement

#jv'StatementNoShortIf#:
 StatementWithoutTrailingSubstatement
 LabeledStatementNoShortIf
 IfThenElseStatementNoShortIf
 WhileStatementNoShortIf
 ForStatementNoShortIf

#jv'StatementWithoutTrailingSubstatement#:
 Block
 EmptyStatement
 ExpressionStatement
 SwitchStatement
 DoStatement
 BreakStatement
 ContinueStatement
 ReturnStatement
 SynchronizedStatement
 ThrowStatement
 TryStatement

IfThenStatement:
 if ( Expression ) Statement
IfThenElseStatement:
 if ( Expression ) StatementNoShortIf else Statement
IfThenElseStatementNoShortIf:
 if ( Expression ) StatementNoShortIf else StatementNoShortIf
Statements are thus grammatically divided into two categories:
- those that might end in an if statement that has no else clause (a "short if statement") and
- those that definitely do not.
Only statements that definitely do not end in a short if statement may appear as an immediate substatement before the keyword else in an if statement that does have an else clause. This simple rule prevents the "dangling else" problem.
[lang spec, 1996aug]

SPECIFIC:
There are many kinds of statements in the Java language. Most correspond to statements in the C and C++ languages, but some are unique to Java.
[lang spec, 1996aug]

jv'statement'EXECUTION

name::
* McsEngl.jv'statement'EXECUTION@cptIt,

NORMAL COMPLETION:
Every statement has a normal mode of execution in which certain computational steps are carried out.
The following sections describe the normal mode of execution for each kind of statement. If all the steps are carried out as described, with no indication of abrupt completion, the statement is said to complete normally.
[lang spec, 1996aug]

ABRUPT COMPLETION:
An abrupt completion always has an associated reason, which is one of the following:

•A break with no label
•A break with a given label
•A continue with no label
•A continue with a given label
•A return with no value
•A return with a given value
•A throw with a given value, including exceptions thrown by the Java Virtual Machine
[lang spec, 1996aug]

jv'statement'EXPRESSION

name::
* McsEngl.jv'statement'EXPRESSION@cptIt,
* McsEngl.jv'expression@cptIt,

_DEFINITION:
** An expression is a series of variables, operators, and method calls (constructed according to the syntax of the language) that evaluates to a single value.
[JavaSoft Tutorial, 1996jul06]
** some STATMENTS#ql:jv'statement# contain expressions (§15) as part of their structure.
[lang spec, 1996aug]

** Expressions perform the work of a Java program. Among other things, expressions are used
- to compute and assign values to variables and
- to help control the execution flow of a program.
The job of an expression is two-fold:
- perform the computation indicated by the elements of the expression and
- return some value.
[JavaSoft Tutorial, 1996jul06]

** Expressions in the language are much like expressions in C.

** Much of the work in a Java program is done by evaluating expressions,
- either for their side effects, such as assignments to variables, or
- for their values, which can be used as arguments or operands in larger expressions, or to affect the execution sequence in statements, or both.
[lang spec, 1996aug]

PRODUCTION:
An Expression is any assignment expression:
#jv'Expression#:
AssignmentExpression#ql:[Field JAVA:AssignmentExpression]#
[lang spec, 1996aug]

Example#ql:jv'ex.expression#.

jv'expression'EVALUATION (execution)

name::
* McsEngl.jv'expression'EVALUATION (execution)@cptIt,

When an expression in a Java program is evaluated (executed), the result denotes one of three things:
* A variable (§4.5) (in C, this would be called an lvalue)
* A value (§4.2, §4.3)
* Nothing (the expression is said to be void)

Evaluation of an expression can also produce side effects, because expressions may contain
- embedded assignments,
- increment operators,
- decrement operators, and
- method invocations.
[lang spec, 1996aug]

NORMAL COMPETION:
Every expression has a normal mode of evaluation in which certain computational steps are carried out. The following sections describe the normal mode of evaluation for each kind of expression. If all the steps are carried out without an exception being thrown, the expression is said to complete normally.
If, however, evaluation of an expression throws an exception, then the expression is said to complete abruptly. An abrupt completion always has an associated reason, which is always a throw with a given value.
[lang spec, 1996aug]

ABRUPT COMPLETION:
The only reason an expression can complete abruptly is
that an exception is thrown, because of either
- a throw with a given value (§14.16) or
- a run-time exception or error (§11, §15.5).
[lang spec, 1996aug]

Evaluation Order:
Java guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.
[lang spec, 1996aug]

Evaluate Operands before Operation:
Java also guarantees that every operand of an operator (except the conditional operators &&, ||, and ? :) appears to be fully evaluated before any part of the operation itself is performed.
[lang spec, 1996aug]

jv'expression'OCCURANCE

name::
* McsEngl.jv'expression'OCCURANCE@cptIt,

Each expression occurs in the declaration of some (class or interface) type that is being declared:
- in a field initializer,
- in a static initializer,
- in a constructor declaration, or
- in the code for a method.
[lang spec, 1996aug]

jv'expression'TYPE

name::
* McsEngl.jv'expression'TYPE@cptIt,

every variable and every expression
has a type that is known at compile time. Types limit the values that a variable (§4.5) can hold or that an expression can produce, limit the operations supported on those values, and determine the meaning of the operations.
[lang spec, 1996aug]

Every Java expression
has a type that can be deduced from the structure of the expression and the types of the literals, variables, and methods mentioned in the expression.
[lang spec, 1996aug]

jv'expression'CONVERSION

name::
* McsEngl.jv'expression'CONVERSION@cptIt,
* McsEngl.jv'CONVERSION@cptIt,

_DEFINITION: CONVERSION is the PROCESS of changing the type of an expression to another type.
[NIKOS, 1997jan]

Every Java expression has a type that can be deduced from the structure of the expression and the types of the literals, variables, and methods mentioned in the expression. It is possible, however, to write an expression in a context where the type of the expression is not appropriate.
In some cases, this leads to an error at compile time; for example, if the expression in an if statement (§14.8) has any type other than boolean, a compile-time error occurs.
In other cases, the context may be able to accept a type that is related to the type of the expression; as a convenience, rather than requiring the programmer to indicate a type conversion explicitly, the Java language performs an implicit conversion from the type of the expression to a type acceptable for its surrounding context.
[lang spec, 1996aug]

In every conversion context, only certain specific conversions are permitted. The specific conversions that are possible in Java are grouped for convenience of description into several broad categories:
Identity conversions
Widening primitive conversions
Narrowing primitive conversions
Widening reference conversions
Narrowing reference conversions
String conversions
[lang spec, 1996aug]

jv'conversion.ASSIGNMENT

name::
* McsEngl.jv'conversion.ASSIGNMENT@cptIt,

Assignment conversion occurs when the value of an expression is assigned (§15.25) to a variable: the type of the expression must be converted to the type of the variable.

The conversions permitted for assignment are limited in such a way that assignment conversion never causes an exception.
[lang spec, 1996aug]

jv'conversion.CASTING

name::
* McsEngl.jv'conversion.CASTING@cptIt,
* McsEngl.jv'casting@cptIt,

To paraphrase Generics Specification Lead Gilad Bracha, when we declare c to be of type Collection<String>, this tells us something about the variable c that holds true wherever and whenever it is used, and the compiler guarantees it (assuming the program compiles without warnings).
A cast, on the other hand, tells us something the programmer thinks is true at a single point in the code, and the VM checks whether the programmer is right only at run time.
[/JAVA/DOCS/150/guide/language/generics.html]

Casting conversion (§5.4) converts the type of an expression to a type explicitly specified by a cast operator (§15.15). It is more inclusive than assignment or method invocation conversion, allowing any specific conversion other than a string conversion, but certain casts to a reference type may cause an exception at run time.
[lang spec, 1996aug]

IMPLICIT_CASTING:
Casting shows the use of an object of one type in place of another type, among the objects permitted by inheritance and implementations. For example, if we write
Object obj = new MountainBike();
then obj is both an Object and a Mountainbike (until such time as obj is assigned another object that is not a Mountainbike). This is called implicit casting.
[/JAVA/INFO/TUTORIAL/tutorial2006-11-10/java/IandI/subclasses.html]

EXPLICIT_CASTING:
However, we can tell the compiler that we promise to assign a MountainBike to obj by explicit casting:
MountainBike myBike = (MountainBike)obj;

jv'conversion.IDENTITY

name::
* McsEngl.jv'conversion.IDENTITY@cptIt,

A conversion from a type to that same type is permitted for any type. This may seem trivial, but it has two practical consequences.
First, it is always permitted for an expression to have the desired type to begin with, thus allowing the simply stated rule that every expression is subject to conversion, if only a trivial identity conversion.
Second, it implies that it is permitted for a program to include redundant cast operators for the sake of clarity.
[lang spec, 1996aug]

jv'conversion.METHOD'INVOCATION

name::
* McsEngl.jv'conversion.METHOD'INVOCATION@cptIt,

Method invocation conversion (§5.3, §15.8, §15.11) is applied to each argument in a method or constructor invocation and, except in one case, performs the same conversions that assignment conversion does. Method invocation conversion never causes an exception.
[lang spec, 1996aug]

jv'conversion.NARROWING'PRIMITIVE

name::
* McsEngl.jv'conversion.NARROWING'PRIMITIVE@cptIt,

The following 23 specific conversions on primitive types are called the narrowing primitive conversions:
- byte to char
- short to byte or char
- char to byte or short
- int to byte, short, or char
- long to byte, short, char, or int
- float to byte, short, char, int, or long
- double to byte, short, char, int, long, or float
Narrowing conversions may lose information about the overall magnitude of a numeric value and may also lose precision.
[lang spec, 1996aug]

jv'conversion.NARROWING'REFERENCE

name::
* McsEngl.jv'conversion.NARROWING'REFERENCE@cptIt,

The following conversions are called the narrowing reference conversions:
- From any class type S to any class type T, provided that S is a superclass of T. (An important special case is that there is a narrowing conversion from the class type Object to any other class type.)
- From any class type S to any interface type K, provided that S is not final and does not implement K. (An important special case is that there is a narrowing conversion from the class type Object to any interface type.)
- From type Object to any array type.
- From type Object to any interface type.
- From any interface type J to any class type T that is not final.
- From any interface type J to any class type T that is final, provided that T implements J.
- From any interface type J to any interface type K, provided that J is not a subinterface of K and there is no method name m such that J and K both declare a method named m with the same signature but different return types.
- From any array type SC[] to any array type TC[], provided that SC and TC are reference types and there is a narrowing conversion from SC to TC.
[lang spec, 1996aug]

jv'conversion.NUMERIC'PROMOTION

name::
* McsEngl.jv'conversion.NUMERIC'PROMOTION@cptIt,

jv'NUMERIC'PROMOTION

One conversion context is the operand of a numeric operator such as + or *. The conversion process for such operands is called numeric promotion. Promotion is special in that, in the case of binary operators, the conversion chosen for one operand may depend in part on the type of the other operand expression.
[lang spec, 1996aug]

jv'conversion.STRING

name::
* McsEngl.jv'conversion.STRING@cptIt,

String conversion (§5.4, §15.17.1) allows any type to be converted to type String.
[lang spec, 1996aug]

jv'conversion.WIDENING'PRIMITIVE

name::
* McsEngl.jv'conversion.WIDENING'PRIMITIVE@cptIt,

The following 19 specific conversions on primitive types are called the widening primitive conversions:
- byte to short, int, long, float, or double
- short to int, long, float, or double
- char to int, long, float, or double
- int to long, float, or double
- long to float or double
- float to double
[lang spec, 1996aug]

jv'conversion.WIDENING'REFERENCE

name::
* McsEngl.jv'conversion.WIDENING'REFERENCE@cptIt,

The following conversions are called the widening reference conversions:
- From any class type S to any class type T, provided that S is a subclass of T. (An important special case is that there is a widening conversion to the class type Object from any other class type.)
- From any class type S to any interface type K, provided that S implements K.
- From the null type to any class type, interface type, or array type.
- From any interface type J to any interface type K, provided that J is a subinterface of K.
- From any interface type to type Object.
- From any array type to type Object.
- From any array type to type Cloneable.
- From any array type SC[] to any array type TC[], provided that SC and TC are reference types and there is a widening conversion from SC to TC.
[lang spec, 1996aug]

jv'expression'VALUE

name::
* McsEngl.jv'expression'VALUE@cptIt,

If an expression denotes a variable, and a value is required for use in further evaluation, then the value of that variable is used. In this context, if the expression denotes a variable or a value, we may speak simply of the value of the expression.
[lang spec, 1996aug]

jv'expression.AND

name::
* McsEngl.jv'expression.AND@cptIt,
* McsEngl.jv'AND.EXPRESSION@cptIt,

The bitwise operators and logical operators include the AND operator &, exclusive OR operator ^, and inclusive OR operator |. These operators have different precedence, with & having the highest precedence and | the lowest precedence. Each of these operators is syntactically left-associative (each groups left-to-right). Each operator is commutative if the operand expressions have no side effects. Each operator is associative.
PRODUCTION:
#jv'AndExpression#:
EqualityExpression#ql:[Field JAVA:EqualityExpression]#
AndExpression & EqualityExpression
#jv'ExclusiveOrExpression#:
AndExpression
ExclusiveOrExpression ^ AndExpression
#jv'InclusiveOrExpression#:
ExclusiveOrExpression
InclusiveOrExpression | ExclusiveOrExpression
[lang spec, 1996aug]

jv'expression.ADDITIVE

name::
* McsEngl.jv'expression.ADDITIVE@cptIt,
* McsEngl.jv'ADDITIVE'EXPRESSION@cptIt,

The operators + and - are called the additive operators. They have the same precedence and are syntactically left-associative (they group left-to-right).
#jv'AdditiveExpression#:
MultiplicativeExpression
AdditiveExpression + MultiplicativeExpression
AdditiveExpression - MultiplicativeExpression
If the type of either operand of a + operator is String, then the operation is string concatenation.
[lang spec, 1996aug]

jv'expression.ARRAY'ACCESS

name::
* McsEngl.jv'expression.ARRAY'ACCESS@cptIt,
* McsEngl.jv'ARRAY'ACCESS'EXPRESSION@cptIt,

An array access expression refers to a variable that is a component of an array.
#jv'ArrayAccess#:
ExpressionName [ Expression ]
PrimaryNoNewArray#ql:[Field JAVA:PrimaryNoNewArray]# [ Expression ]
An array access expression contains two subexpressions,
- the array reference expression (before the left bracket) and
- the index expression (within the brackets). Note that the array reference expression may be a name or any primary expression that is not an array creation expression (§15.9).
[lang spec, 1996aug]

jv'expression.ARRAY'CREATION

name::
* McsEngl.jv'expression.ARRAY'CREATION@cptIt,
* McsEngl.jv'ARRAY'CREATION'EXPRESSION@cptIt,

An array instance creation expression is used to create new arrays (§10).
#jv'ArrayCreationExpression#:
new PrimitiveType#ql:[Field JAVA:PrimitiveType]# DimExprs Dimsopt
new TypeName DimExprs Dimsopt
#jv'DimExprs#:
DimExpr
DimExprs DimExpr
#jv'DimExpr#:
[ Expression ]
#jv'Dims#:
[ ]
Dims [ ]
[lang spec, 1996aug]

jv'expression.CAST

name::
* McsEngl.jv'expression.CAST@cptIt,
* McsEngl.jv'CAST'EXPRESSION@cptIt,
* McsEngl.jv'CAST@cptIt,

_DEFINITION:
Casts change one value type into another.
Casting in Java is safer than in C or other languages that allow arbitrary casting. Java only lets casts occur when they make sense, such as a cast between a float and an int.
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

** A cast expression
- converts, at run time, a value of one numeric type to a similar value of another numeric type; or
- confirms, at compile time, that the type of an expression is boolean; or
- checks, at run time, that a reference value refers to an object whose class is compatible with a specified reference type.
#jv'CastExpression#:
( PrimitiveType ) UnaryExpression#ql:[Field JAVA:unaryexpression]#
( ReferenceType ) UnaryExpressionNotPlusMinus
[lang spec, 1996aug]

jv'expression.CLASS'INSTANCE'CREATION

name::
* McsEngl.jv'expression.CLASS'INSTANCE'CREATION@cptIt,
* McsEngl.jv'CLASS'INSTANCE'CREATION'EXPRESSION@cptIt,

A class instance creation expression is used to create new objects that are instances of classes.
#jv'ClassInstanceCreationExpression#:
new ClassType ( ArgumentListopt )
#jv'ArgumentList#:
Expression
ArgumentList , Expression
[lang spec, 1996aug]

EXAMLE:

jv'expression.COMPOUND

name::
* McsEngl.jv'expression.COMPOUND@cptIt,
* McsEngl.jv'compound'expression@cptIt,

Java allows you to construct compound expressions and statements from various smaller expressions as long as the data types required by one part of the expression matches the data types of the other.
[JavaSoft Tutorial, 1996jul06]

jv'expression.CONDITIONAL

name::
* McsEngl.jv'expression.CONDITIONAL@cptIt,
* McsEngl.jv'CONDITIONAL'EXPRESSION@cptIt,

The conditional operator ? : uses the boolean value of one expression to decide which of two other expressions should be evaluated.
The conditional operator is syntactically right-associative (it groups right-to-left), so that a?b:c?d:e?f:g means the same as a?b:(c?d:(e?f:g)).
#jv'ConditionalExpression#:
ConditionalOrExpression#ql:[Field JAVA:ConditionalOrExpression]#
ConditionalOrExpression ? Expression : ConditionalExpression
[lang spec, 1996aug]

jv'expression.CONDITIONAL'AND

name::
* McsEngl.jv'expression.CONDITIONAL'AND@cptIt,
* McsEngl.jv'CONDITIONAL'AND'EXPRESSION@cptIt,

The && operator is like & (§15.21.2), but evaluates its right-hand operand only if the value of its left-hand operand is true. It is syntactically left-associative (it groups left-to-right). It is fully associative with respect to both side effects and result value; that is, for any expressions a, b, and c, evaluation of the expression ((a)&&(b))&&(c) produces the same result, with the same side effects occurring in the same order, as evaluation of the expression (a)&&((b)&&(c)).
#jv'ConditionalAndExpression#:
InclusiveOrExpression#ql:[Field JAVA:InclusiveOrExpression]#
ConditionalAndExpression && InclusiveOrExpression
[lang spec, 1996aug]

jv'expression.CONDITIONAL'OR

name::
* McsEngl.jv'expression.CONDITIONAL'OR@cptIt,
* McsEngl.jv'CONDITIONAL'OR'EXPRESSION@cptIt,

The || operator is like | (§15.21.2), but evaluates its right-hand operand only if the value of its left-hand operand is false. It is syntactically left-associative (it groups left-to-right). It is fully associative with respect to both side effects and result value; that is, for any expressions a, b, and c, evaluation of the expression ((a)||(b))||(c) produces the same result, with the same side effects occurring in the same order, as evaluation of the expression (a)||((b)||(c)).
#jv'ConditionalOrExpression#:
ConditionalAndExpression#ql:[Field JAVA:ConditionalAndExpression]#
ConditionalOrExpression || ConditionalAndExpression
[lang spec, 1996aug]

jv'expression.CONSTANT

name::
* McsEngl.jv'expression.CONSTANT@cptIt,
* McsEngl.jv'CONSTANT'EXPRESSION@cptIt,

#jv'ConstantExpression#:
Expression#ql:[Field JAVA:Expression]#
A compile-time constant expression is an expression denoting
- a value of primitive type or
- a String that is composed using only the following:
* Literals of primitive type and literals of type String
* Casts to primitive types and casts to type String
* The unary operators +, -, ~, and ! (but not ++ or --)
* The multiplicative operators *, /, and %
* The additive operators + and -
* The shift operators <<, >>, and >>>
* The relational operators <, <=, >, and >= (but not instanceof)
* The equality operators == and !=
* The bitwise and logical operators &, ^, and |
* The conditional-and operator && and the conditional-or operator ||
* The ternary conditional operator ? :
* Simple names that refer to final variables whose initializers are constant expressions
* Qualified names of the form TypeName . Identifier that refer to final variables whose initializers are constant expressions

Compile-time constant expressions are used in case labels in switch statements (§14.9) and have a special significance for assignment conversion (§5.2).
[lang spec, 1996aug]

jv'expression.EQUALITY

name::
* McsEngl.jv'expression.EQUALITY@cptIt,
* McsEngl.jv'EQUALITY'EXPRESSION@cptIt,

The equality operators are syntactically left-associative (they group left-to-right), but this fact is essentially never useful; for example, a==b==c parses as (a==b)==c. The result type of a==b is always boolean, and c must therefore be of type boolean or a compile-time error occurs. Thus, a==b==c does not test to see whether a, b, and c are all equal.
#jv'EqualityExpression#:
RelationalExpression
EqualityExpression == RelationalExpression
EqualityExpression != RelationalExpression
[lang spec, 1996aug]

jv'expression.FIELD'ACCESS

name::
* McsEngl.jv'expression.FIELD'ACCESS@cptIt,
* McsEngl.jv'FIELD'ACCESS'EXPRESSION@cptIt,

_DEFINITION:
A field access expression may access a field of an object or array, a reference to which is the value of either an expression or the special keyword super. (It is also possible to refer to a field of the current instance or current class by using a simple name; see §15.13.1.)
#jv'FieldAccess#:
Primary#ql:[Field JAVA:Primary]# . Identifier#ql:[Field JAVA:Identifier]#
super . Identifier
[lang spec, 1996aug]

jv'expression.METHOD'CALL

name::
* McsEngl.jv'expression.METHOD'CALL@cptIt,
* McsEngl.jv'method'call'expression@cptIt,
* McsEngl.jv'method'invocation'expression@cptIt,
* McsEngl.jv'expression.METHOD'INVOCATION@cptIt,

_DEFINITION:
** A method-call is
- an expression (part of a statement) if returns a value and
- a statement if does not return a value.
[hknu_2002-05-10]

** The next expression is a method call:
System.in.read()
A method call expression evaluates to the return value of the method; thus the data type of a method call expression is the same as the data type of the return value of that method.
[Java Tutorial]

PRODUCTION:
A method invocation expression is used to invoke a class or instance-method#ql:jv'method.instance#.
#jv'MethodInvocation#:
MethodName ( ArgumentList#ql:[Field JAVA:ArgumentList]#opt )
Primary . Identifier ( ArgumentListopt )
super . Identifier ( ArgumentListopt )
[lang spec, 1996aug]

jv'expression.MULTIPLICATIVE

name::
* McsEngl.jv'expression.MULTIPLICATIVE@cptIt,
* McsEngl.jv'MULTIPLICATIVE'EXPRESSION@cptIt,

The operators *, /, and % are called the multiplicative operators. They have the same precedence and are syntactically left-associative (they group left-to-right).
#jv'MultiplicativeExpression#:
UnaryExpression#ql:[Field JAVA:UnaryExpression]#
MultiplicativeExpression * UnaryExpression
MultiplicativeExpression / UnaryExpression
MultiplicativeExpression % UnaryExpression
[lang spec, 1996aug]

jv'expression.POSTFIX

name::
* McsEngl.jv'expression.POSTFIX@cptIt,
* McsEngl.jv'POSTFIX'EXPRESSION@cptIt,

Postfix expressions include uses of the postfix ++ and -- operators. Also, as discussed in §15.7, names are not considered to be primary expressions, but are handled separately in the grammar to avoid certain ambiguities.
They become interchangeable only here, at the level of precedence of postfix expressions.
#jv'PostfixExpression#:
Primary
ExpressionName
PostIncrementExpression
PostDecrementExpression
#jv'PostIncrementExpression#:
PostfixExpression ++
#jv'PostDecrementExpression#:
PostfixExpression --
[lang spec, 1996aug]

jv'expression.PRIMARY

name::
* McsEngl.jv'expression.PRIMARY@cptIt,
* McsEngl.jv'PRIMARY'EXPRESSION@cptIt,

Primary expressions include most of the simplest kinds of expressions, from which all others are constructed:
literals,
field accesses,
method invocations, and
array accesses.
A parenthesized expression is also treated syntactically as a primary expression.
#jv'Primary#:
PrimaryNoNewArray
ArrayCreationExpression#ql:[Field JAVA:ArrayCreationExpression]#
#jv'PrimaryNoNewArray#:
Literal
this
( Expression )
ClassInstanceCreationExpression#ql:[Field JAVA:ClassInstanceCreationExpression]#
FieldAccess
MethodInvocation
ArrayAccess
[lang spec, 1996aug]

jv'expression.RELATIONAL

name::
* McsEngl.jv'expression.RELATIONAL@cptIt,
* McsEngl.jv'RELATIONAL'EXPRESSION@cptIt,

The relational operators are syntactically left-associative (they group left-to- right), but this fact is not useful; for example, a<b<c parses as (a<b)<c, which is always a compile-time error, because the type of a<b is always boolean and < is not an operator on boolean values.
#jv'RelationalExpression#:
ShiftExpression
RelationalExpression < ShiftExpression
RelationalExpression > ShiftExpression
RelationalExpression <= ShiftExpression
RelationalExpression >= ShiftExpression
RelationalExpression instanceof ReferenceType
The type of a relational expression is always boolean.
[lang spec, 1996aug]

jv'expression.SHIFT

name::
* McsEngl.jv'expression.SHIFT@cptIt,
* McsEngl.jv'SHIFT'EXPRESSION@cptIt,

The shift operators include left shift <<, signed right shift >>, and unsigned right shift >>>; they are syntactically left-associative (they group left-to-right).
The left- hand operand of a shift operator is the value to be shifted; the right-hand operand specifies the shift distance.
#jv'ShiftExpression#:
AdditiveExpression
ShiftExpression << AdditiveExpression
ShiftExpression >> AdditiveExpression
ShiftExpression >>> AdditiveExpression
[lang spec, 1996aug]

jv'expression.UNARY

name::
* McsEngl.jv'expression.UNARY@cptIt,
* McsEngl.jv'UNARY'EXPRESSION@cptIt,

The unary operators include +, -, ++, --, ~, !, and cast operators.
Expressions with unary operators group right-to-left, so that -~x means the same as -(~x).
#jv'UnaryExpression#:
PreIncrementExpression
PreDecrementExpression
+ UnaryExpression
- UnaryExpression
UnaryExpressionNotPlusMinus
#jv'PreIncrementExpression#:
++ UnaryExpression
#jv'PreDecrementExpression#:
-- UnaryExpression
#jv'UnaryExpressionNotPlusMinus#:
PostfixExpression#ql:[Field JAVA:PostfixExpression]#
~ UnaryExpression
! UnaryExpression
CastExpression#ql:[Field JAVA:CastExpression]#
[lang spec, 1996aug]

jv'statement.ASSIGNMENT

name::
* McsEngl.jv'statement.ASSIGNMENT@cptIt,
* McsEngl.jv'assignment'statement@cptIt,
* McsEngl.jv'ASSIGNMENT'EXPRESSION@cptIt,
* McsEngl.jv'ASSIGNMENT@cptIt,
* McsEngl.jv'expression.ASSIGNMENT@cptIt,

SEE: 'assignment-operator#ql:jv'assignment'operator#'.

_DEFINITION:
** Assignment is performed with the operator =. It means “take the value of the right-hand side (often called the rvalue) and copy it into the left-hand side (often called the lvalue). An rvalue is any constant, variable or expression that can produce a value, but an lvalue must be a distinct, named variable. (That is, there must be a physical space to store a value.) For instance, you can assign a constant value to a variable (A = 4;), but you cannot assign anything to constant value – it cannot be an lvalue. (You can’t say 4 = A;.) Assignment of primitives is quite straightforward. Since the primitive holds the actual value and not a handle to an object, when you assign primitives you copy the contents from one place to another. For example, if you say A = B for primitives, then the contents of B is copied into A. If you then go on to modify A, B is naturally unaffected by this modification. This is what you’ve come to expect as a programmer for most situations. When you assign objects, however, things change. Whenever you manipulate an object, what you’re manipulating is the handle, so when you assign “from one object to another” you’re actually copying a handle from one place to another. This means that if you say C = D for objects, you end up with both C and D pointing to the object that, originally, only D pointed to.
[B. ECKEL, Thinking In Java, 1998jan]

PRODUCTION:
There are 12 assignment operators; all are syntactically right-associative (they group right-to-left). Thus, a=b=c means a=(b=c), which assigns the value of c to b and then assigns the value of b to a.
#jv'AssignmentExpression#:
ConditionalExpression#ql:ConditionalExpression[Field JAVA:ConditionalExpression]#
Assignment
#jv'Assignment#:
LeftHandSide AssignmentOperator AssignmentExpression
#jv'LeftHandSide#:
ExpressionName
FieldAccess
ArrayAccess
#jv'AssignmentOperator#: one of
= *= /= %= += -= <<= >>= >>>= &= ^= |=
[lang spec, 1996aug]

jv'ALIASING:
[If n1 = n2, then] Changing the n1 object appears to change the n2 object as well! This is because both n1 and n2 contain the same handle, which is pointing to the same object. (The original handle that was in n1 that pointed to the object holding a value of 9 was overwritten during the assignment and effectively lost; its object will be cleaned up by the garbage collector.)
This phenomenon is often called aliasing and it’s a fundamental way that Java works with objects.
[B. ECKEL, Thinking In Java, 1998jan]

jv'statement.BLOCK

name::
* McsEngl.jv'statement.BLOCK@cptIt,
* McsEngl.jv'block'statement@cptIt,

A block is
- a sequence of statements and
- local variable declaration statements
within braces.
#jv'Block#:
{ BlockStatementsopt }
#jv'BlockStatements#:
BlockStatement
BlockStatements BlockStatement
#jv'BlockStatement#:
LocalVariableDeclarationStatement#ql:[Field JAVA:LocalVariableDeclarationStatement]#
Statement#ql:[Field JAVA:Statement]#
[lang spec, 1996aug]

Java allows you to place blocks of code within the { } delimiters. A block of code is executed as one statement within the program. All of the control statements in this section operate on a single statement at a time, so to make loops or branches of multiple lines, you must enclose your statements inside the {}. It may help you to know that they function similarly to Pascal's begin and end statements.
[DSWgroup TUTORIAL, 1996]

Blocks are explained first (§14.2), because
- they can appear in certain places where other kinds of statements are not allowed, and
- because one other kind of statement, a local variable declaration statement (§14.3), must be immediately contained within a block.
[lang spec, 1996aug]

jv'BLOCK'EXECUTION:
A block is executed by executing each of the local variable declaration statements and other statements in order from first to last (left to right). If all of these block statements complete normally, then the block completes normally. If any of these block statements complete abruptly for any reason, then the block completes abruptly for the same reason.
[lang spec, 1996aug]

jv'statement.BRANCING

name::
* McsEngl.jv'statement.BRANCING@cptIt,

BRANCING STATEMENTS:
BREAK#ql:jv'statement.break#, CONTINUE#ql:jv'statement.continue#, RETURN#ql:jv'statement.return#.
[JavaSoft Tutorial, 1996jul06]

jv'statement.CONTROL'FLOW

name::
* McsEngl.jv'statement.CONTROL'FLOW@cptIt,
* McsEngl.jv'CONTROL'FLOW'STATEMENT@cptIt,

_DEFINITION:
As the name implies, control flow statements control the flow of the program. In other words, control flow statements govern the sequence in which a program's statements are executed.
[JavaSoft Tutorial, 1996jul06]

SPECIFIC:
** Java language supports several control flow statements, including:
Statement  Keyword
decision making  if-else, switch
loops    for, while, do-while
exceptions    try-catch-finally, throw
miscellaneous  break, continue, label:, return
[JavaSoft Tutorial, 1996jul06]

** The following is a summary of control flow:
if(boolean) statement
else statement
switch(e1) {
case e2: statements
default: statements
}
break [label];
continue [label];
return e1;
for([e1]; [e2]; [e3]) statement
while(boolean) statement
do statement while(boolean);
label:statement

jv'statement.DECISION'MAKING

name::
* McsEngl.jv'statement.DECISION'MAKING@cptIt,
* McsEngl.jv'DECISION'MAKING'STATEMENT@cptIt,
* McsEngl.jv'SELECTION@cptIt,
* McsEngl.jv'condition@cptIt,
* McsEngl.jv'ΕΠΙΛΟΓΗ@cptIt,

SPECIFIC:
IF-ELSE#ql:jv'if'statement#,  simple selection,
SWITCH#ql:jv'switch'statement#,  multiple selection,

jv'sentence.DECLARATION

name::
* McsEngl.jv'sentence.DECLARATION@cptIt,
* McsEngl.jv'declaration@cptIt,
* McsEngl.jv'instruction.DECLARATION@cptIt,

_DEFINITION:
A declaration introduces an entity into a Java program and includes an identifier#ql:jv'identifier# that can be used in a name to refer to this entity.
A declared entity (§6.1) is a
- package,
- class type,
- interface type,
- member (field or method) of a reference type,
- parameter (to a method, constructor, or exception handler), or
- local variable.
[lang spec, 1996aug]

A declared entity is one of the following:

* A package, declared in a package declaration

* An imported type, declared in
 a single-type-import declaration (§7.5.1) or
 a type-import-on-demand declaration (§7.5.2)

* A class, declared in a class type declaration (§8.1)

* An interface, declared in an interface type declaration (§9.1)

* A member of a reference type (§8.2, §9.2, §10.7), one of the following:
 A field, one of the following:
   A field declared in a class type (§8.3)
   A constant field declared in an interface type (§9.3)
   The field length, which is implicitly a member of every array type (§10.7)
 A method, one of the following:
   A method (abstract or otherwise) declared in a class type (§8.4)
   A method (always abstract) declared in an interface type (§9.4)

* A parameter, one of the following:
 A parameter of a method or constructor of a class (§8.4.1, §8.6.1)
 A parameter of an abstract method of an interface (§9.4)
 A parameter of an exception handler declared in a catch clause of a try statement (§14.18)

* A local variable, one of the following:
 A local variable declared in a block (§14.3)
 A local variable declared in a for statement (§14.12)

Constructors (§8.6) are also introduced by declarations, but use the name of the class in which they are declared rather than introducing a new name.
[lang spec, 1996aug]

jv'DECLARATION.IMPORT

name::
* McsEngl.jv'DECLARATION.IMPORT@cptIt,
* McsEngl.jv'IMPORT'DECLARATION@cptIt,
* McsEngl.jv'IMPORT'STATEMENT@cptIt,

_DEFINITION:
It is similar to#include statement in C or C++. It pulls in the classes that are contained in a package elsewhere.
[E.R. HAROLD, Java Tutorial, {1996-11-20}]
** The import keyword is used to mark classes as being imported into the current package.

** An import declaration allows a type declared in another package to be referred to by a simple name (§6.2) that consists of a single identifier.

Without the use of an appropriate import declaration, the only way to refer to a type declared in another package is to use its fully qualified name (§6.7).
#jv'ImportDeclaration#:
SingleTypeImportDeclaration
TypeImportOnDemandDeclaration
A single-type-import declaration (§7.5.1) imports a single type, by mentioning its fully qualified name. A type-import-on-demand declaration (§7.5.2) imports all the public types of a named package as needed.
[lang spec, 1996aug]

AUTOMATIC IMPORT:
Each compilation unit automatically imports each of the public type names declared in the predefined package java.lang, as if the declaration:
import java.lang.*;
appeared at the beginning of each compilation unit, immediately following any package statement.
[lang spec, 1996aug]

jv'DECLARATION.SINGLE'TYPE'IMPORT

name::
* McsEngl.jv'DECLARATION.SINGLE'TYPE'IMPORT@cptIt,

A single-type-import declaration imports a single type by giving its fully qualified name, making it available under a simple name in the class and interface declarations of its compilation unit.
#jv'SingleTypeImportDeclaration#:
import TypeName ;
[lang spec, 1996aug]

jv'DECLARATION.TYPE'IMPORT'ON'DEMAND

name::
* McsEngl.jv'DECLARATION.TYPE'IMPORT'ON'DEMAND@cptIt,

A type-import-on-demand declaration allows all public types declared in the package named by a fully qualified name to be imported as needed.
#jv'TypeImportOnDemandDeclaration#:
import PackageName . * ;
[lang spec, 1996aug]

jv'statement.DO'WHILE

name::
* McsEngl.jv'statement.DO'WHILE@cptIt,
* McsEngl.jv'statement.DO@cptIt,
* McsEngl.jv'DO'WHILE'STATEMENT@cptIt,

PRODUCTION:
The do statement executes a Statement and an Expression repeatedly until the value of the Expression is false.
#jv'DoStatement#:
do Statement while ( Expression ) ;
The Expression must have type boolean, or a compile-time error occurs.
[lang spec, 1996aug]

GENERIC:
Loop-Statement#ql:jv'statement.loop#.

_ENVIRONMENT:
** The sole difference between while and do-while is that the statement of the do-while always executes at least once, even if the expression evaluates to false the first time. In a while, if the conditional is false the first time the statement never executes. In practice, do-while is less common than while.
[B. ECKEL, Thinking In Java, 1998jan]

Example#ql:jv'ex.do'while#.

jv'statement.EMPTY

name::
* McsEngl.jv'statement.EMPTY@cptIt,

An empty statement does nothing.
#jv'EmptyStatement#:
;
Execution of an empty statement always completes normally.
[lang spec, 1996aug]

jv'statement.EXCEPTION

name::
* McsEngl.jv'statement.EXCEPTION@cptIt,

TRY-CATCH-FINALLY, THROW

jv'statement.EXPRESSION

name::
* McsEngl.jv'statement.EXPRESSION@cptIt,
* McsEngl.jv'expression'statement@cptIt,

Certain kinds of expressions may be used as statements by following them with semicolons:
#jv'ExpressionStatement#:
StatementExpression ;
#jv'StatementExpression#:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
An expression statement is executed by evaluating the expression; if the expression has a value, the value is discarded. Execution of the expression statement completes normally if and only if evaluation of the expression completes normally.
[lang spec, 1996aug]

An expression statement that is a method-invocation#ql:jv'expression.method'invocation# may also invoke a method that produces a result; in this case the value returned by the method is quietly discarded.
[lang spec, 1996aug]

jv'statement.FOR

name::
* McsEngl.jv'statement.FOR@cptIt,
* McsEngl.jv'FOR'STATEMENT@cptIt,
* McsEngl.jv'FOR'LOOP@cptIt,

_DEFINITION:
The for-statement is a LOOP-STATEMENT with known repetitions.
[hknu_2002-05-10]

PRODUCTION:
The for statement executes some initialization code, then executes an Expression, a Statement, and some update code repeatedly until the value of the Expression is false.
#jv'ForStatement#:
for ( ForInitopt ; Expressionopt ; ForUpdateopt )
Statement
#jv'ForStatementNoShortIf#:
for ( ForInitopt ; Expressionopt ; ForUpdateopt )
StatementNoShortIf
#jv'ForInit#:
StatementExpressionList
LocalVariableDeclaration
#jv'ForUpdate#:
StatementExpressionList
#jv'StatementExpressionList#:
StatementExpression#ql:[Field JAVA:StatementExpression]#
StatementExpressionList , StatementExpression
The Expression must have type boolean, or a compile-time error occurs.
[lang spec, 1996aug]

GENERIC:
Loop-Statement#ql:jv'statement.loop#.

USE:
for loops are usually used for “counting” tasks:
[B. ECKEL, Thinking In Java, 1998jan]

Example#ql:jv'ex.for#.

jv'statement.GOTO

name::
* McsEngl.jv'statement.GOTO@cptIt,

Unlike C and C++, the Java language has no goto statement
[lang spec, 1996aug]

jv'statement.IF

name::
* McsEngl.jv'statement.IF@cptIt,
* McsEngl.jv'if'statement@cptIt,

DEFINITIN:
Decision Making statement

PRODUCTION:
The if statement allows conditional execution of a statement or a conditional choice of two statements, executing one or the other but not both.
#jv'IfThenStatement#:
if ( Expression ) Statement
#jv'IfThenElseStatement#:
if ( Expression ) StatementNoShortIf else Statement
#jv'IfThenElseStatementNoShortIf#:
if ( Expression ) StatementNoShortIf else StatementNoShortIf
The Expression must have type boolean, or a compile-time error occurs.
[lang spec, 1996aug]

IF'THEN

IF'THEN'ELSE

EXAMPLES: IF#ql:jv'ex.if*#

jv'statement.INPUT (from user)

name::
* McsEngl.jv'statement.INPUT (from user)@cptIt,

jv'statement.LABEL

name::
* McsEngl.jv'statement.LABEL@cptIt,
* McsEngl.jv'LABELED'STATEMENT@cptIt,
* McsEngl.jv'statement.LABELED@cptIt,

Statements may have label prefixes.
#jv'LabeledStatement#:
Identifier : Statement
#jv'LabeledStatementNoShortIf#:
Identifier : StatementNoShortIf
The Identifier is declared to be the label of the immediately contained Statement.

identifier statement labels are used with
- break#ql:jv'statement.break# (§14.13) or
- continue#ql:jv'statement.continue# (§14.14) statements
appearing anywhere within the labeled statement.
[lang spec, 1996aug]

The use of labels in loops and breaks has the following rules:
· Any statement can have a label.
· If a break statement has a label it must be the label of an enclosing statement.
· If a continue statement has a label it must be the label of an enclosing loop.

jv'statement.LOOP

name::
* McsEngl.jv'statement.LOOP@cptIt,
* McsEngl.jv'LOOP'STATEMENT@cptIt,
* McsEngl.jv'ITERATION'STATEMENT@cptIt,
* McsEngl.jv'statement.ITERATION@cptIt,
* McsEngl.jv'LOOP@cptIt,
* McsEngl.jv'ΑΝΑΚΥΚΛΩΣΗ@cptIt,
* McsEngl.jv'ΒΡΟΧΟΣ@cptIt,
* McsEngl.jv'ΕΠΑΝΑΛΗΨΗ@cptIt,

_DEFINITION:
while, do-while and for control looping and are sometimes classified as iteration statements. A statement repeats until the controlling Boolean-expression evaluates to false.
[B. ECKEL, Thinking In Java, 1998jan]

SPECIFIC:
- WHILE#ql:jv'statement.while#,    it is executed AFTER the evaluation of an expression,
- DO-WHILE#ql:jv'statement.do'while#,  it is executed at least once,
- FOR#ql:jv'statement.for#,    known repetitions,
- ForEach#ql:jv'ex.for'each#

jv'statement.BREAK
jv'statement.BREAK

name::
* McsEngl.jv'statement.BREAK@cptIt,
* McsEngl.jv'BREAK'STATEMENT@cptIt,

PRODUCTION:
A break statement transfers control out of an enclosing statement.
#jv'BreakStatement#:
break Identifieropt ;
[lang spec, 1996aug]

Inside the body of any of the iteration statements you can also control the flow of the loop by using break and continue. break quits the loop without executing the rest of the statements in the loop. continue stops the execution of the current iteration and goes back to the beginning of the loop to begin a new iteration.
[B. ECKEL, Thinking In Java, 1998jan]
** You saw the break statement in action within the switch-statement#ql:jv'statement.switch# earlier. As noted there, break causes the flow of control to jump to the statement immediately following the current statement.

There is another form of break that causes flow of control to jump to a labeled statement. You label a statement by placing a legal Java identifier (the label) followed by a colon (:) before the statement:
breakToHere: someJavaStatement
To jump to the statement labeled breakToHere use this form of the break statement.
break breakToHere;
Labeled breaks are an alternative to the goto statement which is not supported by the Java language.
[JavaSoft Tutorial, 1996jul06]

* break statements cause control to break out of the switch and continue with the first statement following the switch.
* alternative to the goto statement which is not supported by the Java language.
break labelname;
 labelname: statement.

jv'statement.CONTINUE

name::
* McsEngl.jv'statement.CONTINUE@cptIt,
* McsEngl.jv'CONTINUE'STATEMENT@cptIt,

PRODUCTION:
A continue statement may occur ONLY in a
- while#ql:jv'statement.while#,
- do#ql:jv'statement.do#, or
- for#ql:jv'statement.for# statement;
statements of these three kinds are called iteration statements. Control passes to the loop-continuation point of an iteration statement.
#jv'ContinueStatement#:
continue Identifier#ql:[Field JAVA:identifier]#opt ;
[lang spec, 1996aug]

Inside the body of any of the iteration statements you can also control the flow of the loop by using break and continue. break quits the loop without executing the rest of the statements in the loop. continue stops the execution of the current iteration and goes back to the beginning of the loop to begin a new iteration.
[B. ECKEL, Thinking In Java, 1998jan]
** Use the continue statement within loops to jump
- from the current statement back to the top of the loop or
- to a labeled statement.
[JavaSoft Tutorial, 1996jul06]

jv'statement.LOCAL'VARIABLE'DECLARATION

name::
* McsEngl.jv'statement.LOCAL'VARIABLE'DECLARATION@cptIt,
* McsEngl.jv'local'variable'declaration'statement@cptIt,

_DEFINITION:
A local variable declaration statement declares one or more local variable names.
#jv'LocalVariableDeclarationStatement#:
LocalVariableDeclaration ;
#jv'LocalVariableDeclaration#:
Type VariableDeclarators
#jv'VariableDeclarators#:
VariableDeclarator
VariableDeclarators , VariableDeclarator
#jv'VariableDeclarator#:
VariableDeclaratorId#ql:[Field JAVA:VariableDeclaratorId]#
VariableDeclaratorId = VariableInitializer#ql:[Field JAVA: VariableInitializer]#
Every local variable declaration statement is immediately contained by a block. Local variable declaration statements may be intermixed freely with other kinds of statements in the block.

A local variable declaration can also appear in the header of a for statement (§14.12). In this case it is executed in the same manner as if it were part of a local variable declaration statement.
[lang spec, 1996aug]

jv'statement.OUTPUT

name::
* McsEngl.jv'statement.OUTPUT@cptIt,
* McsEngl.jv'PRINT'STATEMENT@cptIt,

System.out.println("My name")
prints on screen followed by a carriage return (ASCII13) and a linefeed (ASCII10)
[Harold Course 1997]

System.out.print("My name")
it does not break the line.
[Harold Course 1997]

jv'statement.RETURN

name::
* McsEngl.jv'statement.RETURN@cptIt,
* McsEngl.jv'RETURN'STATEMENT@cptIt,

_DEFINITION:
It stops the execution of a METHOD/CONSTRUCTOR and return a value or nothing.

** A return statement returns control to the invoker of a method (§8.4, §15.11) or constructor (§8.6, §15.8).
[lang spec, 1996aug]

There are two forms of return: one that returns a value and one that doesn't.
[JavaSoft Tutorial, 1996jul06]

PRODUCTION:
#jv'ReturnStatement#:
return Expression#ql:[Field JAVA:Expression]#opt ;
[lang spec, 1996aug]

Examples#ql:jv'ex.return#.

jv'statement.SYNCHRONIZED

name::
* McsEngl.jv'statement.SYNCHRONIZED@cptIt,
* McsEngl.jv'synchronized'statement@cptIt,

A synchronized statement acquires a mutual-exclusion lock (§17.13) on behalf of the executing thread, executes a block, then releases the lock.
While the executing thread owns the lock, no other thread may acquire the lock.
#jv'SynchronizedStatement#:
synchronized ( Expression ) Block
The type of Expression must be a reference type, or a compile-time error occurs.
[lang spec, 1996aug]

Not in C language.
[lang spec, 1996aug]

jv'statement.SWITCH

name::
* McsEngl.jv'statement.SWITCH@cptIt,
* McsEngl.jv'SWITCH'STATEMENT@cptIt,

_DEFINITION:
creates a decision-making cfs with 'case'/'break'/'default'

FUNCTION:
Decision Making Statement

PRODUCTION:
The switch statement transfers control to one of several statements depending on the value of an expression.
#jv'SwitchStatement#:
switch ( Expression#ql:[Field JAVA:expression]# ) SwitchBlock
#jv'SwitchBlock#:
{ SwitchBlockStatementGroupsopt SwitchLabelsopt }
#jv'SwitchBlockStatementGroups#:
SwitchBlockStatementGroup
SwitchBlockStatementGroups SwitchBlockStatementGroup
#jv'SwitchBlockStatementGroup#:
SwitchLabels BlockStatements#ql:[Field JAVA:BlockStatements]#
#jv'SwitchLabels#:
SwitchLabel
SwitchLabels SwitchLabel
#jv'SwitchLabel#:
case ConstantExpression :
default :
The type of the Expression must be char, byte, short, or int, or a compile-time error occurs.
[lang spec, 1996aug]

EXAMPLES:
SWITCH#ql:jv'ex.switch'statement#

jv'statement.DEFAULT:
You can use the default statement at the end of the switch to handle all values that aren't explicitly handled by one of the case statements.
int month;
. . .
switch (month) {
case 1: System.out.println("January"); break;
...
case 12: System.out.println("December"); break;
default: System.out.println("Hey, that's not a valid month!");
break;
}
[JavaSoft Tutorial, 1996jul06]

jv'statement.THROW

name::
* McsEngl.jv'statement.THROW@cptIt,
* McsEngl.jv'THROW'STATEMENT@cptIt,

_DEFINITION:
** A throw statement causes an exception (§11) to be thrown. The result is an immediate transfer of control (§11.3) that may exit multiple statements and multiple constructor, static and field initializer evaluations, and method invocations until a try statement (§14.18) is found that catches the thrown value. If no such try statement is found, then execution of the thread (§17, §20.20) that executed the throw is terminated (§11.3) after invocation of the UncaughtException method (§20.21.31) for the thread group to which the thread belongs.
#jv'ThrowStatement#:
throw Expression ;
[lang spec, 1996aug]

** Not in C language.
[lang spec, 1996aug]

** An explicit throw (§14.16) statement also results in an exception#ql:jv'exception#. An exception causes a transfer of control that may prevent normal completion of statements.
[lang spec, 1996aug]

Example#ql:jv'ex.throw#

jv'statement.TRY

name::
* McsEngl.jv'statement.TRY@cptIt,
* McsEngl.jv'TRY'STATEMENT@cptIt,

_DEFINITION:
A try statement executes a block. If a value is thrown and the try statement has one or more catch clauses that can catch it, then control will be transferred to the first such catch clause. If the try statement has a finally clause, then another block of code is executed, no matter whether the try block completes normally or abruptly, and no matter whether a catch clause is first given control.
#jv'TryStatement#:
try Block Catches
try Block Catchesopt Finally
#jv'Catches#:
CatchClause
Catches CatchClause
#jv'CatchClause#:
catch ( FormalParameter#ql:[Field JAVA:FormalParameter]# ) Block
#jv'Finally#:
finally Block
[lang spec, 1996aug]

Not in C language.
[lang spec, 1996aug]

Example#ql:jv'ex.try'catch#

jv'statement.WHILE

name::
* McsEngl.jv'statement.WHILE@cptIt,
* McsEngl.jv'While'Statement@cptIt,

GENERIC: Loop Statement

_DEFINITION:
The while-statement is a LOOP-STATEMENT#ql:jv'loop'statement# which is executed after the evaluation of a boolean-expression.
[hknu_2002-05-10]

PRODUCTION:
The while statement executes an Expression and a Statement repeatedly until the value of the Expression is false.
#jv'WhileStatement#:
while ( Expression ) Statement
#jv'WhileStatementNoShortIf#:
while ( Expression ) StatementNoShortIf
[lang spec, 1996aug]

Example#ql:jv'ex.while#.

jv'codeSrc.ATOM

name::
* McsEngl.jv'codeSrc.ATOM@cptIt,

jv'atom.COMMENT

name::
* McsEngl.jv'atom.COMMENT@cptIt,
* McsEngl.jv'comment@cptIt,
* McsEngl.jv'instruction.COMMENT@cptIt,

PRODUCTION:
These comments are formally specified by the following productions:
#jv'Comment#:
TraditionalComment
EndOfLineComment
DocumentationComment
#jv'TraditionalComment#:
/ * NotStar CommentTail
#jv'EndOfLineComment#:
/ / CharactersInLineopt LineTerminator
#jv'DocumentationComment#:
/ * * CommentTailStar
#jv'CommentTail#:
* CommentTailStar
NotStar CommentTail
#jv'CommentTailStar#:
/
* CommentTailStar
NotStarNotSlash CommentTail
#jv'NotStar#:
InputCharacter but not *
LineTerminator
#jv'NotStarNotSlash#:
InputCharacter but not * or /
LineTerminator
#jv'CharactersInLine#:
InputCharacter
CharactersInLine InputCharacter
[lang spec, 1996aug]

SUBGENERAL:
The Java language has three styles of comments:

// text
All characters from // to the end of the line are ignored.

/* text */
All characters from /* to */ are ignored.

/** text */
These comments are treated specially when they occur IMMEDIATELY BEFORE any declaration. They should not be used any other place in the code. These comments indicate that the enclosed text should be included in automatically generated documentation as a description of the declared item.

jv'COMMENT.single'line //text

name::
* McsEngl.jv'COMMENT.single'line //text@cptIt,

The second form of comment comes from C++. It is the single-line comment, which starts at a // and continues until the end of the line. This type of comment is convenient and commonly used because it’s easy: you don’t have to hunt on the keyboard to find / and then * (you just press the same key twice) and you don’t have to close the comment.
[B. ECKEL, Thinking In Java, 1997aug18, 57]

jv'COMMENT.traditional'c'style /* text */

name::
* McsEngl.jv'COMMENT.traditional'c'style /* text */@cptIt,

The first is the traditional C-style comment that was inherited by C++. These comments begin with a /* and continue, possibly across many lines, until a */. Note that many programmers will begin each line of a continued comment with a *, so you’ll often see:
/* This is
* A comment that continues
* Across lines
*/
Remember, however, that everything inside the /* and */ is ignored so it’s no different to say:
/* This is a comment that
continues across lines */
[B. ECKEL, Thinking In Java, 1997aug18, 57]

jv'COMMENT.documentation /** text */

name::
* McsEngl.jv'COMMENT.documentation /** text */@cptIt,
* McsEngl.jv'DOCUMENTATION'COMMENT@cptIt,

One of the thoughtful parts of the Java language is that the designers didn’t just think about writing code, they also thought about documenting it. Possibly the biggest problem with documenting code has been maintaining that documentation. If the documentation and the code are separate, it becomes a hassle to change the documentation every time you change the code. The solution seems simple: link the code to the documentation. The easiest way to do this is to put everything in the same file. To complete the picture, however, you need a special comment syntax to mark special documentation and a tool to extract those comments and put them in a useful form. This is what Java has done.

The tool to extract the comments is called javadoc – it uses some of the technology from the Java compiler to look for special comment tags you put in your programs. It not only extracts the information marked by these tags, but it also pulls out the class name or method name that is adjoining the comment. This way you can get away with the minimal amount of work to generate decent program documentation.

The output of javadoc is an HTML file that you can view with your Web browser. This tool allows you to create and maintain a single source file and automatically generate useful documentation. Because of javadoc we have a standard for creating documentation, and it’s easy enough that we can expect or even demand documentation with all Java libraries.
[B. ECKEL, Thinking In Java, 1997aug18, 58]

POSITION:
These comments are treated specially when they occur IMMEDIATELY BEFORE any declaration. They should not be used any other place in the code.

RESTRICTIONS:
Note that javadoc will process comment documentation for public and protected members only. Comments for private and “friendly” (see Chapter 5) members are ignored and you’ll see no output. This makes sense, since only public and protected members are available outside the file, which is the client programmer’s perspective. However, all class comments are included in the output.
[B. ECKEL, Thinking In Java, 1997aug18, 58]

HTML SUPPORT:
Javadoc passes HTML commands through to the generated HTML document. This allows you full use of HTML;
You can also use HTML just as you would in any other Web document, to format the regular text in your descriptions:
Note that within the documentation comment, asterisks at the beginning of a line are thrown away by javadoc, along with leading spaces. javadoc reformats everything so it conforms to the standard documentation appearance. Don’t use headings such as <h1> or <hr> as embedded HTML since javadoc inserts its own headings and yours will interfere with them.
[B. ECKEL, Thinking In Java, 1997aug18, 58]

DOC TAG

_DEFINITION:
Doc tags are commands that start with a ‘@’ and are placed at the beginning of a comment line (a leading ‘*’, however, is ignored).

jv'author'comment:
@author author-information
Where author-information is, presumably, your name, but could also include your email address or any other appropriate information. When the -author flag is placed on the javadoc command line, the author information will be called out specially in the generated HTML documentation.
You can have multiple author tags for a list of authors, but they must be placed consecutively. All the author information will be lumped together into a single paragraph in the generated HTML.
[B. ECKEL, Thinking In Java, 1997aug18, 60]

jv'see'comment:
@see tags, which allow you to refer to the documentation in other classes. javadoc will generate HTML with the @see tags hyperlinked to the other documentation. The forms are:
@see classname
@see fully-qualified-classname
@see fully-qualified-classname#method-name
Each one adds a hyperlinked “See Also” entry to the generated documentation. javadoc will not check the hyperlinks you give it to make sure they are valid.
[B. ECKEL, Thinking In Java, 1997aug18, 59]

jv'version'comment:
This is of the form:
@version version-information
where version-information is any significant information you see fit to include. When the -version flag is placed on the javadoc command-line, the version information will be called out specially in the generated HTML documentation.
[B. ECKEL, Thinking In Java, 1997aug18, 59]

method documentation tags
As well as embedded documentation and @see references, methods allow documentation tags for parameters, return values, and exceptions:

jv'param'comment:
This is of the form:
@param parameter-name description
where parameter-name is the identifier in the parameter list, and description is text that can continue on subsequent lines; the description is considered finished when a new documentation tag is encountered. You can have any number of these, presumably one for each parameter.

jv'return'comment:
This is of the form:
@return description
where description tells you the meaning of the return value. It can continue on subsequent lines.

jv'exception'comment:
Exceptions will be described in Chapter 9, but briefly they are objects that can be “thrown” out of a method if that method fails. Although only one exception object can emerge when you call a method, a particular method may produce any number of different types of exceptions, all of which need descriptions. So the form for the exception tag is:
@exception fully-qualified-class-name description
where fully-qualified-class-name gives an unambiguous name of an exception class that’s defined somewhere, and description (which can continue on subsequent lines) tells you why this particular type of exception can emerge from the method call.

jv'deprecated'comment:
@deprecated This is new in Java 1.1. It is used to tag features which have been superseded by an improved feature. The deprecated tag is a suggestion that you no longer use this particular feature, since sometime in the future it is likely to be removed from the language.
[B. ECKEL, Thinking In Java, 1997aug18, 60]

jv'codeSrc.atom.OPERATOR

name::
* McsEngl.jv'codeSrc.atom.OPERATOR@cptIt,
* McsEngl.jv'TOKEN.OPERATOR@cptIt,
* McsEngl.jv'oprr@cptIt,

_GENERIC:
* java-token#ql:jv'token#

_DEFINITION:
The TOKENS#ql:jv'token# are the
- identifiers,
- keywords,
- literals,
- separators, and
- operators
of the Java syntactic grammar.
[lang spec, 1996aug]

An OPERATOR is a SYMBOL that operates on one or more ARGUMENTS to produce a result.
[Harold course 1997spring]

** The Java language provides a set of operators which you use to perform a function on one or two variables.
[JavaSoft Tutorial, 1996jul06]

jv'OPERAND
Operators perform some function on either one or two operands.

Almost all operators work only with primitives. The exceptions are ‘=’, ‘==’ and ‘!=’, which work with all objects (and are a point of confusion for objects). In addition, the String class supports ‘+’ and ‘+=’.
[B. ECKEL, Thinking In Java, 1997aug18, 63]

SUBGENERAL:
The following 37 tokens are the Java operators, formed from ASCII characters:
#jv'Operator#: one of
= > < ! ~ ? :
== <= >= != && || ++ --
+ - * / & | ^ % << >> >>>
+= -= *= /= &= |= ^= %= <<= >>= >>>=
[lang spec, 1996aug]
Unlike C and C++, the Java language has no comma operator.
[lang spec, 1996aug]
Jv's creators decided to keep most of the C/C++ operators. Java has a few new ones as well.
[DSWgroup TUTORIAL, 1996]

.

name::
* McsEngl.jv'OPERATOR.MEMBER'ACCESS@cptIt,
* McsEngl.jv'MEMBER'ACCESS'OPERATOR@cptIt,

[]

name::
* McsEngl.jv'square'brackets'indexing'operator@cptIt,
* McsEngl.jv'OPERATOR.square'brackets'indexing@cptIt,

()

+

+ ADDITION OPERATOR

name::
* McsEngl.jv'addition'operator@cptIt,
* McsEngl.jv'OPERATOR.ADDITION@cptIt,

USE:
op1 + op2  Adds op1 and op2

+ STRING OPERATOR

name::
* McsEngl.jv'OPERATOR.STRING'CONCATENATION@cptIt,
* McsEngl.jv'STRING'OPERATOR@cptIt,

There’s one special usage of an operator in Java: the + operator can be used to concatenate strings, as you’ve already seen. It seems a very natural use of the + even though it doesn’t fit with the traditional way that + is used. This capability seemed like a good idea in C++ and so operator overloading was added to C++, to allow the C++ programmer to add meanings to almost any operator. Unfortunately, operator overloading combined with some of the other restrictions in C++ turns out to be a fairly complicated feature for programmers to design into their classes. Although operator overloading would have been much simpler to implement in Java than it was in C++, this feature was still considered too complex and thus is not part of Java.
The use of the String + has some interesting behavior: if an expression begins with a String, then all operands that follow must be Strings.
...So if you’re putting together a String with addition, make sure the first element is a String (or a quoted sequence of characters, which the compiler recognizes as a String).
[B. ECKEL, Thinking In Java, 1997aug18, 75]

++

name::
* McsEngl.jv'increment'operator@cptIt,
* McsEngl.jv'OPERATOR.INCREMENT@cptIt,

_DEFINITION:
which increments its operand by one
op++ = evaluates to the value of the operand before the increment operation and
++op = evaluates the value of the operand after the increment operation.

Example#ql:jv'ex.operator.increment#.

+=

op1 += op2 op1 = op1 + op2

-

- jv'Subtraction'operator:
jv'OPERATOR.SUBTRACTION
* op1 - op2  Subtracts op2 from op1

jv'Negation'operator:
jv'OPERATOR.NEGATION
* - op Arithmetically negates op

-- jv'Decrement'operator:
jv'OPERATOR.DECREMENT
* decrements its operand by one.
* EXAMPLE#ql:jv'ex.for#.

-=
* op1 -= op2 op1 = op1 - op2

!

!
! op  returns true if op is false

!= jv'Inequality'operator:
jv'OPERATOR.INEQUALITY
jv'LogicalNot'operator:
jv'OPERATOR.LOGICALNOT

op1 != op2 op1 and op2 are not equal

~

~ jv'BitwiseComplement'operator:
jv'OPERATOR.BITWISECOMPLEMENT

~ op bitwise complement

instanceof

name::
* McsEngl.jv'INSTANCEOF'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.INSTANCEOF@cptIt,

EXAMPLES#ql:jv'ex.instanceof#

*

*
op1 * op2  Multiplies op1 and op2

*=
op1 *= op2 op1 = op1 * op2

/

/ jv'Division'operator:
jv'OPERATOR.DIVISION
op1 / op2  Divides op1 by op2

/=
op1 /= op2 op1 = op1 / op2

%

% jv'modulus'operator:
jv'OPERATOR.MODULUS
op1 % op2  Computes the remainder of dividing op1 by op2

%=
op1 %= op2 op1 = op1 % op2

<

< jv'LESSTHAN'OPERATOR:
jv'OPERATOR.LESSTHAN
* op1 < op2 op1 is less than to op2

<< jv'LogicalLeftShift'operator:
jv'OPERATOR.LOGICAL'LEFT'SIFT
op1 << op2 shift bits of op1 left by distance op2

<= jv'LessThanOrEqualTo'OPERATOR:
jv'OPERATOR.LESS'THAN'OR'EQUAL'TO
op1 <= op2 op1 is less than or equal to op2
op1 <= op2 op1 = op1 < op2

<;

<;<;

>

> jv'GreaterThan'operator:
jv'OPERATOR.GREATER'THAN
op1 > op2 op1 is greater than op2

>> jv'logicalRightShift'operator:
jv'OPERATOR.LOGICAL'RIGHT'SHIFT
op1 >> op2 shift bits of op1 right by distance op2

>>=
op1 >>= op2 op1 = op1 >> op2

>>> jv'ArithmeticRightShiftWithSignExtention'operator:
jv'OPERATOR.ARITHMETIC'RIGHT'SIFT'WITH'SIGN'EXTENTION
op1 >>> op2 shift bits of op1 right by distance op2 (unsigned)

>>>=
op1 >>>= op2 op1 = op1 >>> op2

>= jv'GreaterThanOrEqualTo'operator:
jv'OPERATOR.GREATER'THAN'OR'EQUAL'TO
op1 >= op2 op1 is greater than or equal to op2

>;

>;>;

>;>;>;

=

= * jv'OPERATOR.SIMPLE'ASSIGNMENT
count = 4

== Equality-operator#ql:jv'equality'operator#

&

& jv'BitwiseAND'operator:
jv'OPERATOR.BITWISE'AND
jv'LogicalAND'operator:
jv'OPERATOR.LOGICAL'AND

op1 & op2 bitwise and

&= jv'ANDWithAssignment'operator:
jv'OPERATOR.AND'WITH'ASSIGNMENT
op1 &= op2 op1 = op1 & op2

&& jv'CONDITIONAL'AND'OPERATOR
jv'OPERATOR.CONDITIONAL'AND
jv'ShortCircuitAND'operator:
jv'OPERATOR.SHORT'CIRCUIT'AND
Conditional-And Operator &&
The && operator is like & (§15.21.2), but evaluates its right-hand operand only if the value of its left-hand operand is true. It is syntactically left-associative (it groups left-to-right).

op1 && op2  returns true if op1 and op2 are both true

&;=|=

&;&;

^

^ jv'BitwiseXOR'operator:
jv'OPERATOR.BITWISE'XOR
jv'LogicalXOR'operator:
jv'OPERATOR.LOGICAL'XOR
op1 ^ op2 bitwise xor

^= jv'LogicalXORWithAssignment'operator:
jv'OPERATOR.LOGICAL'XOR'WITH'ASSIGNMENT
op1 ^= op2 op1 = op1 ^ op2

|

| jv'BitwiseOR'operator:
jv'OPERATOR.BITWISE'OR
jv'LogicalOR'operator:
jv'OPERATOR.LOGICAL'OR
op1 | op2 bitwise or

|= jv'ORWithAssignment'operator:
jv'OPERATOR.OR'WITH'ASSIGNMENT
op1 |= op2 op1 = op1 | op2

|| jv'ShortCircuitOR'operator:
jv'OPERATOR.SHORT'CIRCUIT'OR
jv'OPERATOR.CONDITIONAL'OR

op1 || op2 ==> returns true if either op1 or op2 is true

?

? :

name::
* McsEngl.jv'CONDITIONAL'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.CONDITIONAL@cptIt,
* McsEngl.jv'TERNARY'IF'ELSE'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.TERNARY'IF'ELSE@cptIt,

_DEFINITION:
This operator is unusual because it has three operands. It is truly an operator because it produces a value, unlike the ordinary if-else statement which you’ll see in the next section of this chapter. The expression is of the form boolean-exp ? value0 : value1
If boolean-exp evaluates to true, value0 is evaluated and its result becomes the value produced by the operator. If boolean-exp is false, value1 is evaluated and its result becomes the value produced by the operator.
Of course, you could use an ordinary if-else statement (described later) but the ternary operator is much terser (λακωνικός).
Although C prides itself on being a terse language and the ternary operator may have been introduced partly for efficiency, you should be somewhat wary of using it on an everyday basis – it’s easy to produce unreadable code.
[B. ECKEL, Thinking In Java, 1997aug18, 74]

The conditional operator ? : uses the boolean value of one expression to decide which of two other expressions should be evaluated.

Example#ql:jv'ex.operator.ternary#.

:

op=

name::
* McsEngl.jv'COMMA'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.COMMA@cptIt,

_DEFINITION:
the comma operator (not the comma separator, which is used to separate function arguments) has only one use in Java: in the control expression of a for loop. In both the initialization and step portions of the control expression, you can have a number of statements separated by commas, and those statements will be evaluated sequentially.
for(int i = 0, j = 1; i < 10 && j != 11; i++, j++)
[B. ECKEL, Thinking In Java, 1997aug18, 87]

{}

jv'ADDITIVE'OPERATOR

name::
* McsEngl.jv'ADDITIVE'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.ADDITIVE@cptIt,

The operators + and - are called the additive operators.

jv'ASSIGNMENT'OPERATOR

name::
* McsEngl.jv'ASSIGNMENT'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.ASSIGNMENT@cptIt,

There are 12 assignment operators; all are syntactically right-associative (they group right-to-left). Thus, a=b=c means a=(b=c), which assigns the value of c to b and then assigns the value of b to a.
[lang spec, 1996aug]

This table lists the short cut assignment operators and their lengthy equivalents:
Operator Use Equivalent to
+= op1 += op2 op1 = op1 + op2
-= op1 -= op2 op1 = op1 - op2
*= op1 *= op2 op1 = op1 * op2
/= op1 /= op2 op1 = op1 / op2
%= op1 %= op2 op1 = op1 % op2
&= op1 &= op2 op1 = op1 & op2
|= op1 |= op2 op1 = op1 | op2
^= op1 ^= op2 op1 = op1 ^ op2
<<= op1 <<= op2 op1 = op1 << op2
>>= op1 >>= op2 op1 = op1 >> op2
>>>= op1 >>>= op2 op1 = op1 >>> op2
[JavaSoft Tutorial, 1996jul06]

jv'BINARY'OPERATOR

name::
* McsEngl.jv'BINARY'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.BINARY@cptIt,

_DEFINITION:
Operators that require two operands are binary operators--the = operator is a binary operator that assigns the value from its right-hand operand to its left-hand operand.

EVOLUTION:
The bitwise operators come from C’s low-level orientation; you were often manipulating hardware directly and had to set the bits in hardware registers. Java was originally designed to be embedded in TV set-top boxes and so this low-level orientation still made sense. However, you probably won’t use the bitwise operators that much.
[B. ECKEL, Thinking In Java, 1997aug18, 71]

jv'BITSHIFT'OPERATOR

name::
* McsEngl.jv'BITSHIFT'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.BITSHIFT@cptIt,
* McsEngl.jv'SHIFT'OPERATOR-jv'OPERATOR.SHIFT@cptIt,

The signed left shift operator "<<" shifts a bit pattern to the left, and the signed right shift operator ">>" shifts a bit pattern to the right. The bit pattern is given by the left-hand operand, and the number of positions to shift by the right-hand operand. The unsigned right shift operator ">>>" shifts a zero into the leftmost position, while the leftmost position after ">>" depends on sign extension.
[http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html]

_DEFINITION:
The shift operators also manipulate bits. They can only be used on primitive, integral-types#ql:jv'type.integral#.
[B. ECKEL, Thinking In Java, 1997aug18, 72]

The shift operators include left shift <<, signed right shift >>, and unsigned right shift >>>; they are syntactically left-associative (they group left-to-right).
[lang spec, 1996aug]

If you shift a char, byte, or short, it will be promoted to int before the shift takes place, and the result will be an int. Only the five low-order bits of the right-hand side will be used. This prevents you from shifting more than the number of bits in an int. If you’re operating on a long, long will be the result. Only the six low-order bits of the right-hand side will be used so you can’t shift more than the number of bits in a long. There is a problem, however, with the unsigned right shift. If you use it with byte or short you might not get the correct results. (It’s broken in Java 1.0 and Java 1.1.) These are promoted to int and right shifted, but the zero extension does not occur, so you get -1 in those cases.

<<:
The left-shift operator (<<) produces the operand to the left of the operator shifted to the left by the number of bits specified after the operator (inserting zeroes at the lower-order bits).
i, int: 808.942.214, binary: 00110000001101110111101010000110
i << 5, int: 116.347.072, binary: 00000110111011110101000011000000

>>:
The signed right-shift operator (>>) produces the operand to the left of the operator shifted to the right by the number of bits specified after the operator. The signed right shift >> uses sign extension: if the value is positive, zeroes are inserted at the higher-order bits; if the value is negative, ones are inserted at the higher-order bits.
i, int: 808.942.214, binary: 00110000001101110111101010000110
i >> 5, int: 25.279.444, binary: 00000001100000011011101111010100
(~i) >> 5, int: -25.279.445, binary: 11111110011111100100010000101011

>>>:
Java has also added the unsigned right shift >>>, which uses zero extension: regardless of the sign, zeroes are inserted at the higher-order bits. This operator does not exist in C or C++.
i, int: 808.942.214, binary: 00110000001101110111101010000110
i >>> 5, int: 25.279.444, binary: 00000001100000011011101111010100
(~i) >>> 5, int: 108.938.283, binary: 00000110011111100100010000101011

jv'BITWISE'OPERATOR

name::
* McsEngl.jv'BITWISE'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.BITWISE@cptIt,

_DEFINITION:
*** The bitwise operators allow you to manipulate individual bits in an integral primitive data type. Bitwise operators perform boolean algebra on the corresponding bits in the two arguments to produce the result.
The bitwise operators come from C’s low-level orientation; you were often manipulating hardware directly and had to set the bits in hardware registers. Java was originally designed to be embedded in TV set-top boxes, so this low-level orientation still made sense. However, you probably won’t use the bitwise operators much.
[B. ECKEL, Thinking In Java, 1998, 99]

*** bitwise operator An operator that manipulates bit-oriented data, such as by performing the logical AND operation such that each bit that's 1 in either operand is 1 in the result.
[JavaSoft Glossary]

*** The bitwise operators and logical operators include the AND operator &, exclusive OR operator ^, and inclusive OR operator |.
[lang spec, 1996aug]

& AND:
The bitwise AND operator (&) produces a one in the output bit if both input bits are one;
otherwise it produces a zero.
i, int: 808.942.214, binary: 00110000001101110111101010000110
j, int: 1.547.331.273, binary: 01011100001110100110011011001001
i & j, int: 271.737.472, binary: 00010000001100100110001010000000

| OR:
The bitwise OR operator (|) produces a one in the output bit if either input bit is a one
and produces a zero only if both input bits are zero.
i, int: 808.942.214, binary: 00110000001101110111101010000110
j, int: 1.547.331.273, binary: 01011100001110100110011011001001
i | j, int: 2.084.536.015, binary: 01111100001111110111111011001111

^XOR:
The bitwise, EXCLUSIVE OR, or XOR (^), produces a one in the output bit if one or the other input bit is a one, but not both.
i, int: 808.942.214, binary: 00110000001101110111101010000110
j, int: 1.547.331.273, binary: 01011100001110100110011011001001
i ^ j, int: 1.812.798.543, binary: 01101100000011010001110001001111

~ NOT:
The bitwise NOT (~, also called the ones complement operator) is a unary operator; it takes only one argument. (All other bitwise operators are binary operators.) Bitwise NOT produces the opposite of the input bit – a one if the input bit is zero, a zero if the input bit is one.
i, int: 808.942.214, binary: 00110000001101110111101010000110
~i, int: -808.942.215, binary: 11001111110010001000010101111001

-i, int: -808.942.214, binary: 11001111110010001000010101111010

-1, int: -1, binary: 11111111111111111111111111111111

+1, int: 1, binary: 00000000000000000000000000000001

maxpos, int: 2147483647, binary: 01111111111111111111111111111111

maxneg, int: -2147483648, binary: 10000000000000000000000000000000

-1L, long: -1, binary: 1111111111111111111111111111111111111111111111111111111111111111 +1L, long: 1, binary: 0000000000000000000000000000000000000000000000000000000000000001 maxpos, long: 9223372036854775807, binary: 0111111111111111111111111111111111111111111111111111111111111111 maxneg, long: -9223372036854775808, binary: 1000000000000000000000000000000000000000000000000000000000000000 l, long: 5627816299915612810, binary: 0100111000011010000001010001101101111001100111111001001010001010 ~l, long: -5627816299915612811, binary: 1011000111100101111110101110010010000110011000000110110101110101 -l, long: -5627816299915612810, binary: 1011000111100101111110101110010010000110011000000110110101110110 m, long: -6390856706744180119, binary: 1010011101001111000111011010111101111000000101110010001001101001 l & m, long: 435165860812227080, binary: 0000011000001010000001010000101101111000000101110000001000001000 l | m, long: -1198206267640794389, binary: 1110111101011111000111011011111101111001100111111011001011101011 l ^ m, long: -1633372128453021469, binary: 1110100101010101000110001011010000000001100010001011000011100011 l << 5, long: -4377319139795906240, binary: 1100001101000000101000110110111100110011111100100101000101000000 l >> 5, long: 175869259372362900, binary: 0000001001110000110100000010100011011011110011001111110010010100 (~l) >> 5, long: -175869259372362901, binary: 1111110110001111001011111101011100100100001100110000001101101011 l >>> 5, long: 175869259372362900, binary: 0000001001110000110100000010100011011011110011001111110010010100 (~l) >>> 5, long: 400591492931060587, binary: 0000010110001111001011111101011100100100001100110000001101101011 java finished with code 0 nikkas@\JAVA\APP\BIT >

jv'BOOLEAN'OPERATOR

name::
* McsEngl.jv'BOOLEAN'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.BOOLEAN@cptIt,

The boolean operators are:
- The relational operators == and !=
- The logical-complement operator !
- The logical operators &, ^, and |
- The conditional-and and conditional-or operators && and ||
- The conditional operator ? :
- The string concatenation operator +, which, when given a String operand and a boolean operand, will convert the boolean operand to a String (either "true" or "false"), and then produce a newly created String that is the concatenation of the two strings
[lang spec, 1996aug]

jv'COMPOUND'ASSIGNMENT'OPERATOR

name::
* McsEngl.jv'COMPOUND'ASSIGNMENT'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.COMPOUND'ASSIGNMENT@cptIt,

All compound assignment operators require both operands to be of primitive type, except for +=, which allows the right-hand operand to be of any type if the left- hand operand is of type String.

A compound assignment expression of the form E1 op= E2
is equivalent to E1 = (T)((E1) op (E2)),
where T is the type of E1, except that E1 is evaluated only once. Note that the implied cast to type T may be either an identity conversion (§5.1.1) or a narrowing primitive conversion (§5.1.3).
[lang spec, 1996aug]

jv'CONDITIONAL'OPERATOR

name::
* McsEngl.jv'CONDITIONAL'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.CONDITIONAL@cptIt,

jv'LOGICAL'OPERATOR

name::
* McsEngl.jv'LOGICAL'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.LOGICAL@cptIt,

_DEFINITION:
The logical operators AND (&&), OR (||) and NOT (!) produce a boolean value of true or false based on the logical relationship of its arguments.
[B. ECKEL, Thinking In Java, 1997aug18, 69]

The bitwise operators and logical operators include the AND operator &, exclusive OR operator ^, and inclusive OR operator |.
[lang spec, 1996aug]

jv'MATHEMATICAL'OPERATOR

name::
* McsEngl.jv'MATHEMATICAL'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.MATHEMATICAL@cptIt,
* McsEngl.jv'numeric'operator@cptIt,
* McsEngl.jv'OPERATOR.NUMERIC@cptIt,
* McsEngl.jv'OPERATOR.ARITHMETIC@cptIt,
* McsEngl.jv'ARITHMETIC'OPERATOR@cptIt,

The basic mathematical operators are the same as the ones available in most programming languages:
- addition (+),
- subtraction (-),
- division (/),
- multiplication (*) and
- modulus (%, produces the remainder from integer division).
Integer division truncates, rather than rounds, the result.
[B. ECKEL, Thinking In Java, 1997aug18, 66]

jv'MULTIPLICATIVE'OPERATOR

name::
* McsEngl.jv'MULTIPLICATIVE'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.MULTIPLICATIVE@cptIt,

The operators *, /, and % are called the multiplicative operators.
[lang spec, 1996aug]

jv'NEW'OPERATOR

name::
* McsEngl.jv'NEW'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.NEW@cptIt,
* McsEngl.jv'OPERATOR.CONSTRUCTION'OPERATOR@cptIt,

_DEFINITION: The NEW operator INSTANTIATES a new object by allocating memory for it. new requires a single argument: a call to a constructor method.

jv'RELATIONAL'OPERATOR

name::
* McsEngl.jv'RELATIONAL'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.RELATIONAL@cptIt,

_DEFINITION:
Relational operators generate a boolean result. They evaluate the relationship between the values of the operands. A relational expression produces true if the relationship is true, and false if the relationship is untrue. The relational operators are less than (<), greater than (>), less than or equal to (<=), greater than or equal to (>=), equivalent (==) and not equivalent (!=). Equivalence and nonequivalence works with all built-in data types, but the other comparisons won’t work with type boolean.
[B. ECKEL, Thinking In Java, 1997aug18, 68]

Relational operators compare two values and determine the relationship between them. For example, != returns true if the two operands are unequal.

This table summarizes Jv's relational operators:
Operator Use Returns true if
> op1 > op2 op1 is greater than op2
>= op1 >= op2 op1 is greater than or equal to op2
< op1 < op2 op1 is less than to op2
<= op1 <= op2 op1 is less than or equal to op2
== op1 == op2 op1 and op2 are equal
!= op1 != op2 op1 and op2 are not equal
[JavaSoft Tutorial, 1996jul06]

jv'EQUEVALENT'OPERATOR (==)

name::
* McsEngl.jv'EQUEVALENT'OPERATOR (==)@cptIt,
* McsEngl.jv'OPERATOR.EQUEVALENT@cptIt,
* McsEngl.jv'OPERATOR.EQUALITY@cptIt,
* McsEngl.jv'EQUALITY'OPERATOR@cptIt,

USE:
op1 == op2 op1 and op2 are equal

Example#ql:jv'ex.operator.equivalent#.

jv'UNARY'OPERATOR

name::
* McsEngl.jv'UNARY'OPERATOR@cptIt,
* McsEngl.jv'OPERATOR.UNARY@cptIt,

_DEFINITION:
Operators#ql:jv'operator# that require one operand are called unary operators. For example, ++ is a unary operator that increments the value of its operand by one.

SUBGENERAL:
The unary operators include +, -, ++, --, ~, !, and cast operators.

jv'codeSrc.UNIT

name::
* McsEngl.jv'codeSrc.UNIT@cptIt,

jv'CONFERENCE#cptIt149#

name::
* McsEngl.jv'CONFERENCE@cptIt,

1996, 29-31 May:
San Francisco or in cyberspace,
JavaOne
The first JavaSoft-sponsored Java Developer's Conference

jv'EVALUATION#cptCore546.107#

name::
* McsEngl.jv'EVALUATION@cptIt,

The larger question is, "How much further can Java go?" The answer, incredible as it may seem, is that Java could surpass Windows as the software platform with the world's largest installed base by the turn of the century.
[BYTE, 1997jan]

NETWORKING

One of Java’s great strengths is painless networking. As much as possible, the underlying details of networking have been abstracted away and taken care of within the JVM and local machine installation of Java. The programming model you use is that of a file; in fact, you actually wrap the network connection (a “socket”) with InputStream and OutputStream objects, so you end up using exactly the same method calls as you do with files. In addition, Java’s built-in multithreading is exceptionally handy when dealing with another networking issue: handling multiple connections at once.
[B. ECKEL, Thinking In Java, 1997aug18, 487]

If Java is, in fact, yet another computer programming language, why is it so important and why is it being promoted as a revolutionary step in computer programming? The answer isn’t immediately obvious if you’re coming from a traditional programming perspective. Although Java will solve traditional stand-alone programming problems, the reason it is important is that it will also solve programming problems on the world-wide web (“the Web”).
[B. ECKEL, Thinking In Java, 1997aug18, 37]

jv'EXCEPTION-CLASS (since 1.0)

name::
* McsEngl.jv'EXCEPTION-CLASS (since 1.0)@cptIt,
* McsEngl.jv'exception@cptIt,

_DEFINITION:
public class java.lang.Exception
extends Throwable

The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.

Since:
JDK1.0
Since the beginning of programming languages, ERROR-HANDLING has been one of the most difficult issues. Because it’s so hard to design a good error-handling scheme, many languages simply ignore the issue, passing the problem on to library designers who come up with halfway measures that can work in many situations but can easily be circumvented, generally by just ignoring them. A major problem with most error-handling schemes is that they rely on programmer vigilance in following an agreed-upon convention that is not enforced by the language. If the programmer is not vigilant – very often, if they are simply in a hurry – these schemes can be ignored.
Exception handling wires error handling directly into the programming language itself (and sometimes even the operating system). An exception is an object that is “thrown” from the site of the error, and can be “caught” by an appropriate exception handler that is designed to handle that particular type of error. It’s as if exception handling is a different, parallel path of execution that may be taken when things go wrong. And because it uses a separate execution path, it doesn’t need to interfere with your normally-executing code, which makes that code simpler to write (since you aren’t constantly forced to check for errors).
[B. ECKEL, Thinking In Java, 1997aug18, 35]

An exception is an event that occurs during the execution of program that prevents the continuation of the normal flow of instructions.
[JavaSoft Tutorial, 1996jul06]

The classes Exception and Error are direct subclasses of Throwable.
[lang spec, 1996aug]

It’s worth noting that exception handling isn’t an object-oriented feature, although in object-oriented languages the exception is normally represented with an object. Exception handling existed before object-oriented languages.
[B. ECKEL, Thinking In Java, 1997aug18, 35]

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.exception#.

_WHOLE:
PACKAGE: java.lang.

SUPERCLASS: java.lang.Throwable#ql:"jv'throwable"#.

SUBCLASS:
AWTException
UnsupportedFlavorException
IntrospectionException
PropertyVetoException
IOException
ClassNotFoundException
CloneNotSupportedException
IllegalAccessException
InstantiationException
InterruptedException
NoSuchFieldException
NoSuchMethodException
InvocationTargetException
RuntimeException
AlreadyBoundException
NotBoundException
ServerNotActiveException
AclNotFoundException
LastOwnerException
NotOwnerException
DigestException
KeyException
NoSuchAlgorithmException
NoSuchProviderException
SignatureException
SQLException
ParseException
TooManyListenersException
DataFormatException
NoSessionException
NoSuchLineNumberException

When a Java program violates the semantic constraints of the Java language, a Java Virtual Machine signals this error to the program as an exception.

An exception is said to be thrown from the point where it occurred and is said to be caught at the point to which control is transferred.

Exceptions are represented by instances of the class Throwable and instances of its subclasses. These classes are, collectively, the exception classes.
[lang spec, 1996aug]

Every exception is represented by an instance of the class Throwable or one of its subclasses; such an object can be used to carry information from the point at which an exception occurs to the handler that catches it.

An exception is said to be thrown from the point where it occurred and is said to be caught at the point to which control is transferred.
[lang spec, 1996aug]

jv'exception'CAUSE

name::
* McsEngl.jv'exception'CAUSE@cptIt,

An exception is thrown for one of three reasons:
1. An abnormal execution condition was synchronously detected by a Java Virtual Machine. Such conditions arise because:
* evaluation of an expression violates the normal semantics of the Java language, such as an integer divide by zero, as summarized in §15.5
* an error occurs in loading or linking part of the Java program (§12.2, §12.3)
* some limitation a resource is exceeded, such as using too much memory
These exceptions are not thrown at an arbitrary point in the program, but rather at a point where they are specified as a possible result of an expression evaluation or statement execution.

2. A throw statement (§14.16) was executed in Java code.

3. An asynchronous exception occurred either because:
* the method stop of class Thread (§20.20.16) was invoked
* an internal error has occurred in the virtual machine (§11.5.2.2)
[lang spec, 1996aug]

jv'exception'HANDLING

name::
* McsEngl.jv'exception'HANDLING@cptIt,

The Java language checks, at compile time, that a Java program contains handlers for checked exceptions, by analyzing which checked exceptions can result from execution of a method or constructor.
[lang spec, 1996aug]

When an exception is thrown, control is transferred from the code that caused the exception to the nearest dynamically-enclosing catch clause of a try-statement#ql:jv'statement.try# (§14.18) that handles the exception.
[lang spec, 1996aug]

jv'exception'SPECIFEINO#cptCore768#

name::
* McsEngl.jv'exception'SPECIFEINO@cptIt,

The Exception Hierarchy
The possible exceptions in a Java program are organized in a hierarchy of classes, rooted at class Throwable (§11.5, §20.22), a direct subclass of Object. The classes Exception and Error are direct subclasses of Throwable.

The class RuntimeException is a direct subclass of Exception.
The exception classes declared by the standard packages java.lang, java.util, java.io and java.net are called the standard exception classes.

Java programs can use the pre-existing exception classes in throw statements, or define additional exception classes, as subclasses of Throwable or of any of its subclasses, as appropriate. To take advantage of Jv's compile-time checking for exception handlers, it is typical to define most new exception classes as checked exception classes, specifically as subclasses of Exception that are not subclasses of RuntimeException.
[lang spec, 1996aug]

jv'exception.AclNotFoundException

name::
* McsEngl.jv'exception.AclNotFoundException@cptIt,

jv'exception.AlreadyBoundException

name::
* McsEngl.jv'exception.AlreadyBoundException@cptIt,

jv'exception.ArrayIndexOutOfBoundsException

name::
* McsEngl.jv'exception.ArrayIndexOutOfBoundsException@cptIt,

jv'exception.ASYNCHRONOUS

name::
* McsEngl.jv'exception.ASYNCHRONOUS@cptIt,

Most exceptions in Java occur synchronously as a result of an action by the thread in which they occur, and at a point in the Java program that is specified to possibly result in such an exception.
An asynchronous exception is, by contrast, an exception that can potentially occur at any point in the execution of a Java program.
Asynchronous exceptions are rare in Java. They occur only as a result of:
- An invocation of the stop methods of class Thread (§20.20.15, §20.20.16) or ThreadGroup (§20.21.8, §20.21.9)
- An InternalError (§11.5.2.2) in the Java Virtual Machine
[lang spec, 1996aug]

jv'exception.AWTException

name::
* McsEngl.jv'exception.AWTException@cptIt,

jv'exception.CHECKED

name::
* McsEngl.jv'exception.CHECKED@cptIt,

In Java, a method must specify the "checked" (non-runtime) exceptions, if any, it can throw.
[JavaSoft Tutorial, 1996jul06]

jv'exception.ClassNotFoundException

name::
* McsEngl.jv'exception.ClassNotFoundException@cptIt,
* McsEngl.jv'ClassNotFoundException@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.classnotfoundexception#.

PACKAGE: java.lang.

FUNCTION:
Thrown when an application tries to load in a class through its string name using:
**The forName method in class Class.
**The findSystemClass method in class ClassLoader .
**The loadClass method in class ClassLoader.
but no definition for the class with the specifed name could be found.
[API1.1]

jv'exception.CloneNotSupportedException

name::
* McsEngl.jv'exception.CloneNotSupportedException@cptIt,

jv'exception.COMPILE'TIME'CHECKING

name::
* McsEngl.jv'exception.COMPILE'TIME'CHECKING@cptIt,

jv'exception.DataFormatException

name::
* McsEngl.jv'exception.DataFormatException@cptIt,

jv'exception.DigestException

name::
* McsEngl.jv'exception.DigestException@cptIt,

jv'exception.F

name::
* McsEngl.jv'exception.F@cptIt,

jv'exception.FileNotFoundException

name::
* McsEngl.jv'exception.FileNotFoundException@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.filenotfoundexception#.

PACKAGE: java.io.

SUPERCLASS: java.io.IOException#ql:java.io.IOException rl3#

FUNCTION:
** you MUST throw or catch this exception when you read a file.
You need to import (on 1.1) specifically this exception.
[NIKOS]

jv'exception.IllegalAccessException

name::
* McsEngl.jv'exception.IllegalAccessException@cptIt,

jv'exception.InstantiationException

name::
* McsEngl.jv'exception.InstantiationException@cptIt,

jv'exception.InterruptedException

name::
* McsEngl.jv'exception.InterruptedException@cptIt,

jv'exception.IntrospectionException

name::
* McsEngl.jv'exception.IntrospectionException@cptIt,

jv'exception.InvocationTargetException

name::
* McsEngl.jv'exception.InvocationTargetException@cptIt,

jv'exception.IOException

name::
* McsEngl.jv'exception.IOException@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.ioexception#.

PACKAGE: java.io.

SUPERCLASS: java.lang.Exception#ql:java.lang.Exception rl3#.

FUNCTION:
** you must throw/catch this exception WHEN you read a LINE from a BufferedReader.
[NIKOS]

jv'exception.KeyException

name::
* McsEngl.jv'exception.KeyException@cptIt,

jv'exception.LastOwnerException

name::
* McsEngl.jv'exception.LastOwnerException@cptIt,

jv'exception.NotBoundException

name::
* McsEngl.jv'exception.NotBoundException@cptIt,

jv'exception.NotOwnerException

name::
* McsEngl.jv'exception.NotOwnerException@cptIt,

jv'exception.NoSessionException

name::
* McsEngl.jv'exception.NoSessionException@cptIt,

jv'exception.NoSuchAlgorithmException

name::
* McsEngl.jv'exception.NoSuchAlgorithmException@cptIt,

jv'exception.NoSuchFieldException

name::
* McsEngl.jv'exception.NoSuchFieldException@cptIt,

jv'exception.NoSuchLineNumberException

name::
* McsEngl.jv'exception.NoSuchLineNumberException@cptIt,

jv'exception.NoSuchMethodException

name::
* McsEngl.jv'exception.NoSuchMethodException@cptIt,

jv'exception.NoSuchProviderException

name::
* McsEngl.jv'exception.NoSuchProviderException@cptIt,

jv'exception.ParseException

name::
* McsEngl.jv'exception.ParseException@cptIt,

jv'exception.PropertyVetoException

name::
* McsEngl.jv'exception.PropertyVetoException@cptIt,

jv'exception.ServerNotActiveException

name::
* McsEngl.jv'exception.ServerNotActiveException@cptIt,

jv'exception.SignatureException

name::
* McsEngl.jv'exception.SignatureException@cptIt,

jv'exception.SQLException

name::
* McsEngl.jv'exception.SQLException@cptIt,

jv'exception.TooManyListenersException

name::
* McsEngl.jv'exception.TooManyListenersException@cptIt,

jv'exception.UnsupportedFlavorException

name::
* McsEngl.jv'exception.UnsupportedFlavorException@cptIt,

jv'exception.EXCEPTION.RuntimeException

name::
* McsEngl.jv'exception.EXCEPTION.RuntimeException@cptIt,
* McsEngl.jv'RuntimeException@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.runtimeexception#.

PACKAGE: java.lang.

_SUPERCLASS:
java.lang.Exception.

_SUBCLASS:
ArithmeticException
ArrayStoreException
ClassCastException
IllegalArgumentException
IllegalMonitorStateException
IllegalStateException
IndexOutOfBoundsException
NegativeArraySizeException
NullPointerException
SecurityException
ProviderException
EmptyStackException
MissingResourceException
NoSuchElementException

FUNCTION:
* its constructor throws a message at java-console while the program is running.

RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.

A method is not required to declare in its throws clause any subclasses of RuntimeException that might be thrown during the execution of the method but not caught.
[API1.1]

jv'exception.ArithmeticException

name::
* McsEngl.jv'exception.ArithmeticException@cptIt,

Example#ql:jv'ex.arithmeticexception#.

jv'exception.ArrayStoreException

name::
* McsEngl.jv'exception.ArrayStoreException@cptIt,

jv'exception.ClassCastException

name::
* McsEngl.jv'exception.ClassCastException@cptIt,

jv'exception.IllegalArgumentException

name::
* McsEngl.jv'exception.IllegalArgumentException@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.illegalargumentexception#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.RuntimeException.

SUBCLASS:
IllegalThreadStateException
NumberFormatException
InvalidParameterException
FormatException

FUNCTION:
Thrown to indicate that a method has been passed an illegal or inappropriate argument.
[API1.1]

Example#ql:jv'ex.illegalargumentexception#.

jv'exception.IllegalThreadStateException

name::
* McsEngl.jv'exception.IllegalThreadStateException@cptIt,

Example#ql:jv'ex.illegalthreadstateexception#.

jv'exception.NumberFormatException

name::
* McsEngl.jv'exception.NumberFormatException@cptIt,

Example#ql:jv'ex.numberformatexception#.

jajavava'InvalidParameterException

name::
* McsEngl.jajavava'InvalidParameterException@cptIt,

jv'exception.FormatException

name::
* McsEngl.jv'exception.FormatException@cptIt,

jv'exception.IllegalMonitorStateException

name::
* McsEngl.jv'exception.IllegalMonitorStateException@cptIt,

jv'exception.IllegalStateException

name::
* McsEngl.jv'exception.IllegalStateException@cptIt,

jv'exception.IndexOutOfBoundsException

name::
* McsEngl.jv'exception.IndexOutOfBoundsException@cptIt,

SUBCLASS:
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException

jv'exception.ArrayIndexOutOfBoundsException

name::
* McsEngl.jv'exception.ArrayIndexOutOfBoundsException@cptIt,
* McsEngl.jv'ArrayIndexOutOfBoundsException@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.arrayindexoutofboundsexception#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.IndexOutOfBoundsException.

FUNCTION:
Thrown to indicate that an array has been accessed with an illegal index. The index is either negative or greater than or equal to the size of the array.
[API1.1]

jv'exception.StringIndexOutOfBoundsException

name::
* McsEngl.jv'exception.StringIndexOutOfBoundsException@cptIt,

Example#ql:jv'ex.stringindexoutofboundsexception#.

jv'exception.NegativeArraySizeException

name::
* McsEngl.jv'exception.NegativeArraySizeException@cptIt,

jv'exception.NullPointerException

name::
* McsEngl.jv'exception.NullPointerException@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.nullpointerexception#.

PACKAGE: java.lang.

SUPERCLASS: java.lang.RuntimeException.

FUNCTION:
Thrown when an application attempts to use null in a case where an object is required. These include:
**Calling the instance method of a null object.
**Accessing or modifying the field of a null object.
**Taking the length of null as if it were an array.
**Accessing or modifying the slots of null as if it were an array.
**Throwing null as if it were a Throwable value.
[API1.1]

jv'exception.SecurityException

name::
* McsEngl.jv'exception.SecurityException@cptIt,

jv'exception.ProviderException

name::
* McsEngl.jv'exception.ProviderException@cptIt,

jv'exception.EmptyStackException

name::
* McsEngl.jv'exception.EmptyStackException@cptIt,

PACKAGE: java.util.

Example#ql:jv'ex.emptystackexception#.

jv'exception.MissingResourceException

name::
* McsEngl.jv'exception.MissingResourceException@cptIt,

jv'exception.NoSuchElementException

name::
* McsEngl.jv'exception.NoSuchElementException@cptIt,

jv'exception.STANDARD

name::
* McsEngl.jv'exception.STANDARD@cptIt,

The exception classes declared by the standard packages java.lang, java.util, java.io and java.net are called the standard exception classes.
[lang spec, 1996aug]

jv'exception.UNCHECKED

name::
* McsEngl.jv'exception.UNCHECKED@cptIt,

jv'doinng#cptCore475#

name::
* McsEngl.jv'doinng@cptIt,

Design and architecture decisions drew from a variety of languages such as Eiffel, SmallTalk, Objective C, and Cedar/Mesa. The result is a language environment that has proven ideal for developing secure, distributed, network-based end-user applications in environments ranging from networked-embedded devices to the World-Wide Web and the desktop.
[white paper]

Με τη jawa θα έχουμε ΠΡΑΓΜΑΤΙΚΗ συναναστραφή με αντικείμενα. Αντί για αντικείμενα μιλούμε για 'τάξεις'. Η κάθε ΤΑΞΗ είναι ένας κώδικας με εντολές που εκφράζουν καθετί αφηρημένο ή συγκεκριμένο γύρω μας.
[ΒΗΜΑ, 4 ΦΕΒ. 1996, 21]

Θα επιτρέπει την ανάπτυξη εφαρμογών σε περιβάλλον Web. Οι μικρές αυτές εφαρμογές, που λέγονται applets, ενσωματώνονται στις σελίδες και επιτρέπουν τον εμπλουτισμό τους με χρήσιμες λειτουργίες.
[COMPUTER GO, JAN. 1996, 153]

FRAMES (2.0):
Πρόκειται για ένα είδος ΠΛΑΙΣΙΩΝ, που χωρίζουν ένα παράθυρο σε πολλές επιμέρους περιοχές, που τρεχουν αυτόνομα με διαφορετικά έγγραφα.
[COMPUTER GO, JAN. 1996, 153]

Επιτρεπει τη δημιουργία ισχυρών εφαρμογών με μικρό όγκο κώδικα, με απλή και εύκολη χρήση και ειδική μέριμνα για τον εύκολο εντοπισμό λαθών.
[ΚΑΘΗΜΕΡΙΝΗ, 11 ΦΕΒ. 1996, 51]

jv'function.DYNAMIC

name::
* McsEngl.jv'function.DYNAMIC@cptIt,

From: Frank D. Greco <fgreco@crossroadstech.com>
To: <advanced-java@xcf.berkeley.edu>
Cc: Suresh A <asuresh@wipsys.stph.net>
Subject: Re: what makes java Dynamic
Date: Τετάρτη, 12 Μαΐου 1999 6:37 μμ
>Can anyone tell me some features of Java that make it a >"dynamic" language?
Depends if you heard that from a developer/engineer or a sales person...
Dynamic in the computing sense implies loading new behavior (ie, classes) to your application as its running. This magic occurs through the benefit of dynamic loading, interfaces and good OO design (not in that order).
I also think that the existence of javac as a bonafide Java class, allows a program to generate source files, compile them and then load them, all in 100% Java is dynamic as well. That's pretty cool imho. Why more IDE's don't leverage this characteristic is beyond me.
Frank G. - JWalker - NYC JavaBean +======================================================================+ | Crossroads Technologies Inc, 55 Broad Street, NYC, NY 10004 | | Email: fgreco@CrossroadsTech.com Web: www.CrossroadsTech.com | | Voice: 212-482-5280 Fax: 212-482-5281 | +======================================================================+

jv'function.FAMILIAR

name::
* McsEngl.jv'function.FAMILIAR@cptIt,

Java looks like C and C++ while discarding the overwhelming complexities of those languages.

jv'function.GARBAGE'COLLECTION

name::
* McsEngl.jv'function.GARBAGE'COLLECTION@cptIt,
* McsEngl.jv'automatic'memory'management@cptIt,
* McsEngl.jv'GARBAGE'COLLECTION@cptIt,
* McsEngl.jv'CLEANUP@cptIt,
* McsEngl.jv'GARBAGE'COLLECTOR@cptIt,

_DEFINITION:
The Java language is designed to be garbage collected -- it does not give the programmer the ability to deallocate objects explicitly. Java does not presuppose any particular kind of garbage collection; various algorithms may be used depending on system requirements.
[spec jvm 1996]

Cleanup is a special problem because it’s easy to forget about an element when you’re done with it, since it no longer concerns you. Thus, the resources used by that element are still retained, and you can easily end up running out of resources (most notably memory).
Java ... has a garbage collector that automatically releases memory resources when they’re no longer being used.
[B. ECKEL, Thinking In Java, 1997aug18, 99]

jv'function.High'Performance

name::
* McsEngl.jv'function.High'Performance@cptIt,

Secret weapon for Java speed By Alex Lash and Nick Wingfield February 18, 1997, 6:15 p.m. PT
Sun Microsystems (SUNW) plans to speed up the performance of Java applets significantly, but it's not saying how it will accomplish that feat.
Today, Sun's JavaSoft division announced that it will acquire a small start-up, LongView Technologies, which has developed technology for revving up Java applets. But JavaSoft is keeping LongView's technology under a veil of secrecy until its JavaOne developer conference in April.

jv'function.HTML'EMBEDING

name::
* McsEngl.jv'function.HTML'EMBEDING@cptIt,

Java has the ability to embed its special-programs (called applets) inside HTML pages.

jv'function.INHERITANCE

name::
* McsEngl.jv'function.INHERITANCE@cptIt,
* McsEngl.jv'INHERITANCE@cptIt,

_DEFINITION:
The second approach is more subtle. It creates a new class as a type of an existing class. You literally take the form of the existing class and add code to it, without modifying the existing class. This magical ACT is called inheritance, and the compiler does most of the work. Inheritance is one of the cornerstones of object-oriented programming and has additional implications that will be explored in the next chapter.
[B. ECKEL, Thinking In Java, 1997aug18, 141]

However, it seems a pity to go to all the trouble to create a data type and then be forced to create a brand new one that might have very similar functionality. It would be nicer if we could take the existing data type, clone it and make additions and modifications to the clone. This is effectively what you get with INHERITANCE, with the exception that if the original class (called the base or super or parent class) is changed, the modified “clone” (called the derived or inherited or sub or child class) also reflects the appropriate changes.
[B. ECKEL, Thinking In Java, 1997aug18, 28]

IMPORTANCE:
The most important aspect of inheritance is not that it provides methods for the new class. It’s the relationship expressed between the new class and the base class. This relationship can be summarized by saying, “The new class is a type of the existing class.”
[B. ECKEL, Thinking In Java, 1997aug18, 154]

jv'function.MULTITHREADING

name::
* McsEngl.jv'function.MULTITHREADING@cptIt,
* McsEngl.jv'MULTITHREADING@cptIt,

One of the very convenient features of multithreading at the language level is that the programmer doesn’t need to worry about whether there are many processors or just one – the program is logically divided into threads, and if the machine has more than one processor then the program just runs faster, without any special adjustments.
[B. ECKEL, Thinking In Java, 1997aug18, 28]

JAVA is a general-purpose concurrent object-oriented programming language.

jv'function.OBJECT'ORIENTED

name::
* McsEngl.jv'function.OBJECT'ORIENTED@cptIt,
* McsEngl.jv'oo@cptIt,

On Wed, 31 Mar 1999, Rafael Forte wrote:
> I was talking with a doctor in OOP and he says that Java isn`t a pure > Object Oriented Language like SmallTalk. Thats true??? I always think in > Java as a purely Object Oriented Language...
Purity is in the eye of the beholder and the term lacks any meaning when applied to programming languages.
What your doctor is referring to is that Java makes a distinction between built-in types (int, double, etc.) and classes. No such distinction exists in Smalltalk. If this makes it "pure" in your eyes, so be it.
The fact remains that I can write structured code or crappy/unreadable/unmaintainable code in any language. In Smalltalk, just make a class called main with a method named foo and write your entire application in that one method. But it's pure!!!

Robert Koss, Ph.D. | Object Mentor, Inc. | Tel: (800) 338-6716 Senior Consultant | 14619 N Somerset Cr | Fax: (847) 918-1023 koss@oma.com | Green Oaks IL 60048 | www.oma.com
[adv-java {1999-03-31}]

"Purity" is a sticky and subjective term. I'm sure what your friend is talking about is the fact that Java has primitive datatypes (int, char, float, etc) that are not objects. Yes, they have object wrappers available (Integer, Char, Float, etc) but the fact that non-object datatypes exist tends to really bug people coming from a Smalltalk background (where truly everything is an object).
Other people will say that Java *is* a "pure" OO language because you have to write a class to run any program. This is usually used to denigrate C++ by calling it "unpure" because in C++ you can write a program without creating any class.
It all really boils down to personal preference, and IMHO is not worthy of "holy wars".
Greg Vaughn Technical Lead Delphi Consultants, LLC gvaughn@delphis.com
[adv-java {1999-03-31}]

Since everybody (else) seems to be taking this question seriously, I'll do the same...
Programming languages, especially those targeted as Java is for practical general-purpose program development, are not created to prove a point, to demonstrate truth, beauty, purity or to maximize any other arbitrary measure of perfection.
They are designed to permit the efficient, reliable construction of computational artifacts. This is not easy. (Nor, I'll admit, is it entirely divorced from the conceptual. It's just a lot more complicated that the "pure" application of any single powerful concept like those that come under the rubric of the "object oriented.")
A simple, elegant, "pure" language is easier to construct, but almost certainly it won't be very useful for the things programmers and software designers are asked to accomplish these days. Witness what happened to Lisp between its conception as a language, its first implementation and its current forms.
This point is less true for academic projects that seek to extend the range of understanding of the application of computational hardware and the ability to formulate algorithms, data structures and accomplish other fundamental tasks of computation. That kind of work, when successfull, delineates new knowledge and techniques. After the good points and indications for their use are understood and the bad points and contra-indications are either understood or mitigated, then that new knowledge and those techniques get incorporated into practical tools for producing and maintaining software systems.
To specifically address Java, I'll point out one aspect that has not been mentioned yet in this message thread: The disparity between multiply-inheritable "interfaces" and singly-inheritable "classes" (implementations). Without wishing to start a debate about the virtue of this approach vis. a vis. full C++ and CLOS-style multiple inheritance or Smalltalk's strict single inheritance model, I'll simply state my personal feeling that the hybrid nature of Java's choice stikes me as aethetically unpleasing and intellectually unsatisfying (this from a person who still likes C++ a lot and has much more experience with it than Java).
To return to my point that pracicality is the really pertinent measure of a programming language's "goodness," I'll claim that the difficulty that ensues from not having multiple inheritance of implementations when creating implementations of CORBA interfaces in Java is an indication that Java's treatment of the concept of inheritance is less than ideal.
To straddle the conceptual / pragmatic divide a bit, I believe that there is a kind of (to borrow an electrical engineering term) "impedance mis-matcb" between problem-domain modelling which very often exhibits multiple inheritance structures and solution domain options where Java forbids full multiple inheritance. I think that this mis-match introduces a category of problems for implementors and makes there job more difficult than it ought to be.
Mitigating this appears not to be easy, since there has been much asserted as to the confusion that results from having and using multiple inheritance of implemenation in C++ (I'm not familiar how well CLOS programmers fare).I don't pretend to have an answer here.
All that said, however, I believe that for a sizeable and growing class of applications, Java is a real step ahead for software engineering. By the pragmatic measure, (almost) any given programmer can get more reliable working Java code produced in a given amount of time that will comparable languages (few though there are).
Only time will tell how much longevity Java will enjoy and just how it will pass from its current youthful state to one of maturity and eventually out of use altogether. However, I feel quite certain that the "purity" of Java as an object-oriented language will have nothing to do with the arc of its life.
Randall R. Schulz Teknowledge Corp.Palo Alto, CA USA
[adv-java {1999-03-31}]

Why does this question keep coming up?
I suggest, for the benefit of those that think there's something _positive_, about a programming language not providing support for anything other than object- oriented constructs that we redefine 'OO' as 'Object-Only' and be done with it.
None of the following languages are object-only:
Java, C++, Eiffel, Cecil, Modula-2,3, Beta, CLOS, Emerald, Garnet, Oberon, Sather ... and many, many more ...
They all, however, provide language level support for object-oriented programming. Some of them also support a great deal more. For example,
1. Some support strong typing.2. Some support parameteric types.3. Some have a well-defined module mechanism.4. Some support prototypes.5. Some support functional programming idioms.
and so on. All of these are useful in the right context.Two of them are, in my (but not necessarily everyones) opinion, essential complements to the object-oriented idiom: strong typing and parameterized types. Smalltalk supports neither, Java only one (albeit in a pretty broken sort of way).
For all that, both Java and Smalltalk are good tools in their respective contexts. Beyond that, who cares?
Cheers,

Miles
-- Miles Sabin Cromwell Media Internet Systems Architect 5/6 Glenthorne Mews +44 (0)181 410 2230 London, W6 0LJ msabin@cromwellmedia.co.uk England
[adv-java {1999-04-01}]

jv'function.PERSISTENCE

name::
* McsEngl.jv'function.PERSISTENCE@cptIt,
* McsEngl.jv'PERSISTENCE@cptIt,

_DEFINITION:
When you create an object, it exists for as long as you need it, but under no circumstances does it exist when the program terminates. While this makes sense at first, there are situations where it would be incredibly useful if an object were to exist and hold its information even while the program wasn’t running. Then the next time you started the program up, the object would be there and it would have the same information it had the previous time the program was running. Of course you can get a similar effect now by writing the information to a file or a database, but in the spirit of making everything an object it would be quite convenient to be able to declare an object persistent and have all the details taken care of for you.
Java 1.1 provides support for “lightweight persistence,” which means you can easily store objects on disk and later retrieve them. The reason it’s “lightweight” is that you’re still forced to make explicit calls to do the storage and retrieval. In some future release more complete support for persistence may appear.
[B. ECKEL, Thinking In Java, 1997aug18, 36]

jv'function.PLATFORM

name::
* McsEngl.jv'function.PLATFORM@cptIt,

Java as a New Platform
Java and the Java VM together provide a set of services that Java programs can rely on, regardless of the underlying hardware and OS. In this respect, Java has become positioned as a new platform--a target environment for applications.
[PC MAG {1998-04-07}]

jv'function.POLYMORPHISM

name::
* McsEngl.jv'function.POLYMORPHISM@cptIt,
* McsEngl.jv'POLYMORPHISM@cptIt,
* McsEngl.jv'DYNAMIC'BINDING@cptIt,

=== _NOTES: polymorphism (also called dynamic binding or late binding or run-time binding)
[B. ECKEL, Thinking In Java, 1998jan, 206]

_DEFINITION:
Polymorphism means “different forms.” In object-oriented programming, you have the same face (the common interface in the base class) and different forms using that face: the different versions of the dynamically-bound methods.
You’ve seen in this chapter that it’s impossible to understand, or even create, an example of polymorphism without using data abstraction and inheritance. Polymorphism is a feature that cannot be viewed in isolation (like a switch statement, for example), but instead works only in concert, as part of a “big picture” of class relationships. People are often confused by other, non-object-oriented features of Java, like method overloading, which are sometimes presented as object-oriented. Don’t be fooled: If it isn’t late binding, it isn’t polymorphism.
To use polymorphism, and thus object-oriented techniques, effectively in your programs you must expand your view of programming to include not just members and messages of an individual class, but also the commonality among classes and their relationships with each other. Although this requires significant effort, it’s a worthy struggle, because the results are faster program development, better code organization, extensible programs, and easier code maintenance.
[B. ECKEL, Thinking In Java, 1997aug18, 206]

IMPORTANCE:
Polymorphism is the third essential feature of an object-oriented programming language, after
- data abstraction and
- inheritance.
[B. ECKEL, Thinking In Java, 1997aug18, 163]

jv'function.PORTABLE

name::
* McsEngl.jv'function.PORTABLE@cptIt,
* McsEngl.jv'PORTABILITY@cptIt,

Architecture neutrality is just one part of a truly portable system. Java takes portability a stage further by being strict in its definition of the basic language. Java puts a stake in the ground and specifies the sizes of its basic data types and the behavior of its arithmetic operators. Your programs are the same on every platform--there are no data type incompatibilities across hardware and software architectures.
[white paper]

across multiple machine architectures, operating systems, and graphical user interfaces,

"First, use the println method rather than printing Strings with embedded line termination characters. Second, use the expression System.getProperty("line.separator") to find the line separator for the platform. The system properties in general are very useful for portability. Use them whenever applicable."
"Similarly, the AWT abstracts the details of coping with the platform's window system. Use that abstraction to the fullest. For example, use a LayoutManager rather than hard-coding component sizes or positions; use the various getSize methods; use the desktop colors available in java.awt.SystemColor."
[WebReview 1997dec]

jv'function.REFLECTION

name::
* McsEngl.jv'function.REFLECTION@cptIt,
* McsEngl.jv'REFLECTION@cptIt,

Reflection
Enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts on objects, within security restrictions. The API accommodates applications that need access to either the public members of a target object (based on its runtime class) or the members declared by a given class.
[JavaSoft tutorial 1997jul08]

jv'function.SECURE

name::
* McsEngl.jv'function.SECURE@cptIt,

jv'SEMI'INTERPRETED'LANGUAGE

name::
* McsEngl.jv'SEMI'INTERPRETED'LANGUAGE@cptIt,

Java is a semi-interpreted language (the VM must interpret the byte code for your machine),

jv'function.SIMPLE

name::
* McsEngl.jv'function.SIMPLE@cptIt,

jv'function.TYPED'LANGUAGE

name::
* McsEngl.jv'function.TYPED'LANGUAGE@cptIt,

Java is a strongly typed language, which means that every variable and every expression has a type that is known at compile time. Types limit the values that a variable can hold or that an expression can produce, limit the operations supported on those values, and determine the meaning of the operations. Strong typing helps detect errors at compile time.
[lang spec, 1996aug]

jv'function.NOT'SUPPORTED

name::
* McsEngl.jv'function.NOT'SUPPORTED@cptIt,

Java lacks many of the advanced object-oriented design ideas of C++, such as
- full multiple inheritance and
- operator overloading.
But by leaving these features out, Jv's designers created a much simpler language which is easier to understand.

jv'GENERICS (since 1.5)

name::
* McsEngl.jv'GENERICS (since 1.5)@cptIt,

_DEFINITION:
* When you take an element out of a Collection, you must cast it to the type of element that is stored in the collection. Besides being inconvenient, this is unsafe. The compiler does not check that your cast is the same as the collection's type, so the cast can fail at run time.

Generics provides a way for you to communicate the type of a collection to the compiler, so that it can be checked. Once the compiler knows the element type of the collection, the compiler can check that you have used the collection consistently and can insert the correct casts on values being taken out of the collection.

The java.util.Collections class has been outfitted with wrapper classes that provide guaranteed run-time type safety. They are similar in structure to the synchronized and unmodifiable wrappers. These “checked collection wrappers” are very useful for debugging. Suppose you have a set of strings, s, into which some legacy code is mysteriously inserting an integer. Without the wrapper, you will not find out about the problem until you read the problem element from the set, and an automatically generated cast to String fails. At this point, it is too late to determine the source of the problem. If, however, you replace the declaration:
Set<String> s = new HashSet<String>();
with this declaration:
Set<String> s = Collections.checkedSet(new HashSet<String>(), String.class);
the collection will throw a ClassCastException at the point where the legacy code attempts to insert the integer. The resulting stack trace will allow you to diagnose and repair the problem.
[/JAVA/DOCS/150/guide/language/generics.html]

SINCE:
1.5

EXAMPLES#ql:jv'ex.generics#

jv'GRAMMAR

name::
* McsEngl.jv'GRAMMAR@cptIt,

GENERIC: Formal-Grammar#ql:[Level object:rl? conceptCore1105 ]#

SOURCE: http://www.antlr.org/grammars/java/java.g

Grammar Notation:
Terminal-symbols#ql:fg'terminal'symbol# are shown in fixed width font in the productions of the lexical and syntactic grammars, and throughout this specification whenever the text is directly referring to such a terminal symbol. These are to appear in a program exactly as written.
Nonterminal-symbols#ql:fg'non'terminal'symbol# are shown in italic type. The definition of a nonterminal is introduced by the name of the nonterminal being defined followed by a colon. One or more alternative right-hand sides for the nonterminal then follow on succeeding lines.
[lang spec, 1996aug]

jv'Lexical'Grammar

name::
* McsEngl.jv'Lexical'Grammar@cptIt,

TERMINAL-SYMBOL:
The lexical grammar for Java has as its terminal symbols the characters of the Unicode character set. It defines a set of productions, starting from the goal-symbol Input#ql:"[Field JAVA:input]"#, that describe how sequences of Unicode characters are translated into a sequence of input elements.
[lang spec, 1996aug]

jv'Lexical'Translations
A raw Unicode character stream is translated into a sequence of Java tokens, using the following three lexical translation steps, which are applied in turn:

1. A translation of Unicode-escapes#ql:jv'unicode'escape# in the raw stream of Unicode characters to the corresponding Unicode character. A Unicode escape of the form \uxxxx, where xxxx is a hexadecimal value, represents the Unicode character whose encoding is xxxx. This translation step allows any Java program to be expressed using only ASCII characters.

2. A translation of the Unicode stream resulting from step 1 into a stream of input-characters#ql:jv'input'character# and line-terminators#ql:jv'line'terminator#.

3. A translation of the stream of input characters and line terminators resulting from step 2 into a sequence of Java input-elements#ql:jv'input'element# which, after white space and comments are discarded, comprise the tokens#ql:jv'token# that are the terminal symbols of the syntactic grammar for Java.
[lang spec, 1996aug]

jv'LINE'TERMINATOR: jv'line'separators:
Java implementations next divide the sequence of Unicode input characters into lines by recognizing line terminators. This definition of lines determines the line numbers produced by a Java compiler or other Java system component. It also specifies the termination of the // form of a comment.
#jv'LineTerminator#:
the ASCII LF character, also known as "newline"
the ASCII CR character, also known as "return"
the ASCII CR character followed by the ASCII LF character
Lines are terminated by the ASCII characters CR, or LF, or CR LF. The two characters CR immediately followed by LF are counted as one line terminator, not two. The result is a sequence of line terminators and input characters, which are the terminal symbols for the third step in the tokenization process.
[lang spec, 1996aug]

jv'INPUT'CHARACTER:
#jv'InputCharacter#:
UnicodeInputCharacter#ql:[Field JAVA:unicodeinputcharacter]# but not CR or LF
[lang spec, 1996aug]

jv'INPUT'ELEMENT

name::
* McsEngl.jv'INPUT'ELEMENT@cptIt,

_DEFINITION:
The input-characters#ql:jv'input'character# and line-terminators#ql:jv'line'terminator# that
result from escape-processing#ql:jv'escape'sequence# and then input line recognition
are reduced to a sequence of INPUT ELEMENTS.
[lang spec, 1996aug]

PRODUCTION:
#jv'Input#: (the START-SYMBOL for lexical-grammar)
InputElementsopt Subopt
#jv'InputElements#:
InputElement
InputElements InputElement
#jv'InputElement#:
WhiteSpace#ql:[Field JAVA:WhiteSpace]#
Comment#ql:jv'comment#
Token#ql:[Field JAVA:token]#
#jv'Sub#:
the ASCII SUB character, also known as "control-Z"
[lang spec, 1996aug]

jv'WHITE'SPACE

name::
* McsEngl.jv'WHITE'SPACE@cptIt,

White space
is defined as the ASCII space, horizontal tab, and form feed characters, as well as line-terminators#ql:jv'line'terminator# (§3.4).

#jv'WhiteSpace#:
 the ASCII SP character, also known as "space"
 the ASCII HT character, also known as "horizontal tab"
 the ASCII FF character, also known as "form feed"
 LineTerminator#ql:[Field JAVA:LineTerminator]#
[lang spec, 1996aug]

White space consists mostly of the space character that you produce by hitting the space bar on your keyboard and that is commonly used to separate words in sentences. There are four other white space characters in Java, the horizontal tab, the form feed, the carriage return, and the linefeed. Depending on your platform, when you hit the return or enter key, you get either a carriage return (the Mac), a linefeed (Unix) or both (DOS, Windows, VMS). This produces a hard line break in the source code text.

Outside of String literals Java treats all white space and runs of white space (more than one white space character in immediate succession) the same. It's used to separate tokens, and one space is as good as seven spaces, a tab and two carriage returns. Exactly which white space characters you use is primarily a result of what's convenient for human beings reading the code. The compiler doesn't care.

Inside String and character literals the only white space permitted is the space character. Carriage returns, tabs, line feeds and form feeds must be inserted with special escape sequences like '\r', '\t', '\f', and '\n'. You cannot break a String across a line like this:

String poem = "Mary had a little lamb whose fleece was white as snow and everywhere that Mary went the lamb was sure to go.";

Instead you must use \n and the String concatenation operator, +, like this:
String poem = "Mary had a little lamb\n" + "whose fleece was white as snow\n" + "and everywhere that Mary went\n" + "the lamb was sure to go.";
[Harold course 1997spring]

jv'ALPHABET#cptIt431#

name::
* McsEngl.jv'ALPHABET@cptIt,
* McsEngl.jv'CHARACTER'SET@cptIt,

Java programs are written using the Unicode character set, version 2.0. Information about this encoding may be found at: http://www.unicode.org and ftp://unicode.org
[lang spec, 1996aug]

Unicode enables multilingual programs. Java is unique in programming languages in having chosen Unicode as its primitive built-in character type.
[Intl Spec, 1996dec06]

Java programs are written in Unicode (§3.1), but lexical-translations#ql:jv'lexical'translations# are provided (§3.2) so that Unicode escapes (§3.3) can be used to include any Unicode character using ONLY ASCII characters.
[lang spec, 1996aug]

jv'UNICODE_ESCAPE:
* jv'char.unicode,
Java implementations first recognize Unicode escapes in their input, translating the ASCII characters \u followed by four hexadecimal digits to the Unicode character with the indicated hexadecimal value, and passing all other characters unchanged.
[lang spec, 1996aug]

jv'UNICODE_INPUT_CHARACTER:
#jv'UnicodeInputCharacter#:
 UnicodeEscape
 RawInputCharacter
#jv'UnicodeEscape#:
 \ UnicodeMarker HexDigit HexDigit HexDigit HexDigit
#jv'UnicodeMarker#:
 u
 UnicodeMarker u
#jv'RawInputCharacter#:
 any Unicode character
#jv'HexDigit#: one of
 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
[lang spec, 1996aug]

Ελλάδα \u0395\u03bb\u03bb\u03ac\u03b4\u03b1
ελληνικά \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac

jv'Syntactic'Grammar

name::
* McsEngl.jv'Syntactic'Grammar@cptIt,

The Java syntactic grammar is described in chapters
- Types, Values, Variables
- Names
- Arrays
- Blocks and Statements
- Expressions.
The syntactic grammar for Java has Java-tokens#ql:jv'token# defined by the lexical-grammar#ql:jv'lexical'grammar# as its terminal symbols.
It defines a set of productions, starting from the goal symbol CompilationUnit#ql:jv'compilation'unit#, that describe how sequences of tokens can form syntactically correct Java programs.
[lang spec, 1996aug]

TERMINAL-SYMBOL:
** The lexical-grammar has as its terminal-symbols the characters of the Unicode character set.
It defines a set of productions, starting from the goal-symbol#ql:fg'goal'symbol# Input#ql:"[Field JAVA:input]"#, that describe how sequences of Unicode characters are translated into a sequence of input elements.
These input-elements#ql:jv'input'element#, with white space and comments discarded, form the terminal-symbols for the syntactic-grammar for Java and are called Java tokens.
[lang spec, 1996aug]

GOAL-SYMBOL:
It defines a set of productions, starting from the goal-symbol CompilationUnit#ql:jv'compilation'unit#, that describe how sequences of tokens can form syntactically correct Java programs.
[lang spec, 1996aug]

jv'COMPILATION'UNIT

name::
* McsEngl.jv'COMPILATION'UNIT@cptIt,
* McsEngl.jv'COMPILATION'UNIT@cptIt,
* McsEngl.jv'TRANSLATION'UNIT@cptIt,
* McsEngl.jv'JAVA'FILE@cptIt,

_DEFINITION:
The source code for an Java-program consists of one or more compilation units.
Each compilation unit can contain only the following (in addition to white space and comments):
· a package statement
· import statements
· class declarations
· interface declarations.
[SPEC]

CompilationUnit is the goal symbol (§2.1) for the syntactic-grammar#ql:jv'syntactic'grammar# (§2.3) of Java programs. It is defined by the following productions:
#jv'CompilationUnit#:
PackageDeclaration#ql:[Field JAVA:PackageDeclaration]#opt ImportDeclarationsopt TypeDeclarationsopt
#jv'ImportDeclarations#:
ImportDeclaration#ql:[Field JAVA:importdeclaration]#
ImportDeclarations ImportDeclaration
#jv'TypeDeclarations#:
TypeDeclaration#ql:[Field JAVA:TypeDeclaration]#
TypeDeclarations TypeDeclaration
[lang spec, 1996aug]

When you create a source-code file for Java, it’s commonly called a compilation unit (sometimes a translation unit). Each compilation unit must have a name followed by .java, and inside the compilation unit there can be a public class that must have the same name as the file (including capitalization, but excluding the .java filename extension). If you don’t do this, the compiler will complain. There can only be one public class in each compilation unit (or the compiler will complain). The rest of the classes in that compilation unit, if there are any, are hidden from the world outside that package because they’re not public, and they comprise “support” classes for the main public class.
[B. ECKEL, Thinking In Java, 1997aug18, 126]

A compilation unit consists of three parts, each of which is optional:
- A package declaration, giving the fully qualified name of the package to which the compilation unit belongs
- import declarations that allow types from other packages to be referred to using their simple names
- Type declarations of class and interface types
[lang spec, 1996aug]

Although each Java compilation unit can contain multiple classes or interfaces, at most one class or interface per compilation unit can be public.

In the current Java implementation, each compilation unit is a file with a ".java" suffix.
[Java Spec]

jv'HOW

name::
* McsEngl.jv'HOW@cptIt,

Here I'm gonna write THINGS that i want to learn

jv'HOW.class.instantiation'with'variable'name
eg: you have an array with class names and you want to instantiate them.

jv'HOW.search:
There is an example in HotJava alpha

jv'DEVELOPMENT-PROGRAM-(TOOL)#cptIt430#

name::
* McsEngl.jv'DEVELOPMENT-PROGRAM-(TOOL)@cptIt,
* McsEngl.jv'Tool@cptIt,

jv'tool.EDITOR

name::
* McsEngl.jv'tool.EDITOR@cptIt,

METAMATA

ANNOUNCING A FREE JAVA EDITOR FROM METAMATA....
Metamata EDIT is a general purpose editor that understands the syntax and semantics of Java programs.  It doubles as a browser.  You can use it standalone or you can also use it as part of our integrated suite of 7 tools (see list below).
Please visit our website (http://www.metamata.com) and download your copy of Metamata Edit.  The download includes all the free tools and a 30 day evaluation copy of the remaining tools.
User documentation for all tools can be downloaded in PDF and HTML formats.

THE HIGHLIGHTS OF METAMATA EDIT ARE:
. Previously Metamata Browse, this is now a general purpose editor.
. Understands the semantic structure of Java.
. Locates declarations and uses of names.
. Locates superclasses, subclasses, and subtypes.
. Sophisticated "undo", "redo" and "rollback" capabilities.
. "Commit" capability to facilitate integration with other Metamata tools.
. Multiple edit buffers in Windows.
. Integrated with Metamata Audit to display errors in a region of code.
. Integrated with Metamata Debug to provide visual debugging capabilities.
. Standard familiar features of a web browser such as hyperlink awareness   and moving back and forth between pages.
. Works with both JDK 1.1 and JDK 1.2.
. Internationalization capabilities - current version includes localization   to Spanish.

The complete list of Metamata tools are (please visit our web site for more information):
. Metamata Audit . Metamata Metrics . Metamata Debug . Metamata Edit (free) . Metamata Parse (free) . Metamata Diagnostics (free) . Metamata Package (free)
We appreciate your interest in our tools.  We are committed to making you a satisfied user/customer.  So please feel free to send all your issues and questions to us at support@metamata.com.  We will reply to you immediately.
Metamata Support support@metamata.com

jv'tool.IDE

name::
* McsEngl.jv'tool.IDE@cptIt,
* McsEngl.jv'JDE@cptIt,
* McsEngl.jv'Development'Environment@cptIt,

I'm trying to construct a chart of JavaIDEs and various features availabale in them. With the inputs recieved on this thread I just constructed a chart. I request all of you to look it at http://members.tripod.com/~rskommu/java_ide.html  and help me in filling it.

In regard to IDEs. I only recently found out about JDE, a free emacs ide for java with class-browser, debugger etc. The intro blurb says:
- source code editing with syntax highlighting   and auto indendation - compilation of Java source, with automatic   jumping to source lines that caused errors - run Java application - integrated debugging with automatic display   of current source file/line when stepping   through code - browse JDK doc - supports JDK 1.1 - runs on any platform supported by Emacs and   Sun's Java SDK (e.g., Win95/NT and Solaris) - easily and infinitely customizable
http://www.oasis.leo.org/java/development/ides/jde.dsc.html
I've downloaded it but not yet installed it. Will let you know.

jv'MOJO

name::
* McsEngl.jv'MOJO@cptIt,

NORCROSS, GA, October 1, 1996 -- Penumbra Software, Inc.
announced today the latest release of its popular Mojo™ Java Development Environment (JDE). Mojo 2.0 has been upgraded with many additional components including scrollbars, choice boxes, enhanced grids, and strip animations. The new version supports the ability to build stand-alone applications as well as applets and easily add windows and dialog boxes. Mojo's expanded library of graphic images and royalty-free clipart are conveniently accessible to make development even easier. Version 2.0 includes over 400 pages of documentation, and extensive on-line help.

jv'tool.IDE.MS'J++

name::
* McsEngl.jv'tool.IDE.MS'J++@cptIt,

jv'TOOL.IDE.MSSDK,

If you use anything in the com.ms.* packages then your programs are basically non-portable. This does not mean that EVERYTHING created with the MS SDK is non-portable. You do not have to use these packages. They allow you to take advantage of some MS specific stuff, if that is what you want to do. Technically, this would also restrict Netscape users on PCs from running the stuff too, although MS has a JVM plug-in that users could install independently
[J Zukowski 1997may18]

Microsoft Visual J++, Professional Edition
By Richard V. Dragan
Microsoft Visual J++ 1.0 Professional Edition, the company's first offering in the Java tool market, is a strong first release that stresses a traditional 3GL development paradigm, ActiveX support, and solid compiler technology. Visual J++ builds on the strengths of Microsoft Visual C++ to give Java developers many of the features C++ programmers have come to expect, plus new functionality designed specifically for Java. Like Visual C++, however, Visual J++ is not particularly visual: It does not enable RAD-style layout or seamless access to component properties, methods, or events.

The development environment in Visual J++, the highly customizable Microsoft Developer Studio, will be familiar to any Visual C++ user. Your command center is the Project Workspace window, which includes tabs to manage classes, source files, and online help. You can begin your project using the Java AppWizard tool, which helps you build a default Java applet or application.

Here, Visual J++ provides several advantages. You can create standalone and applet versions of your project using the same code; just set a flag and your code will compile as either one. The Java AppWizard also lets you generate multithreaded animations with sample .GIF files, which can be easily customized. Since many Java components rely on animation, this is an especially useful feature.

Another option lets you specify which parameters will be passed from your HTML file as part of its <APPLET> tag. Visual J++ will automatically declare member variables that contain these settings. As in the other products reviewed here, the code wizard will generate a default HTML page for your browser.

Once you generate a default project, the ClassView tool lets you manage it as a group of browsable classes. As you enter your own code, ClassView works behind the scenes to provide an update of all classes. You can add new members and methods using a dialog box and quickly access any member or method in your code. While ClassView is a useful tool, it will not show how groups of classes inherit from one another, a view that can be useful. Clicking on any item in the ClassView window points you right to the source code.

The FileView tool provides a view of your project in traditional source files. Either way, as you edit source code you'll appreciate the basic editing functionality, including Brief and Epsilon emulation, customizable syntax highlighting for Java and HTML files, and keystroke recording.

When you come to building a user interface, Visual J++ offers standard resource editors for menus, forms, and graphics files. It is unique among the products reviewed here in that you can view and edit .GIF and JPEG files in addition to .BMP files. Once you save these visual elements in a .RES file or resource template file (.RCT), you run the Resource Wizard to convert them into corresponding Java files. To save time, you can also import a Windows resource script file into a Java project.

Because there is no support for resources in Java, Visual C++ users will notice that the familiar ResourceView tab is missing in their Java projects. You can edit the usual resource types, but you'll have to convert them into Java code using the Resource Wizard. We found this approach less than ideal. Currently, Visual J++ has no support for adding events to individual visual components, although we expect to see such support in future releases. Because the Java code is rewritten each time the Resource Wizard runs, you can't preserve changes to Java code when the visual design changes. On the plus side, the Resource Wizard provides a special AWT layout manager that simulates the screen-independent dialog coordinates familiar to Windows programmers.

Actually building a project in Visual J++ proved quite fast, and you can build with or without debugging options. Debugging support in Visual J++ is strong: You have full control over watchpoints and breakpoints, and there is an excellent tabbed interface for viewing watches, automatic variables, and threads. Visual J++ also provides the ability to disassemble Java bytecodes. Like Visual C++, Visual J++ makes use of DataTips, which let you inspect the value of any variable by holding the cursor over it. You can also view variables by dragging them to watch windows. You can specify how the debugger will handle any Java or custom exception. In addition to a basic applet viewer, Visual J++ includes Microsoft Internet Explorer 3.0 and supports its debugging hooks, letting you debug multiple applets running on the same HTML page.
ActiveX: Use and Build One uncontested strength of Visual J++ is its unparalleled support of ActiveX components. The Java Type Wizard tool generates a Java wrapper class for any ActiveX/COM object, which can be manipulated from within your classes. The syntax is remarkably elegant, since Java takes care of many of the nuts and bolts of working with COM. Excellent documentation and sample code suggest ways to take advantage of ActiveX/COM objects within your Java projects, including accessing databases through RDO or DAO.

You can build reusable ActiveX components from within Visual J++, although this obviously requires a more in-depth knowledge of ActiveX. Visual J++ shows not only that Java and ActiveX can coexist peacefully, but also that Java offers some real advantages in working with ActiveX, including a simpler syntax for getting to COM objects. Microsoft says it plans to add ActiveX/JavaBeans interoperability but has not indicated that it will support JavaBeans as a native component type.

Overall, this is a strong first release, with all the support and features you need to start writing and debugging Java projects. If you are a Visual C++ programmer or prefer a traditional 3GL approach to development, Visual J++ deserves consideration as a serious Java development tool.

Microsoft Visual J++ 1.0, Professional Edition. List price: $99.
Microsoft Corp., Redmond, WA; 800-621-7930; www.microsoft.com/visualj.

jv'SYMANTEC'CAFE

name::
* McsEngl.jv'SYMANTEC'CAFE@cptIt,

symantec-cafe#cptItsoft1033: attPar#

jv'SUPERCEDE

name::
* McsEngl.jv'SUPERCEDE@cptIt,

The objective of the SuperCede Integrated Develop-ment Environment (IDE) is to provide rapid application development (RAD) by letting you examine, modify, and recompile an application as it runs.

On Monday Jan. 6 [1997], Asymetrix will announce commercial availability of its SuperCede Java Edition programming tool, featuring C++ integration, code generation for x86-based PCs, and interactive development.

jv'tool.COMPILER

name::
* McsEngl.jv'tool.COMPILER@cptIt,
* McsEngl.jv'COMPILER@cptIt,

Next, you need to compile this program into byte-codes. The Java source code you entered will not run directly on the Java Virtual Machine; instead, it must first be converted into a form that this interpreter can understand.
The process is substantially similar to compiling any other high-level language, but the compiler's output is intended for the JVM, not for a specific microprocessor.
[DSWgroup TUTORIAL, 1996]

automatic compilation
The first time you create an object of an imported class (or you access a static member of a class), the compiler will go hunting for the .class file of the same name (so if you’re creating an object of class X, it looks for X.class) in the appropriate directory. If it only finds X.class, that’s what it must use. However, if it also finds an X.java in the same directory, the compiler will first compare the date stamp on the two files, and if X.java is more recent than X.class, it will automatically recompile X.java to generate an up-to-date X.class.
[B. ECKEL, Thinking In Java, 1997aug18, 128]

JBrownie is a wrapper around the system default javac Java compiler, that monitors Java sourcecode and automatically recompiles any files found changed.
The focus of this tool is to assist software developers, who prefer to use a plain text editors over a resourcehungry IDE, but still want their code to be autocompiled on the fly without delay and without having to manually start javac over and over again. Checking for syntax errors becomes now as easy as just saving the file in question.
[http://www.onyxbits.de/jbrownie] 2008-11-27

jv'tool.DEBUGGER

name::
* McsEngl.jv'tool.DEBUGGER@cptIt,
* McsEngl.jv'debugger@cptIt,

the Jikes Debugger, otherwise known as jd. This is a graphic debugger that works with JDK 1.1, supports multiple threads and inner classes, and runs (at least in theory) on any platform that supports the Sun debugging protocol (includes Windows, Solaris, and I'm not sure what else).
      http://www.alphaworks.ibm.com/alphapreview_tools/

This is not exactly what you're looking for. But here is a list of debugger for Java: http://pharos.inria.fr/Java/search?term=s1:60

Check out the Jikes debugger at
http://alphaworks.ibm.com/tech/JikesDebugger
It's not the prettiest GUI, but I haven't found it lacking so far.

jv'tool.DECOMPILER

name::
* McsEngl.jv'tool.DECOMPILER@cptIt,

Here's the link:
http://www.geocities.com/SiliconValley/Bridge/8617/jad.html

http://directory.google.com/Top/Computers/Programming/Languages/Java/Develop ment_Tools/Translators/Decompilers_and_Disassemblers/
[2001feb04]

I would recommend using Dash-O Pro. In addition to obfuscation, it also supports several handy optimizations. The one I like best is, as I call it, smart linking for Java, where it removes methods and constants that are never called by your programs.
You can find out more about it at: http://www.preemptive.com/
[adv-java {1999-03-31}]

1. http://www.preemptive.com/products.html 2. http://decafe.hypermart.net 3. http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
I have used decafe pro decompiler, and found it very good.
[2000jan28]

jv'JAD

name::
* McsEngl.jv'JAD@cptIt,
* McsEngl.jv'tool.decompiler.jad@cptIt,

VERSION:
1.5.5 1998jun
JAD v1.4.2. Copyright 1997-98 Pavel Kouznetsov.

RUN:
Usage: jad [option(s)] <filename(s)>
Options:
-a - generate JVM instructions as comments (annotate)
-dis - disassembler only (disassembler)
-d <dir> - output directory
-f - generate fully qualified names (fullnames)
-i - print default initializers for fields
-lvt - ignore Local Variable Table entries
-o - overwrite output files without confirmation
-p - send all output to STDOUT
-pi<num> - pack imports into one line using .* (packimports)
-pv - pack fields of the same type into one line (packfields)
-r - restore package directory structure
-s <ext> - output file extension instead of .jad
-t<num> - use <num> spaces for indentation (default: 4)
-t - use tabs for indentation instead of spaces
-v - verbose output

INSTALLATION:
I've put the jad.exe file in the 'path'.

jv'Mocha

name::
* McsEngl.jv'Mocha@cptIt,
* McsEngl.jv'toool.decompiler.mocha@cptIt,

RUN:
Mocha is invoked from the commandline (i.e. DOS box, if you're using Win95) like this:
java mocha.Decompiler [-v] [-o] Class1.class Class2.class ...
Where
"java" invokes the Java virtual machine,
"mocha.Decompiler" (note the case!) specifies the class to run,
"-v" optionally specifies verbose output,
"-o" optionally overwrites existing .mocha files,
"ClassX.class" specifies the .class file(s) to decompile.
Wildcards (* and ?) are accepted.

INSTALLATION:
I have put the compressed binaries \java\classes\mocha.zip in my classpath, so I can run it from anywhere.

jv'Wingdis

name::
* McsEngl.jv'Wingdis@cptIt,
* McsEngl.jv'tool.decompiler.wingdis@cptIt,

I have an expired demo.

RUN:
wingdis <options> <classfiles>
or
java wingsoft.Decompiler <options> <classfiles>

INSTALLATION:
I've put the package in my classpath

cafebabe

ANNOUNCE: CafeBabe - bytecode browser
I'm glad to announce a new program - CafeBabe. Its name contains magic number about which (I think) know any of Java programmers.
This program is a graphical disassembler of Java bytecodes and displays full information about any sort of information enclosed in bytecode: fields, methods, attributes, exceptions, synthetic members,
method body, additional information inside code and so on. While virtual
machine misses unknown attributes, CafeBabe displays all of them. Its written in Java.

Main features: - program represents bytecodes "as is" - following the classfile format specification: magic number, minor and major version, constant pool, access flags, this class, super class, interfaces, fields, methods and class attributes; - for convinience program uses modern component - JTreeTable; - program can read class files directly from archive (*.zip or *.jar) and can interpret them as directories. So you can travel inside archive for selecting desired file; - program contains primitive abilities for search inside bytecode.

Program tested under WinNT4.0 SP3, JDK1.1.7A and Swing 1.1 beta3. Under JDK1.2RC2 you can receive best results when you travels inside archive (because it contains new version of ZipFile).
CafeBabe is now available for download.

See http://www.geocities.com/CapeCanaveral/Hall/2334/programs.html for details.

jv'tool.INTERPRETER (jvm-implementation)

name::
* McsEngl.jv'tool.INTERPRETER (jvm-implementation)@cptIt,
* McsEngl.jv'vm'implementation@cptIt,
* McsEngl.jv'interpreter@cptIt,
* McsEngl.jv'runtime'interpreter@cptIt,
* McsEngl.jvm'implementation@cptIt,
* McsElln.ΔΙΕΡΜΗΝΕΥΤΗΣ@cptIt,

=== _NOTES: many times with the name 'jvm'we call the actual jvm **OR** cpt.the jvm-implementation,

_DEFINITION:
An implementation of the Java-virtual-machine#ql:jv'virtual'machine# (known as a runtime interpreter) must embody this specification, but is constrained by it only where absolutely necessary.
[spec vm 2nd 1999]

The class files correspond to executable binary files generated by compilers for other languages. Unlike native binary files, however, Java byte code isn't specific to a particular microprocessor architecture. Its "native" architecture is the Java VM, which today exists only in software.
[BYTE, 1997jan]

O ΔΙΕΡΜΗΝΕΥΤΗΣ. Εκτελεί τις κλάσεις.

SPECIFIC:
** java: Sun's interpreter.
** jview: The Microsoft interpreter.

CREATION:
To implement the Java virtual machine correctly, you need only be able to read the class file format and correctly perform the operations specified therein. Implementation details that are not part of the Java virtual machine's specification would unnecessarily constrain the creativity of implementors. For example, the memory layout of run-time data areas, the garbage-collection algorithm used, and any internal optimization of the Java virtual machine instructions (for example, translating them into machine code) are left to the discretion of the implementor.
[spec jvm 2, 1999]

jv'JIT

name::
* McsEngl.jv'JIT@cptIt,

LIKE Java interpreters, JIT compilers convert byte code into native code on the fly,
BUT they cache the converted code in memory while the program runs.
[BYTE, 1997jan]

Just-In-Time Compiler (JIT) -- a platform-specific software compiler that speeds up the interpretation of Jv's bytecode into machine-native code, for better performance.
[IBM/JAVA]

Some of the newest Java Virtual Machines feature is just-in-time (JIT) compilation.
A JIT compiler adds an additional step after the byte-codes are verified in which the Java byte-codes are translated to native machine code. For instance, if you are running Windows 95, the JIT compiler would create a set of machine language instructions to allow your program to run at speeds comparable to any other program on the system. This type of compilation removes one of the main disadvantages of an interpreted language: its lack of speed.
[DSWgroup TUTORIAL, 1996]

jv'STATIC'COMPILATION

name::
* McsEngl.jv'STATIC'COMPILATION@cptIt,

Another option is static compilation. Silicon Graphics Inc. (SGI) technology translates byte code into Mips Rx000 native code, links the resulting binaries to the Java class files, and adds a second entry point to the Java method block. Java programs, running on SGI's specially modified VM, check the method block to see if there's a pointer to a translated method. If so, the program executes the translated method instead of the byte code version. Combined with inline coding, this allows Java to approach the performance of C++, according to David Henke, engineering manager of SGI's Web Products Division.
[BYTE, 1997jan]

_DEFINITION:
Java(TM) Runtime Environment (JRE): A subset of the Java Development Kit (JDK(TM)) for end-users and developers who want to redistribute the runtime environment alone. The Java runtime environment consists of the Java virtual machine*, the Java core classes, and supporting files.
[sun java glossary]

** The idea is that you don't need to use a classpath with the JRE.
Set your normal path to the JRE\bin directory, then put your classes as a file called classes.jar in the lib directory, and everything will just work. The VM will find the JDK, and your classes, without having to set the CLASSPATH variable.
JavaSoft put their classes as rt.jar in that same directory, as Bill stated.
This is all outlined in the documentation for the JRE.
Hope this helps,
 -ted Furrell
[1997jun05]

** In the JRE the class files are in the JAR file rt.jar.
Add that to your classpath and all should be well.
[1997jun04]

jv'tool.OBFUSCATOR

name::
* McsEngl.jv'tool.OBFUSCATOR@cptIt,

jv'tool.MISC

name::
* McsEngl.jv'tool.MISC@cptIt,

_SPECIFIC:
* ANT: like make
* BONGO: java for kinds
* jamit 2: access-modifier inference tool, www.ovmj.org/jamit.
* JMake:

jv'BONGO

name::
* McsEngl.jv'BONGO@cptIt,

The Epistemology and Learning group at the Media Laboratory (MIT) has developped Bongo, a kind of Java for kids :
http://lcs.www.media.mit.edu/groups/el/projects/bongo/index.html

jv'JMake

name::
* McsEngl.jv'JMake@cptIt,

RUN:
java com.burton_computer.apps.jmake.main \java\xml-ibm\source \java\xml-ibm

INSTALLATION:
I've putted the package in a the classes directory of my classpath.

FUNCTION:
jmake is a handy utility written as an experiment in reading Java(tm) bytecode files. It also provides a simple make-like capability for Java development using Sun Microsystem's JDK.

version:
0.5.1

AUTHOR:
Brian Burton Burton Computer Corporation www.burton-computer.com

jv'tool.JDK

name::
* McsEngl.jv'tool.JDK@cptIt,
* McsEngl.jv'JDK= JAVA DEVELOPERS KIT= Java Development Kit@cptIt,

_DEFINITION:
** JDK is Sun's FREE Software Development Kit.
** Java Development Kit (JDK(TM)): A software development environment for writing applets and applications in the Java programming language.
[sun java glossary]

STRUCTURE: It has several components:
- Java Applet Viewer, for running and testing applets
- Java Compiler
- Java Language Runtime (interpreter)
- Java Debugger API and Prototype Debugger, an API (java.tools.debug) and early prototype of a command-line debugger that uses the API
- classes.zip - Do not unzip this file! It is needed by the compiler and interpreter.
- src.zip - This is a set of source files that may be unzipped if desired.
Note that you need an unzip program that can handle long file names; one such version is available free from ftp://ftp.uu.net/pub/archiving/zip/WIN32 .
Note that this release does not include a web browser.

Στο πακέτο μέσα βρίσκουμε τρείς ξεχωριστές τεχνολογίες
* Μία γλώσσα για τη δημιουργία κώδικα προγραμμάτων που κάνουν συγκεκριμένες χρήσιμες εργασίες
* Μία αρχιτεκτονική ικανή να υποδέχεται και να επιτρέπει τη λειτουργία των εφαρμογών
* Τα απαραίτητα εργαλεία για μετάφραση και τρεξιμο προγραμμάτων.
[ΒΗΜΑ, 4 ΦΕΒ. 1996, 21]

jv'JDK'CLASSPATH

name::
* McsEngl.jv'JDK'CLASSPATH@cptIt,
* McsEngl.jv'CLASSPATH@cptIt,

set c
===> displays the varialbes that begin with c.

set CLASSPATH=path1;path2 ...

set CLASSPATH=
This command unsets CLASSPATH for the current command prompt window only.

set CLASSPATH=%CLASSPATH%; c:/myclasses/classes
* append it.

_NOTE:
Since java2, java RECOMENDS to set the classpath WHEN we execute a program. This way it is clean what classes each program needs.

jdk13:
java -cp .;\java\classes\jsci\core.jar;\java\classes\jsci\xtra.jar <main class>
We don't need classpath variable. We define in the execution command what classes we need extra.
[hknu_2002-02-07]

JDK12:
** The class path tells Java applications where to find 3rd party and user-defined classes -- that is,
- classes that are not Java extensions or
- part of the Java Platform
** The class path can be set using
either the -classpath option with a JDK tool (the preferred method)
or by setting the CLASSPATH environment variable.
C:> jdkTool -classpath path1;path2...
C:> set CLASSPATH=path1;path2...
** Note: The default JDK 1.2 class path is the current directory. Setting the CLASSPATH variable or using the -classpath command-line switch overrides that default, so if you want to include the current directory in the search path, you must include "." in the new settings.
[jdk 1.2 1998nov]

Ensure that the XBRLAPI JAR files are on the class path.
This can be done by placing them in the lib/ext directory in the Java installation.
It can also be done by modifying the CLASS_PATH environment variable to include the directory that contains the XBRLAPI JAR files.
It can also be done by ensuring that the current directory for the command line operations also contains the XBRLAPI JAR files.
[http://www.xbrlapi.org/installationDocumentation/commandLine.html]

The CLASSPATH environment variable tells the Java Virtual Machine and other Java applications (for example, the Java tools located in the jdk1.1.x\bin directory) where to find the class libraries, including user-defined class libraries.

The CLASSPATH environment variable is set with the set command. Using set at the DOS prompt changes the current value of CLASSPATH. You can also use set in your startup file to specify a CLASSPATH at startup.
The format is: set CLASSPATH=path1;path2 ...
where a path to a .zip or .jar file must terminate with the filename, and a path to a .class file must terminate with the directory name. The paths should begin with the letter specifying the drive, for example, \.... The Java interpreter will search the paths for a class by name and load the first one it finds.
[JDK 1.1.5]

CLASSPATH is the environmental variable we set at Autoexec file in order to run java applications.
** SET CLASSPATH=.;C\JDK\LIB\CLASSES.ZIP is the minimum setting that contains the jdk classes.
** A Class to be accessed must exist in a) current directory or b) classpath.
** in classpath we set the directory where the classes exist NOT the classes.
** IF the classes are in a compressed file (zip/jar) THEN and the name of the file must be used in the classpath.

jv'JDK'INSTALLATION

name::
* McsEngl.jv'JDK'INSTALLATION@cptIt,

WINDOWS_XP:
* πίνακας_ελέγχου\σύστημα\προχωρημένοι\μεταβλητές_περιβάλλοντος:
- put JDK\BIN on PATH
- set CLASSPATH=.;\java\jre6\lib\


1. download file
2. unzip src.zip if I want
3. put JDK\BIN on PATH
4. at AUTOEXEC: SET CLASSPATH=.;C\JDK\LIB\CLASSES.ZIP

jv'JDK'APPLETVIEWER

name::
* McsEngl.jv'JDK'APPLETVIEWER@cptIt,
* McsEngl.jv'APPLETVIEWER@cptIt,

_DEFINITION:
for running and testing applets

RUN:
At the directory where the html file is type:
>appletviewer htmlfile

1.2:
It doesn't need 'codebase' attribute in applet-tag.
[nikos, 1998dec20]

jv'JDK'JAVAC

name::
* McsEngl.jv'JDK'JAVAC@cptIt,
* McsEngl.jv'JAVAC@cptIt,

javac:
Ο ΜΕΤΑΓΛΩΤΙΣΤΗΣ της Java. Μετατρέπει τον πηγαίο κώδικα σε δυαδικά αρχεία κλάσης που περιέχουν κώδικα σε bytes, που τελειώνει με την επέκταση .class
[JAVA ΒΗΜΑ ΠΡΟΣ ΒΗΜΑ, 138]

The Java compiler is written in Java.
[white paper]

_RUN:
** At the directory where the file is> javac Converter.java
** C:> javac greetings\*.java

jv'JDK'JAVADOC

name::
* McsEngl.jv'JDK'JAVADOC@cptIt,
* McsEngl.jv'javadoc@cptIt,
* McsEngl.jv'tool.javadoc@cptIt,
* McsEngl.jv'tool.docMaker@cptIt,

EXAMPLE:
* javadoc -d \java\working\docs help mbeditor mbviewer mlogo mmeaning util -tag modified:a:"LastModified:" -tag since -tag author
-- the order of tag can be specified at the end.

* javadoc -d \html *.java
- parces all java-files in the current directory and put the output in \html.

* javadoc -d \java\html nanoxml
- parces the nanoxml package of the current directory and put the output to \java\html.

NOTES:
1) COMMENTS a) //... and b) /*...*/ are NOT displayed in html docs.

OPTIONS:
-d directory
Specifies the destination directory where javadoc saves the generated HTML files. (The "d" means "destination.") Omitting this option causes the files to be saved to the current directory. The value directory can be absolute, or relative to the current working directory. As of 1.4, the destination directory is automatically created when javadoc is run. For example, the following generates the documentation for the package com.mypackage and saves the results in the \user\doc\ directory:
C:> javadoc -d \user\doc com.mypackage

Don't use Javadoc, use Polardoc. You can then specify the amount of VM memory that the VM is allowed to use. Check out:
http://www.ualberta.ca/~tgee/polardoc/

NOTES ON SOURCE FILES:
* The codes is good to be written at the end of text.
* A FIELD to have comment in html, must have the comment as a method.
* A comment at the begining (before package statement) does not appears in html.
* In package overview, use PARAGRAPH tags to make a big-comment shorter.
* LINK: {@link#setBounds(int,int,int,int)}
{@link TNode java-TNode} = class in same package
{@link mmeaning.MNode java-MNode}= class in another package.

jv'JDK'JAVAP

name::
* McsEngl.jv'JDK'JAVAP@cptIt,
* McsEngl.jv'JAVAP@cptIt,

JAVAP is the jdk's disassembler (decompliler). From a class'file prints its fields and methods.

RUN:
\java\classes> javap sun.beanbox.BeanBoxFrame

USING JAVAP. 
javap is a tool supplied with JDK(tm) 1.0.x, and is used to dump out various types of information about .class files.  By default, javap displays declarations for all the non-private members of a class.
For example, if you run javap on the performance example above, by saying:
        javap perf
the result is:
        Compiled from perf.java         public synchronized class perf extends java.lang.Object             /* ACC_SUPER bit set */         {             public static java.lang.String testlist[];             public static java.lang.String detab1(java.lang.String);             public static java.lang.String detab2(java.lang.String);             public static void main(java.lang.String[]);             public perf();             static static {};         }
Other options include
        javap -c perf
to print Java Virtual Machine bytecodes,
        javap -l perf
to display line number and local variable tables (you need to compile perf.java with -g for this to work), and
        javap -p perf
to print private methods and fields in addition to the public ones.
javap is a handy tool for digging beneath the surface to find out what's really going on in a .class file.
[jdc tip 1998jan]

jv'JDK'java

name::
* McsEngl.jv'JDK'java@cptIt,
* McsEngl.jv'JAVA@cptIt,
* McsEngl.jv'java'launcher@cptIt,
* McsEngl.jv'launcher@cptIt,

_FUNCTION:
** O ΔΙΕΡΜΗΝΕΥΤΗΣ. Εκτελεί τις κλάσεις.

** The java's innterpreter is its Runtime system

**The Java run-time system is written in ANSI C with a clean portability boundary which is essentially POSIX-compliant.
[white paper]

_RUN:
* At the directory where the class file is type: java ClassName.

MEMORY:
You can change [Mark Zawadzki] modify the amout of memory available to the JVM ....
java -Xms{S} -Xmx{M} where {S} is initial bytes available to the jvm and {M} is the maximum bytes to which jvm memory may grow.
You can use an "M" to represent megabytes, i.e . -Xms16M example : start java with 16 Mb and allow it, at most, 128 MB of memory.
java -Xms16M -Xmx128M

* By default, Java starts up with little available memory (I think about
192MB). You can try to increase the memory available for Java when you
run eclipse. For example, to run eclipse with 512MB for Java, use
"eclipse -vmargs -Xmx512M".
[Shlomy-Reinstein sreinst1@gmail.com]

java -Xms512m -Xmx512m <class-name>

HOW CLASSES ARE FOUND:
The Java launcher, java, initiates the Java virtual machine. The virtual machine searches for and loads classes in this order:
** Bootstrap classes - Classes that comprise the Java platform, including the classes in rt.jar and i18n.jar.
** Extension classes - Classes that use the Java Extension mechanism. These are bundled as .jar files located in the extensions directory. [...\jrt\lib\ext]
** User classes - Classes defined by developers and third parties that do not take advantage of the extension mechanism. You identify the location of these classes using the -classpath option on the command line the preferred method) or by using the CLASSPATH environment variable.
[jdk1.2] 1998nov

EXAMPLES (jv'runApp):
1) java -cp .;\java\classes\jsci\core.jar;\java\classes\jsci\xtra.jar <main class>
2) java -jar jarfile
3) from win bat file:
set CLASSPATH=jcards.jar
java nrs.jcards.JCards

PARAMETER PROPERTY:
* java -Dmbrola.base=mbrola ...
is equivalent to:
System.setProperty("mbrola.base", "mbrola");

jv'JDK'PLATFORM

name::
* McsEngl.jv'JDK'PLATFORM@cptIt,
* McsEngl.jv'platform@cptIt,

LINUX:
Here is beta for Java 2 (Linux): http://shell.ncm.com/~sbb/1.2/
[{1999-03-26}]
The software was developed on a Linuxed/PC with Blackdown's 1.1.7-v1a port of the JDK `http://www.blackdown.org/java-linux.html'

jv'JAR

name::
* McsEngl.jv'JAR@cptIt,

The jar tool is a java application that combines multiple files into a single JAR archive file. jar is a general-purpose archiving and compression tool, based on ZIP and the ZLIB compression format.
[JDK1.1]

SYNOPSIS
jar [ options ] [manifest] destination input-file [input-files]

Example#ql:jv'ex.jar'file#.

jv'jre

name::
* McsEngl.jv'jre@cptIt,
* McsEngl.java-runtime-environment@cptIt,
* McsEngl.jre@cptIt,
* McsEngl.jv'runtime@cptIt,
* McsEngl.jv'RUNTIME-ENVIRONMENT@cptIt,
* McsEngl.jv'RUNTIME-SYSTEM@cptIt,

_DEFINITION:
** The Java Runtime Environment (also known as the Java Runtime or JRE) consists of
- the Java Virtual Machine,
- Java Core Classes and
- supporting files.
It is the runtime part of the JDK#ql:jv'jdk# -- no compiler, no debugger, no tools. It is the smallest set of executables and files that form the standard Java Platform. This product satisifes the demands for the smallest runtime to be bundled with Java applications.
[http://java.sun.com/products/jdk/1.1/jre/index.html, {1997-03-29}]

** Runtime system:
The software environment in which programs compiled for the Java Virtual Machine can run. The runtime system includes all the code necessary to
- load Java programs,
- dynamically link native methods,
- manage memory,
- handle exceptions, and
- an implementation of the Java virtual machine, which may be a Java interpreter.
[JavaSoft Software]

** Sun’s JDK 1.0.2 release of the Java programming language contains both
- a compiler from Java source code to the Java Virtual Machine’s instruction set (javac) and
- a runtime system that implements the Java Virtual Machine itself (java).
[spec jvm 1, 1996sep]

** At the core of the Java runtime environment is
- the Java virtual machine,
- the Java interpreter and
- the host operating system.

** The environment consists of
- the Java VM,
- some standard class libraries,
- a byte-code verifier (for security), and
- a byte-code interpreter.
[BYTE, 1997jan]

jv'Licence#cptIt215#

name::
* McsEngl.jv'Licence@cptIt,

Oracle vs Google

Judge William Alsup: Master of the court and Java
Mastery of the courtroom wasn't all that Alsup brought to the Oracle v. Google trial. He also show mastery of the subject matter, more than enough to keep the lawyers and witnesses on their toes.
by Dan Farber May 31, 2012 6:03 PM PDT

For several weeks, U.S. District Judge William Alsup showed that he was the smartest person in the courtroom as high-priced lawyers for Google and Oracle pleaded their cases. On Thursday afternoon, he basically slammed the door in Oracle's face, explaining in a 41-page ruling that the 37 Java APIs used in Google's Android platform do not fall under U.S. copyright laws. The ruling on APIs followed a jury verdict on May 23 that absolved Google of violating two Oracle patents.
Oracle was asking for more than $1 billion in damages, but in the end the jury found that Google only guilty of copying nine lines of rangeCheck code in the Timsort.java file, which one expert witness said a high school kid could have written. At this point, Google is on the hook for just statutory damages, with a maximum of $150,000.
Mastery of the courtroom wasn't all that the 67-year-old Alsup brought to the trial. He also demonstrated mastery of the complicated subject matter, more than enough to keep the army of lawyers from both sides and the witnesses on their toes.
On many days, the San Francisco courtroom where he presided was more like a computer science classroom. Alsup acknowledged during the trial that he had learned about Java coding to better prepare for the case, and it showed. On a daily basis, he would deftly query the lawyers and expert witnesses on the structure, sequence, and organizations of APIs to assist the jury in understanding the key facets of the copyright phase of the trial.

In one episode, Oracle's star lawyer, David Boies, who bested Bill Gates in U.S. v. Microsoft case and represented Vice President Al Gore in Bush v. Gore in front of the Supreme Court, was arguing that Google copied the nine lines of rangeCheck code to accelerate development to gain faster entry into the mobile phone market.
Alsup told Boies, "I have done, and still do, a significant amount of programming in other languages. I've written blocks of code like rangeCheck a hundred times before. I could do it, you could do it. The idea that someone would copy that when they could do it themselves just as fast, it was an accident. There's no way you could say that was speeding them along to the marketplace. You're one of the best lawyers in America --how could you even make that kind of argument?"
Oracle plans to appeal Alsup's ruling. The company faces an uphill battle given the judge's ruling is rich in context, with detailed deconstructions of the Java language and APIs, as well as the expected legal citations and examples. It will likely serve as a textbook for future cases involving intellectual property rights and computer programming languages.
[http://news.cnet.com/8301-1035_3-57445082-94/judge-william-alsup-master-of-the-court-and-java/?tag=mncol;cnetRiver]

Oracle loses 'fair use' bid against Google
Karen Gullo
Thursday, May 10, 2012

Oracle failed to convince a federal judge in an intellectual property case that Google Inc. unfairly used its technology in the search engine provider's Android software for mobile devices.

On Wednesday U.S. District Judge William Alsup in San Francisco denied Oracle's request for a ruling that could have established that Google is liable for copyright infringement.

Oracle asked Alsup for a judgment in its favor on "fair use" after a jury found that Google infringed parts of its Java programming language and deadlocked on whether the copying constituted fair use. Liability rests on whether there was fair use, Alsup said after the jury reached a verdict Monday.

"I don't think it would be right," Alsup said at a hearing Wednesday. The decision could pave the way for a new trial on the question of whether Google's infringement makes it liable for as much as $1 billion in damages for using parts of Java to develop Android without paying for a license.

The legal doctrine of fair use states that anyone can use copyrighted work without consent of the owner under certain circumstances, such as for teaching, in news reporting and commentary or to advance the public interest by creating something new.

Monday's jury verdict came in the first phase of an eight-week trial that began April 16. The jury is hearing testimony this week on Oracle's claims that Google also infringed two Java patents. The last phase of the trial will deal with damages.

Karen Gullo is a Bloomberg writer. kgullo@bloomberg.net

This article appeared on page D - 2 of the San Francisco Chronicle

Read more: http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2012/05/10/BUPU1OG8C1.DTL#ixzz1uXQdOM5h

jv'MEMBER

name::
* McsEngl.jv'MEMBER@cptIt,

_DEFINITION:
Packages#ql:jv'package# and reference-types#ql:jv'reference'type# (that is, class types, interface types, and array types) have members.
- The members of a package are subpackages and all the class and interface types declared in all the compilation units of the package.
- The members of a reference type are fields and methods. Members are either declared in the type, or inherited because they are accessible members of a superclass or superinterface which are neither hidden nor overridden.
[lang spec, 1996aug]

Constructors (§8.6) are not members.
[lang spec, 1996aug]

SUBGENERAL:
Package Members
Reference Members:
 Array Members.
 Class Members.
 Interface-Members#ql:jv'interface'member#.

jv'METHOD

name::
* McsEngl.jv'METHOD@cptIt,
* McsEngl.conceptItsoft1012.15,
* McsEngl.jv'class'method@cptItsoft1012.15,
* McsEngl.jv'method@cptItsoft1012.15,
* McsEngl.jv'function-member@cptIt,

_DEFINITION:
Methods are sets of instructions for operating on the data within an object. They can change the data, perform a calculation, or even call other methods.
[DSWgroup TUTORIAL, 1996]

Methods in Java can ONLY be created as part of a CLASS#ql:jv'class#.
[B. ECKEL, Thinking In Java, 1997aug18, 52]

the behavior associated with a class#ql:jv'class# or object#ql:jv'object# is implemented with methods.
[TUTORIAL]

Methods are only half of a Java class. The other half is data.
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

all methods (functions) and variables exist within a class or an object (an instance of a class).
The Java language does not support global functions

Methods are similar to the functions or procedures in procedural languages such as C.
[JavaSoft Tutorial, 1996jul06]

Example#ql:jv'ex.method#.

jv'method'BINDING

name::
* McsEngl.jv'method'BINDING@cptIt,
* McsEngl.jv'BINDING@cptIt,

_DEFINITION:
Connecting a method-call to a method-body is called binding. When binding is performed before the program is run (by the compiler and linker, if there is one), it’s called early binding. You may not have heard the term before because it has never been an option with procedural languages: C compilers have only one kind of method call, and that’s early binding. The confusing part of the above program revolves around early binding because the compiler cannot know the correct method to call when it only has an Instrument handle
The solution is called late binding, which means the binding occurs at run-time, based on the type of the object. Late binding is also called dynamic binding or run-time binding. When a language implements late binding, there must be some mechanism to determine the type of the object at run-time and call the appropriate method. That is, the compiler still doesn’t know the actual object type, but the method-call mechanism finds out and calls the correct method body. The late-binding mechanism varies from language to language, but you can imagine that some sort of type information must be installed in the objects themselves.
All method binding in Java is late binding, unless a method has been declared final (which is the other reason for the existence of the final keyword).

jv'method'BODY

name::
* McsEngl.jv'method'BODY@cptIt,

_DEFINITION:
** The method body is where all of the action of a method takes place; the method body contains all of the legal Java instructions that implement the method.
[Java Tutorial, 1996dec24]

PRODUCTION:
A method body is either a block of code that implements the method#ql:jv'method# or simply a semicolon, indicating the lack of an implementation. The body of a method must be a semicolon if and only if the method is either abstract (§8.4.3.1) or native (§8.4.3.4).
#jv'MethodBody#:
Block
;
[lang spec, 1996aug]

jv'method'CALL

name::
* McsEngl.jv'method'CALL@cptIt,
* McsEngl.jv'METHOD'USE@cptIt,
* McsEngl.jv'MESSAGE@cptIt,

=== _NOTES: Method calls are also known as messages.
[JavaSoft Tutorial, 1996jul06]

This act of calling a method is commonly referred to as sending a message to an object. In the above example, the message is f( ) and the object is a. Object-oriented programming is often summarized as simply “sending messages to objects.”

_DEFINITION:
** A method call is an expression#ql:jv'expression# and evaluates to some value. The value of a method call is its return value, if it has one.
[JavaSoft Tutorial, 1996jul06]

** Software objects interact and communicate with each other using messages.
Three components comprise a message:
1.The object to whom the message is addressed (Your Bicycle)
2.The name of the method to perform (changeGears)
3.Any parameters needed by the method (lower gear)
[JavaSoft Tutorial, 1997jul08]

** Method calls are directed at a specific object; the object specified in the method call is the object that responds to the instruction.
[Java Tutorial, 1996dec24]

** You call class-methods#ql:jv'method.class# in a similar fashion. For example, to call System's class method getProperty(), you append the method name to the end of the class name separated by a period ('.'). Using the final modifier you can declare that your class is final; that is, that your class cannot be subclassed. Any arguments to the method go between the two parentheses; if there are no arguments, nothing appears between the parentheses.
System.getProperty(argument);

Example#ql:jv'ex.method'call#.

jv'METHOD'CALL'RECIPIENT:
Method calls are also known as messages. Like real-world messages, object messages must be addressed to a particular recipient. You get different results depending on which object is the recipient of the message.
[Java Tutorial, 1996dec24]

jv'method'DECLARATION

name::
* McsEngl.jv'method'DECLARATION@cptIt,

_DEFINITION:
** methodDeclaration {
methodBody }
[Java Tutorial, 1996dec24]

** Method declarations (§8.4) describe code that may be invoked by method invocation expressions (§15.11).
[lang spec, 1996aug]

PRODUCTION:
A method declares executable code that can be invoked, passing a fixed number of values as arguments.
#jv'MethodDeclaration#:
MethodHeader MethodBody
#jv'MethodHeader#:
MethodModifiersopt ResultType MethodDeclarator Throwsopt
#jv'ResultType#:
Type
void
#jv'MethodDeclarator#:
Identifer ( FormalParameterListopt )

#jv'MethodModifiers#:
MethodModifier
MethodModifiers MethodModifier
#jv'MethodModifier#: one of
public protected private
abstract static final synchronized native
[lang spec, 1996aug]

the class body contains declarations and implementations for all
- instance methods and
- class methods
(known collectively as methods) for the class.
[Java Tutorial, 1996dec24]

PRODUCTION:
A method declares executable code that can be invoked, passing a fixed number of values as arguments.
#jv'MethodDeclaration#:
MethodHeader MethodBody#ql:[Field JAVA:MethodBody]#
#jv'MethodHeader#:
MethodModifiers#ql:[Field JAVA:MethodModifiers]#opt ResultType MethodDeclarator Throws#ql:[Field JAVA:Throws]#opt
#jv'ResultType#:
Type
void
#jv'MethodDeclarator#:
Identifer ( FormalParameterList#ql:[Field JAVA:FormalParameterList]#opt )
[lang spec, 1996aug]

At minimum, a method declaration has a name and a return type indicating the data type of the value returned by the method:
returnType methodName() {
. . .
}
This method declaration is very basic. Methods have many other attributes such as arguments, access control, and so on.
[Java Tutorial, 1996dec24]

jv'method'FORMAL'PARAMETER

name::
* McsEngl.jv'method'FORMAL'PARAMETER@cptIt,
* McsEngl.jv'METHOD'ARGUMENT@cptIt,

PRODUCTION:
The formal parameters of a method, if any, are specified by a list of comma-separated parameter specifiers. Each parameter specifier consists of a type and an identifier (optionally followed by brackets) that specifies the name of the parameter:
#jv'FormalParameterList#:
FormalParameter
FormalParameterList , FormalParameter
#jv'FormalParameter#:
Type#ql:[Field JAVA:Type]# VariableDeclaratorId#ql:[Field JAVA:VariableDeclaratorId]#
[lang spec, 1996aug]

A method argument can have the same name as one of the class's member variables. If this is the case, then the argument is said to hide the member variable. So using the arguments within the body of the constructor, they refer to the argument, not to the member variable. To access the member variable, you must reference it through 'this'

Unlike some other languages, you cannot pass methods into Java methods. But you could pass an object into a method and then invoke the object's methods.
[Java Tutorial, 1996dec24]

jv'method'FUNCTION

name::
* McsEngl.jv'method'FUNCTION@cptIt,

DEFINETRO:
The operation a method does.

_SPESIFEPTO:
1) With a method you can have a RETURN entity after a processing.
2) With a method you can pass-through an entity as ARGUMENT. In this entity the method can do some processing and then you can use this entity.

jv'method'IMPLEMENTATION

name::
* McsEngl.jv'method'IMPLEMENTATION@cptIt,

Similar to a class implementation, a method implementation consists of two parts: the method declaration and the method body.
methodDeclaration {
methodBody }
[Java Tutorial, 1996dec24]

jv'method'INVOKER

name::
* McsEngl.jv'method'INVOKER@cptIt,

jv'method'MODIFIER

name::
* McsEngl.jv'method'MODIFIER@cptIt,

PRODUCTION:
#jv'MethodModifiers#:
MethodModifier
MethodModifiers MethodModifier
#jv'MethodModifier#: one of
public protected private
abstract static final synchronized native
[lang spec, 1996aug]

jv'method'NAME

name::
* McsEngl.jv'method'NAME@cptIt,

NIKKAS-CONVENSION:
* xxx_yyy    menas the yyy is PART of xxx
* xxxYyy    means the yyy is SPECIFIC of xxx.
The same for methods/variables.
[hknu_{2001-03-08}]

A method name can be any legal Java identifier. There are three special cases to consider in regards to Java method names:
1. One class can have many methods with the same name but with diferent arguments.
2. A method with name same with its class, is a constructor
3. A method can override a method of its superclass
[Nikos, from tutorial]

jv'method'OVERLOADING

name::
* McsEngl.jv'method'OVERLOADING@cptIt,

You may also want to call the info( ) method in more than one way: with a String argument if you have an extra message you want printed, and without if you have nothing more to say. It would seem strange to have to give two separate names to what is obviously the same concept. Fortunately, method overloading allows you to use the same name for both.

If the methods have the same name how can Java know which method you mean? There’s a very simple rule: Each overloaded method must take a unique list of argument types.
[B. ECKEL, Thinking In Java, 1997aug18, 101]

jv'method'PARAMETER

name::
* McsEngl.jv'method'PARAMETER@cptIt,
* McsEngl.jv'METHOD'ARGUMENT'LIST@cptIt,

The method argument list specifies what information you pass into the method. As you might guess, this information like everything else in Java takes the form of objects. So, what you must specify in the argument list are the types of the objects to pass in and the name to use for each one. As in any situation in Java where you seem to be handing objects around, you are actually passing handles 4 . The type of the handle must be correct, however: if the argument is supposed to be a String, what you pass in must be a string.
[B. ECKEL, Thinking In Java, 1997aug18, 53]

Method parameters are formal arguments to methods and constructors and are used to pass values into methods and constructors. The discussion about writing methods on the Implementing Methods [(in the Writing Java Programs trail)] page in the next lesson talks about passing values into methods and Java requires that a method declare the data type of the value that it returns. If a method wishes not to return a value, it can be declared to return void.

constructors through method parameters. In the character-counting example, args is a method parameter to the main() method. The scope of a method parameter is the entire method or constructor for which it is a parameter. So, in the example, the scope of args Methods use the return operator to return a value. Any method that is not declared void must contain a return statement. is the entire main() method.

jv'method'RETURN'VALUE

name::
* McsEngl.jv'method'RETURN'VALUE@cptIt,
* McsEngl.jv'METHOD'VALUE@cptIt,

_DEFINITION:
Java requires that a method declares the data type of the value that it returns. If a method wishes not to return a value, it can be declared to return void.
Methods use the return operator to return a value. Any method that is not declared void must contain a return-statement#ql:jv'statement.return#.
[Java Tutorial]

Example#ql:jv'ex.method'return'value#.

jv'method'SIGNATURE

name::
* McsEngl.jv'method'SIGNATURE@cptIt,

_DEFINITION:
** Method-Signature is the first line of a method-declaration#ql:jv'method'declaration# except method-body
[Nikos]

** The signature of a method consists of
- the name of the method and
- the number and types of formal-parameters#ql:jv'method'formal'parameter# to the method.
[lang spec, 1996aug]

method signature (argument list)
[B. ECKEL, Thinking In Java, 1997aug18, 126]

jv'method'THROWS

name::
* McsEngl.jv'method'THROWS@cptIt,
* McsEngl.jv'throws'clause@cptIt,

A throws clause is used to declare any checked exceptions (§11.2) that can result from the execution of a method or constructor:
#jv'Throws#:
throws ClassTypeList
#jv'ClassTypeList#:
ClassType#ql:[Field JAVA:ClassType]#
ClassTypeList , ClassType
[lang spec, 1996aug]

EXAMPLE:
public static void main(String[] args)
throws java.io.IOException

jv'method.ABSTRACT

name::
* McsEngl.jv'method.ABSTRACT@cptIt,
* McsEngl.jv'ABSTRACT'METHOD@cptIt,

abstract method
A method that has no implementation.
[JavaSoft Glossary]

An abstract class is a class that is incomplete, or to be considered incomplete. Only abstract classes may have
abstract methods,
that is, methods that are declared but not yet implemented.
If a class that is not abstract contains an abstract method, then a compile-time error occurs.
[lang spec, 1996aug]

Subclass must override methods that are declared abstract in the superclass, or the subclass itself must be abstract.

jv'method.ACCESSOR

name::
* McsEngl.jv'method.ACCESSOR@cptIt,

_DEFINITION:
Methods used to obtain information about an object are known as accessor methods.
[Java Tutorial, 1996dec24]

jv'method.STATIC

name::
* McsEngl.jv'method.STATIC@cptIt,
* McsEngl.jv'METHOD.class@cptIt,

NAME:
A method that is declared static is called a class method.
[lang spec, 1996aug]
Some object-oriented languages use the terms class data and class methods, meaning that the data and methods exist only for the class as a whole, and not for any particular objects of the class. Sometimes the Java literature uses these terms also.
[B. ECKEL, Thinking In Java, 1997aug18, 54]

_DEFINITION:
When you say something is static, it means that data or method is not tied to any particular object instance of that class. Thus, even if you’ve never created an object of that class you can call a static method or access a piece of static data. With ordinary, non-static data and methods you must create an object, and use that object, to access the data or method since non-static data and methods must know the particular object they are working with.
[B. ECKEL, Thinking In Java, 1997aug18, 54]
With class methods and variables you do not need to create an instance of the class in order to use the method/variables. For example, System.out.println() is accessible without creating an instance of System because out is a static PrintStream.

ACCESS:
since static methods don’t need any objects to be created before they are used, they cannot access non-static members or methods (since non-static members and methods must be tied to a particular object).
[B. ECKEL, Thinking In Java, 1997aug18, 54]
Class methods, on the other hand, cannot access the instance variables declared within the class (unless it creates a new object and accesses them through the object). Also, class methods can be invoked on the class, you don't need an instance to call a class method.
[Java Tutorial, 1996dec24]

jv'method.CONSTRUCTOR

name::
* McsEngl.jv'method.CONSTRUCTOR@cptIt,

SEE constructor-of-a-class#ql:jv'class'constructor#.

jv'method.FINAL

name::
* McsEngl.jv'method.FINAL@cptIt,
* McsEngl.jv'FINAL'METHOD@cptIt,

_DEFINITION:
A subclass cannot override methods that are declared final in the superclass (by definition, final methods cannot be overriden).

USE:
only make a method final if
- it’s quite small or
- if you want to explicitly prevent overriding.
[B. ECKEL, Thinking In Java, 1997aug18, 158]

RELATION TO PRIVATE METHODS:
Any private methods in a class are implicitly final. Because you can’t access a private method, you can’t override it. You can add the final specifier to a private method but it doesn’t give that method any extra meaning.
[B. ECKEL, Thinking In Java, 1997aug18, 158]

jv'method.INSTANCE

name::
* McsEngl.jv'method.INSTANCE@cptIt,

jv'method.MAIN

name::
* McsEngl.jv'method.MAIN@cptIt,
* McsEngl.conceptItsoft1012.16,
* McsEngl.jv'main'method@cptItsoft1012.16,

_DEFINITION:
* The brain of every Java application is its main() method. When you run an application with the Java interpreter, you specify the name of the class that you want to run. The interpreter invokes the main() method defined within that class. The main() method
- controls the flow of the program,
- allocates whatever resources are needed, and
- runs any other methods that provide the functionality for the application.
[JavaSoft Tutorial, 1996jul06]

* the runtime system executes a Java program by calling the application's main() method. The main() method then calls all the other methods required to run your application.

EXAMPLE:
class HelloWorldApp {
public static void main (String args[]) {
System.out.println("Hello World!");
}
}

jv'method.NATIVE

name::
* McsEngl.jv'method.NATIVE@cptIt,

_DEFINITION:
Methods implemented in a language other than Java are called native methods and must be declared as such within the method declaration.
[Java Tutorial, 1996dec24]

jv'method.RECURSIVE

name::
* McsEngl.jv'method.RECURSIVE@cptIt,

Java supports recursive methods, i.e. even if you're already inside methodA() you can call methodA().
[E.R. HAROLD, Java Tutorial, {1996-11-20}]

jv'MISC

name::
* McsEngl.jv'MISC@cptIt,

jv'AGGREGATION'DELEGATION

name::
* McsEngl.jv'AGGREGATION'DELEGATION@cptIt,

Currently the JavaBeans component model utilizes the single implementation inheritance and multiple interface implementation mechanisms provided by the object model, inherent in the Java language, in order to implement and express their behaviors.
Although these existing mechanisms provide a powerful mode of expression, they do have their limitations. Multiple implementation inheritance mechanisms are often proposed as a solution to these limitations. However introducing multiple inheritance into a language often creates more problems for the language implementors and users than it solves.
An alternative solution that avoids added complexity in the language, that also addresses most design applications, is the aggregation of, and delegation between object instances at runtime to simulate multiple implementation inheritance in a single object instance.
[JavaSoft Draft {1997-04-30}]

NIKOS:
I can implement RELATIONS with this model in the SCS.
[1997may25]

Aggregate
A class abstraction, or instance of an Aggregate class, that exhibits apparent behaviors beyond those it inherits or implements directly, through synthesis by Delegation to other classes.

Delegator
The class, or instance, within an Aggregate that implements the Aggregate interface that is responsible for exposing delegated behaviors to clients of the Aggregate.

Delegate
A class, or instance, constituent of an Aggregate that implements one or more of the apparent (synthesized) behaviors of the Aggregate.

Simple Aggregates
Simple Aggregations are Aggregates where the Delegation classes themselves are not dependent upon, or cognizant of the Aggregate/Delegate relationship.

Cognizant Delegates
Cognizant Delegates are Delegate classes that are designed to participate in an Aggrega-tion, in particular this implies that Delegate instances encapsulate object references to the Aggregate which they are Aggregated to, and delegated from.

Static Aggregates
A static Aggregation, is by definition, an Aggregation wherein the set of Delegate types and/or instances is constant/invariant for the lifetime of a particular instance of the Aggre-gation class.

Dynamic Aggregates
A dynamic Aggregation, is by definition, an Aggregation wherein the set of Delegate classes and/or instances may vary over the lifetime of a particular instance of the Aggrega-tion class.

Nested, or Recursive Aggregates
A Nested, or Recursive Aggregation is an Aggregation wherein the Aggregate object itself is also an instance of a cognizant Delegate class, and therefore encapsulates a reference to the Aggregate that it is a Delegate constituent of. Nested Aggregates may, but are not required to forward Delegation requests that they themselves cannot satisfy to their enclosing Aggregate.

jv'IDL

name::
* McsEngl.jv'IDL@cptIt,
* McsEngl.jv'INTERFACE'DEFINITION'LANGUAGE@cptIt,

The Java IDL system allows you to define remote interfaces in the IDL interface definition language, which is an industry standard defined by the Object Management Group (OMG).
These IDL definitions can then be compiled with the idlgen stub generator tool to generate Java interface definitions and Java client and server stubs. The mapping from IDL to Java is defined in the Java IDL language mapping specification.
This allows a Java client to transparently invoke an IDL object that resides on a remote server. Similarly, it allows a Java server to define objects that can be transparently invoked from IDL clients.
[http://splash.javasoft.com/JavaIDL/pages/index.html]

jv'LIGHTWEIGHT'COMPONENT'ARCHITECTURE

name::
* McsEngl.jv'LIGHTWEIGHT'COMPONENT'ARCHITECTURE@cptIt,

lightweight component architecture was introduced in AWT 1.1. It allows for components to exist without native operating system widgets.
[jdk]

jv'VERSION'CONTROL

name::
* McsEngl.jv'VERSION'CONTROL@cptIt,

Version control is one tool (of many) that separates professional engineers from amateurs -- when you are investing your time into a serious business, it is very negligent not to take prudent steps toward protecting that investment. Since Sun gives us our tools for free, we use Code Manager on top of SCCS. If you need a free version control package consider CVS (available from any GNU mirror site).
Tom Ball
[1997jun05]

jv'MODIFIER

name::
* McsEngl.jv'MODIFIER@cptIt,
* McsEngl.jv'ACCESS'MODIFIER@cptIt,
* McsEngl.jv'IMPLEMENTATION'HIDING@cptIt, [lang spec, 1996aug]

=== _NOTES: Access control is often referred to as implementation hiding.
[B. ECKEL, Thinking In Java, 1998jan, 175]


CLASS-MODIFIER#ql:jv'class'modifier#.
 public abstract final
FIELD-MODIFIER#ql:jv'field'modifier#.
  public protected private
final static transient volatile
METHOD-MODIFIER#ql:jv'method'modifier#.
 public protected private
abstract static final synchronized native
CONSTRUCTOR-MODIFIER#ql:jv'constructor'modifier#.
 public protected private

jv'ACCESS'SPECIFIER

name::
* McsEngl.jv'ACCESS'SPECIFIER@cptIt,

_DEFINITION:
Access Specifiers are modifiers#ql:jv'modifier# that allow programmers to control access to methods and variables. The keywords used to control access are public, private, and protected.
[TUTORIAL]

_SPECIFIC:
When declaring constructors for you class, you can use the normal access specifiers to specify what other objects can create instances of your class:

private
No other class can instantiate your class as an object. Your class can still contain public class methods, and those methods can construct an object and return it, but no one else can.

protected
Only subclasses of your class can create instances of it.

public
Anybody can create an instance of your class.

"friendly"
No one outside the package can construct an instance of your class. This is useful if you want to have classes in your package create instances of your class but you don't want to let anyone else.

EVALUATION:
There are two reasons for controlling access to members. The first is to keep users’ hands off tools they shouldn’t touch, tools that are necessary for the internal machinations of the data type, but not part of the interface that users need to solve their particular problems. So making methods and fields private is actually a service to users because they can easily see what’s important to them and what they can ignore. It simplifies their understanding of the class.

The second and most important reason for access control is to allow the library designer to change the internal workings of the class without worrying about how it will affect the client programmer. You may build a class one way at first, and then discover that restructuring your code will provide much greater speed. If the interface and implementation are clearly separated and protected, you can accomplish this without forcing the user to rewrite their code.
[B. ECKEL, Thinking In Java, 1997aug18, 138]

RELATION TO C++:
The Java access specifiers public, protected and private are placed in front of each definition for each member in your class, whether it’s a data member or a method. Each access specifier only controls the access for that particular definition. This is a distinct contrast with C++, where the access specifier controls all the definitions following it, until another access specifier comes along.
[B. ECKEL, Thinking In Java, 1997aug18, 132]

jv'NAME

name::
* McsEngl.jv'NAME@cptIt,

_DEFINITION:
Names are used to refer to ENTITIES-DECLARED#ql:jv'declaration# in a Java program.
Names in Java programs are either
- simple, consisting of a single identifier#ql:jv'identifier#, or
- qualified, consisting of a sequence of identifiers separated by "." tokens
[lang spec, 1996aug]

Names are used to refer to entities declared in a program. A declared entity is a
package,
type,
member (field or method) of a type,
parameter, or
local variable.
[spec jvm 2, 1999]

jv'name'CONVENTION

name::
* McsEngl.jv'name'CONVENTION@cptIt,

_CONVENTION:
* Xxxx_yyyy  = name
* Xxxxs_yyyy  = Y is a part of X,
* XxxxYyyy  = XY is a specific of X.
[hknu_2013-05-18]

hier.wp:
It is an acceptant name for a java package.
Then I'm using the
- Xxx.Yyy convention to express that Yyy is a specific of Xxx and
- XxxYyy to express that Yyy is a part of Xxx.
[hknu_2003-02-24]

** ALPHABETICAL-USAGE:
* Xxxx_s_Yyyy  = Y is a part of X,
* Xxxx_Yyyy  = XY is a specific of X with Y attribute.
* XxxxYyyy  = XY is a specific of X with Y attribute.
[hknu_2008-09-26]

* XxxxYyyy  = a part of X,
* Xxxx_Yyyy  = a specific of X, Exception_Hierarchy, Exception_System, ...

** GRAMATICAL-USAGE (JAVA-USAGE):
* YX  = a specific of X (adjective-noun)
* XY  = a part of X (x's y, y of x)
[hknu_2003-02-20]

jv'NAME'MEANING

name::
* McsEngl.jv'NAME'MEANING@cptIt,

In determining the meaning of a name (§6.5), the Java language takes into account the context in which the name appears. It distinguishes among contexts where a name must denote (refer to) a package (§6.5.3), a type (§6.5.4), a variable or value in an expression (§6.5.5), or a method (§6.5.6).
[lang spec, 1996aug]

PRODUCTION:
#jv'PackageName#:
Identifier
PackageName . Identifier
#jv'TypeName#:
Identifier
PackageName . Identifier
#jv'ExpressionName#:
Identifier
AmbiguousName . Identifier
#jv'MethodName#:
Identifier
AmbiguousName . Identifier
#jv'AmbiguousName#:
Identifier
AmbiguousName . Identifier
[lang spec, 1996aug]

jv'NAME'SCOPE

name::
* McsEngl.jv'NAME'SCOPE@cptIt,

Every name introduced by a declaration has a scope (§6.3), which is the part of the Java program text within which the declared entity can be referred to by a simple name.
[lang spec, 1996aug]

jv'NOTATION

name::
* McsEngl.jv'NOTATION@cptIt,

RULE:
SAME entitites begin with same PREFIX
[hknu_2010-06-29]

jv'b (Boolean):
- jv'notation.boolean:
- jv'boolean_notation.
- BOOLEAN entity.

jv'bt (ByTe):
- jv'byte_notation.
- BYTE:

jv'c (Component):
- jv'component_notation.
- COMPONENT -GRAPHICAL: frame, panel, pane, ...
* jv'cJEdPn:  JEditorPane
* jv'cJLb:    JLabel
* jv'cJFrm:    JFrame
* jv'cJMn:    JMenu
* jv'cJPnl:    JPanel
* jv'cJScrPn:  JScrollPane
* jv'cJSplPn:  JSplitPane
* jv'cJTabPn:  JTabbedPane
* jv'cJTxAr:    JTextArea
* jv'cJTxFd:    JTextField
* jv'cJTr:    JTree

jv'ch (CHaracter):
- jv'character_notation.
- jv'char_notation.
- CHARACTER (char) entity.

jv'l (List):
- jv'list_of_data_notation.
- LIST: array, vector, ...
==============================
- jv'array_notation. jv'notation.array:
* jv'la:  ARRAY
==============================
- jv'vector_notation.
* jv'lv  Vector

jv'lsn (LiSteNer):
* jv'notation.listener:

jv'n (Number):
- jv'number_notation.
- NUMBER:
=============================
- jv'integer_notation.
* jv'ni:  int, INTEGER-NUMBER:

jv'p (Pair):
- jv'pair_notation.
- jv'map_notation.
- jv'Hashtable_notation.
- PAIR: Hashtable, Map, ...
* jv'ph  HashTable

jv'rd (ReaDer):
* jv'notation.reader:

jv's (String):
- jv'string_notation.
- STRING (String) entity.

jv'tb:
tab of a TabbedPane

jv'wr (WRiter):
* jv'notation.writer:

jv'Object

name::
* McsEngl.jv'Object@cptIt,

_DEFINITION:
An object (§4.3.1) in Java is a
- dynamically created instance of a class-type#ql:jv'class# or
- a dynamically created array#ql:jv'array#.
[lang spec, 1996aug]

_DEFINITION:
an object is a software module that has state and behavior. An object's state is contained in its member variables and its behavior is implemented through its methods.
[JavaSoft Tutorial, 1996jul06]

_DEFINITION:
Objects are entities which consist of data as well as operations or actions which are designed to work on that data.
[DSWgroup TUTORIAL, 1996]

Objects vs. Classes
You probably noticed that the illustrations of objects and classes look very similar to one another. And indeed, the difference between classes and objects is often the source of some confusion. In the real world it's obvious that classes are not themselves the objects that they describe--a blueprint of a bicycle is not a bicycle. However, it's a little more difficult to differentiate classes and objects in software. This is partially because software objects are merely electronic models of real-world objects or abstract concepts in the first place. But it's also because many people use the term "object" inconsistently and use it to refer to both classes and instances.
[JavaSoft tutorial 1997jul08]

jv'OBJECT'S'CLASS

name::
* McsEngl.jv'OBJECT'S'CLASS@cptIt,
* McsEngl.jv'OBJECT'TYPE@cptIt,

=== _NOTES: A Java object is an instance of a class. Frequently, we say that an object's class is the object's type.

Variables Have Types, Objects Have Classes
[lang spec, 1996aug]

jv'OBJECT'CREATION

name::
* McsEngl.jv'OBJECT'CREATION@cptIt,

When you create an object, you give a name to a region of storage.
[B. ECKEL, Thinking In Java, 1998jan, 131]

A class instance is explicitly created
- by a class-instance-creation-expression#ql:jv'expression.class'instance'creation# (§15.8), or
- by invoking the newInstance method of class Class (§20.3.8).
- An array is explicitly created by an array-creation-expression#ql:jv'expression.array'creation# (§15.8).

A new class instance
is implicitly created
- when the string concatenation operator + (§15.17.1) is used in an expression, resulting in a new object of type String (§4.3.3, §20.12).
- A new array object is implicitly created when an array initializer expression (§10.6) is evaluated; this can occur when a class or interface is initialized (§12.4), when a new instance of a class is created (§15.8), or when a local variable declaration statement is executed (§14.3).
[lang spec, 1996aug]

Example#ql:jv'ex.object'creation#.

In three steps:
- declaration (we declare the NAME and TYPE of variable that holds the data)
- instatiation (with new operator)
- initialization (with a constructor we put the first data)

declaring a variable to hold an object is just like declaring a variable to hold a value of primitive type.
Declarations do not instantiate objects. Date today does not create a new Date object, just a variable named today to hold a Date object.

jv'OBJECT'encapsulation

name::
* McsEngl.jv'OBJECT'encapsulation@cptIt,

Packaging an object's variables within the protective custody of its methods is called encapsulation. Typically, encapsulation is used to hide unimportant implementation details from other objects. When you want to change gears on your bicycle, you don't need to know how the gear mechanism works, you just need to know which lever to move. Similarly in software programs, you don't need to know how a class is implemented, you just need to know which methods to invoke. Thus, the implementation details can change at any time without affecting other parts of the program.

jv'OBJECT'FIELD

name::
* McsEngl.jv'OBJECT'FIELD@cptIt,

jv'OBJECT'LOCK

name::
* McsEngl.jv'OBJECT'LOCK@cptIt,

jv'LOCK

There is a lock associated with every object.
[lang spec, 1996aug]

jv'OBJECT'WAIT'SET

name::
* McsEngl.jv'OBJECT'WAIT'SET@cptIt,

jv'WAIT'SET

Every object, in addition to having an associated lock, has an associated wait set, which is a set of threads. When an object is first created, its wait set is empty.
[lang spec, 1996aug]

jv'OBJECT.member

name::
* McsEngl.jv'OBJECT.member@cptIt,
* McsEngl.jv'MEMBER'OBJECT@cptIt,

_DEFINITION:
The simplest way to reuse a class is to place an object-of-that-class#ql:jv'object# inside a new class: we call this “creating a member object.” Your new class can be made up of any number and type of other objects, whatever is necessary to achieve the functionality desired in your new class. This concept is called composition, since you are composing a new class from existing classes. Sometimes composition is referred to as a “has-a” relationship, as in “a car has a trunk.” Composition comes with a great deal of flexibility. The member objects of your new class are usually private, making them inaccessible to client programmers using the class.
[B. ECKEL, Thinking In Java, 1997aug18, 27]

jv'human

name::
* McsEngl.jv'human@cptIt,
* McsEngl.jv'people@cptIt,

Ken Arnold:
http://java.sun.com/people/arnold/
co-author, with James Gosling, of The Java(tm) Programming Languge,

Thomas Ball

Dave Brown

David Brownell

Steve Byrne

Mary Campione
http://java.sun.com/people/mem/

David Connelly:
http://java.sun.com/people/dac/

Satish Dharmaraj

Pavani Diwanji

Amy Fowler

Lisa Friendly:
I'm the manager for JavaSoft Documentation. Check out our Documentation website at http://java.sun.com/doc.

Rachel Gollub

Li Gong:
I am the Java Security Architect at JavaSoft, and I also manage the security engineering group.

James Gosling:
http://java.sun.com/people/jag/

Jim Graham

Graham Hamilton

Mary Hamilton

Herb Jellinek:
http://java.sun.com/people/jellinek/
* I just left my position as lead of JavaSoft's HotJava Browser 1.0 project to work on some new Java-based stuff.

Marianne Mueller

Mark Opperman

Eduardo Pelegrν-Llopart

Rich Schiavi

Hassan Schroeder

Kevin A. Smith

Orca Starbuck

Kathy Walrath:
Java Tutorial.

Annette Wagner

Prasad Wagle

jv'Plug-in

name::
* McsEngl.jv'Plug-in@cptIt,
* McsEngl.java'plugin@cptIt,

_DEFINITION:
* Java Plug-in extends the functionality of a web browser, allowing applets or Java Beans to be run under Sun's Jave 2 runtime environment (JRE) rather than the Java runtime environment that comes with the web browser. Java Plug-in is part of Sun's JRE and is installed with it when the JRE is installed on a computer. It works with both Netscape and Internet Explorer.
This functionality can be achieved in two different ways:
- By using the conventional APPLET tag in a web page.
- By replacing the APPLET tag with the OBJECT tag for Internet Explorer; by replacing the APPLET tag with the EMBED tag for Netscape 4. Note, however, that the OBJECT and EMBED tags must conform to a special format as described in the next chapter, Using OBJECT, EMBED and APPLET Tags in Java Plug-in.
Note: Currently the OBJECT and EMBED tags do not work with Netscape 6 with Java Plug-in. You must use the APPLET tag with Netscape 6.
[1.4 DOCS]

jv'PRICE#cptEconomy541.44#

name::
* McsEngl.jv'PRICE@cptIt,

Διανέμεται δωρεάν ωστε να κερδίσει την πολυπόθητη παγκόσμια αποδοχή.
[ΒΗΜΑ, 4 ΦΕΒ. 1996, 21]

jv'Storage#cptIt14#

name::
* McsEngl.jv'Storage@cptIt,

ZD3/JAVA
BDK
JDK102
JDK112
JavaSoft Tutorial
E. Harold course

jv'ResourceInfHmnn#cptResource843#

name::
* McsEngl.jv'ResourceInfHmnn@cptIt,

JavaSoft API11(2nfo\JAPI11.NFO)
HOW TO CREATE API.NFO:
1. Create an argument file that contains all the files with classes.
- on jdk api dir: dir /o > n
- on n file delete extra info with ve
2. ORDER the files with microsoft works spreadsheet.
3. CONCATENATE the files with 'concat.class'
- copy the file from java\application\io\concat
- java concat n api.fff
4. fsr on api.fff the api1.fsr/api2.fsr/.../api6.fsr
at \views30\nikos\api.
Romove extra html tags and &* code.
5. Create api.nfo

Java overview
HotJava overview
White Paper
Tutorial
Java Spec
API
Hotjava user guide.

http://www.javalobby.org

jv'resource.API

name::
* McsEngl.jv'resource.API@cptIt,

http.java.api:
* http://docs.oracle.com/javase/7/docs/api// (http.java.api.7)

jv'resource.FAQ

name::
* McsEngl.jv'resource.FAQ@cptIt,
* McsEngl.jv'faq@cptIt,

There is an excellent Java FAQ already (several, really!) at http://www.afu.com/javafaq.html

check out www.jguru.com for some of the best FAQs on the net...

jv'resource.TOREAD

name::
* McsEngl.jv'resource.TOREAD@cptIt,


TUTORIAL (when be 1.1 compatible)

jv'resource.agent'technology

name::
* McsEngl.jv'resource.agent'technology@cptIt,

SUBJECT > /dev/orbs/Voyager(tm) - Agent-Enhanced Object Request Broker for > Java(tm) > > URL > http://www.objectspace.com
[1997jun06]

jv'resource.APPLET

name::
* McsEngl.jv'resource.APPLET@cptIt,

WebWerks is now Offering Over_100_Java Applets for your viewing pleasure and Free Downloads. Applets Added Weekly . . . You'll want to Bookmark this Site !Applets with the Werks:
http://www.en.com/users/elmer/
[1997jun23]

jv'resource.BEANS

name::
* McsEngl.jv'resource.BEANS@cptIt,

jv'resource.BOOKS

name::
* McsEngl.jv'resource.BOOKS@cptIt,

Pavel Vorobiev and I have completed the writing of "Swing", which has been freely available at http://www.spindoczine.com/sbe since we started the project.
[advjava {1999-09-22}]

Teach Yourself Java 1.1 Programming in 24 Hours
by Rogers Cadenhead
•Publisher: Sams.net •ISBN: 1-5752-1270-6 •Pages: 300 •Includes CD-ROM •Publication Date: April, 1997 •Price: $25.00 •Bottom Line: Buy It
A decent book introducing Java 1.1 programming to non-programmers. However it's quite basic, and caverage of the AWT is very limited.

JAVA Βήμα προς Βήμα.
Paul J. Perry. IDG books. Μετάφραση Γιάννης Σαμαράς. Αθήνα: Μ. Γκιούρδας, 1996

jv'resource.CLASSES

name::
* McsEngl.jv'resource.CLASSES@cptIt,

Nutmeg 1.04
Thought Inc. San Francisco, CA 415-928-4229
Description: A Smalltalk-style collection class for list management written in Java. Supports arrays, indexed collections, ordered and sorted collections, sets, dictionaries, and sub-classes that can be created by the user. Runs on all Java platforms.
Platform: Intel PC, SPARC, RS/6000, Mac; Windows 95/NT, Solaris, AIX, System 7.x
URLs: http://www.thoughtinc.com;

VanillSearch 1.03
Thought Inc. San Francisco, CA 415-928-4229
Description: A regular expression search class with Perl like nomenclature. Fully Unicode compliant down to even the Meta characters. Should run on any compliant JVM.
Platform: Intel PC, SPARC, RS/6000, Mac; Windows 95/NT, Solaris, AIX, System 7.x
URLs: http://www.thoughtinc.com;

CLASS HIERARCHY DIAGRAMS:
http://rendezvous.com/java/hierarchy/index.html

jv'resource.CODE

name::
* McsEngl.jv'resource.CODE@cptIt,

Hi,
here's an announcement that might be of interest to you:

>The webpage of java-src, the Java source code mailing list, is now >available at > >o <URL:http://goodstuff.prodigy.com/Mailing_Lists/java-src.html> > >For further information please refer to the announcement which is >quoted below or contact the list-owner by email >(java-src-owner@listserv.prodigy.com).> > >SUBJECT > New: Java source code mailing list > >URL (WEBSITE) > <URL:http://goodstuff.prodigy.com/Mailing_Lists/java-src.html> > (see also the note below) > > >NOTE TO DEVELOPERS > >If you have written an interesting program and want to share the >source code with others then feel free to post either a short message >or the code itself to java-src@listserv.prodigy.com. Thank you.> > >DESCRIPTION > >Java-src is a mailing list which is intended to distribute Java source >code to people all around the world for free.> >So developers can support the spirit of Java and the "freedom of code" >and help others. Additionally, your code will get widely distributed >and you may find others who are interesting in improving your code. Of >course, all copyrights remain intact so the code still is yours.> >Java-src is *NO* discussion list - only source code or bulletins (if >the source code itself is too big) will be distributed. The list is >moderated so nobody will be able to abuse it.> >Additional information will be sent to you when if subscribe.> > >HOW TO SUBSCRIBE > >o Send an email message to majordomo@listserv.prodigy.com with >'subscribe java-src' (without the quotes) in the message body.> >o Use the form at ><URL:http://goodstuff.prodigy.com/Mailing_Lists/java-src.html> > >o For those of you, who either have a Unix-like OS or a shell account: >type 'echo subscribe java-src | mail majordomo@listserv.prodigy.com' > >  >CONTACT > java-src-owner@listserv.prodigy.com >For postings: java-src@listserv.prodigy.com >For help: majordomo@listserv.prodigy.com with 'help' in the message body
Unsubscription, archives, FAQ - http://www.xcf.berkeley.edu/lists.html
[1997dec14]

jv'resource.CORBA

name::
* McsEngl.jv'resource.CORBA@cptIt,

At 10:05 AM 8/26/97 PDT, Samir Bongale wrote:
>hi all...> Recently i have started working on CORBA using Java ...>can u all suggest me some sites where i can get some good stuff >on CORBA tutorial and CORBA with Java. Also some info on IDLs.> >Presently i am using the downloaded version of Visibroker 2.5 >for Java. Is it the best ORB or better ORBs are available.> >thankx > >Regards >

Samir
http://JavaMan.com/JavaCorba/ http://www.OMG.org http://www.mindspring.com/~corba/javacorba/ http://www.iona.com/ http://www.iona.com/Products/Other/Wonderwall/demo
Go to http://www.acl.lanl.gov/TeleMed and click on Java Demo, and follow the instructions. This is a fully CORBA2 compliant application running through the web browser (Netscape Communicator 4.0 preferred).It is currently using Orbix with an ObjectStore backend.
http://www.visigenic.com/partners/mckesson.html
http://www.acl.lanl.gov/TeleMed under the "Java Demo" link
CORBA is Windows for enterprise, says IBM official http://www.infoworld.com/cgi-bin/displayStory.pl?970723.wstitz.htm
Iona launches OrbixManager at Object World West http://www.infoworld.com/cgi-bin/displayStory.pl?970723.eiona.htm
IONA Technologies and Sequent Announce Orbix for DYNIX/ptx http://biz.yahoo.com/bw/97/07/23/sqnt_x000_1.html
WebObjects Delivers Global Networked Solutions with Java and CORBA http://product.info.apple.com/pr/press.releases/1997/q4/            970723.pr.rel.webobjects.html
Roasted Java News at http://www.roaster.com/news/
[E. Etherington 1997aug28]

jv'resource.DOCS

name::
* McsEngl.jv'resource.DOCS@cptIt,
* McsEngl.jv'docs@cptIt,

_LOCAL:
* /JAVA/DOCS/150/api/index.html:

jv'resource.editorsInJava

name::
* McsEngl.jv'resource.editorsInJava@cptIt,

Check out http://www.wingsoft.com/

I've written one for personal use.
It has a Mac like feeling.
Get it at http://www.student.informatik.th-darmstadt.de/~aragon/ste.html

jv'resource.FAQ

name::
* McsEngl.jv'resource.FAQ@cptIt,

However there's already one at http://MetaDigest.XCF.Berkeley.EDU/archive/advanced-java/aj-faq.txt just for this list.

jv'resource.ICON

name::
* McsEngl.jv'resource.ICON@cptIt,

http://developer.java.sun.com/developer/techDocs/hi/repository/
http://jfa.javalobby.org/projects/icons/index.html

jv'resource.linking'list

name::
* McsEngl.jv'resource.linking'list@cptIt,

Try CAL instead. It is the fastest and most complete collection and algorithm library available. It is free for both commercial and non-commercial use. You can find it at http://www.x3m.com/products/cal/
[1997may25]

jv'resource.LINKS

name::
* McsEngl.jv'resource.LINKS@cptIt,

DEZINES: Tons of Java and JavaScript links
http://www.dezines.com/dezines/javalinks.html

YAHOO LIST:
http://www.yahoo.com/Computers_and_Internet/Programming_Languages/Java/

jv'resource.MAILING'LISTS

name::
* McsEngl.jv'resource.MAILING'LISTS@cptIt,

J. Zukowski:
I have a list of around 125 Java-related mailing lists at http://java.miningco.com/msub7.htm and you could pick one.
The one available from MageLang Institute tends to be less intimidating.
http://www.magelang.com/mailing_list.html

For a list of over 100 Java mailing lists,
see http://java.miningco.com/msub7.htm.

59 java mailing lists are described (with sign-up forms) at:
 http://sunsite.unc.edu/javafaq/mailinglists.html

A great search-engine of the `comp.lang.*' newsgroups exists at:  http://merlin9.npac.syr.edu/cgi-bin/pcrc/asknpac
Info on `java-interest', a moderated newsgroup can be found at:  http://www.magelang.com/ (then click on resources)

jv'resource.MISC

name::
* McsEngl.jv'resource.MISC@cptIt,

There are many examples of what you want in The Java Boutique. Most of the examples come with source code. The URL is:
http://javaboutique.internet.com/text.html

http://www.javashareware.com
Nektarios Kalogridis

jv'resource.NEWS

name::
* McsEngl.jv'resource.NEWS@cptIt,

JAVOLOGY:
http://www.javology.com/javology/

jv'resource.patern'maching

name::
* McsEngl.jv'resource.patern'maching@cptIt,

If you want REAL power, try CAL (http://www.x3m.com/products/cal).
[1997may25]

jv'resource.rule'based

name::
* McsEngl.jv'resource.rule'based@cptIt,

You've obviously not seen Jess, (the Java Expert System Shell), http://herzberg.ca.sandia.gov/jess/. Jess is a clone of CLIPS, a popular Rete-based shell from NASA. Jess is written in 100% Java and works well as an applet or in an application. It's extremely easy to add Java code to Jess to add new functions to the rules language.Jess is free and currently has over 5000 registered users. Jess version 3.0b1 is due out any day now, which adds some major enhancements.
The Jess page has links to other info sources, in particular, the CLIPS home page, which has pointers to books, the CLIPS FAQ, and expert systems info in general. Happy surfing!
[1997may25]

jv'resource.serialization

name::
* McsEngl.jv'resource.serialization@cptIt,

The JavaSoft RMI and Object Serialization FAQ is at http://chatsubo.javasoft.com/current/faq.html
A basic serialization example is at http://chatsubo.javasoft.com/current/serial/index.html#example
An archive of the RMI-USERS mailing list (which includes some discussion about serialization) is at http://chatsubo.javasoft.com/email/rmi-users/
[1997may25]

jv'resource.SUN

name::
* McsEngl.jv'resource.SUN@cptIt,

Main source:
http://java.sun.com

to get you started learning Java; see
http://java.sun.com/starter.html

documentation page:
http://java.sun.com/doc/programmer.html

jv'resource.TOOLS

name::
* McsEngl.jv'resource.TOOLS@cptIt,

At one of the pages on the www.blackdown.org site there is a Java program that creates a self-extracting Java class, which is platform-independent. You can compress all the code into a single class file, run the class under a JVM, and out pops a directory structure. It looked cool but at the time I saw it I did't have a use for it, so unfortunately i can't remember where on www.blackdown.org it was. It shouldn't be too hard to find.

I think you are looking for sbk's Jinstall. (http://www.sbktech.org/jinstall.html)
He also has other free tools in his page (http://www.sbktech.org/)
[1997jun23]

Aleda Freeman has created an excellent page on Java IDE's and other tools at http://www.cybercom.net/~frog/javaide.html. This site has descriptions of and links to IDE's, database connectivity tools, and more.
[Harold FAQ]

ClassViewer (no version)
Classviewer allows you to view the contents of a class file. It presents enough information to determine the interfaces contained in the class. Classviewer is really basic, one class at a time, but a tool like this is absolutely essential to deal with classes in the absence of source code.
http://www.intac.com/~robraud/classinfo.html

CREAMA: the Java obfuscator from Hanpeter van Vliet is available at:
http://web.inter.nl.net/users/H.P.van.Vliet/crema.html

GUAVA: The guava byte-code compiler:
http://http.cs.Berkeley.edu/~engberg/guavac/

JOLT: The JOLT project - Java Open Language Toolkit:
http://speedy.redhat.com/jolt/

KAFFE: a Just In Time compiler / JVM:
http://www.sarc.city.ac.uk/~tim/kaffe/

LAVA:
http://www.cs.nott.ac.u k/~dsp/lava/index.html

jv'resource.TOOLS.DECOMPILER

name::
* McsEngl.jv'resource.TOOLS.DECOMPILER@cptIt,
* McsEngl.jv'resource.DECOMPILER@cptIt,

>There are several good de-compilers out there already. I use WingDis >(find it with a search engine). You almost ~need~ a decompiler to work >around certain bugs you'll find in 3rd party and sometimes JavaSoft >software ;^)
Ahpah Software produces a decompiler called SourceAgain that will patch classfiles with debugging information.  This allows you to step through code you're trying to debug without touching the executable code, useful when you can't figure out if the bug is in your code or their code.
>As far as security considerations to stop this from happening, the best >you can probably hope for is "wicked cool optimization" of the code >that renders it tough to reverse engineer. HotSpot may take care of >some of this, but I haven't heard yet.
Even optimizations won't stop a decompiler.  It may make the code a bit less readable.  We're working on an obfuscator that moves code around and inserts new code which cannot be removed.  I don't see how HotSpot will take care of the decompiling issues.  From what I understand, it just does optimizations of certain functions at runtime, based on which ones are being executed most frequently.
Benji Jasik Ahpah Software Inc http://www.ahpah.com
[1997dec17]

take a look at OEW (Object Engeneering Workbench) for Java 2.0 from > Innovative Software. There you find an integrated Java Decompiler > which works fine with Java 1.0 and Java 1.1, try http://www.isg.de.
[1997jun24]

Mocha (Beta 1)
Mocha is a complete class decompiler, written in Java. Given a class, it produces a compilable source file for the class. The resulting ".mocha" file is remarkably similar to the original ".java" file, if you have it.
http://web.inter.nl.net/users/H.P.van.Vliet/mocha.html
[this doesn't exist, you can find at classviewer page, Nikos 1997may]

Mocha had been in beta for quite a while when unfortunately its brilliant author, Hanpeter van Vliet, recently died, of cancer, I believe.

You could try the commercial product, WingDis, which is actively supported and not very expensive (US$ 25, I think):
http://www.wingsoft.com/wingdis205.shtml
I hear it is pretty good, though I have not tried it myself.

There is another decompiler, DejaVu, part of a larger package; don't know much about it, but all three products (Mocha, WingDis and DejaVu) are comprehensively reviewed at:
http://www.andromeda.com/people/ddyer/java/decompiler-table.html
Hope this helps,
[1997may22]

jv'resource.TOOLS.DEBUGGER

name::
* McsEngl.jv'resource.TOOLS.DEBUGGER@cptIt,
* McsEngl.jv'source.debugger@cptIt,

Here is a list of debuggers (and articles about debugging): http://webtools.dyade.fr:8888/Java/search?term=s1:60
[adv. java {1999-04-30}]

jv'resource.TOOLS.IDE

name::
* McsEngl.jv'resource.TOOLS.IDE@cptIt,

JAMBA BY AIMTECH
Jamba is a visual Java authoring tool that enables webmasters and Internet developers to create interactive media-rich Java applets and applications without programming or scripting. It will have the same effect on Java that Web authoring tools such as PageMill and FrontPage have had on HTML. With Jamba, users will work in a WYSIWYG page-layout environment, visually specifying "live" objects through a series of drag-and-drop actions.
http://www.aimtech.com/

JBuilder 1.0
Borland International Scotts Valley, CA (408) 431-1000
Description: Visual development tool that implements component-based design model. Two-way tools generate and import Java code. Extensible environment accepts add-in components or wizards.
Platform: Intel PCs; Windows 95/NT 4.0
URLs: http://www.borland.com; http://www.borland.com/jbuilder

JFactory 1.1
Rogue Wave Software, Inc. Corvallis, OR 541-754-3010 or 800-487-3217
Description: JFactory is a powerful application generator designed for rapid Java application and applet development. Use JFactory to visually design Java applications and applets, test your interfaces, and quickly generate Java source code. Available as an executable program.
Platform: Intel PC, SPARC, HP 9000; Windows NT/95, Os/2 3.0, Solaris 2.4 and 2.5, HP/UX 10.02
URLs: http://www.roguewave.com; http://www.roguewave.com/products/java.html

MOJO BY PENUMBRA SOFTWARE
Mojo is a unique visual development tool for Java that combines the ease of a high-level GUI designer with the power of a low-level coder. It enables you to create meaningful Java applications in minutes without being isolated from the actual code. Mojo's Rapid Java Prototyping capabilities allow you to learn Java as you go, while fully exploiting Jv's capabilities within a component-based system that gives you room to grow. In short, Mojo allows you, the user, to create sophisticated applications without compromising.
http://www.penumbrasoftware.com

jv'resource.obfuscator

name::
* McsEngl.jv'resource.obfuscator@cptIt,

HashJava
http://www.sbktech.org/hashjava.html for gory details

We have been using hashJava (http://www.sbktech.org/) and LOVE it. It does everything we could ever want it to do, and it's free.

You can try mine for free. It is at:
 http://www.monmouth.com/~neil/Obfuscate.html

Bill, this is what most obfuscators primarily do. They strip debug info from classfiles, thus shrinking them. One of the commercially available ones, which specializes in shrinking class files is jshrink, see www.e-t.com.
[1997dec17]

jv'resource.TUTORIAL

name::
* McsEngl.jv'resource.TUTORIAL@cptIt,
* McsEngl.jv'tutorial@cptIt,

isrc.java.tutorial:
* http://java.sun.com/docs/books/tutorial/:

LOCAL SUN TUTORIAL (HTML):
* /JAVA/INFO/TUTORIAL/tutorial2006-11-10/index.html:

May I suggest
http://javauniverse.com/Developer/Workspace.html
There is an excellent tutorial on the 1.0 and 1.1 event models. This Java ezine has many good resources.

Links to java tutorials :
http://michaelm.afternet.com/Article/Java_Tutorials.html

I've got a very bare-bones tutorial on RMI on my Java pages http://www.patriot.net/users/tvalesky/java.html. The exact URL for the page is http://www.patriot.net/users/tvalesky/easyrmi.html

jv'Token

name::
* McsEngl.jv'Token@cptIt,

_DEFINITION:
** Java TOKENS are INPUT-ELEMENTS#ql:jv'input'element# except 'white-spaces#ql:jv'white'space#' and 'comments#ql:jv'comment#'.
Tokens form the terminal-symbols#ql:fg'terminal'symbol# for the syntactic-grammar#ql:jv'syntactic'grammar# for Java.
[from> lang spec, 1996aug]

** The tokens are the
- identifiers#ql:jv'identifier#,
- keywords,
- literals,
- separators, and
- operators
of the Java syntactic grammar.
[from> lang spec, 1996aug]

** The lexical-grammar has as its terminal-symbols the characters of the Unicode character set.
It defines a set of productions, starting from the goal-symbol#ql:fg'goal'symbol# Input#ql:"[Field JAVA:input]"#, that describe how sequences of Unicode characters are translated into a sequence of input elements.
These input-elements#ql:jv'input'element#, with white space and comments discarded, form the terminal-symbols for the syntactic-grammar for Java and are called Java tokens.
[lang spec, 1996aug]

PRODUCTION:
#jv'Token#:
Identifier#ql:[Field JAVA:Identifier]#
Keyword#ql:[Field JAVA:Keyword]#
Literal#ql:[Field JAVA:Literal]#
Separator#ql:[Field JAVA:Separator]#
Operator#ql:[Field JAVA:Operator]#
[lang spec, 1996aug]

jv'IDENTIFIER

name::
* McsEngl.jv'IDENTIFIER@cptIt,
* McsEngl.jv'TOKEN.IDENTIFIER@cptIt,

_DEFINITION:
* The TOKENS#ql:jv'token# are the
- identifiers,
- keywords,
- literals,
- separators, and
- operators
of the Java syntactic grammar.
[lang spec, 1996aug]

* Identifiers are THE NAMES of variables, methods, classes, packages and interfaces. Unlike literals they are not the things themselves, just ways of referring to them. In the HelloWorld program, HelloWorld, String, args, main and System.out.println are identifiers.
Identifiers must be composed of
- letters,
- numbers,
- the underscore _ and
- the dollar sign $.
Identifiers may only begin with a letter, the underscore or a dollar sign.
[Harold course 1997spring]

* identifier
The name of an ITEM in an Java program.
[Hotjava docs]

* An identifier is an unlimited-length sequence of Java letters and Java digits, the first of which must be a Java letter.
An identifier cannot have the same spelling (Unicode character sequence) as a keyword#ql:jv'keyword#, Boolean-literal#ql:jv'boolean'literal#, or the null-literal#ql:jv'null'literal#.
[lang spec, 1996aug]

PRODUCTION:
#jv'Identifier#:
 IdentifierChars but not a Keyword#ql:[Field JAVA:Keyword]# or BooleanLiteral#ql:[Field JAVA:BooleanLiteral]# or NullLiteral#ql:[Field JAVA:NullLiteral]#
#jv'IdentifierChars#:
 JavaLetter
 IdentifierChars JavaLetterOrDigit
#jv'JavaLetter#:
 any Unicode character that is a Java letter (see below)
#jv'JavaLetterOrDigit#:
 any Unicode character that is a Java letter-or-digit (see below)

A Java letter is a character for which the method Character.isJavaLetter (§20.5.17) returns true.
A Java letter-or-digit is a character for which the method Character.isJavaLetterOrDigit (§20.5.18) returns true.
[lang spec, 1996aug]

jv'Letters'and'digits
may be drawn from the entire Unicode character set, which supports most writing scripts in use in the world today, including the large sets for Chinese, Japanese, and Korean. This allows Java programmers to use identifiers in their programs that are written in their native languages.

A character is considered to be a letter-or-digit if and only if it is a defined Unicode character (§20.5.10) and its code lies in one of the following ranges:
0030-0039 ISO-Latin-1 (and ASCII) digits ('0'-'9')
0041-005A ISO-Latin-1 (and ASCII) uppercase Latin letters ('A'-'Z')
0061-007A ISO-Latin-1 (and ASCII) lowercase Latin letters ('a'-'z')
00C0-00D6 ISO-Latin-1 supplementary letters
00D8-00F6 ISO-Latin-1 supplementary letters
00F8-00FF ISO-Latin-1 supplementary letters
0100-1FFF Latin extended-A, Latin extended-B, IPA extensions, spacing modifier letters, combining diacritical marks, basic Greek, Greek symbols and Coptic, Cyrillic, Armenian, Hebrew extended-A, Basic Hebrew, Hebrew extended-B, Basic Arabic, Arabic extended, Devanagari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, Malayalam, Thai, Lao, Basic Georgian, Georgian extended, Hanguljamo, Latin extended additional, Greek extended
3040-9FFF Hiragana, Katakana, Bopomofo, Hangul compatibility Jamo, CJK miscellaneous, enclosed CJK characters and months, CJK compatibility, Hangul, Hangul supplementary-A, Hangul supplementary-B, CJK unified ideographs
F900-FDFF CJK compatibility ideographs, alphabetic presentation forms, Arabic presentation forms-A
FE70-FEFE Arabic presentation forms-B
FF10-FF19 Fullwidth digits
FF21-FF3A Fullwidth Latin uppercase
FF41-FF5A Fullwidth Latin lowercase
FF66-FFDC Halfwidth Katakana and Hangul
[lang spec, 1996aug]

START:
* Identifiers must start with a letter, underscore ("_"), or dollar sign ("$"); subsequent characters can also contain digits (0-9). Java uses the Unicode character set. For the purposes of determining what is a legal identifier the following are considered "letters:"
· The characters "A" through "Z"
· The characters "a" through "z"
· All Unicode characters with a character number above hex 00C0

Other characters valid after the first letter of an identifier include every character except those in the segment of Unicode reserved for special characters.

Thus, "garη;on" and "Mjψ;lner" are legal identifiers, but strings containing characters such as "xa6 " are not.

For more information on the Unicode standard, see The Unicode Standard, Worldwide Character Encoding, Version 1.0, Volumes 1&2. The FTP address for Unicode, Inc. (formerly the Unicode Consortium) is unicode.org.

There are two forms of names: simple names and qualified names.
A simple name is a single identifier.
A qualified name consists of a name, a "." token, and an identifier.
Not all identifiers in Java programs are a part of a name. Identifiers are also used in the following situations:
- In declarations (§6.1), where an identifier may occur to specify the name by which the declared entity will be known
- In field access expressions (§15.10), where an identifier occurs after a "." token to indicate a member of an object that is the value of an expression or the keyword super that appears before the "." token
- In some method invocation expressions (§15.11), where an identifier may occur after a "." token and before a "(" token to indicate a method to be invoked for an object that is the value of an expression or the keyword super that appears before the "." token
- As labels in labeled statements (§14.6) and in break (§14.13) and continue (§14.14) statements that refer to statement labels
[lang spec, 1996aug]

jv'KEYWORD

name::
* McsEngl.jv'KEYWORD@cptIt,

jv'TOKEN.KEYWORD

_DEFINITION:
The TOKENS#ql:jv'token# are the
- identifiers,
- keywords,
- literals,
- separators, and
- operators
of the Java syntactic grammar.
[lang spec, 1996aug]

Keywords are IDENTIFIERS#ql:jv'identifier# like public, static and class that have a special meaning inside Java source code and outside of comments and Strings. Four keywords are used in Hello World, public, static, void and class.
Keywords are reserved for their intended use and cannot be used by the programmer for variable or method names.
[Harold course 1997spring]

The following character sequences, formed from ASCII letters, are reserved for use as keywords and cannot be used as identifiers:
#jv'Keyword#: one of
abstract  default  if  private  throw
boolean  do  implements  protected  throws
break  double import  public  transient
byte  else  instanceof  return  try
case  extends int  short  void
catch  final  interface  static  volatile
char  finally  long  super   while
class  float  native  switch
const  for  new  synchronized
continue  goto  package  this
The keywords const and goto are reserved by Java, even though they are not currently used in Java. This may allow a Java compiler to produce better error messages if these C++ keywords incorrectly appear in Java programs.
[lang spec, 1996aug]

javakeyword.aa (this is usefull for search)

jv'abstract'keyword jv'KEYWORD.ABSTRACT
* in CLASS DECLARATION:
The abstract modifier declares that your class is an abstract class. An abstract class may contain abstract methods (methods with no implementation). Abstract classes are intended to be subclassed and cannot be instantiated.
[Java Tutorial, 1996dec24]
* Methods marked as abstract must be defined in a subclass of the class in which they are declared.

jv'assert'keyword, jv'keyword.ASSERT:
A new keyword is added to the language. Use of the assert keyword is governed by one modified production and one new production in the grammar:
StatementWithoutTrailingSubstatement:
<All current possibilities, as per JLS, Section 14.4> AssertStatement
AssertStatement:
assert Expression1;
assert Expression1 : Expression2 ;
In both forms of the assert statement, Expression1 must have type boolean or a compile-time error occurs.
[since 1.4]

jv'boolean'keyword jv'KEYWORD.BOOLEAN
* A primitive data-type. true or false A boolean value (true or false)

jv'break'keyword jv'KEYWORD.BREAK
** SEE break-statement#ql:jv'statement.break#.

jv'byte'keyword jv'KEYWORD.BYTE
* A primitive data-type. 8-bit two's complement Byte-length integer

jv'case'keyword jv'KEYWORD.CASE
* The switch-statement#ql:jv'switch'statement# evaluates its expression and executes the appropriate case-statement

jv'catch'keyword jv'KEYWORD.CATCH
** handles an exception in a try-statement#ql:jv'statement.try#.

jv'char'keyword jv'KEYWORD.CHAR
* A primitive data-type. 16-bit Unicode character A single character

jv'class'keyword jv'KEYWORD.CLASS
* Declares a class.

jv'const'keyword jv'KEYWORD.CONST

jv'continue'keyword jv'KEYWORD.CONTINUE
* within loops to jump from the current statement back to the top of the loop. This has the effect of skipping the code within the loop that follows continue.

jv'default'keyword jv'KEYWORD.DEFAULT
* at the end of the switch-statement#ql:jv'statement.switch#, handles all values that aren't explicitly handled by one of the case statements.

jv'do'keyword jv'KEYWORD.DO
* creates loop statement with 'while'

jv'double'keyword jv'KEYWORD.DOUBLE
* A primitive data-type. 64-bit IEEE 754. Double-precision floating point

jv'else'keyword jv'KEYWORD.ELSE
** signals the code to be executed if an if statement is not true.

jv'extends'keyword jv'KEYWORD.EXTENDS
** creates a subclass
** Creates a new class with the functionality of the previous plus new one. Then this class is a SPECIFIC-CONCEPT. This process generalizes the old class by creating specific, not generic entities.
[hknu_2001feb04]
** example#ql:jv'ex.extends#

jv'final'keyword jv'KEYWORD.FINAL
* ON CLASS.
Using the final modifier you can declare that your class is final; that is, that your class cannot be subclassed.
[Java Tutorial, 1996dec24]

* ON FIELD.
- To create a constant member-variable in Java use the keyword final in your variable declaration.
[Java Tutorial, 1996dec24]
- A field can be declared final, in which case its declarator must include a variable initializer or a compile-time error occurs. Both class and instance variables (static and non-static fields) may be declared final.
[lang spec, 1996aug]

* ON METHOD:
you can use the final keyword in a method declaration to indicate to the compiler that the method cannot be overridden by subclasses.
[Java Tutorial, 1996dec24]

jv'finally'keyword jv'KEYWORD.FINALLY
** declares a block of code guaranteed to be executed
** Example#ql:jv'ex.finally#.

jv'float'keyword jv'KEYWORD.FLOAT
** declares a floating point variable or return type

jv'for'keyword jv'KEYWORD.FOR
* creates loop statement.
* EXAMPLE#ql:jv'ex.for#.

jv'goto'keyword jv'KEYWORD.GOTO
* not used

jv'if'keyword jv'KEYWORD.IF
* creates decision-making control flow statement

jv'instanceof'keyword jv'KEYWORD.INSTANCEOF
** test whether an object is an instance of a class

jv'implements'keyword jv'KEYWORD.IMPLEMENTS
* To declare that your class implements one or more interfaces, use the keyword implements followed by a comma-delimited list of the interfaces implemented by your class.

jv'import'keyword jv'KEYWORD.IMPORT
* SEE 'import-statement#ql:jv'import'statement#'.

jv'int'keyword jv'KEYWORD.INT
* 32 bit Declares an Integer data-type.

jv'interface'keyword jv'KEYWORD.INTERFACE
* Declares an interface.

jv'long'keyword jv'KEYWORD.LONG
* A primitive data-type. 64-bit two's complement Long integer

jv'native'keyword jv'KEYWORD.NATIVE
** declares that a method is implemented in native code.

jv'new'keyword jv'KEYWORD.NEW
** OPERATOR#ql:jv'new'operator#. allocates a new object

jv'package'keyword jv'KEYWORD.PACKAGE
** defines the package in which this source code file belongs

jv'private'keyword jv'KEYWORD.PRIVATE
* ACCESS SPECIFIER. The most restrictive access level is private.
A private member is accessible ONLY TO THE CLASS in which it is defined.

jv'protected'keyword jv'KEYWORD.PROTECTED
* ACCESS SPECIFIER. which allows the class itself, subclasses and all classes in the SAME PACKAGE to access the members.

jv'public'keyword jv'KEYWORD.PUBLIC
* in CLASS DECLARATION:
The public modifier declares that the class can be used by objects outside the current package.
By default a class can only be used by other classes in the same package in which it is declared.
[Java Tutorial, 1996dec24]

jv'return'keyword jv'KEYWORD.RETURN
** You can also see the use of the return keyword, which does two things.
- First, it says “leave the method, I’m done.”
- Second, if the method produces a value, that value is placed right after the return statement.
[B. ECKEL, Thinking In Java, 1997aug18, 53]
** OPERATOR. Methods use the return operator to return a value. Any method that is not declared void must contain a return statement.
You use return to exit from the current method and jump back to the statement within the calling method that follows the original method call.
** Example#ql:jv'ex.return#.

jv'short'keyword jv'KEYWORD.SHORT
* Primitive data-type. 16-bit two's complement Short integer from -32.768 to 32767, inclusive

jv'static'keyword jv'KEYWORD.STATIC
** Ordinarily, when you create a class you are describing how objects of that class look and how they will behave. You don’t actually get anything until you create an object of that class with new, and at that point data storage is created and methods become available.
But there are two situations in which this approach is not sufficient. One is if you want to have only one piece of storage for a particular piece of data, regardless of how many objects are created, or even if no objects are created. The other is if you need a method that isn’t associated with any particular object of this class. That is, you need a method that you can call even if no objects are created. You can achieve both of these effects with the static keyword. When you say something is static, it means that data or method is not tied to any particular object instance of that class.
[B. ECKEL, Thinking In Java, 1998jan]
** When you say something is static, it means that data or method is not tied to any particular object instance of that class. So even if you’ve never created an object of that class you can call a static method or access a piece of static data. With ordinary, non-static data and methods you must create an object and use that object to access the data or method, since non-static data and methods must know the particular object they are working with. Of course, since static methods don’t need any objects to be created before they are used, they cannot directly access non-static members or methods by simply calling those other members without referring to a named object (since non-static members and methods must be tied to a particular object).
...
There are two ways to refer to a static variable. As indicated above, you can name it via an object, by saying, for example, st2.i. You can also refer to it directly through its class name, something you cannot do with a non-static member. (This is the preferred way to refer to a static variable since it emphasizes that variable’s static nature.)
[B. ECKEL, Thinking In Java, 1998jan, 79]
* CLASS MEMBERS
Defines 'class' (not instance) Members.
Variables and methods declared in a class can be declared static, which makes them apply to the class itself, rather than to an instance of the class.
* CLASS FIELD
If a field is declared static, there exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created. A static field, sometimes called a class variable, is incarnated when the class is initialized (§12.4).
[lang spec, 1996aug]

jv'super'keyword jv'KEYWORD.SUPER
* allows a method to refer to hidden variables and overriden methods of the superclass.

jv'switch'keyword jv'KEYWORD.SWITCH
* SEE 'switch-statement#ql:jv'switch'statement#'.

jv'synchronized'keyword jv'KEYWORD.SYNCHRONIZED
* The synchronized keyword is a modifier that marks a method or block of code as being required to acquire a lock#ql:jv'lock#.
** Java’s threading is built into the language, which makes a complicated subject much simpler. The threading is supported on an object level, so one thread of execution is represented by one object. Java also provides limited resource locking: it can lock the memory of any object (which is, after all, one kind of shared resource) so that only one thread can use it at a time. This is accomplished with the synchronized keyword. Other types of resources must be locked explicitly by the programmer, typically by creating an object to represent the lock that all threads must check before accessing that resource.
[B. ECKEL, Thinking In Java, 1997aug18, 36]

jv'throw'keyword jv'KEYWORD.THROW
** throw an exception.

jv'transient'keyword jv'KEYWORD.TRANSIENT
* IN CLASS FIELD.
By default member-variables are part of the persistent state of the object. Member variables that are part of the persistent state of an object must be saved when the object is archived. You use the transient keyword to indicate to the Java virtual machine that the indicated variable is NOT part of the persistent state of the object.
The JDK 1.0 version of the Java runtime system ignores the transient marker.
[Java Tutorial, 1996dec24]
** it means that a field should not be serialized.
[Harold course 1997spring]

jv'this'keyword jv'KEYWORD.THIS:
** We use 'this' for a variable of a class when the same name is a method's argument.
** You can even use the same name for arguments to the constructor (or any other method) as you use for field names.
** Example#ql:jv'ex.this#.

jv'try'keyword jv'KEYWORD.TRY
* The first step in constructing an exception handler is to enclose the statements that might throw an exception within a try block. In general, a try block looks like this:
try {
Java statements
} catch (...){
....
{
* A try statement must be accompanied by at least one catch block or one finally block.

jv'void'keyword jv'KEYWORD.VOID
* indicates that the method doesn't return any value.

jv'while'keyword jv'KEYWORD.WHILE
* creates loop cfs
* Example#ql:jv'ex.while#.

jv'throws'keyword jv'KEYWORD.THROWS
* Creates exceptions:
public static void main(String[] args)
throws java.io.IOException, Exception

jv'volatile'keyword jv'KEYWORD.VOLATILE
* FIELD/VARIABLE:
a field may be declared volatile, in which case a thread must reconcile its working copy of the field with the master copy every time it accesses the variable. Moreover, operations on the master copies of one or more volatile variables on behalf of a thread are performed by the main memory in exactly the order that the thread requested.
[lang spec, 1996aug]
- means that the variable is modified asynchronously
The JDK 1.0 version of the Java runtime system ignores the volatile marker.

** it means a field may change asynchronously and is not thread-safe.
[Harold course 1997spring]

jv'SEPARATOR

name::
* McsEngl.jv'SEPARATOR@cptIt,
* McsEngl.jv'TOKEN.SEPARATOR@cptIt,

_DEFINITION:
The TOKENS#ql:jv'token# are the
- identifiers,
- keywords,
- literals,
- separators, and
- operators
of the Java syntactic grammar.
[lang spec, 1996aug]

SUBGENERAL:
** The following nine ASCII characters are the Java separators (punctuators):
#jv'Separator#: one of
( ) { } [ ] ; , .
[lang spec, 1996aug]
** the comma separator, which is used to separate function arguments
[B. ECKEL, Thinking In Java, 1998jan]

jv'USER-INTERFACE

name::
* McsEngl.jv'USER-INTERFACE@cptIt,
* McsEngl.jv'api.USER'INTERFACE@cptIt,
* McsEngl.jv'GUI@cptIt,

NOTE:
This must be located at the api location. It remains here because of its size.

_DEFINITION:
USER INTERFACE is a broad term that refers to all sorts of communication between a program and its users.
[TUTORIAL]

jv'CheckboxGroup

name::
* McsEngl.jv'CheckboxGroup@cptIt,
* McsEngl.jv'radiobutton@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.checkboxgroup#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object

FUNCTION:
CheckboxGroups are collections of Checkboxes with the special property that no more than one Checkbox in the same group can be selected at a time. The Checkboxes in a CheckboxGroup are often called radio buttons. Checkboxes that are members of the same CheckboxGroup cannot be checked simultaneously. When the user checks one, all others are unchecked automatically.
[Harold Course, 1997]

jv'Component'CLASS

name::
* McsEngl.jv'Component'CLASS@cptIt,
* McsEngl.java.awt.Component@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.component#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object

SUBCLASS:

_DEFINITION:
public abstract class java.awt.Component
extends Object
implements ImageObserver, MenuContainer, Serializable

A component is an object having a graphical representation that can be displayed on the screen and that can interact with the user. Examples of components are the buttons, checkboxes, and scrollbars of a typical graphical user interface.
Components ARE graphical user interface (GUI) widgets like checkboxes, menus, buttons, applets, and more...
The key thing to remember about adding components to the applet is the three steps:
1.Declare the component
2.Initialize the component
3.Add the component to the layout.
[Harold Cource, 1997mar]

LIGHTWEIGHT:
component is a lightweight, i.e. if it doesn't have a native window system peer.
[API12B2]

jv'Component'FUNCTION

name::
* McsEngl.jv'Component'FUNCTION@cptIt,

PICTURE:
itsoft4.bmp

In Java, the objects you use to create a visual interface are called components. Components, in turn are placed into objects called containers, which determine how components will display.
For example, a Frame, is a container used to build a visual interface for an Application. To build a Frame in Java, you extend a Frame class and instantiate that subclassed container class, and then instantiate and add component objects, like buttons, text boxes, and scroll bars, to your Frame container object. This is a complex process.
[Reprint permission by Symantec, Visual Cafe 1996]

Components are Buttons, TextAreas, Scrollbars, etc. in other words the visible UI controls that the user interacts with, all of which have been added to a Container. Anything that is derived from the class Component can be one.

jv'Component'MEMBERS

name::
* McsEngl.jv'Component'MEMBERS@cptIt,


FIELD INDEX:
** (static) BOTTOM_ALIGNMENT: Ease of use constant for getAlignmentY .
** (static) CENTER_ALIGNMENT: Ease of use constant for getAlignmentY and getAlignmentX().
** (static) LEFT_ALIGNMENT: Ease of use constant for getAlignmentX .
** (instance) locale: The locale for the component.
** (static) LOCK: The locking object for AWT component-tree and layout operations.
** (static) RIGHT_ALIGNMENT: Ease of use constant for getAlignmentX .
** (static) TOP_ALIGNMENT: Ease of use constant for getAlignmentY .


CONSTRUCTOR INDEX:
** Component(): Constructs a new Component.


METHOD INDEX:
** (inst) action(Event, Object): DEPRECATED: Replaced by processActionEvent(KeyEvent e); Called if an action occurs in the Component.
** (inst) add(PopupMenu): Adds the specified popup menu to the component.
** (inst) addComponentListener(ComponentListener): Adds the specified component listener to receive component events from this component.
** (inst) addFocusListener(FocusListener): Adds the specified focus listener to receive focus events from this component.
** (inst) addKeyListener(KeyListener): Adds the specified key listener to receive key events from this component.
** (inst) addMouseListener(MouseListener): Adds the specified mouse listener to receive mouse events from this component.
** (inst) addMouseMotionListener(MouseMotionListener): Adds the specified mouse motion listener to receive mouse motion events from this component.
** (inst) addNotify(): Notifies the Component that it has been added to a container and the peer should be created.
** (inst) bounds(): DEPRECATED: Replaced by getBounds().
** (inst) checkImage(Image, ImageObserver): Returns the status of the construction of a screen representation of the specified image.
** (inst) checkImage(Image, int, int, ImageObserver): Returns the status of the construction of a scaled screen representation of the specified image.
** (inst) contains(int, int): Checks whether this component "contains" the specified (x, y) location, where x and y are defined to be relative to the coordinate system of this.
** (inst) contains(Point): Checks whether this component "contains" the specified point, where x and y in the point are defined to be relative to the coordinate system of co
** (inst) createImage(ImageProducer): Creates an image from the specified image producer.
** (inst) createImage(int, int): Creates an off-screen drawable Image to be used for double buffering.
** (inst) deliverEvent(Event): DEPRECATED: replaced by dispatchEvent(AWTEvent e)
** (inst) disable(): DEPRECATED: Replaced by setEnabled(boolean).
** (inst) disableEvents(long): Disables the events defined by the specified event mask parameter from being delivered to this component.
** (inst) doLayout(): Lays out the component.
** (inst) enable(): DEPRECATED: Replaced by setEnabled(boolean).
** (inst) enable(boolean): DEPRECATED: Replaced by setEnabled(boolean).
** (inst) enableEvents(long): Enables the events defined by the specified event mask parameter to be delivered to this component.
** (inst) getAlignmentX(): Returns the alignment along the x axis.
** (inst) getAlignmentY(): Returns the alignment along the y axis.
** (inst) getBackground(): Gets the background color.
** (inst) getBounds(): Returns the current bounds of this component.
** (inst) getColorModel(): Gets the ColorModel used to display the component on the output device.
** (inst) getComponentAt(int, int): Returns the component or subcomponent that contains the x,y location.
** (inst) getComponentAt(Point): Returns the component or subcomponent that contains the specified point.
** (inst) getCursor(): Gets the cursor set on this component.
** (inst) getFont(): Gets the font of the component.
** (inst) getFontMetrics(Font): Gets the font metrics for this component.
** (inst) getForeground(): Gets the foreground color.
** (inst) getGraphics(): Gets a Graphics context for this component.
** (inst) getLocale(): Gets the locale of the component.
** (inst) getLocation(): Returns the current location of this component.
** (inst) getLocationOnScreen(): Returns the current location of this component in the screen's coordinate space.
** (inst) getMaximumSize(): Returns the maximum size of this component.
** (inst) getMinimumSize(): Returns the mininimum size of this component.
** (inst) getName(): Gets the name of the component.
** (inst) getParent(): Gets the parent of the component.
** (inst) getPeer(): DEPRECATED
** (inst) getPreferredSize(): Returns the preferred size of this component.
** (inst) getSize(): Returns the current size of this component.
** (inst) getToolkit(): Gets the toolkit of the component.
** (inst) getTreeLock(): Gets the locking object for AWT component-tree and layout operations.
** (inst) gotFocus(Event, Object): DEPRECATED: Replaced by processFocusEvent(FocusEvent e); Indicates that this component has received the input focus.
** (inst) handleEvent(Event): DEPRECATED: Replaced by processEvent(AWTEvent e); Handles the event.
** (inst) hide(): DEPRECATED: Replaced by setVisible(boolean).
** (inst) imageUpdate(Image, int, int, int, int, int): Repaints the component when the image has changed.
** (inst) inside(int, int): DEPRECATED: Replaced by contains(int, int).
** (inst) invalidate(): Invalidates the component.
** (inst) isEnabled(): Checks if this Component is enabled.
** (inst) isFocusTraversable(): Returns whether this component can be traversed using Tab or Shift-Tab keyboard focus traversal.
** (inst) isShowing(): Checks if this Component is showing on screen.
** (inst) isValid(): Checks if this Component is valid.
** (inst) isVisible(): Checks if this Component is visible.
** (inst) keyDown(Event, int): DEPRECATED: Replaced by processKeyEvent(KeyEvent e); Called if a character is pressed.
** (inst) keyUp(Event, int): DEPRECATED: Replaced by processKeyEvent(KeyEvent e); Called if a character is released.
** (inst) layout(): DEPRECATED: Replaced by doLayout().
** (inst) list(): Prints a listing to System.out.
** (inst) list(java.io.PrintStream): Prints a listing to the specified print stream.
** (inst) list(java.io.PrintStream, int): Prints out a list, starting at the specified indention, to the specified print stream.
** (inst) list(java.io.PrintWriter): Prints a listing to the specified print writer.
** (inst) list(java.io.PrintWriter, int): Prints out a list, starting at the specified indention, to the specified print writer.
** (inst) locate(int, int): DEPRECATED: Replaced by getComponentAt(int, int).
** (inst) location(): DEPRECATED: Replaced by getLocation().
** (inst) lostFocus(Event, Object): DEPRECATED: Replaced by processFocusEvent(FocusEvent e); Indicates that this component has lost the input focus.
** (inst) minimumSize(): DEPRECATED: Replaced by getMinimumSize().
** (inst) mouseDown(Event, int, int): DEPRECATED: Replaced by processMouseEvent(MouseEvent e); Called if the mouse is down.
** (inst) mouseDrag(Event, int, int): DEPRECATED: Replaced by processMouseMotionEvent(MouseEvent e); Called if the mouse is dragged (the mouse button is down).
** (inst) mouseEnter(Event, int, int): DEPRECATED: Replaced by processMouseEvent(MouseEvent e); Called when the mouse enters the component.
** (inst) mouseExit(Event, int, int): DEPRECATED: Replaced by processMouseEvent(MouseEvent e); Called when the mouse exits the component.
** (inst) mouseMove(Event, int, int): DEPRECATED: Replaced by processMouseMotionEvent(MouseEvent e); Called if the mouse moves (the mouse button is up).
** (inst) mouseUp(Event, int, int): DEPRECATED: Replaced by processMouseEvent(MouseEvent e); Called if the mouse is up.
** (inst) move(int, int): DEPRECATED: Replaced by setLocation(int, int).
** (inst) nextFocus(): DEPRECATED: Replaced by transferFocus().
** (inst) paint(Graphics): Paints the component.
** (inst) paintAll(Graphics): Paints the component and its subcomponents.
** (inst) paramString(): Returns the parameter String of this Component.
** (inst) postEvent(Event): DEPRECATED: Replaced by dispatchEvent(AWTEvent e); Posts an event to this component.
** (inst) preferredSize(): DEPRECATED: Replaced by getPreferredSize().
** (inst) prepareImage(Image, ImageObserver): Prepares an image for rendering on this Component.
** (inst) prepareImage(Image, int, int, ImageObserver): Prepares an image for rendering on this Component at the specified width and height.
** (inst) print(Graphics): Prints this component.
** (inst) printAll(Graphics): Prints the component and its subcomponents.
** (inst) processComponentEvent(ComponentEvent): Processes comp events occurring on this comp by dispatching them to any registered ComponentListener objects.
** (inst) processEvent(AWTEvent): Processes events occurring on this component.
** (inst) processFocusEvent(FocusEvent): Processes focus events occurring on this component by dispatching them to any registered FocusListener objects.
** (inst) processKeyEvent(KeyEvent): Processes key events occurring on this component by dispatching them to any registered KeyListener objects.
** (inst) processMouseEvent(MouseEvent): Processes mouse events occurring on this component by dispatching them to any registered MouseListener objects.
** (inst) processMouseMotionEvent(MouseEvent): Processes mouse motion events occurring on this component by dispatching them to any registered
** (inst) remove(MenuComponent): Removes the specified popup menu from the component.
** (inst) removeComponentListener(ComponentListener): Removes the specified listener so it no longer receives component events from this component.
** (inst) removeFocusListener(FocusListener): Removes the specified focus listener so it no longer receives focus events from this component.
** (inst) removeKeyListener(KeyListener): Removes the specified key listener so it no longer receives key events from this component.
** (inst) removeMouseListener(MouseListener): Removes the specified mouse listener so it no longer receives mouse events from this component.
** (inst) removeMouseMotionListener(MouseMotionListener): Removes the specified mouse motion listener so it no longer receives mouse motion events from this
** (inst) removeNotify(): Notifies the Component that it has been removed from its container and it needs to destroy the peer.
** (inst) repaint(): Repaints the component.
** (inst) repaint(int, int, int, int): Repaints part of the component.
** (inst) repaint(long): Repaints the component.
** (inst) repaint(long, int, int, int, int): Repaints part of the component.
** (inst) requestFocus(): Requests the input focus.
** (inst) reshape(int, int, int, int): DEPRECATED: Replaced by setBounds(int, int, int, int).
** (inst) resize(Dimension): DEPRECATED: Replaced by setSize(Dimension).
** (inst) resize(int, int): DEPRECATED: Replaced by setSize(int, int).
** (inst) setBackground(Color): Sets the background color.
** (inst) setBounds(int, int, int, int): Reshapes the Component to the specified bounding box.
** (inst) setBounds(Rectangle): Reshapes the Component to the specified bounding box.
** (inst) setCursor(Cursor): Set the cursor image to a predefined cursor.
** (inst) setEnabled(boolean): Enables a component.
** (inst) setFont(Font): Sets the font of the component.
** (inst) setForeground(Color): Sets the foreground color.
** (inst) setLocale(java.util.Locale): Sets the locale of the component.
** (inst) setLocation(int, int): Moves the Component to a new location.
** (inst) setLocation(Point): Moves the Component to a new location.
** (inst) setName(String): Sets the name of the component to the specified string.
** (inst) setSize(Dimension): Resizes the Component to the specified dimension.
** (inst) setSize(int, int): Resizes the Component to the specified width and height.
** (inst) setVisible(boolean): Shows or hides the component depending on the boolean flag b.
** (inst) show(): DEPRECATED: Replaced by setVisible(boolean).
** (inst) show(boolean): DEPRECATED: Replaced by setVisible(boolean).
** (inst) size(): DEPRECATED: Replaced by getSize().
** (inst) toString(): Returns the String representation of this Component's values.
** (inst) transferFocus(): Transfers the focus to the next component.
** (inst) update(Graphics): Updates the component.
** (inst) validate(): Ensures that a component has a valid layout.

jv'Component'ADDING

name::
* McsEngl.jv'Component'ADDING@cptIt,

The key thing to remember about adding components to the applet is the three steps:
1.Declare the component
2.Initialize the component
3.Add the component to the layout.
eg.
Label l;
l = new Label("Hello Container");
add(l);
You can often combine the three steps into one like this
add(new Label("Hello Container"));
The disadvantage to this shortcut is that you no longer have a variable which references the Label. Thus you can't easily access the Label later.
[Harold Course, 1997]

jv'Component'APPEARANCE

name::
* McsEngl.jv'Component'APPEARANCE@cptIt,

The appearance of most components is platform-specific. Buttons look different on Motif systems than on Macintosh systems, for example.
[Java Tutorial, 1996dec24]

jv'Component.Button

name::
* McsEngl.jv'Component.Button@cptIt,
* McsEngl.jv'Button@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.button#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.Component

COCLASS:
Button#ql:jv'component.button#, Canvas#ql:jv'component.canvas#, Checkbox#ql:jv'component.checkbox#, Choice#ql:jv'component.choice#, Container#ql:jv'component.container#, Label#ql:jv'component.container#, List#ql:jv'component.list#, Scrollbar#ql:jv'component.scrollbar#, TextComponet#ql:jv'component.textcomponent#.

SUBCLASS:

FUNCTION:
A button is a simple control that generates an action event when the user clicks it.
[Java Tutorial, 1996dec24]

Example#ql:jv'ex.button#.

jv'Component.Canvas

name::
* McsEngl.jv'Component.Canvas@cptIt,
* McsEngl.jv'Canvas@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.canvas#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.Component.

COCLASS:
Button#ql:jv'component.button#, Canvas#ql:jv'component.canvas#, Checkbox#ql:jv'component.checkbox#, Choice#ql:jv'component.choice#, Container#ql:jv'component.container#, Label#ql:jv'component.container#, List#ql:jv'component.list#, Scrollbar#ql:jv'component.scrollbar#, TextComponet#ql:jv'component.textcomponent#.

FUNCTION:
* A Canvas component. This is a generic component which needs to be subclassed in order to add some interesting functionality.
[API]
* The Canvas class lets you write custom Components. With your Canvas subclass, you can
- draw custom graphics to the screen -- in a paint program, image processor, or game, for example -- and
- implement any kind of event handling.
[Java Tutorial, 1996dec24]

Example#ql:jv'ex.canvas#.

jv'Component.Checkbox

name::
* McsEngl.jv'Component.Checkbox@cptIt,
* McsEngl.jv'Checkbox@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.checkbox#.

COCLASS:
Button#ql:jv'component.button#, Canvas#ql:jv'component.canvas#, Checkbox#ql:jv'component.checkbox#, Choice#ql:jv'component.choice#, Container#ql:jv'component.container#, Label#ql:jv'component.container#, List#ql:jv'component.list#, Scrollbar#ql:jv'component.scrollbar#, TextComponet#ql:jv'component.textcomponent#.

FUNCTION:
A Checkbox object is a graphical user interface element that has a boolean state.
[API1.1]

Example#ql:jv'ex.checkbox#.

jv'CHECKBOX'EVENT

name::
* McsEngl.jv'CHECKBOX'EVENT@cptIt,

If you want to know immediately when a Checkbox changes state, you can register an ItemListener for the Checkbox.
An ItemEvent is exactly the same as the ItemEvent fired by a Choice. In fact ItemEvents are used to indicate selections or deselections in any sort of list including Checkboxes, radio buttons, Choices, and Lists.
[Harold Course, 1997]

jv'Component.Choice

name::
* McsEngl.jv'Component.Choice@cptIt,
* McsEngl.jv'Choice@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.choice#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.Component#ql:jv'component#.

COCLASS:
Button#ql:jv'component.button#, Canvas#ql:jv'component.canvas#, Checkbox#ql:jv'component.checkbox#, Choice#ql:jv'component.choice#, Container#ql:jv'component.container#, Label#ql:jv'component.container#, List#ql:jv'component.list#, Scrollbar#ql:jv'component.scrollbar#, TextComponet#ql:jv'component.textcomponent#.

FUNCTION:
* The Choice class is a pop-up menu of choices. The current choice is displayed as the title of the menu.
[API]
* Choice is a Component that represent ONE among entities.
Είναι μία ΛΙΣΤΑ από οντότητες, που φαίνεται ΜΙΑ μόνο. Τις υπόλοιπες τις βλέπουμε πατόντας ένα βελάκι.
[Nikos,]

Creating a popup menu is a little more complex than creating the other user interface components you've seen. There's an extra step, adding the menu items to the menu. That is the four steps are
1.Declare the Choice
2.Allocate the Choice
3.Add the menu items to the Choice
4.Add the Choice to the layout
5.Add an ItemListener to the Choice
[Harold Course 1997]

Example#ql:jv'ex.choice#.


CONSTRUCTOR INDEX:
** Choice(): Constructs a new Choice.


METHOD INDEX:
** (inst) jv'choice'add(String): Adds an item to this Choice.
** (inst) jv'choice'addItem(String): DEPRECATED: Replaced by add(String).
** (inst) jv'choice'addItemListener(ItemListener): Adds the specified item listener to recieve item events from this choice.
** (inst) jv'choice'addNotify(): Creates the Choice's peer.
** (inst) jv'choice'countItems(): DEPRECATED: Replaced by getItemCount().
** (inst) jv'choice'getItem(int): Returns the String at the specified index in the Choice.
** (inst) jv'choice'getItemCount(): Returns the number of items in this Choice.
** (inst) jv'choice'getSelectedIndex(): Returns the index of the currently selected item.
** (inst) jv'choice'getSelectedItem(): Returns a String representation of the current choice.
** (inst) jv'choice'getSelectedObjects(): Returns an array (length 1) containing the currently selected item.
** (inst) jv'choice'insert(String, int): Inserts the item into this choice at the specified position.
** (inst) jv'choice'paramString(): Returns the parameter String of this Choice.
** (inst) jv'choice'processEvent(AWTEvent): Processes events on this choice.
** (inst) jv'choice'processItemEvent(ItemEvent): Processes item events occurring on this choice by dispatching them to any registered ItemListener objects.
** (inst) jv'choice'remove(int): Removes an item from the choice menu.
** (inst) jv'choice'remove(String): Remove the first occurrence of item from the choice menu.
** (inst) jv'choice'removeAll(): Removes all items from the choice menu.
** (inst) jv'choice'removeItemListener(ItemListener): Removes the specified item listener so that it no longer receives item events from this choice.
** (inst) jv'choice'select(int): Selects the item with the specified postion.
** (inst) jv'choice'select(String): Selects the item with the specified String.

jv'Component.Container

name::
* McsEngl.jv'Component.Container@cptIt,
* McsEngl.jv'Container@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.container#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.Component

COCLASS:
Button#ql:jv'component.button#, Canvas#ql:jv'component.canvas#, Checkbox#ql:jv'component.checkbox#, Choice#ql:jv'component.choice#, Container#ql:jv'component.container#, Label#ql:jv'component.container#, List#ql:jv'component.list#, Scrollbar#ql:jv'component.scrollbar#, TextComponet#ql:jv'component.textcomponent#.

SUBCLASS:

FUNCTION:
* Containers (Frames, Dialogs, Windows and Panels) can contain components#ql:jv'component# and are themselves components, thus can be added to Containers. Containers usually handle events that occurred to the Components, although nothing prevents you from handling events in the component. In short all classes derived from Container can be one.

By default, every Container object has a LayoutManager object that controls its layout. For Panel objects, the default layout manager is an instance of the FlowLayout class. For Window objects, the default layout manager is an instance of the BorderLayout class.
[Java Tutorial, 1996dec24]

jv'Panel

name::
* McsEngl.jv'Panel@cptIt,
* McsEngl.jv'Container.Panel@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.panel#.

PACKAGE: java.awt#ql:package.java.awt#.

SUPERCLASS: java.awt.Container

COCLASS: Panel, window#ql:jv'window#.

SUBCLASS: Applet

FUNCTION:
* Panels group components within an area of an existing window.
* This produces a generic container.
The default layout for all panels is FlowLayout.
[API]

Example#ql:jv'ex.panel#.

java Applet class

name::
* McsEngl.jv'applet'class@cptIt,

SOURCE: java API11#ql::2nfoJAPI11.NFO:java.applet.applet rl3#.


PACKAGE: java.applet#ql:package.java.applet#.


SUPERCLASS: java.awt.Panel#ql:jv'panel#.

jv'Window

name::
* McsEngl.jv'Window@cptIt,
* McsEngl.jv'Container.Window@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.window#.

PACKAGE: java.awt#ql:package.java.awt#.

SUPERCLASS: java.awt.Container#ql:jv'container#.

COCLASS: Panel#ql:jv'panel#, window.

SUBCLASS: Dialog#ql:jv'dialog#, Frame#ql:jv'frame#.

FUNCTION:
* A Window is a top-level window with no borders and no menubar. It could be used to implement a pop-up menu. The default layout for a window is BorderLayout.
[API]

Example#ql:jv'ex.window#.

jv'Dialog

name::
* McsEngl.jv'Dialog@cptIt,
* McsEngl.jv'Window.Dialog@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.dialog#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.Window#ql:jv'window#.

COCLASS: Dialog, Frame#ql:jv'frame#.

SUBCLASS:

FUNCTION:
* dialogs -- windows that are more limited than frames.
[js tutorial {1999-03-12}]
* A class that produces a dialog - a window that takes input from the user. The default layout for a dialog is BorderLayout.
[Java API]
* dialogs -- windows that are dependent on other windows
[Java Tutorial, 1996dec24]
** There are two differences between dialogs and frames:
 1.A frame can have a menu bar. A dialog cannot.
 2.A dialog can be modal. A frame cannot.
A MODAL'DIALOG blocks all other use of the application until the user responds to it. A modal dialog cannot be moved and does not allow the user to switch to another window in the same program. On some platforms the user may not even be able to switch to another program.
[Harold course 1997spring]

CONSTRUCTORS:
Dialog d = new Dialog (new Frame(), "My Dialog Window", false);
//false means that the dialog isn't modal.

jv'FileDialog

name::
* McsEngl.jv'FileDialog@cptIt,
* McsEngl.jv'Window.FileDialog@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.filedialog#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.Dialog#ql:jv'dialog#.

FUNCTION:
The File Dialog class displays a file selection dialog. It is a modal dialog and will block the calling thread when the show method is called to display it, until the user has chosen a file.
[API]

jv'Frame

name::
* McsEngl.jv'Frame@cptIt,
* McsEngl.jv'Window.Frame@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.frame#. API101#ql::JAPI101.NFO:class.frame#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.Window#ql:jv'window#.

COCLASS: Dialog#ql:jv'dialog#, Frame.

SUBCLASS:


INTERFACE: implements java.awt.MenuContainer

FUNCTION:
* The Frame class provides windows for applets and applications.

Every application needs at least one Frame.

If an application has a window that should be dependent on another window -- disappearing when the other window is iconified, for example -- then you should use a Dialog instead of a Frame for the dependent window.

jv'FRAME'METHOD INDEX:
** (inst) addNotify(): Creates the Frame's peer.
** (inst) dispose(): Disposes of the Frame.
** (inst) getCursorType(): Deprecated.
** (inst) getIconImage(): Returns the icon image for this Frame.
** (inst) getMenuBar(): Gets the menu bar for this Frame.
** (inst) getTitle(): Gets the title of the Frame.
** (inst) isResizable(): Returns true if the user can resize the Frame.
** (inst) paramString(): Returns the parameter String of this Frame.
** (inst) remove(MenuComponent): Removes the specified menu bar from this Frame.
** (inst) setCursor(int):Deprecated.
** (inst) setIconImage(java.awt.Image): Sets the image to display when this Frame is iconized.
** (inst) setMenuBar(MenuBar): Sets the menubar for this Frame to the specified menubar.
** (inst) setResizable(boolean): Sets the resizable flag.
** (inst) setTitle(java.lang.String): Sets the title for this Frame to the specified title.
===== from WINDOW superclass =====================================
** (inst) addWindowListener(java.awt.event.WindowListener): Adds the specified window listener to receive window events from this window.
** (inst) getFocusOwner(): Returns the child component of this Window which has focus if and only if this Window is active.
** (inst) getLocale(): Gets the Locale for the window, if it has been set.
** (inst) getToolkit(): Returns the toolkit of this frame.
** (inst) getWarningString(): Gets the warning string for this window.
** (inst) isShowing(): Checks if this Window is showing on screen.
** (inst) pack(): Packs the components of the Window.
** (inst) postEvent(java.awt.Event):Deprecated.
** (inst) processEvent(java.awt.AWTEvent): Processes events on this window.
** (inst) processWindowEvent(java.awt.event.WindowEvent): Processes window events occurring on this window by dispatching them to any registered WindowListener objects.
** (inst) removeWindowListener(java.awt.event.WindowListener): Removes the specified window listener so that it no longer receives window events from this window.
** (inst) show(): Shows the Window.
** (inst) toBack(): Places this window at the bottom of the stacking order and makes the corresponding adjustment to other visible windows.
** (inst) toFront(): Places this window at the top of the stacking order and shows it in front of any other windows.
================ from CONTAINER superclass =======================
** (inst) add(java.awt.Component): Adds the specified component to this container.
** (inst) add(java.awt.Component, int): Adds the specified component to this container at the given position in the container's component list.
** (inst) add(java.awt.Component, java.lang.Object): Adds the specified component to this container at the specified index.
** (inst) add(java.awt.Component, java.lang.Object, int): Adds the specified component to this container with the specified constraints at the specified index.
** (inst) add(java.lang.String, java.awt.Component): Adds the specified component to this container.
** (inst) addContainerListener(java.awt.event.ContainerListener): Adds the specified container listener to receive container events from this container.
** (inst) addImpl(java.awt.Component, java.lang.Object, int): Adds the specified component to this container at the specified index.
** (inst) addNotify(): Notifies the container to create a peer.
** (inst) countComponents():Deprecated.
** (inst) deliverEvent(java.awt.Event):Deprecated.
** (inst) doLayout(): Does a layout on this Container.
** (inst) getAlignmentX(): Returns the alignment along the x axis.
** (inst) getAlignmentY(): Returns the alignment along the y axis.
** (inst) getComponent(int): Gets the nth component in this container.
** (inst) getComponentAt(int, int): Locates the component that contains the x,y position.
** (inst) getComponentAt(java.awt.Point): Locates the component that contains the specified point.
** (inst) getComponentCount(): Returns the number of components in this panel.
** (inst) getComponents(): Gets all the components in this container.
** (inst) getInsets(): Returns the insets of the container.
** (inst) getLayout(): Gets the layout manager for this container.
** (inst) getMaximumSize(): Returns the maximum size of this container.
** (inst) getMinimumSize(): Returns the minimum size of this container.
** (inst) getPreferredSize(): Returns the preferred size of this container.
** (inst) insets():Deprecated.
** (inst) invalidate(): Invalidates the container.
** (inst) isAncestorOf(java.awt.Component): Checks if the component is contained in the component hierarchy of this container.
** (inst) layout():Deprecated.
** (inst) list(java.io.PrintStream, int): Prints out a list, starting at the specified indention, to the specified out stream.
** (inst) list(java.io.PrintWriter, int): Prints out a list, starting at the specified indention, to the specified print writer.
** (inst) locate(int, int):Deprecated.
** (inst) minimumSize():Deprecated.
** (inst) paint(java.awt.Graphics): Paints the container.
** (inst) paintComponents(java.awt.Graphics): Paints the components in this container.
** (inst) paramString(): Returns the parameter String of this Container.
** (inst) preferredSize():Deprecated.
** (inst) print(java.awt.Graphics): Prints the container.
** (inst) printComponents(java.awt.Graphics): Prints the components in this container.
** (inst) processContainerEvent(java.awt.event.ContainerEvent): Processes container events occurring on this container by dispatching them to any registered ContainerListener objects.
** (inst) processEvent(java.awt.AWTEvent): Processes events on this container.
** (inst) remove(java.awt.Component): Removes the specified component from this container.
** (inst) remove(int): Removes the component at the specified index from this container.
** (inst) removeAll(): Removes all the components from this container.
** (inst) removeContainerListener(java.awt.event.ContainerListener): Removes the specified container listener so it no longer receives container events from this container.
** (inst) removeNotify(): Notifies the container to remove its peer.
** (inst) setLayout(java.awt.LayoutManager): Sets the layout manager for this container.
** (inst) validate(): Validates this Container and all of the components contained within it.
** (inst) validateTree(): Recursively descends the container tree and recomputes the layout for any subtrees marked as needing it (those marked as invalid).
===== from COMPONENT superclass =================================
** (inst) action(java.awt.Event, java.lang.Object): Deprecated.
** (inst) add(java.awt.PopupMenu): Adds the specified popup menu to the component.
** (inst) addComponentListener(java.awt.event.ComponentListener): Adds the specified component listener to receive component events from this component.
** (inst) addFocusListener(java.awt.event.FocusListener): Adds the specified focus listener to receive focus events from this component.
** (inst) addKeyListener(java.awt.event.KeyListener): Adds the specified key listener to receive key events from this component.
** (inst) addMouseListener(java.awt.event.MouseListener): Adds the specified mouse listener to receive mouse events from this component.
** (inst) addMouseMotionListener(java.awt.event.MouseMotionListener): Adds the specified mouse motion listener to receive mouse motion events from this component.
** (inst) addNotify(): Notifies the Component that it has been added to a container and if a peer is required, it should be created.
** (inst) bounds():Deprecated.
** (inst) checkImage(java.awt.Image, java.awt.image.ImageObserver): Returns the status of the construction of a screen representation of the specified image.
** (inst) checkImage(java.awt.Image, int, int, java.awt.image.ImageObserver): Returns the status of the construction of a scaled screen representation of the specified image.
** (inst) contains(int, int): Checks whether this component "contains" the specified (x, y)
location, where x and y are defined to be relative to the coordinate system of this component.
** (inst) contains(java.awt.Point): Checks whether this component "contains" the specified point, where x and y in the point are defined to be relative to the coordinate system of this component.
** (inst) createImage(java.awt.image.ImageProducer): Creates an image from the specified image producer.
** (inst) createImage(int, int): Creates an off-screen drawable Image to be used for double buffering.
** (inst) deliverEvent(java.awt.Event):Deprecated.
** (inst) disable():Deprecated.
** (inst) disableEvents(long): Disables the events defined by the specified event mask parameter from being delivered to this component.
** (inst) dispatchEvent(java.awt.AWTEvent): Dispatches an event to this component or one of its sub components.
** (inst) doLayout(): Lays out the component.
** (inst) enable():Deprecated.
** (inst) enable(boolean):Deprecated.
** (inst) enableEvents(long): Enables the events defined by the specified event mask parameter to be delivered to this component.
** (inst) getAlignmentX(): Returns the alignment along the x axis.
** (inst) getAlignmentY(): Returns the alignment along the y axis.
** (inst) getBackground(): Gets the background color.
** (inst) getBounds(): Returns the current bounds of this component.
** (inst) getColorModel(): Gets the ColorModel used to display the component on the output device.
** (inst) getComponentAt(int, int): Returns the component or subcomponent that contains the x,y location.
** (inst) getComponentAt(java.awt.Point): Returns the component or subcomponent that contains the specified point.
** (inst) getCursor(): Gets the cursor set on this component.
** (inst) getFont(): Gets the font of the component.
** (inst) getFontMetrics(java.awt.Font): Gets the font metrics for this component.
** (inst) getForeground(): Gets the foreground color.
** (inst) getGraphics(): Gets a Graphics context for this component.
** (inst) getLocale(): Gets the locale of the component.
** (inst) getLocation(): Returns the current location of this component.
** (inst) getLocationOnScreen(): Returns the current location of this component in the screen's coordinate space.
** (inst) getMaximumSize(): Returns the maximum size of this component.
** (inst) getMinimumSize(): Returns the mininimum size of this component.
** (inst) getName(): Gets the name of the component.
** (inst) getParent(): Gets the parent of the component.
** (inst) getPeer():Deprecated.
** (inst) getPreferredSize(): Returns the preferred size of this component.
** (inst) getSize(): Returns the current size of this component.
** (inst) getToolkit(): Gets the toolkit of the component.
** (inst) getTreeLock(): Gets the locking object for AWT component-tree and layout operations.
** (inst) gotFocus(java.awt.Event, java.lang.Object):Deprecated.
** (inst) handleEvent(java.awt.Event):Deprecated.
** (inst) hide():Deprecated.
** (inst) imageUpdate(java.awt.Image, int, int, int, int, int): Repaints the component when the image has changed.
** (inst) inside(int, int):Deprecated.
** (inst) invalidate(): Invalidates the component.
** (inst) isEnabled(): Checks if this Component is enabled.
** (inst) isFocusTraversable(): Returns whether this component can be traversed using Tab or Shift-Tab keyboard focus traversal.
** (inst) isShowing(): Checks if this Component is showing on screen.
** (inst) isValid(): Checks if this Component is valid.
** (inst) isVisible(): Checks if this Component is visible.
** (inst) keyDown(java.awt.Event, int):Deprecated.
** (inst) keyUp(java.awt.Event, int):Deprecated.
** (inst) layout(): Deprecated.
** (inst) list(): Prints a listing to System.out.
** (inst) list(java.io.PrintStream): Prints a listing to the specified print stream.
** (inst) list(java.io.PrintStream, int): Prints out a list, starting at the specified indention, to the specified print stream.
** (inst) list(java.io.PrintWriter): Prints a listing to the specified print writer.
** (inst) list(java.io.PrintWriter, int): Prints out a list, starting at the specified indention, to the specified print writer.
** (inst) locate(int, int): Deprecated.
** (inst) location(): Deprecated.
** (inst) lostFocus(java.awt.Event, java.lang.Object): Deprecated.
** (inst) minimumSize(): Deprecated.
** (inst) mouseDown(java.awt.Event, int, int): Deprecated.
** (inst) mouseDrag(java.awt.Event, int, int): Deprecated.
** (inst) mouseEnter(java.awt.Event, int, int): Deprecated.
** (inst) mouseExit(java.awt.Event, int, int): Deprecated.
** (inst) mouseMove(java.awt.Event, int, int): Deprecated.
** (inst) mouseUp(java.awt.Event, int, int): Deprecated.
** (inst) move(int, int): Deprecated.
** (inst) nextFocus(): Deprecated.
** (inst) paint(java.awt.Graphics): Paints the component.
** (inst) paintAll(java.awt.Graphics): Paints the component and its subcomponents.
** (inst) paramString(): Returns the parameter String of this Component.
** (inst) postEvent(java.awt.Event): Deprecated.
** (inst) preferredSize(): Deprecated.
** (inst) prepareImage(java.awt.Image, java.awt.image.ImageObserver): Prepares an image for rendering on this Component.
** (inst) prepareImage(java.awt.Image, int, int, java.awt.image.ImageObserver): Prepares an image for rendering on this Component at the specified width and height.
** (inst) print(java.awt.Graphics): Prints this component.
** (inst) printAll(java.awt.Graphics): Prints the component and its subcomponents.
** (inst) processComponentEvent(java.awt.event.ComponentEvent): Processes component events occurring on this component by dispatching them to any registered ComponentListener objects.
** (inst) processEvent(java.awt.AWTEvent): Processes events occurring on this component.
** (inst) processFocusEvent(java.awt.event.FocusEvent): Processes focus events occurring on this component by dispatching them to any registered FocusListener objects.
** (inst) processKeyEvent(java.awt.event.KeyEvent): Processes key events occurring on this component by dispatching them to any registered KeyListener objects.
** (inst) processMouseEvent(java.awt.event.MouseEvent): Processes mouse events occurring on this component by dispatching them to any registered MouseListener objects.
** (inst) processMouseMotionEvent(java.awt.event.MouseEvent): Processes mouse motion events occurring on this component by dispatching them to any registered MouseMotionListener objects.
** (inst) remove(java.awt.MenuComponent): Removes the specified popup menu from the component.
** (inst) removeComponentListener(java.awt.event.ComponentListener): Removes the specified listener so it no longer receives component events from this component.
** (inst) removeFocusListener(java.awt.event.FocusListener): Removes the specified focus listener so it no longer receives focus events from this component.
** (inst) removeKeyListener(java.awt.event.KeyListener): Removes the specified key listener so it no longer receives key events from this component.
** (inst) removeMouseListener(java.awt.event.MouseListener): Removes the specified mouse listener so it no longer receives mouse events from this component.
** (inst) removeMouseMotionListener(java.awt.event.MouseMotionListener): Removes the specified mouse motion listener so it no longer receives mouse motion events from this component.
** (inst) removeNotify(): Notifies the Component that it has been removed from its container and if a peers ecists, it destroys it.
** (inst) repaint(): Repaints the component.
** (inst) repaint(int, int, int, int): Repaints part of the component.
** (inst) repaint(long): Repaints the component.
** (inst) repaint(long, int, int, int, int): Repaints part of the component.
** (inst) requestFocus(): Requests the input focus.
** (inst) reshape(int, int, int, int): depr
** (inst) resize(java.awt.Dimension): depr
** (inst) resize(int, int): depr
** (inst) setBackground(java.awt.Color): Sets the background color.
** (inst) setBounds(int, int, int, int): Reshapes the Component to the specified bounding box.
** (inst) setBounds(java.awt.Rectangle): Reshapes the Component to the specified bounding box.
** (inst) setCursor(java.awt.Cursor): Set the cursor image to a predefined cursor.
** (inst) setEnabled(boolean): Enables a component.
** (inst) setFont(java.awt.Font): Sets the font of the component.
** (inst) setForeground(java.awt.Color): Sets the foreground color.
** (inst) setLocale(java.util.Locale): Sets the locale of the component.
** (inst) setLocation(int, int): Moves the Component to a new location.
** (inst) setLocation(java.awt.Point): Moves the Component to a new location.
** (inst) setName(java.lang.String): Sets the name of the component to the specified string.
** (inst) setSize(java.awt.Dimension): Resizes the Component to the specified dimension.
** (inst) setSize(int, int): Resizes the Component to the specified width and height.
** (inst) setVisible(boolean): Shows or hides the component depending on the boolean flag b.
** (inst) show(): Deprecated.
** (inst) show(boolean): Deprecated.
** (inst) size(): Deprecated.
** (inst) toString(): Returns the String representation of this Component's values.
** (inst) transferFocus(): Transfers the focus to the next component.
** (inst) update(java.awt.Graphics): Updates the component.
** (inst) validate(): Ensures that a component has a valid layout.

Example#ql:jv'ex.frame#.

jv'Component.Label

name::
* McsEngl.jv'Component.Label@cptIt,
* McsEngl.jv'Label@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.label#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.Component.

COCLASS:
Button#ql:jv'component.button#, Canvas#ql:jv'component.canvas#, Checkbox#ql:jv'component.checkbox#, Choice#ql:jv'component.choice#, Container#ql:jv'component.container#, Label#ql:jv'component.label#, List#ql:jv'component.list#, Scrollbar#ql:jv'component.scrollbar#, TextComponet#ql:jv'component.textcomponent#.

FUNCTION:
* A component that displays a single line of read-only text.
[API]
* A Label simply displays an unselectable line of text.
[Java Tutorial, 1996dec24]

Example#ql:jv'ex.label#.

jv'Component.List

name::
* McsEngl.jv'Component.List@cptIt,
* McsEngl.jv'List'awt@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.list#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.Component.

COCLASS:
Button#ql:jv'component.button#, Canvas#ql:jv'component.canvas#, Checkbox#ql:jv'component.checkbox#, Choice#ql:jv'component.choice#, Container#ql:jv'component.container#, Label#ql:jv'component.label#, List#ql:jv'component.list#, Scrollbar#ql:jv'component.scrollbar#, TextComponet#ql:jv'component.textcomponent#.

SUBCLASS:

FUNCTION:
A scrolling list of text items.

Example#ql:jv'ex.list#.

jv'List.EVENT

name::
* McsEngl.jv'List.EVENT@cptIt,

Lists are unusual in that they can fire two separate types of events. When a list item is selected or deselected, the List fires an ItemEvent. However, when the user double clicks on a list item, the List fires an ActionEvent. Therefore, you can register both an ItemListener to process selections and/or an ActionListener to process double clicks.
 public void addItemListener(ItemListener l)
 public void removeItemListener(ItemListener l)
 public void addActionListener(ActionListener l)
 public void removeActionListener(ActionListener l)
[Harold Course, 1997]

jv'Component.Scrollbar

name::
* McsEngl.jv'Component.Scrollbar@cptIt,
* McsEngl.jv'Scrollbar@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.scrollbar#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.Component.

COCLASS:
Button#ql:jv'component.button#, Canvas#ql:jv'component.canvas#, Checkbox#ql:jv'component.checkbox#, Choice#ql:jv'component.choice#, Container#ql:jv'component.container#, Label#ql:jv'component.label#, List#ql:jv'component.list#, Scrollbar#ql:jv'component.scrollbar#, TextComponet#ql:jv'component.textcomponent#.

FUNCTION:
Scrollbars have two uses:
- A scrollbar can act as a slider that the user manipulates to set a value.
- Scrollbars can help you display part of a region that's too large for the available display area. Scrollbars let the user choose exactly which part of the region is visible.
[Java Tutorial, 1996dec24]

Example#ql:jv'ex.scrollbar#.

jv'Component.TextComponent

name::
* McsEngl.jv'Component.TextComponent@cptIt,
* McsEngl.jv'TextComponent@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.textcomponent#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.Component.

COCLASS: (1997feb14 name "coclass" creation)
Button#ql:jv'component.button#, Canvas#ql:jv'component.canvas#, Checkbox#ql:jv'component.checkbox#, Choice#ql:jv'component.choice#, Container#ql:jv'component.container#, Label#ql:jv'component.label#, List#ql:jv'component.list#, Scrollbar#ql:jv'component.scrollbar#, TextComponet#ql:jv'component.textcomponent#.

SUBCLASS: TextArea#ql:jv'textarea#, TextField#ql:jv'textfield#

FUNCTION:
A TextComponent is a component that allows the editing of some text.
[API1.1]

jv'TextArea

name::
* McsEngl.jv'TextArea@cptIt,
* McsEngl.jv'TextComponent.TextArea@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.textarea#.

SUPERCLASS: java.awt.TextComponent.

COCLASS: TextArea, TextField.

SUBCLASS:

FUNCTION:
* A TextArea object is a multi-line area that displays text. It can be set to allow editing or read-only modes.
[API]
* The TextArea class simply provides an area to display or allow editing of several lines of text. As you can see from the applet on this page, text areas automatically include scrollbars.
[Java Tutorial, 1996dec24]


Example#ql:jv'ex.textarea#.

jv'TextField

name::
* McsEngl.jv'TextField@cptIt,
* McsEngl.jv'TextComponent.TextField@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.textfield#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.TextComponent.

COCLASS: TextArea, TextField.

SUBCLASS:

FUNCTION:
TextField is a component that allows the editing of a single line of text.

Example#ql:jv'ex.textfield#.

jv'LAYOUT'MANAGER

name::
* McsEngl.jv'LAYOUT'MANAGER@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:interface.layoutmanager#.

PACKAGE: java.awt.

FUNCTION:
** Defines the interface for classes that know how to layout Containers.
[API1.1]
** How Components#ql:jv'component# are "laid out" within a Container#ql:jv'container# is described by the LayoutManager class.
Since the LayoutManager class is abstract, we can not use it directly. You must sub-class it and provide your own functionality or use a derived class of LayoutManager(i.e BorderLayout, CardLayout, GridLayout, etc) already created for you.

How to create a Layout Manager

If you want to use a Container's default layout manager, you don't have to do a thing. The constructor for each Container creates a layout manager instance and initializes the Container to use it.

To use a non-default layout manager, you need to create an instance of the desired layout manager class and tell the Container to use it. Below is some typical code that does this. This code creates a CardLayout manager and sets it up as the layout manager for a Container.
aContainer.setLayout(new CardLayout());
[Java Tutorial, 1996dec24]

subgeneral#cptCore768#

There are man different layout schemes, but the ones pre-defined for us are:
BorderLayout (γύρω-γύρω και στη μεση το μεγαλύτερο)
CardLayout (διαφορετικά σε διαφορετικές στιγμές)
FlowLayout (στη σειρά σε άνισο μεγεθος)
GridLayout (ισομεγέθη σε γραμμές και στήλες)
GridBagLayout (το πιο περίπλοκο)

jv'BorderLayout

name::
* McsEngl.jv'BorderLayout@cptIt,
* McsEngl.jv'LAYOUTMANAGER.BORDERLAYOUT@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.borderlayout#.

SUPERCLASS: java.lang.Object

SUBCLASS:

FUNCTION:
BorderLayout is the default layout manager for all Windows, such as Frames and Dialogs. It uses five areas to hold components: north, south, east, west, and center. All extra space is placed in the center area.
[Java Tutorial, 1996dec24]

* This scheme lays out the Component in 5 ways
1.North - Northern part of the Container
2.South - Southern part of the Container
3.East - Eastern part of the Container
4.West - Western part of the Container
5.Center - Centered in the Container

* If you enlarge the window, you'll see that the center area gets as much of the newly available space as possible. The other areas expand only as much as necessary to keep all available space filled.

Example#ql:jv'ex.borderlayout#.

jv'CardLayout

name::
* McsEngl.jv'CardLayout@cptIt,
* McsEngl.jv'LAYOUTMANAGER.CardLayout@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.cardlayout#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
* A layout manager for a container that contains several 'cards'. ONLY one card is visible at a time, allowing you to flip through the cards.
* Allows for what Windows programmers have called for years "tabbed dialogs" or dynamic dialogs (now available on all versions of Netscape).


Example#ql:jv'ex.cardlayout#.

jv'FlowLayout

name::
* McsEngl.jv'FlowLayout@cptIt,
* McsEngl.jv'LAYOUTMANAGER.FlowLayout@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.flowlayout#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

COCLASS:

SUBCLASS:

FUNCTION:
** A FlowLayout arranges widgets from left to right until there's no more space left. Then it begins a row lower and moves from left to right again. Each component in a FlowLayout gets as much space as it needs and no more. A FlowLayout is useful for laying out buttons but not for much else.
[Harold Course 1997]
** Flow layout is used to layout buttons in a panel. It will arrange buttons left to right until no more buttons fit on the same line. Each line is centered.
[API]
** All Panels#ql:jv'panel# (including Applets) are initialized to use a FlowLayout.

jv'GridBagLayout

name::
* McsEngl.jv'GridBagLayout@cptIt,
* McsEngl.jv'LAYOUTMANAGER.GRIDBAGLAYOUT@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.gridbaglayout#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

FUNCTION:
** GridBagLayout is the most sophisticated, flexible layout manager the AWT provides. It aligns components by placing them within a grid of cells, allowing some components to span more than one cell. The rows in the grid aren't necessarily all the same height; similarly, grid columns can have different widths.
[Java Tutorial, 1996dec24]
** HTMLTable-ish style of layout
** If it bothers you (it bothers me) then just don't use it. Create your GUI on several panels and use the other layout managers as appropriate to get the exact effect you want. {According to Peter van der Linden}
[Harold course 1997spring]
** Ο αριθμός των στηλών και γραμμών είναι σχετική με τα οριζόμενα components. Πχ άν ένα έχει συντεταγμένες (9,4) αυτό σημαίνει ότι θα υπάρχουν τουλάχιστο 10=9+1 στήλες και 5=4+1 γραμμές.

GridBagConstraints

Οι constraints δηλώνουν τη θέση των components μέσα στον container. Δίνεις τιμές στις constraints και μετά προσθέτεις components. Τότε όλα τα component έχουν ίδιες τιμές στις constraints. Με αυτό τον τρόπο παίζει ρόλο η σειρά που προσθέτεις τα componets. Για να έχει διαφορετικές constraints ένα component αρκεί να μεταβάλεις πρίν ΜΟΝΟ την constraint που σε ενδιαφέρει.

anchor
** Used when the component is smaller than its display area to determine where (within the area) to place the component.
Valid values are
GridBagConstraints.CENTER (the default),
GridBagConstraints.NORTH,
GridBagConstraints.NORTHEAST,
GridBagConstraints.EAST,
GridBagConstraints.SOUTHEAST,
GridBagConstraints.SOUTH,
GridBagConstraints.SOUTHWEST,
GridBagConstraints.WEST, and
GridBagConstraints.NORTHWEST.

fill:
** GridBagConstraints fill field determines whether and how a Component is resized if the Component's display area is larger than the Component itself.
** - GridBagConstraints.NONE (the default),
- GridBagConstraints.HORIZONTAL (make the component wide enough to fill its display area horizontally, but don't change its height),
- GridBagConstraints.VERTICAL (make the component tall enough to fill its display area vertically, but don't change its width), and
- GridBagConstraints.BOTH (make the component fill its display area entirely).
** eg: c1.fill=GridBagConstraints.BOTH;

gridx, gridy:
** είναι οι συντεταγμένες από όπου ξεκινουν τα components
** The gridx and gridy fields specify the x and y coordinates of the cell at the upper left of the Component's display area. The upper-left-most cell has coordinates (0, 0). The mnemonic constant GridBagConstraints.RELATIVE specifies that the Component is placed immediately to the right of (gridx) or immediately below (gridy) the previous Component added to this container.
[Harold course 1997spring]

gridwidth, gridheight:
** δηλώνουν το πλάτος και το υψος που θα έχει κάθε component. Πόσα ΚΕΛΙΑ σε πλάτος και ύψος θα καταλαμβάνει το component.
** Use GridBagConstraints.REMAINDER to specify that the component be the last one in its row (for gridwidth) or column (for gridheight).
Use GridBagConstraints.RELATIVE to specify that the component be the next to last one in its row (for gridwidth) or column (for gridheight).
** eg: c.gridwidth = GridBagConstraints.REMAINDER; //end of row
c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last in row

ipadx, ipady
** Specifies the internal padding:
how much to add to the minimum size of the component.
The width of the component will be at least its minimum width plus ipadx*2 pixels (since the padding applies to both sides of the component).
Similarly, the height of the component will be at least the minimum height plus ipady*2 pixels.

insets
** Specifies the external padding of the component --the minimum amount of space between the component and the edges of its display area.

weightx, weighty
** δηλώνουν το σχετικό βάρος που θα έχουν. Δίνοντας τιμή 1, καταλαμβάνει όλο τον υπόλοιπο χώρο, όταν μεγαλώσουμε τον container.
** The weightx and weighty fields determine how the cells are distributed in the container when the total size of the cells is less han the size of the conatiner. With weights of zero (the default) the cells all have the minimum size they need, and everything clumps together in the center. All the extra space is pushed to the edges of the container.
[Harold course 1997spring]
** Used to determine how to distribute space; this is important for specifying resizing behavior.
Unless you specify a weight for at least one component in a row (weightx) and column (weighty), all the components clump together in the center of their container.
This is because when the weight is zero (the default), the GridBagLayout puts any extra space between its grid of cells and the edges of the container.
** EXAMPLE:
c.weightx = 1;

Example#ql:jv'ex.gridbagconstraints#.

jv'GridLayout

name::
* McsEngl.jv'GridLayout@cptIt,
* McsEngl.jv'GridLayout@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.gridlayout#.

PACKAGE: java.awt

SUPERCLASS:

COCLASS:

SUBCLASS:

FUNCTION:
* ΙΣΟΜΕΓΕΘΗ components σε γραμμές και στήλες. Τα μέρη εμφανίζονται με τη σειρά που τοποθετούνται στον κώδικα πχ
1 2 3
4 5 6
7
* Allows for the layout of Components in a grid -like fashion rather than "North" or "Center".

* GridLayout places components in a grid of cells. Each component takes all the available space within its cell, and each cell is exactly the same size. If you resize the GridLayout window, you'll see that the GridLayout changes the cell size so that the cells are as large as possible, given the space available to the container.

Example#ql:jv'ex.gridlayout#.

None

No layout, the Container will not attempt to reposition the Components during a update.

jv'MenuComponent

name::
* McsEngl.jv'MenuComponent@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.menucomponent#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

COCLASS:

SUBCLASS: MenuBar, MenuItem.

FUNCTION:
The super class of all menu related components.

Example#ql:jv'ex.menucomponent#.

jv'MenuItem

name::
* McsEngl.jv'MenuItem@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.menuitem#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.MenuComponent.

COCLASS: MenuBar, MenuItem.

FUNCTION:
* Menuitem είναι οι υποεντολές που έχει μια ΕΝΤΟΛΗ ενός προγράμματος.
* A String item that represents a choice in a menu.
[API]

Example#ql:jv'ex.menuitem#.

jv'CheckboxMenuItem

name::
* McsEngl.jv'CheckboxMenuItem@cptIt,

jv'Menu

name::
* McsEngl.jv'Menu@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.menu#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.MenuItem.

FUNCTION:
** είναι οι ΕΝΤΟΛΕΣ ενός προγράμματος.
** A Menu that is a component of a menu bar.
[API1.1]

Example#ql:jv'ex.menu#.

jv'MenuBar

name::
* McsEngl.jv'MenuBar@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.menubar#.

PACKAGE: java.awt.

SUPERCLASS: java.awt.MenuComponent.

COCLASS: MenuBar, MenuItem.

FUNCTION:
* A class that encapsulates the platform's concept of a menu bar bound to a Frame. In order to associate the MenuBar with an actual Frame, the Frame.setMenuBar() method should be called.
[API]


Example#ql:jv'ex.menubar#.

jv'Event (since 1.0)

name::
* McsEngl.jv'Event (since 1.0)@cptIt,
* McsEngl.jv'event'handling@cptIt,

NOTE: The Event class is obsolete and is available only for backwards compatilibility. It has been replaced by the AWTEvent#ql:jv'awtevent# class and its subclasses.
[api15]

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.event#.

PACKAGE: java.awt.

SUPERCLASS: java.lang.Object.

jv'EVENT'FUNCTION

name::
* McsEngl.jv'EVENT'FUNCTION@cptIt,

You may be wondering by now what good all these GUI components are if they don't actually do anything for us. Sure, we can click on a button and watch it go up and down or mark and unmark the checkboxes, but these aren't getting any work done for us. In order for these GUI components to do real work, we need to do event handling; that is, we need to capture actions such as a button being pressed or the user making a selection in a Choice, and execute some code based upon what has occurred.
[DSWgroup TUTORIAL, 1996]

In java-programs each virtual machine has one main AWT EVENT QUEUE.
Traditional procedural programs have single order of execution.
[E. HAROLD COURCE, 1997]

a "click" on a button is really three different events
- a mouseDown() event,
- a mouseUp() event, and
- an action() event.

jv'EVENT'EXAMPLE#ql:jv'ex.event.action#

name::
* McsEngl.jv'EVENT'EXAMPLE@cptIt,

jv'EVENT'EventQueue

name::
* McsEngl.jv'EVENT'EventQueue@cptIt,
* McsEngl.jv'EventQueue@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.eventqueue#.

EventQueue is a platform-independent class that queues events, both from the underlying peer classes and from trusted application classes. There is only one EventQueue for the system.
[API1.1]

CONSTRUCTOR INDEX:
** EventQueue():

METHOD INDEX:
** (inst) getNextEvent(): Remove an event from the queue and return it.
** (inst) peekEvent(): Return the first event without removing it.
** (inst) peekEvent(int):
** (inst) postEvent(java.awt.AWTEvent): Post a 1.1-style event to the EventQueue.

jv'EVENT'PROCESSING

name::
* McsEngl.jv'EVENT'PROCESSING@cptIt,

The Java runtime is responsible for handling the event queue. In particular it makes sure that each low-level event is directed to the proper component. You do not need to worry about deciding which component the event is meant for. The runtime handles this for you. In particular the runtime passes the event to the compononent's processEvent() method:
   protected void processEvent(AWTEvent e)
The processEvent() method determines the type of the event and passes it on to one of five other methods in the Component class:
   protected void processComponentEvent(ComponentEvent e)
   protected void processFocusEvent(FocusEvent e)
   protected void processKeyEvent(KeyEvent e)
   protected void processMouseEvent(MouseEvent e)
   protected void processMouseMotionEvent(MouseEvent e)
Each of these methods looks to see if any listener objects of the right type are registered for this component. If so, the event is passed to each of those listener objects in an unpredictable order.
Internally, these methods use a java.awt.AWTEventMulticaster object to track the registration of listeners with a component.
[API1.1]

jv'EVENT.HIGH'LEVEL

name::
* McsEngl.jv'EVENT.HIGH'LEVEL@cptIt,

High level or semantic events encapsulate the meaning of a user interface component. These include:
java.awt.event.ActionEvent: do a command
java.awt.event.AdjustmentEvent: value was adjusted
java.awt.event.ItemEvent: item state has changed
java.awt.event.TextEvent: the value of the text object changed
[Harold Course 1997]

jv'EVENT.ActionEvent

name::
* McsEngl.jv'EVENT.ActionEvent@cptIt,

For example, when the user
- clicks a button,
- doubleclicks a list item,
- chooses a menu item, or
- presses return in a text field,
an action event occurs.
[Tutorial {1997-04-28}]

Generated By:
Button, List, MenuItem, TextField

jv'EVENT.AdjustmentEvent

name::
* McsEngl.jv'EVENT.AdjustmentEvent@cptIt,

jv'EVENT.ItemEvent

name::
* McsEngl.jv'EVENT.ItemEvent@cptIt,

jv'EVENT.TextEvent

name::
* McsEngl.jv'EVENT.TextEvent@cptIt,

jv'EVENT.LOW'LEVEL

name::
* McsEngl.jv'EVENT.LOW'LEVEL@cptIt,

Low level events represent direct communication from the user. A Low level event is a key press or a key release, a mouse click, drag, move, or release, and so on.
These include:
java.awt.event.ComponentEvent: component resized, moved, etc.
java.awt.event.FocusEvent: component got focus, lost focus
java.awt.event.KeyEvent: key press, key release, etc.
java.awt.event.MouseEvent: mouse down, mouse move, mouse drag, mouse up
java.awt.event.ContainerEvent
java.awt.event.WindowEvent
[Harold Course 1997]

jv'EVENT.ComponentEvent

name::
* McsEngl.jv'EVENT.ComponentEvent@cptIt,

Component events let you track changes to a component's position, size, and visibility.
[Tutorial {1997-04-28}]

jv'EVENT.ContainerEvent

name::
* McsEngl.jv'EVENT.ContainerEvent@cptIt,

Container events let you know when any component is added to or removed from a particular container.
[Tutorial {1997-04-28}]

jv'EVENT.FocusEvent

name::
* McsEngl.jv'EVENT.FocusEvent@cptIt,

jv'EVENT.KeyEvent

name::
* McsEngl.jv'EVENT.KeyEvent@cptIt,

jv'EVENT.MouseEvent

name::
* McsEngl.jv'EVENT.MouseEvent@cptIt,

jv'EVENT.WindowEvent

name::
* McsEngl.jv'EVENT.WindowEvent@cptIt,

jv'PropertyChangeEvent

name::
* McsEngl.jv'PropertyChangeEvent@cptIt,

SOURCE: JavaSoft API11#ql::2nfoJAPI11.NFO:class.PropertyChangeEvent#.

PACKAGE: java.beans.

SUPERCLASS: java.util.EventObject.

jv'VARIABLE

name::
* McsEngl.jv'VARIABLE@cptIt,

_DEFINITION:
* Variables are typed storage locations. A variable of a primitive type holds a value of that exact primitive type. A variable of a class type can hold a null reference or a reference to an object whose type is that class type or any subclass of that class type. A variable of an interface type can hold a null reference or a reference to an instance of any class that implements the interface. A variable of an array type can hold a null reference or a reference to an array. A variable of class type Object can hold a null reference or a reference to any object, whether class instance or array.
[java spec 2.0, 2000]
* A variable is a storage location.
* A variable of a primitive-type#ql:"jv'type.primitive"# always holds a value of that exact type.
* A variable of a class-type#ql:jv'class# T can hold a null reference or a REFERENCE#ql:jv'reference# to an instance of class T or of any class that is a subclass of T.
* A variable of an interface-type#ql:"jv'type.interface"# can hold a null reference or a reference to any instance of any class that implements the interface.
* If T is a primitive type, then a variable of type "array of T" can hold a null reference or a reference to any array of type "array of T";
if T is a reference type, then a variable of type "array of T" can hold a null reference or a reference to any array of type "array of S" such that type S is assignable (§5.2) to type T.
* A variable of type-Object#ql:"jv'object'class"# can hold a null reference or a reference to any object, whether class instance or array.
[lang spec, 1996aug]

A variable is any location within a Java program that may be stored into. This includes not only class variables and instance variables, but also components of arrays.
[spec jvm 1, 1996sep]

The data associated with a class or object is stored in variables.
[TUTORIAL]

variable: An item of data named by an identifier. Each variable has a type, such as int or Object, and a scope.
[HJ DOC]

Variables Have Types, Objects Have Classes
[lang spec, 1996aug]

STORAGE:
Variables are kept in a main memory that is shared by all threads. Because it is impossible for one thread to access parameters or local variables of another thread, it does not matter whether parameters and local variables are thought of as residing in the shared main memory or in the working memory of the thread that owns them.
[spec jvm 1, 1996sep]

Example#ql:jv'ex.variable#.

jv'variable'DECLARATION

name::
* McsEngl.jv'variable'DECLARATION@cptIt,

A variable declaration always contains two components:
- the type of the variable and
- its name.
Also, the location of the variable declaration, that is, where the declaration appears in relation to other code elements, determines the scope of the variable.

jv'variable'INITIALIZATION

name::
* McsEngl.jv'variable'INITIALIZATION@cptIt,

Local variables and member variables can be initialized when they are declared. The character-counting program provides an initial value for count when declaring it:
int count = 0;
The value assigned to the variable must match the variable's type.

Method parameters and exception handler parameters cannot be initialized in this way. The value for a parameter is set by the caller.

Every variable in a Java program must have a value before its value is used
[lang spec, 1996aug]

RELATION TO C++:
One very direct way to do this is simply assign the value at the point you define the variable in the class (note you cannot do this in C++, although C++ novices always try).
[B. ECKEL, Thinking In Java, 1997aug18, 111]

jv'variable'LIFETIME

name::
* McsEngl.jv'variable'LIFETIME@cptIt,

In most programming languages, the concept of the lifetime of a variable occupies a significant portion of the programming effort. How long does the variable last? If you are supposed to destroy it, when should you? Confusion over variable lifetimes can lead to lots of bugs, and this section shows how Java greatly simplifies the issue by doing all the cleanup work for you.
[B. ECKEL, Thinking In Java, 1997aug18, 48]

jv'variable'NAME

name::
* McsEngl.jv'variable'NAME@cptIt,

NIKKAS-CONVENSION:
* xxx_yyy    menas the yyy is PART of xxx
* xxxYyy    means the yyy is SPECIFIC of xxx.
The same for methods.
[hknu_{2001-03-08}]

In Java, a variable name:
1.must be a legal Java identifier comprised of a series of Unicode characters. Unicode is a character coding system designed to support text written in diverse human languages. Unicode allows for the codification of up to 65,536 characters (currently 34,168 have been assigned). This allows you to use characters in your Java programs from various alphabets such as Japanese, Greek, Russian, Hebrew, and so on. This is important so that programmers can write code that is meaningful in their native languages.
2.must not be the same as a keyword or a boolean literal (true or false).
3.must not have the same name as another variable whose declaration appears in the same scope.

By convention, variables names begin with a lower case letter. If a variable name is comprised of more than one word, such as isVisible, the words are joined together and each word after the first begins with an upper case letter.

A member variable's name can be any legal Java identifier and by convention begins with a lower case letter (class names typically begin with upper case letters). You cannot declare more than one member variable with the same name in the same class. However, a member variable and a method can have the same name.

In fact, you can use all of the following as a variable name:
- the letters A-Z
- the numerals 0-9
- the special characters "$" (dollar sign) and
- "_" (underscore).
The only restriction is that you can't use a numeral as the first character of the variable name. Java variable names are case sensitive, so make sure that you use the appropriate case whenever you reference variable.
[DSWgroup TUTORIAL, 1996]

_USAGE:
A program refers to a variable's value by its name. For example, when the character-counting program wants to refer to the value of the count-variable, it simply uses the name count.

jv'variable'TYPE

name::
* McsEngl.jv'variable'TYPE@cptIt,

every variable and every expression has a type that is known at compile time. Types limit the values that a variable (§4.5) can hold or that an expression can produce, limit the operations supported on those values, and determine the meaning of the operations.
[lang spec, 1996aug]

All variables in the Java language must have a DATA TYPE. A variable's type determines the values that the variable can have and the operations that can be performed on it. For example, the declaration int count declares that count is an integer (int).
[JavaSoft tutorial 1997jul08]

Furthermore Java has strong typing. Variables must be declared, and variables do not change types when you aren't looking. Casts are strictly limited to casts between types that make sense. Thus you can cast an int to a long or a byte to a short but not a long to a boolean or an int to a String.
[Last Modified January 19, 1997 Copyright 1997 Elliotte Rusty Harold ]

jv'variable'SCOPE

name::
* McsEngl.jv'variable'SCOPE@cptIt,

A variable's scope
is the block of code within which the variable is accessible. Also, a variable's scope determines when the variable is created and destroyed. You establish the scope of a variable when you declare it. Scope places a variable into one of these four categories:
* member variable
* local variable
* method parameter
* exception handler parameter

The location of the variable declaration, that is, where the declaration appears in relation to other code elements, determines the scope of the variable.
[lang spec, 1996aug]

jv'variable'USE

name::
* McsEngl.jv'variable'USE@cptIt,

To use a class-variable#ql:jv'variable.class#, you use it directly from the name of the class using Jv's dot ('.') notation. For example, to reference the System's class variable out, you append the variable name (out) to the end of the class name (System) separated by a period ('.') like this:
System.out

jv'variable'VALUE

name::
* McsEngl.jv'variable'VALUE@cptIt,

_DEFINITION:
VALUE OF A VARIABLE is the value#ql:jv'value# of the type-of-the-variable#ql:jv'variable'type#.
[hknu_2002-04-30]

A variable always contains a value that is assignment compatible (§5.2) with its type.
A variable's value is changed
- by an assignment#ql:jv'operator.assignment# (§15.25) or
- by a prefix or postfix ++ (increment) or -- (decrement) operator.
[lang spec, 1996aug]

* A variable of a primitive-type#ql:"jv'type.primitive"# always HOLDS A VALUE of that exact type.
* A variable of a class-type#ql:jv'class# T can hold a null reference or a REFERENCE#ql:jv'reference# to an instance of class T or of any class that is a subclass of T.
* A variable of an interface-type#ql:"jv'type.interface"# can hold a null reference or a reference to any instance of any class that implements the interface.
* If T is a primitive type, then a variable of type "array of T" can hold a null reference or a reference to any array of type "array of T";
if T is a reference type, then a variable of type "array of T" can hold a null reference or a reference to any array of type "array of S" such that type S is assignable (§5.2) to type T.
* A variable of type-Object#ql:"jv'object'class"# can hold a null reference or a reference to any object, whether class instance or array.
[lang spec, 1996aug]

A program refers to a variable's value by its name. For example, when the character-counting program wants to refer to the value of the count-variable, it simply uses the name count.

SPECIFIC

* jv'variable.specific,

_SPECIFIC:

Scope places a variable into one of these four categories:
- member variable
- local variable
- method parameter
- exception handler parameter
[Tutorial Jul 1996]

final, transient, and volatile variables

Remember that these basic types are not objects. You can, however, convert the numeric types (double, float, int, and long) to objects of the Double, Float, Integer or Long classes from the java.lang.math package. You can also convert char and boolean variables to java.lang.Character or java.lang.Boolean objects.
[DSWgroup TUTORIAL, 1996]

jv'variable.LOCAL

name::
* McsEngl.jv'variable.LOCAL@cptIt,
* McsEngl.jv'LOCAL'VARIABLE@cptIt,
* McsEngl.jv'METHOD'VARIABLE@cptIt,

_DEFINITION:
Within the body-of-the-method#ql:jv'method'body# you can declare more variables for use within that method. These variables are local variables and live only while control remains within the method.
[Java Tutorial, 1996dec24]

Local variables
are declared
- within a method or
- within a block of code in a method.

jv'variable.MEMBER

name::
* McsEngl.jv'variable.MEMBER@cptIt,

see class-field#ql:jv'class'member'variable#.

jv'variable.INSTANCE

name::
* McsEngl.jv'variable.INSTANCE@cptIt,

see notstatic-field-of-a-class#ql:jv'field.nonstatic#.

jv'variable.CLASS

name::
* McsEngl.jv'variable.CLASS@cptIt,

see static-field-of-a-class#ql:jv'field.static#.

jv'variable.METHOD'PARAMETER

name::
* McsEngl.jv'variable.METHOD'PARAMETER@cptIt,

Method parameters
are formal arguments to methods and constructors and are used to pass values into methods and constructors.
The scope of a method parameter is the entire method or constructor for which it is a parameter.

jv'variable.CONSTRUCTOR'PARAMETER

name::
* McsEngl.jv'variable.CONSTRUCTOR'PARAMETER@cptIt,

Constructor parameters
name argument values passed to a constructor. For every parameter declared in a constructor declaration, a new parameter variable is created each time a class instance creation expression or explicit constructor invocation invokes that constructor.The new variable is initialized with the corresponding argument value from the creation expression or constructor invocation. The constructor parameter effectively ceases to exist when the execution of the body of the constructor is complete.
[lang spec, 1996aug]

jv'variable.EXCEPTION'HANDLER'PARAMETER

name::
* McsEngl.jv'variable.EXCEPTION'HANDLER'PARAMETER@cptIt,

Exception handler parameters
are similar to method parameters but are arguments to an exception handler rather than to a method or a constructor.

jv'variable.ARRAY'COMPONENT

name::
* McsEngl.jv'variable.ARRAY'COMPONENT@cptIt,

Array components
are unnamed variables that are created and initialized to default values whenever a new object that is an array is created. The array components effectively cease to exist when the array is no longer referenced.
[lang spec, 1996aug]

jv'variable.PRIMITIVE

name::
* McsEngl.jv'variable.PRIMITIVE@cptIt,
* McsEngl.jv'PRIMITIVE'VARIABLE@cptIt,

_DESCRIPTION:
A variable of a primitive type
always holds a value of that exact primitive type.
[lang spec, 1996aug]
===
That is, instead of creating the variable [REFERENCE VARIABLE] using new, an “automatic” variable [PRIMITIVE VARIABLE] is created that is not a handle. The variable holds the value, and it’s placed on the stack#ql:jv'stack# so it’s much more efficient.
[B. ECKEL, Thinking In Java, 1998jan]

jv'variable.REFERENCE

name::
* McsEngl.jv'variable.REFERENCE@cptIt,
* McsEngl.jv'REFERENCE'VARIABLE@cptIt,
* McsEngl.jv'HANDLE@cptIt,
* McsEngl.jv'POINTER@cptIt,

_DESCRIPTION:
A variable of reference type can hold either of the following:
- A null reference
- A reference to any object (§4.3) whose class (§4.5.5) is assignment compatible (§5.2) with the type of the variable
[lang spec, 1996aug]
===
you manipulate objects through handles
Each programming language has its own means of manipulating data. Sometimes the programmer must constantly be aware of what type of manipulation is going on: are you manipulating the object itself, directly, or are you dealing with some kind of indirect representation (a pointer in C or C++) that must be treated with a special syntax?
All this is simplified in Java: you treat everything as an object, so there is a single consistent syntax that you use everywhere. Although you treat everything as an object, the identifier#ql:jv'identifier# you manipulate is actually a “handle” (you may see this called a reference or even a pointer in other discussions of Java) to an object. You might imagine this scene as a television (the object) with your remote control as a handle. As long as you’re holding this handle, you have a connection to the television, but when someone says “change the channel” or “lower the volume” what you’re manipulating is the handle, which in turn modifies the object. If you want to move around the room and still control the television, you take the handle with you, not the whole television.
Also, you can have the remote control, but no television. That is, just because you have a handle doesn’t mean there’s necessarily an object connected to it. So if you want to hold a word or sentence, you create a String handle:
String s;
But here, you’ve created only the handle, not an object. If you decided to send a message to s at this point, you’ll get an error (at run-time) because s isn’t actually attached to anything (there’s no television). A safer practice, then, is always to initialize a handle when you create it:
String s = "asdf";
However, this uses a special case: strings can be initialized with quoted text. Normally you must use a more general type of initialization for objects.
[B. ECKEL, Thinking In Java, 1997aug18, 46]
===
An array-variable is a reference-variable. All array-variables require the same amount of storage, irrespective of the size of the array.

jv'VIRTUAL-MACHINE

name::
* McsEngl.jv'VIRTUAL-MACHINE@cptIt,
* McsEngl.java-virtual-machine@cptIt,
* McsEngl.jv'VM@cptIt,
* McsEngl.jv'java'virtual'machine@cptIt,
* McsEngl.jv'JVM@cptIt,
* McsEngl.jvm@cptIt,

_DEFINITION:
The Java Virtual Machine is an abstract computing machine. Like a real computing machine, it has
- an instruction set and
- uses various memory areas.
[spec jvm 1, 1996sep]

virtual machine: An abstract specification for a computing device that can be implemented in different ways, in software or hardware. You compile to the instruction set of a virtual machine much like you'd compile to the instruction set of a microprocessor. The Java Virtual Machine consists of
- a bytecode instruction set,
- a set of registers,
- a stack,
- a garbage-collected heap, and
- an area for storing methods.
[JavaSoft Glossary]

The Java Virtual Machine is an imaginary machine that is implemented by emulating it in software on a real machine.
Code for the Java Virtual Machine is stored in .class files, each of which contains the code for at most one public class.
[spec jvm 1995aug]

the Java virtual machine (VM), simulates a computer in software. The Java VM can run on existing computers and OSes (e.g., Windows and the Mac OS), or it can run on hardware designed only for Java.
[BYTE 1997jan]

How does Java manage to maintain its platform independence while nearly every other programming language requires you to make a special port to each new machine?
Java solves these compatibility problems by defining a Java Virtual Machine or JVM. After a piece of Java source code is written, it is not simply sent to each machine to execute. Instead, Java source code must first be compiled like most other high-level languages.
But instead of producing SPARC or i386 machine language, a Java compiler produces JVM byte-codes.
The JVM's job is to load these byte-codes, interpret their meaning, and handle input and output. It's as if your Pentium or PowerPC were emulating a whole new type of computer.
[DSWgroup TUTORIAL, 1996]

The Java Virtual Machine knows nothing of the Java programming language, only of a particular file format, the class file format.
[spec jvm 1, 1996sep]

jv'vm'EVOLUTION:
The Java VM is not the industry's first attempt to develop a platform-independent computing environment. But Java has gained widespread attention where other attempts have failed, in large part because the VM was distributed with browsers beginning with Navigator 2.0, thus giving Java unprecedented initial market penetration.
[PC MAG {1998-04-07}]

jv'vm'SPEED:
if the first generation Java VM were slow, the next generation (code-named HotSpot) should bring Java very close to native applications.
[Digital Cat 1998jan30]

jv'vm'STRUCTURE:
Like a real computing machine, it has
- an instruction set and
- uses various memory areas.
[spec jvm 1, 1996sep]

The Java Virtual Machine consists of
- a bytecode instruction set,
- a set of registers,
- a stack,
- a garbage-collected heap, and
- an area for storing methods.
[JavaSoft Glossary]

jv'vm'CLASS-FILE-FORMAT

name::
* McsEngl.jv'vm'CLASS-FILE-FORMAT@cptIt,
* McsEngl.jv'binary@cptIt,
* McsEngl.jv'vm'class'file@cptIt,
* McsEngl.jv'Class'file'format@cptIt,
* McsEngl.jv'compiled'code@cptIt,
* McsEngl.jv'BYTECODE@cptIt,

_DEFINITION:
Compiled code to be executed by the Java virtual machine is represented using a hardware- and operating system-independent binary format, typically (but not necessarily) stored in a file, known as the class file format. The class file format precisely defines the representation of a class or interface, including details such as byte ordering that might be taken for granted in a platform-specific object file format.
[spec jvm 2, 199]

bytecode: Machine-independent code generated by the Java(TM) compiler and executed by the Java interpreter.
[sun java glossary]

Each class file contains one Java type, either a class or an interface. Compliant Java Virtual Machine implementations must be capable of dealing with all class files that conform to the specification provided by this book.
A class file consists of a stream of 8-bit bytes. All 16-bit, 32-bit, and 64-bit quantities are constructed by reading in two, four, and eight consecutive 8- bit bytes, respectively. Multibyte data items are always stored in big-endian order, where the high bytes come first.
[spec jvm 1, 1996sep]

By the way, all numbers are stored in the class file in big-endian order, which means the higher order bytes come first. The very first byte of every class file, therefore, will be 0xCA.
[JavaWorld 1996jul]

_STRUCTURE:
A class file contains a single ClassFile structure:
ClassFile {
u4 magic#ql:jv'vm'class'file'magic'number#; // 4 bytes, supplies the magic number identifying the class file format CA FE BA BE

u2 minor_version#ql:jv'vm'class'file'version'numbers#;
u2 major_version;

u2 constant_pool_count#ql:jv'vm'class'file'constant'pool#; //gives the number of entries in the constant_pool table,
cp_info constant_pool[constant_pool_count-1];

u2 access_flags#ql:jv'vm'class'file'access'flags#; //modifiers used with class and interface declarations.
u2 this_class#ql:jv'vm'class'file'this'class#; //a valid index into the constant_pool table.
u2 super_class#ql:jv'vm'class'file'superclass#; //zero or must be a valid index into the constant_pool table.

u2 interfaces_count#ql:jv'vm'class'file'interfaces#;
u2 interfaces[interfaces_count]; //a valid index into the constant_pool table.

u2 fields_count#ql:jv'vm'class'file'fields#; //the number of field_info structures in the fields table.
field_info fields[fields_count];

u2 methods_count#ql:jv'vm'class'file'methods#;
method_info methods[methods_count];

u2 attributes_count#ql:jv'vm'class'file'attributes#;
attribute_info attributes[attributes_count]; //The only attribute defined is the SourceFile
}
types u1, u2, and u4 represent an unsigned one-, two-, or four-byte quantity, respectively.

In their order of appearance in the class file, the major components are:
- magic,
- version,
- constant pool,
- access flags,
- this class, 
- super class,
- interfaces,
- fields,
- methods, and
- attributes.
[JavaWorld 1996jul]

A class file contains
- Java Virtual Machine instructions (or bytecodes) and
- a symbol table,
- as well as other ancillary information.
[spec jvm 1, 1996sep]

jv'vm'class'file'Magic'Number

name::
* McsEngl.jv'vm'class'file'Magic'Number@cptIt,

The first four bytes of every class file are always 0xCAFEBABE. This magic number makes Java class files easier to identify, because the odds are slim that non-class files would start with the same initial four bytes. The number is called magic because it can be pulled out of a hat by the file format designers. The only requirement is that it is not already being used by another file format that may be encountered in the real world. According to Patrick Naughton, a key member of the original Java team, the magic number was chosen "long before the name Java was ever uttered in reference to this language. We were looking for something fun, unique, and easy to remember. It is only a coincidence that OxCAFEBABE, an oblique reference to the cute baristas at Peet's Coffee, was foreshadowing for the name Java."
[JavaWorld 1996jul]

jv'vm'class'file'VERSION'NUMBERS

name::
* McsEngl.jv'vm'class'file'VERSION'NUMBERS@cptIt,

The second four bytes of the class file contain the major and minor version numbers. These numbers identify the version of the class file format to which a particular class file adheres and allow JVMs to verify that the class file is loadable. Every JVM has a maximum version it can load, and JVMs will reject class files with later versions.
[JavaWorld 1996jul]

jv'vm'class'file'CONSTANT'POOL

name::
* McsEngl.jv'vm'class'file'CONSTANT'POOL@cptIt,
* McsEngl.jv'constant'pool'table'of'class'file@cptIt,
* McsEngl.jv'constant'pool'array'of'class'file@cptIt,

_DEFINITION:
The class file stores constants associated with its class or interface in the constant pool.
Some constants that may be seen frolicking in the pool are
- literal strings,
- final variable values,
- class names,
- interface names,
- variable names and types, and
- method names and signatures. A method signature is its return type and set of argument types.
The constant pool is organized as an array of variable-length elements.
Each constant occupies one element in the array.
Throughout the class file, constants are referred to by the integer index that indicates their position in the array. The initial constant has an index of one, the second constant has an index of two, etc. The constant pool array is preceded by its array size, so JVMs will know how many constants to expect when loading the class file.
[JavaWorld 1996jul]

A constant pool is a per-class or per-interface runtime representation of the constant_pool table in a Java class file.
It contains several kinds of constants, ranging from numeric literals known at compile time to method and field references that must be resolved at run time.
The constant pool serves a function similar to that of a symbol table for a conventional programming language, although it contains a wider range of data than a typical symbol table.
Each constant pool is allocated from the Java-Virtual-Machine’s-method-area#ql:jv'vm'method'area#.

The constant pool for a class or interface is created when a Java class file for the class or interface is successfully loaded by a Java Virtual Machine.
[spec jvm 1, 1996sep]

The constant_pool is a table of variable-length structures representing various
- string constants,
- class names,
- field names, and
- other constants that are referred to within the ClassFile structure and its substructures.

CONSTANT-POOL-ELEMENT (ENTRY):
All constant_pool table entries have the following general format:
cp_info {
u1 tag;
u1 info[];
}
Each item in the constant_pool table must begin with a 1-byte tag indicating the kind of cp_info entry. The contents of the info array varies with the value of tag.
The valid tags and their values are listed in Table 4.2. Each tag byte must be followed by two or more bytes giving information about the specific constant. The format of the additional information varies with the tag value.
[spec jvm 1, 1996sep]

Each element of the constant pool starts with a one-byte tag specifying the type of constant at that position in the array. Once a JVM grabs and interprets this tag, it knows what follows the tag. For example, if a tag indicates the constant is a string, the JVM expects the next two bytes to be the string length. Following this two-byte length, the JVM expects to find length number of bytes, which make up the characters of the string.
In the remainder of the article I'll sometimes refer to the nth element of the constant pool array as constant_pool[n]. This makes sense to the extent the constant pool is organized like an array, but bear in mind that these elements have different sizes and types and that the first element has an index of one.
[JavaWorld 1996jul]

jv'vm'Constant'pool'tags:
CONSTANT_Class      7
CONSTANT_Fieldref    9
CONSTANT_Methodref    10
CONSTANT_InterfaceMethodref  11
CONSTANT_String      8
CONSTANT_Integer    3
CONSTANT_Float      4
CONSTANT_Long      5
CONSTANT_Double    6
CONSTANT_NameAndType  12
CONSTANT_Utf8      1

jv'vm'DESCRIPTOR:
A descriptor is a string representing the type of a field or method.
[spec jvm 1, 1996sep]

IMPLEMENTATION#ql:jv'vm'runtime'constant'pool#

jv'vm'class'file'ACCESS'FLAGS

name::
* McsEngl.jv'vm'class'file'ACCESS'FLAGS@cptIt,

The first two bytes after the constant pool, the access flags, indicate
- whether or not this file defines a class or an interface,
- whether the class or interface is public or abstract,
- and (if it's a class and not an interface) whether the class is final.
[JavaWorld 1996jul]

jv'vm'class'file'THIS'CLASS

name::
* McsEngl.jv'vm'class'file'THIS'CLASS@cptIt,

The next two bytes, the this class component, are an index into the constant pool array. The constant referred to by this class, constant_pool[this_class], has two parts, a one-byte tag and a two-byte name index. The tag will equal CONSTANT_Class, a value that indicates this element contains information about a class or interface. Constant_pool[name_index] is a string constant containing the name of the class or interface.
The this class component provides a glimpse of how the constant pool is used. This class itself is just an index into the constant pool. When a JVM looks up constant_pool[this_class], it finds an element that identifies itself as a CONSTANT_Class with its tag. The JVM knows CONSTANT_Class elements always have a two-byte index into the constant pool, called name index, following their one-byte tag. So it looks up constant_pool[name_index] to get the string containing the name of the class or interface.
[JavaWorld 1996jul]

jv'vm'class'file'SUPERCLASS

name::
* McsEngl.jv'vm'class'file'SUPERCLASS@cptIt,

Following the this class component is the super class component, another two-byte index into the constant pool. Constant_pool[super_class] is a CONSTANT_Class element that points to the name of the super class from which this class descends.
[JavaWorld 1996jul]

jv'vm'class'file'INTERFACES

name::
* McsEngl.jv'vm'class'file'INTERFACES@cptIt,

The interfaces component starts with a two-byte count of the number of interfaces implemented by the class (or interface) defined in the file. Immediately following is an array that contains one index into the constant pool for each interface implemented by the class. Each interface is represented by a CONSTANT_Class element in the constant pool that points to the name of the interface.
[JavaWorld 1996jul]

jv'vm'class'file'FIELDS

name::
* McsEngl.jv'vm'class'file'FIELDS@cptIt,

The fields component starts with a two-byte count of the number of fields in this class or interface.
A field is an instance or class variable of the class or interface. Following the count is an array of variable-length structures, one for each field. Each structure reveals information about one field such as the field's name, type, and, if it is a final variable, its constant value. Some information is contained in the structure itself, and some is contained in constant pool locations pointed to by the structure.
The only fields that appear in the list are those that were declared by the class or interface defined in the file; no fields inherited from super classes or superinterfaces appear in the list.
[JavaWorld 1996jul]

jv'vm'class'file'METHODS

name::
* McsEngl.jv'vm'class'file'METHODS@cptIt,

The methods component starts with a two-byte count of the number of methods in the class or interface. This count includes only those methods that are explicitly defined by this class, not any methods that may be inherited from superclasses. Following the method count are the methods themselves.
The structure for each method contains several pieces of information about the method, including
- the method descriptor (its return type and argument list),
- the number of stack words required for the method's local variables,
- the maximum number of stack words required for the method's operand stack,
- a table of exceptions caught by the method,
- the bytecode sequence, and
- a line number table.
[JavaWorld 1996jul]

jv'vm'class'file'ATTRIBUTES

name::
* McsEngl.jv'vm'class'file'ATTRIBUTES@cptIt,

Bringing up the rear are the attributes, which give general information about the particular class or interface defined by the file. The attributes section has a two-byte count of the number of attributes, followed by the attributes themselves. For example, one attribute is the source code attribute; it reveals the name of the source file from which this class file was compiled. JVMs will silently ignore any attributes they don't recognize.
[JavaWorld 1996jul]

jv'vm'DATA-TYPE

name::
* McsEngl.jv'vm'DATA-TYPE@cptIt,

Like the Java language, the Java Virtual Machine operates on two kinds of types: primitive types and reference types.
There are, correspondingly, two kinds of values that can be stored in variables, passed as arguments, returned by methods, and operated upon: primitive values and reference values.
[spec jvm 1, 1996sep]

Primitive Types and Values

The primitive data types supported by the Java Virtual Machine are the numeric types and the returnAddress type.
[spec jvm 1, 1996sep]

jv'vm'returnAddress, jv'returnAddress'of'jvm,
The values of the returnAddress type are pointers to the opcodes of Java Virtual Machine instructions. Only the returnAddress type is not a Java language type.
[spec jvm 1, 1996sep]

Reference Types and Values

There are three kinds of reference types: class types, interface types, and array types, whose values are references to dynamically created class instances, arrays, or class instances or arrays that implement interfaces. A reference value may also be the special null reference, a reference to no object, which will be denoted here by null. The null reference initially has no runtime type, but may be cast to any type
[spec jvm 1, 1996sep]

jv'vm'LANGUAGES-SUPORTED

name::
* McsEngl.jv'vm'LANGUAGES-SUPORTED@cptIt,

While there have been a number of efforts aimed at compiling other languages to the Java Virtual Machine, version 1.0.2 of the Java Virtual Machine was not designed to support a wide range of languages.
[spec jvm 1, 1996sep]

jv'vm'MEMORY-AREA

name::
* McsEngl.jv'vm'MEMORY-AREA@cptIt,
* McsEngl.jv'vm'DATA-AREA@cptIt,
* McsEngl.jv'vm'runtime-data-area@cptIt,

_DEFINITION:
** The Java virtual machine defines various runtime data areas that are used during execution of a program. Some of these data areas are created on Java virtual machine start-up and are destroyed only when the Java virtual machine exits. Other data areas are per thread. Per-thread data areas are created when a thread is created and destroyed when the thread exits.
[spec jvm 2, 1999]
===
** MEMORY-AREA is the part of RAM a jvm uses upon program execution.
[hknu_2002-05-01]
===
Standard Java supplies the user with three kinds of “storage” for data: static, stack, and heap.
The lifetimes of data differ in the three kinds of storage:
- static data exists from process start to process end;
- stack data exists so long as the invocation of the method in which it is declared is “active”;
- heap objects exist from the time they are explicitly created until the end of the process or until they are “collected” by the Java garbage collector, whichever comes first.
===
It’s useful to be able to visualize some aspects of the way things are laid out while the program is running, in particular how memory is arranged. There are 6 different places to store data:

1. Registers. This is the fastest of all storage because it exists in a different place than the other storage: inside the processor itself. However, the number of registers is severely limited and so registers are allocated by the compiler according to its needs and you even exist.

2. The stack. This lives in the general RAM (Random-access memory) area, but has direct support from the processor via its stack pointer. The stack pointer is moved down to create new memory and moved up to release that memory. This is an extremely fast and efficient way to allocate storage, slower only than registers. The Java compiler must know, while it is creating the program, the exact size and lifetime of all the data that is stored on the stack, because it must generate the code to move the stack pointer up and down. This constraint places limits on the flexibility of your programs, so while some Java storage exists on the stack – in particular, object handles – Java objects are not placed on the stack.

3. The heap. This is a general-purpose pool of memory (also in the RAM area) where all Java objects live. The nice thing about the heap is that, unlike the stack, the compiler doesn’t need to know how much storage it needs to allocate from the heap or how long that storage must stay on the heap. Thus there’s a great deal of flexibility in using storage on the heap. Whenever you need to create an object, you just write the code to create it using new and the storage is allocated on the heap when that code is executed. And of course there’s a price you pay for this flexibility: it takes more time to allocate heap storage.

4. Static storage. “Static” is used here in the sense of “in a fixed location” (although it’s also in RAM). Static storage contains data that is available for the entire time a program is running. You can use the static keyword to specify that a particular element of an object is static, but Java objects themselves are never placed in static storage.

5. Constant storage. Constant values are often placed directly in the program code itself, which is safe since they can never change. Sometimes constants are cordoned off by themselves so they can be optionally placed in ROM – read-only memory.

6. Non-RAM storage. If data lives completely outside a program it can exist while the program is not running, outside the control of the program. The two primary examples of this are streamed objects where objects are turned into streams of bytes, generally to be sent to another machine, and persistent objects where the objects are placed on disk so they will hold their state even when the program is terminated. The trick with these types of storage is turning the objects into something that can exist on the other medium, and yet can be resurrected into a regular RAM-based object when necessary. Java 1.1 provides support for lightweight persistence, and future versions of Java may provide more complete solutions for persistence.
[B. ECKEL, Thinking In Java, 1997aug18, 46]

jv'vm'FRAME

name::
* McsEngl.jv'vm'FRAME@cptIt,
* McsEngl.jv'frame'of'jvm@cptIt,

_DEFINITION:
A new frame is created each time a Java-method#ql:jv'method# is invoked. A frame is destroyed when its method completes, whether that completion is normal or abnormal (by throwing an exception).
Frames are allocated from the Java-stack#ql:jv'vm'stack# (§3.5.2) of the thread creating the frame.

Each frame has
- its own set of local variables (§3.6.1) and
- its own operand stack (§3.6.2).
The memory space for these structures can be allocated simultaneously, since the sizes of the local variable area and operand stack are known at compile time and the size of the frame data structure depends only upon the implementation of the Java Virtual Machine.
[spec jvm 1, 1996sep]

WHOLE (allocation):
** Frames are allocated from the Java-stack#ql:jv'vm'stack# (§3.5.2) of the thread creating the frame.
[spec jvm 1, 1996sep]

** Because the Java virtual machine stack is never manipulated directly except to push and pop frames, frames may be heap allocated.
[spec jvm 2, 1999]

_USAGE:
A Java Virtual Machine frame is used to
- store data and partial results, as well as
- to perform dynamic linking,
- to return values for methods, and
- to dispatch exceptions.
[spec jvm 1, 1996sep]

jv'vm'LOCAL'VARIABLE

name::
* McsEngl.jv'vm'LOCAL'VARIABLE@cptIt,

On each Java method invocation, the Java Virtual Machine allocates a Java frame,
which contains an array of words known as its local variables.
[spec jvm 1, 1996sep]

jv'vm'OPERAND'STACK

name::
* McsEngl.jv'vm'OPERAND'STACK@cptIt,
* McsEngl.jv'operand'stack'of'jvm@cptIt,

_DEFINITION:
On each Java method invocation, the Java Virtual Machine allocates a Java frame, which contains an operand stack.
Most Java Virtual Machine instructions take values from the operand stack of the current frame, operate on them, and return results to that same operand stack. The operand stack is also used to pass arguments to methods and receive method results.
[spec jvm 1, 1996sep]

Each frame (§3.6) contains a last-in-first-out (LIFO) stack known as its operand stack. The maximum depth of the operand stack of a frame is determined at compile time and is supplied along with the code for the method associated with the frame (§4.7.3).
[spec jvm 2, 1999]

The operand stack is a 32 bit wide FIFO stack used to store arguments and return values of many of the virtual machine instructions. For example, the iadd instruction adds two integers together. It expects that the integers to be added are the top two words on the operand stack, pushed there by previous instructions. Both integers are popped from the stack, added, and their sum pushed back onto the operand stack. Subcomputations may be nested on the operand stack, and result in a single operand that can be used by the nesting computation.
[spec jvm 1995mar]

jv'vm'HEAP

name::
* McsEngl.jv'vm'HEAP@cptIt,
* McsEngl.jv'VM'GARBAGE'COLLECTED'Heap@cptIt,
* McsEngl.jv'HEAP@cptIt,

_DEFINITION:
The Java Virtual Machine has a heap that is shared among all threads.
The heap is the runtime data area from which memory for all class instances and arrays is allocated.
The Java heap is created on virtual machine start-up.
[spec jvm 1, 1996sep]

If a computation requires more Java heap than can be made available by the automatic storage management system, the Java Virtual Machine throws an OutOfMemoryError.
Sun’s JDK 1.0.2 implementation of the Java Virtual Machine dynamically expands its Java heap as required by the computation, but never contracts its heap. Its initial and maximum sizes may be specified on virtual machine start-up using the “-ms” and “-mx” flags, respectively.
[spec jvm 1, 1996sep]

The Java heap is the runtime data area from which class instances (objects) are allocated. The Java language is designed to be garbage collected -- it does not give the programmer the ability to deallocate objects explicitly. Java does not presuppose any particular kind of garbage collection; various algorithms may be used depending on system requirements.
[spec jvm 1995aug]

3. The heap. This is a general-purpose pool of memory (also in the RAM area) where all Java objects live. The nice thing about the heap is that, unlike the stack, the compiler doesn’t need to know how much storage it needs to allocate from the heap or how long that storage must stay on the heap. Thus there’s a great deal of flexibility in using storage on the heap. Whenever you need to create an object, you just write the code to create it using new and the storage is allocated on the heap when that code is executed. And of course there’s a price you pay for this flexibility: it takes more time to allocate heap storage.
[B. ECKEL, Thinking In Java, 1997aug18, 46]

CREATION:
The Java heap is created on virtual machine start-up.
[spec jvm 1, 1996sep]

SIZE:
Sun's implementations of the Java virtual machine in JDK releases 1.0.2 and 1.1, and the Java 2 SDK, Standard Edition, v1.2, dynamically expand the heap as required by the computation, but never contract the heap. The initial and maximum sizes may be specified on virtual machine start-up using the "-ms" and "-mx" flags, respectively.
[spec jvm 2, 1999]

jv'vm'METHOD'AREA

name::
* McsEngl.jv'vm'METHOD'AREA@cptIt,
* McsEngl.jv'Method'Area'of'jvm@cptIt,

_DEFINITION:
** The Java virtual machine has a method area that is shared among all Java virtual machine threads. The method area is analogous to the storage area for compiled code of a conventional language or analogous to the "text" segment in a UNIX process. It stores per-class structures such as the runtime constant pool, field and method data, and the code for methods and constructors, including the special methods (§3.9) used in class and instance initialization and interface type initialization. The method area is created on virtual machine start-up. Although the method area is logically part of the heap, simple implementations may choose not to either garbage collect or compact it. This version of the Java virtual machine specification does not mandate the location of the method area or the policies used to manage compiled code. The method area may be of a fixed size or may be expanded as required by the computation and may be contracted if a larger method area becomes unnecessary. The memory for the method area does not need to be contiguous.
A Java virtual machine implementation may provide the programmer or the user control over the initial size of the method area, as well as, in the case of a varying-size method area, control over the maximum and minimum method area size.
The following exceptional condition is associated with the method area:
If memory in the method area cannot be made available to satisfy an allocation request, the Java virtual machine throws an OutOfMemoryError.
[spec jvm 2, 1999]

The Java Virtual Machine has a method area that is shared among all threads.
The method area is created on virtual machine start-up.
Although the method area is logically part of the garbage-collected-heap#ql:jv'vm'heap#, simple implementations may choose to neither garbage collect nor compact it.
[spec jvm 1, 1996sep]

The method area is analogous to the store for compiled code in conventional languages or the text segment in a UNIX process. It stores method code (compiled Java code) and symbol tables. In the current Java implementation, method code is not part of the garbage-collected heap, although this is planned for a future release.
[spec jvm 1995aug]

jv'vm'RUNTIME'CONSTANT'POOL

name::
* McsEngl.jv'vm'RUNTIME'CONSTANT'POOL@cptIt,
* McsEngl.jv'runtime'constant'pool@cptIt,

_DEFINITION:
** A runtime constant pool is a per-class or per-interface runtime representation of the constant_pool-table#ql:jv'vm'class'file'constant'pool# in a class file (§4.4). It contains several kinds of constants, ranging from numeric literals known at compile time to method and field references that must be resolved at run time. The runtime constant pool serves a function similar to that of a symbol table for a conventional programming language, although it contains a wider range of data than a typical symbol table. Each runtime constant pool is allocated from the Java virtual machine's method area (§3.5.4). The runtime constant pool for a class or interface is constructed when the class or interface is created (§5.3) by the Java virtual machine.
The following exceptional condition is associated with the construction of the runtime constant pool for a class or interface:
When creating a class or interface, if the construction of the runtime constant pool requires more memory than can be made available in the method area of the Java virtual machine, the Java virtual machine throws an OutOfMemoryError.
[spec jvm 2, 1999]
** Each runtime constant pool is allocated from the Java virtual machine's method area (§3.5.4). The runtime constant pool for a class or interface is constructed when the class or interface is created (§5.3) by the Java virtual machine.

jv'vm'REGISTER

name::
* McsEngl.jv'vm'REGISTER@cptIt,
* McsEngl.jv'Register'of'vm@cptIt,

_DEFINITION:
The registers of the Java virtual machine maintain machine state during its operation. They are directly analogous to the registers of a microprocessor. The Java virtual machine's registers include:
· pc -- the Java program counter
· optop -- a pointer to the top of the Java operand stack
· frame -- a pointer to the execution environment of the currently executing method
· vars -- a pointer to the 0th local variable of the currently executing method

The Java virtual machine defines each of its registers to be 32 bits wide. Some Java implementations may not use all of these registers: e.g. a compiler from Java source to native code does not maintain pc.
The Java virtual machine is stack-based, so it does not define or use registers for passing or receiving parameters. This is again a conscious decision in favor of instruction set simplicity and compactness, and efficient implementation on host processors without many registers (e.g. Intel 486).
[spec jvm 1995mar]

Each method has memory space allocated for it to hold:
* a set of local variables, referenced by a vars register,
* an operand stack, referenced by an optop register, and
* a execution environment structure, referenced by a frame register.
All of this space can be allocated at once, since the size of the local variables and operand stack are known at compile time, and the size of the execution environment structure is well-known to the interpreter.
[spec jvm 1995aug]

jv'vm'register.PC

name::
* McsEngl.jv'vm'register.PC@cptIt,
* McsEngl.jv'vm'pc'register@cptIt,
* McsEngl.jv'vm'program'counter'register@cptIt,

_DEFINITION:
A Java Virtual Machine can support many threads of execution at once (§2.17).
Each Java Virtual Machine thread has its own pc (program counter) register. At any point, each Java Virtual Machine thread is executing the code of a single method, the current method (§3.6) for that thread.
If that method is not native, the pc register contains the address of the Java Virtual Machine instruction currently being executed. If the method currently being executed by the thread is native, the value of the Java Virtual Machine’s pc register is undefined. The Java Virtual Machine’s pc register is one word wide, the width guaranteed to hold a returnAddress or a native pointer on the specific platform.
[spec jvm 1, 1996sep]

At any point the virtual machine is executing the code of a single method, and the pc register contains the address of the next bytecode to be executed.
[spec jvm 1995aug]

WIDTH:
The Java virtual machine's pc register is wide enough to hold a returnAddress or a native pointer on the specific platform.
[spec jvm 2, 1999]

jv'vm'STACK

name::
* McsEngl.jv'vm'STACK@cptIt,
* McsEngl.jv'STACK'of'jvm@cptIt,

=== _NOTES: In the first edition of this specification, the Java virtual machine stack was known as the Java stack.
[spec jvm 2, 1999]

_DEFINITION:
Each Java Virtual Machine thread has a private Java stack, created at the same time as the thread. A Java stack stores Java Virtual Machine frames#ql:jv'vm'frame#.
[spec jvm 1, 1996sep]

The Java virtual machine is a stack-based machine, and the JAVA-STACK is used to
- supply parameters for operations,
- receive return values,
- pass parameters to methods, etc.
An Java stack frame is Jv's equivalent to the stack frame of a conventional programming language. It implements the state associated with a single method invocation. Frames for nested method calls are stacked on the method invocation stack.

Each Java stack frame consists of three components, although at any given time one or more of the components may be empty:
· the local variables
· the execution environment
· the operand stack
[spec jvm 1995mar]

2. The stack. This lives in the general RAM (Random-access memory) area, but has direct support from the processor via its stack pointer. The stack pointer is moved down to create new memory and moved up to release that memory. This is an extremely fast and efficient way to allocate storage, slower only than registers. The Java compiler must know, while it is creating the program, the exact size and lifetime of all the data that is stored on the stack, because it must generate the code to move the stack pointer up and down. This constraint places limits on the flexibility of your programs, so while some Java storage exists on the stack – in particular, object handles – Java objects are not placed on the stack.
[B. ECKEL, Thinking In Java, 1997aug18, 46]

SIBLINGS:
The Java Virtual Machine consists of
- a bytecode instruction set,
- a set of registers,
- a stack,
- a garbage-collected heap, and
- an area for storing methods.
[JavaSoft Glossary]

jv'vm'EXECUTION'ENVIRONMENT

name::
* McsEngl.jv'vm'EXECUTION'ENVIRONMENT@cptIt,

The information contained in the execution environment is used to do dynamic linking, normal method returns, and exception propagation.
[spec jvm 1995aug]

jv'vm'DYNAMIC'LINKING

name::
* McsEngl.jv'vm'DYNAMIC'LINKING@cptIt,

The execution environment contains references to the interpreter symbol table for the current method and current class, in support of dynamic linking of the method code. The class file code for a method refers to methods to be called and variables to be accessed symbolically.
Dynamic linking translates these symbolic method calls into actual method calls, loading classes as necessary to resolve as-yet-undefined symbols, and translates variable accesses into appropriate offsets in storage structures associated with the runtime location of these variables.

This late binding of the methods and variables makes changes in other classes that a method uses less likely to break this code.
[spec jvm 1995aug]

jv'vm'EXCEPTION'AND'ERROR'PROPAGATION

name::
* McsEngl.jv'vm'EXCEPTION'AND'ERROR'PROPAGATION@cptIt,

An exceptional condition, known in Java as an Error or Exception, which are subclasses of Throwable, may arise in a program because of:
 a dynamic linkage failure, such as a failure to find a needed class file,
 a run-time error, such as a reference through a null pointer,
 an asynchronous event, such as is thrown by Thread.stop, from another thread,
 the program using a throw statement.
[spec jvm 1995aug]

jv'vm'NORMAL'METHOD'RETURNS

name::
* McsEngl.jv'vm'NORMAL'METHOD'RETURNS@cptIt,

If execution of the current method completes normally, then a value is returned to the calling method. This occurs when the calling method executes a return instruction appropriate to the return type.

The execution environment is used in this case to restore the registers of the caller, with the program counter of the caller appropriately incremented to skip the method call instruction. Execution then continues in the calling method’s execution environment.
[spec jvm 1995aug]

jv'vm'LOCAL'VARIABLES'COMPONENT

name::
* McsEngl.jv'vm'LOCAL'VARIABLES'COMPONENT@cptIt,

Each Java method uses a fixed-sized set of local variables. They are addressed as word offsets from the vars register. Local variables are all 32 bits wide.

Long integers and double precision floats are considered to take up two local variables but are addressed by the index of the first local variable. (For example, a local variable with index n containing a double precision float actually occupies storage at indices n and n+1.) The virtual machine specification does not require 64-bit values in local variables to be 64-bit aligned. Implementors are free to decide the appropriate way to divide long integers and double precision floats into two words.

Instructions are provided to load the values of local variables onto the operand stack and store values from the operand stack into local variables.
[spec jvm 1995aug]

jv'vm'NATIVE-METHOD-STACK

name::
* McsEngl.jv'vm'NATIVE-METHOD-STACK@cptIt,

An implementation of the Java Virtual Machine may use conventional stacks, colloquially called “C stacks,” to support native methods, methods written in languages other than Java. A native method stack may also be used to implement an emulator for the Java Virtual Machine’s instruction set in a language such as C.
[spec jvm 1, 1996sep]

jv vm IMPLEMENTATION#ql:jv'runtime'interpreter#

jv'vm'INSTRUCTION

name::
* McsEngl.jv'vm'INSTRUCTION@cptIt,
* McsEngl.jv'Instruction'of'vm@cptIt,
* McsEngl.jv'bytecode@cptIt,

=== _NOTES: Usually as bytecode mean the binary class file format and not only the instructions inside it.

_DEFINITION:
A Java Virtual Machine instruction consists of
- an opcode specifying the operation to be performed,
- followed by zero or more operands embodying values to be operated upon.
[spec jvm 1, 1996sep]

The Java instruction set is the assembly-language equivalent of an Java application. Java applications are compiled down to the Java instruction set just like C applications are compiled down to the instruction set of a microprocessor.
An instruction of the Java instruction set consists of
- an opcode specifying the operation to be performed, and
- zero or more operands supplying parameters or data that will be used by the operation. Many instructions have no operands and consist only of an opcode.

The opcodes of the Java instruction set are always one byte long, while operands may be of various sizes. When operands are more than one byte long they are stored in "big-endian" order -- high order byte first. For example, a 16-bit parameter is stored as two bytes whose value is: first_byte * 256 + second_byte
Operands that are larger than 8 bits are typically constructed from byte-sized quantities at runtime -- the instruction stream is only byte-aligned and alignment of larger quantities is not guaranteed. (An exception to this rule are the tableswitch and lo okupswitch instructions.) These decisions keep the virtual machine code for a compiled Java program compact and reflect a conscious bias in favor of compactness possibly at some cost in performance.
[spec jvm 1995mar]

_WHOLE:
The Java Virtual Machine consists of
- a bytecode instruction set,
- a set of registers,
- a stack,
- a garbage-collected heap, and
- an area for storing methods.
[JavaSoft Glossary]

MNEMONIC:
The instruction's mnemonic is its name.
[spec jvm 2, 1999]

jv'vm'instr.Arithmetic

name::
* McsEngl.jv'vm'instr.Arithmetic@cptIt,

The arithmetic instructions compute a result that is typically a function of two values on the operand stack, pushing the result back on the operand stack. There are two main kinds of arithmetic instructions, those operating on integer values and those operating on floating-point values.
[spec jvm 1, 1996sep]

jv'vm'instr.Control'Transfer

name::
* McsEngl.jv'vm'instr.Control'Transfer@cptIt,

The control transfer instructions conditionally or unconditionally cause the Java Vir-tual Machine to continue execution with an instruction other than the one following the control transfer instruction. They are:
 Conditional branch: ifeq, iflt, ifle, ifne, ifgt, ifge, ifnull, ifnonnull, if_icmpeq, if_icmpne, if_icmplt, if_icmpgt, if_icmple, if_icmpge, if_acmpeq, if_acmpne, lcmp, fcmpl, fcmpg, dcmpl, dcmpg.
 Compound conditional branch: tableswitch, lookupswitch.
 Unconditional branch: goto, goto_w, jsr, jsr_w, ret.
[spec jvm 1, 1996sep]

jv'vm'instr.Conversion'Operations

name::
* McsEngl.jv'vm'instr.Conversion'Operations@cptIt,

jv'vm'instr.Exception'Handling

name::
* McsEngl.jv'vm'instr.Exception'Handling@cptIt,

jv'vm'instr.Function'Return

name::
* McsEngl.jv'vm'instr.Function'Return@cptIt,

jv'vm'instr.Logical

name::
* McsEngl.jv'vm'instr.Logical@cptIt,

jv'vm'instr.Manipulating'Object'Fields

name::
* McsEngl.jv'vm'instr.Manipulating'Object'Fields@cptIt,

jv'vm'instr.Method'Invocation

name::
* McsEngl.jv'vm'instr.Method'Invocation@cptIt,

jv'vm'instr.Miscellaneous'Object'Operations

name::
* McsEngl.jv'vm'instr.Miscellaneous'Object'Operations@cptIt,

jv'vm'instr.Monitors

name::
* McsEngl.jv'vm'instr.Monitors@cptIt,

jv'vm'instr.Object'creation'and'manipulation

name::
* McsEngl.jv'vm'instr.Object'creation'and'manipulation@cptIt,

Although both class instances and arrays are objects, the Java Virtual Machine creates and manipulates class instances and arrays using distinct sets of instructions:
[spec jvm 1, 1996sep]

jv'vm'instr.Operand'Stack'Management

name::
* McsEngl.jv'vm'instr.Operand'Stack'Management@cptIt,

A number of instructions are provided for the direct manipulation of the operand stack: pop, pop2, dup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2, swap.
[spec jvm 1, 1996sep]z

jv'vm'instr.Table'Jumping

name::
* McsEngl.jv'vm'instr.Table'Jumping@cptIt,

jv'vm'instr.Type'Conversion

name::
* McsEngl.jv'vm'instr.Type'Conversion@cptIt,

The type conversion instructions allow conversion between Java Virtual Machine numeric types. These may be used to implement explicit conversions in user code, or to mitigate the lack of orthogonality in the instruction set of the Java Virtual Machine.
[spec jvm 1, 1996sep]

jv'vm'instr.opcodely

name::
* McsEngl.jv'vm'instr.opcodely@cptIt,


00 (0x00) nop
01 (0x01) aconst_null
02 (0x02) iconst_m1
03 (0x03) iconst_0
04 (0x04) iconst_1
05 (0x05) iconst_2
06 (0x06) iconst_3
07 (0x07) iconst_4
08 (0x08) iconst_5
09 (0x09) lconst_0
10 (0x0a) lconst_1
11 (0x0b) fconst_0
12 (0x0c) fconst_1
13 (0x0d) fconst_2
14 (0x0e) dconst_0
15 (0x0f) dconst_1
16 (0x10) bipush
17 (0x11) sipush
18 (0x12) ldc
19 (0x13) ldc_w
20 (0x14) ldc2_w
21 (0x15) iload
22 (0x16) lload
23 (0x17) fload
24 (0x18) dload
25 (0x19) aload
26 (0x1a) iload_0
27 (0x1b) iload_1
28 (0x1c) iload_2
29 (0x1d) iload_3
30 (0x1e) lload_0
31 (0x1f) lload_1
32 (0x20) lload_2
33 (0x21) lload_3
34 (0x22) fload_0
35 (0x23) fload_1
36 (0x24) fload_2
37 (0x25) fload_3
38 (0x26) dload_0
39 (0x27) dload_1
40 (0x28) dload_2
41 (0x29) dload_3
42 (0x2a) aload_0
43 (0x2b) aload_1
44 (0x2c) aload_2
45 (0x2d) aload_3
46 (0x2e) iaload
47 (0x2f) laload
48 (0x30) faload
49 (0x31) daload
50 (0x32) aaload
51 (0x33) baload
52 (0x34) caload
53 (0x35) saload
54 (0x36) istore
55 (0x37) lstore
56 (0x38) fstore
57 (0x39) dstore
58 (0x3a) astore
59 (0x3b) istore_0
60 (0x3c) istore_1
61 (0x3d) istore_2
62 (0x3e) istore_3
63 (0x3f) lstore_0
64 (0x40) lstore_1
65 (0x41) lstore_2
66 (0x42) lstore_3
67 (0x43) fstore_0
68 (0x44) fstore_1
69 (0x45) fstore_2
70 (0x46) fstore_3
71 (0x47) dstore_0
72 (0x48) dstore_1
73 (0x49) dstore_2
74 (0x4a) dstore_3
75 (0x4b) astore_0
76 (0x4c) astore_1
77 (0x4d) astore_2
78 (0x4e) astore_3
79 (0x4f) iastore
80 (0x50) lastore
81 (0x51) fastore
82 (0x52) dastore
83 (0x53) aastore
84 (0x54) bastore
85 (0x55) castore
86 (0x56) sastore
87 (0x57) pop
88 (0x58) pop2
089 (0x59) dup
090 (0x5a) dup_x1
091 (0x5b) dup_x2
092 (0x5c) dup2
093 (0x5d) dup2_x1
094 (0x5e) dup2_x2
095 (0x5f) swap
096 (0x60) iadd
097 (0x61) ladd
098 (0x62) fadd
099 (0x63) dadd
100 (0x64) isub
101 (0x65) lsub
102 (0x66) fsub
103 (0x67) dsub
104 (0x68) imul
105 (0x69) lmul
106 (0x6a) fmul
107 (0x6b) dmul
108 (0x6c) idiv
109 (0x6d) ldiv
110 (0x6e) fdiv
111 (0x6f) ddiv
112 (0x70) irem
113 (0x71) lrem
114 (0x72) frem
115 (0x73) drem
116 (0x74).......ineg
117 (0x75) lneg
118 (0x76) fneg
119 (0x77) dneg
120 (0x78) ishl
121 (0x79) lshl
122 (0x7a) ishr
123 (0x7b) lshr
124 (0x7c) iushr
125 (0x7d) lushr
126 (0x7e) iand
127 (0x7f) land
128 (0x80) ior
129 (0x81) lor
130 (0x82) ixor
131 (0x83) lxor
132 (0x84) iinc
133 (0x85) i2l
134 (0x86) i2f
135 (0x87) i2d
136 (0x88) l2i
137 (0x89) l2f
138 (0x8a) l2d
139 (0x8b) f2i
140 (0x8c) f2l
141 (0x8d) f2d
142 (0x8e) d2i
143 (0x8f) d2l
144 (0x90) d2f
145 (0x91) i2b
146 (0x92) i2c
147 (0x93) i2s
148 (0x94) lcmp
149 (0x95) fcmpl
150 (0x96) fcmpg
151 (0x97) dcmpl
152 (0x98) dcmpg
153 (0x99) ifeq
154 (0x9a) ifne
155 (0x9b) iflt
156 (0x9c) ifge
157 (0x9d) ifgt
158 (0x9e) ifle
159 (0x9f) if_icmpeq
160 (0xa0) if_icmpne
161 (0xa1) if_icmplt
162 (0xa2) if_icmpge
163 (0xa3) if_icmpgt
164 (0xa4) if_icmple
165 (0xa5) if_acmpeq
166 (0xa6) if_acmpne
167 (0xa7) goto
168 (0xa8) jsr
169 (0xa9) ret
170 (0xaa) tableswitch
171 (0xab) lookupswitch
172 (0xac) ireturn
173 (0xad) lreturn
174 (0xae) freturn
175 (0xaf) dreturn
176 (0xb0) areturn
177 (0xb1) return
178 (0xb2) getstatic
179 (0xb3) putstatic
180 (0xb4) getfield
181 (0xb5) putfield
182 (0xb6) invokevirtual
183 (0xb7) invokespecial
184 (0xb8) invokestatic
185 (0xb9) invokeinterface
186 (0xba) xxxunusedxxx1
187 (0xbb) new
188 (0xbc) newarray
189 (0xbd) anewarray
190 (0xbe) arraylength
191 (0xbf) athrow
192 (0xc0) checkcast
193 (0xc1) instanceof
194 (0xc2) monitorenter
195 (0xc3) monitorexit
196 (0xc4) wide
197 (0xc5) multianewarray
198 (0xc6) ifnull
199 (0xc7) ifnonnull
200 (0xc8) goto_w
201 (0xc9) jsr_w

Reserved opcodes:
202 (0xca) breakpoint
254 (0xfe) impdep1
255 (0xff) impdep2

jv'vm'instr.mnemonically

name::
* McsEngl.jv'vm'instr.mnemonically@cptIt,


aaload
aastore
aconst_null
aload
aload_<n>
anewarray
anewarray_quick
areturn
arraylength
astore
astore_<n>
athrow


baload 39
bastore 42
bipush 27
breakpoint 64


caload 40
castore 42
checkcast 71
checkcast_quick 81


d2f,
d2i 54
d2l 54
dadd 45
daload 39
dastore 41
dcmpg 61
dcmpl 60
dconst_<d> 30
ddiv 48
dload 32
dload_<n> 32
dmul 47
dneg 49
drem 49
dreturn 64
dstore 34
dstore_<n> 34
dsub 46
dup 43
dup_x1 43
dup_x2 44
dup2 43
dup2_x1 44
dup2_x2 44


f2d 54
f2i 53
f2l 54
fadd 45
faload 39
fastore 41
fcmpg 60
fcmpl 60
fconst_<f> 30
fdiv 47
fload 31
fload_<n> 31
fmul
fneg
frem
freturn
fstore
fstore_<n>
fsub


getfield
getfield_quick
getfield2_quick
getstatic
getstatic_quick
getstatic2_quick
goto
goto_w


i2d
i2f 52
i2l 52
iadd 44
iaload 38
iand 51
iastore 40
iconst_<n> 29
iconst_m1 29
idiv 47
if_acmpeq 61
if_acmpne 61
if_icmpeq 58
if_icmpge 59
if_icmpgt 59
if_icmple 59
if_icmplt 58
if_icmpne 58
ifeq 56
ifge 58
ifgt 57
ifle 57
iflt 56
ifne 57
ifnonnull 57
ifnull 56
iinc
iload
iload_<n>
imul
ineg
instanceof
instanceof_quick
instruction name
int2byte
int2char
int2short
invokeinterface
invokeinterface_quick
invokenonvirtual
invokenonvirtual_quick
invokestatic
invokestatic_quick
invokevirtual
invokevirtual_quick
invokevirtualobject_quick
ior
irem
ireturn
ishl
ishr
istore
istore_<n>
isub
iushr
ixor


jsr 62
jsr_w 62


l2d 53
l2f 53
l2i
ladd
laload
land
lastore
lcmp
lconst_<l>
ldc1
ldc1_quick
ldc2
ldc2_quick
ldc2w
ldc2w_quick
ldiv
lload
lload_<n>
lmul
lneg
lookupswitch
lor
lrem
lreturn
lshl
lshr
lstore
lstore_<n>
lsub
lushr
lxor


monitorenter
monitorexit
multianewarray
multianewarray_quick
new
new_quick
newarray
nop


pop
pop2
putfield
putfield_quick 76
putfield2_quick 76
putstatic 67
putstatic_quick 77
putstatic2_quick 77


ret 63
ret_w 63
return 64


saload 40
sastore 42
sipush 28
swap 44


tableswitch 65
wide 35

jv'vm'WORD

name::
* McsEngl.jv'vm'WORD@cptIt,

No mention has been made of the storage requirements for values of the various Java Virtual Machine types, only the ranges those values may take. The Java Virtual Machine does not mandate the size of its data types. Instead, the Java Virtual Machine defines an abstract notion of a word that has a platform-specific size. A word is large enough to hold a value of type byte, char, short, int, float, reference, or returnAddress, or to hold a native pointer. Two words are large enough to hold values of the larger types, long and double. Java’s runtime data areas are all defined in terms of these abstract words.
A word is usually the size of a pointer on the host platform. On a 32-bit platform, a word is 32 bits, pointers are 32 bits, and longs and doubles naturally take up two words. A naive 64-bit implementation of the Java Virtual Machine may waste half of a word used to store a 32-bit datum, but may also be able to store all of a long or a double in one of the two words allotted to it.

The choice of a specific word size, although platform-specific, is made at the implementation level, not as part of the Java Virtual Machine’s design. It is not visible outside the implementation or to code compiled for the Java Virtual Machine.
[spec jvm 1, 1996sep]

jv'WEB-START

name::
* McsEngl.jv'WEB-START@cptIt,
* McsEngl.javaws@cptItsoft1012i,
* McsEngl.java'web'start@cptIt,

_DEFINITION:
* Java Web Start is a new application-deployment technology that gives you the power to launch full-featured applications with a single click from your Web browser. You can now download and launch applications, such as a complete spreadsheet program or an Internet chat client, without going through complicated installation procedures.
Java Web Start includes the security features of the JavaTM 2 platform, so the integrity of your data and files is never compromised. In addition, Java Web Start technology enables you to use the latest Java 2 technology -- with any browser.
With Java Web Start, you launch applications simply by clicking on a Web page link. If the application is not present on your computer, Java Web Start automatically downloads all necessary files. It then caches the files on your computer so the application is always ready to be relaunched anytime you want -- either from an icon on your desktop or from the browser link. And no matter which method you use to launch the application, the most current version of the application is always presented to you.
[1.4 DOCS]

* The JavaTM Web Start product v1.0.1_02 is bundled with the Java 2 SDK and Java 2 Runtime Environment (JRE). On Microsoft Windows platforms, the Java Web Start Product is installed silently during the installation of the Java 2 SDK and JRE. Look for a Java Web Start icon on your desktop. There will also be an entry for Java Web Start in the Start --> Programs menu.
On Solaris and Linux platforms, the installation script for the Java Web Start product is contained within a zip file that is located in the jre directory of the Java 2 SDK (or in the top level of the JRE). Move the zip file to a location where you would like to install the Java Web Start product. We recommend that this location be outside the Java 2 SDK or JRE directory structure. Unzip the file and run the install.sh script to install the Java Web Start product.
[1.4 DOCS]

SINCE:
* 1.4

jv'Relation-to-Cpp

name::
* McsEngl.jv'Relation-to-Cpp@cptIt,
* McsEngl.cpp'relation-to-java@cptIt,
* McsEngl.java'relation-to-cpp@cptIt,

_ADDRESS.WPG:
* https://www.quora.com/Why-are-computer-games-written-in-C++-cooler-than-those-in-Java-Whats-the-biggest-game-made-with-Java,

jv.EVOLUTING#cptCore546.171#

name::
* McsEngl.jv.EVOLUTING@cptIt,
* McsEngl.jv'version@cptIt,

2011-07-28: Java SE 7
Java 7 (codename Dolphin[48]) is a major update to Java which was launched on July 7 of 2011[49] and was made available on July 28, 2011.[50] The development period was organized into thirteen milestones; on February 18, 2011, milestone 13, the last milestone was reached.[51][52] On average 8 builds, which generally included enhancements and bug fixes, were released per milestone. The Feature list at the Open JDK 7 project lists many of the feature changes.
[http://en.wikipedia.org/wiki/Java_version_history]

2006-12-11: Java SE 6
J2SE 1.6.0

2004-09-30: J2SE 5.0
J2SE 1.5.0 released

2002-02-05: J2SE 1.4
JavaTM 2 Platform Std. Ed. v1.4.0

2000-05-08: J2SE 1.3

1998-12-08: J2SE 1.2
JDK 1.2 released.

1997 JDK 1.1

name::
* McsEngl.JDK1.1-{1997}@cptIt,

1997dec17:
JDK1.2 beta2 released.

{1997-11-17}
Sun wins Java ISO approval
By Tim Clark November 17, 1997, 3:55 p.m. PT update Sun Microsystems (SUNW) has won approval to submit its Java programming language to the International Standards Organization as a standard.
In a vote released today, 20 member nations in the ISO/IEC JTC 1 (the International Committee for Information Technology Standardization) approved Sun's application to become a "recognized submitter" of Java. The United States and China opposed Sun's application, two countries abstained, and three nations did not vote.
The vote is a key win in a long campaign for Sun, which now can control much of what goes into the Java standard. The company declined to say today when it would submit the specification, but JavaSoft vice president Jim Mitchell said the submission would take longer than three months because of its complexity.
Before the standard is submitted, JavaSoft must translate existing language into the ISO format. It also will circulate the specification among licensees and post it on its Web site. Once submitted to the standards body, the spec itself must be voted on and approved by ISO members.
Gaining status as an ISO standard would broaden Jv's market because some government agencies and universities won't buy products unless they are based on ISO standards.
JavaSoft president Alan Baratz hailed the vote as a vindication of Sun's process for making Java an accepted standard, and he reaffirmed his company's intention to remain in charge of updates once ISO accepts Java as a standard.
"The Java platform will continue to evolve in exactly the same way it has as to this time, through a process we define," Baratz said. "We are not talking about the evolution of the Java platform being done by ISO or a compromise. The industry trusts Sun to do the right thing, and that's exactly what we're doing."
But analysts were mixed about the significance of today's announcement. "The industry needs a few alternatives to the Microsoft platform, and Java increases the likelihood of having those alternatives," said Jeff Kinz, research manager at IDC's Internet and application development group. "Even separate of that issue, Jv's architecture is very useful. It provides a nice environment for deploying distributed applications."
But Larry Perlstein of Dataquest questioned whether having a Java standard will affect its adoption, noting that programming languages COBOL and C++ haven't achieved ISO standard status yet.
"Here are languages that have been around for ten years or more, and I don't know how much of a difference that has made," said Perlstein.
This is the second round of voting on whether Sun could submit Java in this manner. Sun altered its proposal after the first go-around to address objections raised to its original application. Still, 13 of the 20 votes to give Sun special "submitter" status came with comments or qualifications.
The U.S. delegation actually favored Sun's Java proposal by a vote of 15-10, but it didn't have the required two-thirds approval. The U.S. opposition came from Microsoft and others that objected to Sun controlling both the Java standard and the trademark as well as how the standard would evolve.
"We believe that if the comments are addressed, Java will be substantially more open than if the Sun proposal had gone through," said Cornelius Willis, a Microsoft spokesman. "This is one of the first steps in an involved process.
"Like many competitors and Sun allies, we think it would be a great thing if Java were a standard and we could participate in the evolution. Today we can't," he added.
JavaSoft's Baratz, defending Sun's strategy for making Java a standard, urged Microsoft to submit its technology to ISO to become a standard. "I would love for Microsoft to be half as open as Sun has been on Java."
Giving a single company submitter status is unusual for ISO. Normally. such status is given to trade groups or consortia. Similar status has been given to X-Open, DAVIC (Digital Audio Visual Industry Council), VESA (Video Electronics Standards Association), and IrDA (Infrared Data Association).

1997jul:
JDK 1.1.3 release.

1997 April 2:
The second JavaOne has more than 10,000 attendees. Sun releases JavaStudio, a visual component builder for JavaBeans. Announces Enterprise JavaBeans--further potential for Java in business--and PersonalJava, a version for consumer appliances, bringing Java back to its roots.
[PC MAG {1998-04-07}]

{1997-03-14}:
On March 14, 1997, less than two years after the first alpha version of Java was released to the public, Sun Microsystems, Inc. started the process to make Java an International Standard.
[Java Standardization April 1997]

1997feb17:
JDK 1.1 was released.

February 18, 1997
JDK 1.1 released. A dramatically improved language, including JavaBeans, print, and database access.
[PC MAG {1998-04-07}]

1997jan17:
JDK 1.1 Beta3

1996

1996:
JDK 1.1 Beta2

1996:
JDK 1.0.2
I begin learning java with this version.

1996 December 11:
At Internet World, Sun announces the 100% Pure Java initiative, endorsed by more than 100 companies, with one notable absence: Microsoft.
[PC MAG {1998-04-07}]

1996 May 29:
More than 6,000 people attend the first JavaOne developers' conference. Corel announces its intent to develop the Java office suite, with Java versions of WordPerfect and Quattro Pro. The plan ultimately fails.
[PC MAG {1998-04-07}]

1996-01-23:
JDK 1.0 (January 23, 1996)
Codename Oak. Initial release[1][2] The first stable version was the JDK 1.0.2. is called Java 1[2
[http://en.wikipedia.org/wiki/Java_version_history]
===
January 23, 1996, version 1.0 of the Java Development Kit (JDK) was released.
[Java Standardization April 1997]

1996 January 9:
Sun forms JavaSoft to develop Java-based products and work with third-party developers.
[PC MAG {1998-04-07}]

1995

1995 December 13:
Symantec licenses Java and releases the first Java development environment for Windows 95 and NT, Symantec Cafe, an immediate success.
[PC MAG {1998-04-07}]

1995 December 7:
Microsoft announces it will license Java. Microsoft's intent to optimize Java for Windows sets the stage for a long simmering feud that boils over two years later.
[PC MAG {1998-04-07}]

1995 December 4:
IBM licenses Java, making a commitment to Java that will extend to hardware and software.
[PC MAG {1998-04-07}]

1995 October:
EarthWeb launches Gamelan, a Java resource directory and news site for developers.
[PC MAG {1998-04-07}]

1995 September 18:
Public beta of Navigator 2.0, with support for Java applets, giving Java a major platform and presence on the Web.
[PC MAG {1998-04-07}]

1995 May 23:
Java launches at SunWorld 1995. The first company to endorse Java: Netscape. Sun makes available an alpha version of its Hot Java browser.
[PC MAG {1998-04-07}]

1995 March:
On March 27, 1995, the first public alpha version of Java was made available by Sun Microsystems, Inc.
[Java Standardization April 1997]

1995:
Αλλάζει το όνομα από Oak σε Java.
(Just Another Valueless Acronym, some say)
[JAVA βήμα προς βήμα, 15]

1994

1994jun:
FirstPerson (part of Sun) begins "Liveoak," again refocusing the technology for small OSs. A month later, the team retargets Oak's potential for the Internet and points toward Java's current function.
[PC MAG {1998-04-07}]

1993 March-August:
Sun refocuses Oak for a Time Warner interactive TV project. SGI wins the deal instead. Another deal falls through in August.
[PC MAG {1998-04-07}]

1991jan:
Σχηματίζεται η ομάδα GREEN, με υπεύθυνο τον James Gosling, για να αναπτύξει ένα λειτουργικό περιβάλλον για συσκευές καταναλωτών, που θα παρουσίαζε πληροφορίες μέσω της καλωδιακής τηλεόρασης.
[JAVA βήμα προς βήμα, 15]

January 1991
Java starts as "Oak," headed by James Gosling, intended to network household appliances.
[PC MAG {1998-04-07}]

jv'version1.6

name::
* McsEngl.jv'version1.6@cptIt,
* McsEngl.jv1.6@cptIt,

jv'version1.5

name::
* McsEngl.jv'version1.5@cptIt,
* McsEngl.jv1.5@cptIt,

NEW FEATURES:
Java 2 Platform Standard Edition 5.0 is a major feature release. The features listed below are introduced in 5.0 since the previous major release (1.4.0).

For highlights of the new features, also see J2SETM 5.0 in a Nutshell. For issues, see JDK 5.0 release notes.

Performance Enhancements
Java Language Features
Generics
Enhanced for Loop
Autoboxing/Unboxing
Typesafe Enums
Varargs
Static Import
Metadata (Annotations)
Virtual Machine
Class Data Sharing
Garbage Collector Ergonomics
Server-Class Machine Detection
Thread Priority Changes
Fatal Error Handling
High-Precision Timing Support
Base Libraries
Lang and Util Packages
Networking
Security
Internationalization
Improved Support for Environment Variables
ProcessBuilder
Formatter
Scanner
Reflection
JavaBeansTM Component Architecture
Collections Framework
Java API for XML Processing (JAXP)
Bit Manipulation Operations
Math
Instrumentation
Serialization
Concurrency Utilities
Threads
Monitoring and Management
Integration Libraries
Remote Method Invocation (RMI)
Java Database Connectivity (JDBC)
CORBA, Java IDL, and Java RMI-IIOP
Java Naming and Directory InterfaceTM (JNDI)
User Interface
Internationalization
Java Sound Technology
Java 2DTM Technology
Image I/O
AWT
Swing
Deployment
General Deployment
Java Web Start
Tools and Tool Architecture
Java Virtual Machine Tool Interface (JVMTI)
Java Platform Debugger Architecture (JPDA)
Java Compiler (javac)
Javadoc Tool
Annotation Processing Tool (apt)
OS & Hardware Platforms
Supported System Configurations
64-Bit AMD Opteron Processors

Performance Enhancements

For a synopsis of performance enhancements, see Performance Enhancements.

JavaTM Language Features

For more information see New Language Features.
Generics
This long-awaited enhancement to the type system allows a type or method to operate on objects of various types while providing compile-time type safety. It adds compile-time type safety to the Collections Framework and eliminates the drudgery of casting. Refer to JSR 14.
Enhanced for Loop
This new language construct eliminates the drudgery and error-proneness of iterators and index variables when iterating over collections and arrays. Refer to JSR 201 .
Autoboxing/Unboxing
This facility eliminates the drudgery of manual conversion between primitive types (such as int) and wrapper types (such as Integer). Refer to JSR 201 .
Typesafe Enums
This flexible object-oriented enumerated type facility allows you to create enumerated types with arbitrary methods and fields. It provides all the benefits of the Typesafe Enum pattern ("Effective Java," Item 21) without the verbosity and the error-proneness. Refer to JSR 201.
Varargs
This facility eliminates the need for manually boxing up argument lists into an array when invoking methods that accept variable-length argument lists. Refer to JSR 201.
Static Import
This facility lets you avoid qualifying static members with class names without the shortcomings of the "Constant Interface antipattern." Refer to JSR 201.
Metadata (Annotations)
This language feature lets you avoid writing boilerplate code under many circumstances by enabling tools to generate it from annotations in the source code. This leads to a "declarative" programming style where the programmer says what should be done and tools emit the code to do it. Also it eliminates the need for maintaining "side files" that must be kept up to date with changes in source files. Instead the information can be maintained in the source file. Refer to JSR 175.

Virtual Machine

Class Data Sharing
The class data sharing feature is aimed at reducing application startup time and footprint. The installation process loads a set of classes from the system jar file into a private, internal representation, then dumps that representation to a "shared archive" file. During subsequent JVM invocations, the shared archive is memory-mapped in, saving the cost of loading those classes and allowing much of the JVM's metadata for these classes to be shared among multiple JVM processes. For more information, click the above link.
Garbage Collector Ergonomics
The parallel collector has been enhanced to monitor and adapt to the memory needs of the application. You can specify performance goals for applications and the JVM will tune the size of the Java heap to meet those performance goals with the smallest application footprint consistent with those goals. The goal of this adaptive policy is to eliminate the need to tune command-line options to achieve the best performance. For a synopsis of garbage collection features, click the above link.
Server-Class Machine Detection
At application startup, the launcher can attempt to detect whether the application is running on a "server-class" machine.
Thread Priority Changes
Thread priority mapping has changed somewhat allowing Java threads and native threads that do not have explicitly set priorities to compete on an equal footing.
Fatal Error Handling
The fatal error reporting mechanism has been enhanced to provide improved diagnostic output and reliability.
High-Precision Timing Support
The method System.nanoTime() has been added, providing access to a nanosecond-granularity time source for relative time measurements. The actual precision of the time values returned by System.nanoTime() is platform-dependent.

Base Libraries

Lang and Util Packages
For a synopsis of java.lang and java.util enhancements, click the above link.

Networking
For a synopsis of added networking features, click the above link.
Security
This release of J2SE offers significant enhancements for security. It provides better support for security tokens, support for more security standards (SASL, OCSP, TSP), improvements for scalability (SSLEngine) and performance, plus many enhancements in the crypto and Java GSS areas. For details see the above link.
Internationalization
Enhancements are as follows:

* Character handling is now based on version 4.0 of the Unicode standard. This affects the Character and String classes in the java.lang package, the collation and bidirectional text analysis functionality in the java.text package, character classes in the java.util.regex package, and many other parts of the J2SE. As part of this upgrade, support for supplementary characters has been specified by the JSR 204 expert group and implemented throughout the J2SE. See the article Supplementary Characters in the Java Platform, the Java Specification Request 204, and the Character class documentation for more information.
* The DecimalFormat class has been enhanced to format and parse BigDecimal and BigInteger values without loss of precision. Formatting of such values is enhanced automatically; parsing into BigDecimal needs to be enabled using the setParseBigDecimal method.
* Vietnamese is now supported in all locale sensitive functionality in the java.util and java.text packages. See the Supported Locales document for complete information on supported locales and writing systems.

Improved Support for Environment Variables
The System.getenv(String) method is no longer deprecated. The new System.getenv() method allows access to the process environment as a Map<String,String>.
ProcessBuilder
The new ProcessBuilder class provides a more convenient way to invoke subprocesses than does Runtime.exec. In particular, ProcessBuilder makes it easy to start a subprocess with a modified process environment (that is, one based on the parent's process environment, but with a few changes).
Formatter
An interpreter for printf-style format strings, the Formatter class provides support for layout justification and alignment, common formats for numeric, string, and date/time data, and locale-specific output. Common Java types such as byte, java.math.BigDecimal , and java.util.Calendar are supported. Limited formatting customization for arbitrary user types is provided through the java.util.Formattable interface.
Scanner
The java.util.Scanner class can be used to convert text into primitives or Strings. Since it is based on the java.util.regex package, it also offers a way to conduct regular expression based searches on streams, file data, strings, or implementors of the Readable interface. Reflection
Reflection
Have added support for generics, annotations, enums and have added convenience methods. Also have generified the class java.lang.Class.
JavaBeans Component Architecture
A subclass of PropertyChangeEvent called IndexedPropertyChangeEvent has been added to support bound properties that use an index to identify the part of the bean that changed. Also, methods have been added to the PropertyChangeSupport class to support firing indexed property change events.
Collections Framework
The Collections Framework has been enhanced in the following ways:

* Three new language features are targeted at collections: Generics, Enhanced for Loop, and Autoboxing.
* Three new interfaces have been added to the framework (two of which are part of java.util.concurrent): Queue, BlockingQueue, and ConcurrentMap.
* Two concrete implementations of Queue have been added, as well as one skeletal implementation.
* Five blocking queue implementations have been added, and one ConcurrentMap implementation.
* Special-purpose Map and Set implementations are provided for use with typesafe enums.
* Special-purpose copy-on-write List and Set implementations have been added.
* Wrapper implementations are provided to add dynamic type-safety for most collection interfaces.
* Several new algorithms are provided for manipulating collections.
* Methods are provided to compute hash codes and string representations for arrays.

Java API for XML Processing (JAXP)
Click the above link for details or refer to JSR 206.
Bit Manipulation Operations
The wrapper classes (Integer, Long, Short, Byte, and Char) now support common bit manipulation operations which include highestOneBit, lowestOneBit, numberOfLeadingZeros, numberOfTrailingZeros, bitCount, rotateLeft, rotateRight, reverse, signum, and reverseBytes.
Math
The numerical functionality provided by the libraries has been augmented in several ways:

* The BigDecimal class has added support for fixed-precision floating-point computation. Refer to JSR 13.
* The Math and StrictMath libraries include hyperbolic transcendental functions (sinh, cosh, tanh), cube root, base 10 logarithm, etc.
* Hexadecimal floating-point support - To allow precise and predictable specification of particular floating-point values, hexadecimal notation can be used for floating-point literals and for string to floating-point conversion methods in Float and Double.

Instrumentation
The new java.lang.instrument package provides services that allow Java programming agents to instrument programs running on the Java virtual machine. The intrumentation mechanism is modification of the bytecodes of methods.
Serialization
Support has been added to handle enumerated types which are new in version 5.0. The rules for serializing an enum instance differ from those for serializing an "ordinary" serializable object: the serialized form of an enum instance consists only of its enum constant name, along with information identifying its base enum type. Deserialization behavior differs as well--the class information is used to find the appropriate enum class, and the Enum.valueOf method is called with that class and the received constant name in order to obtain the enum constant to return.
Concurrency Utilities
The java.util.concurrent, java.util.concurrent.atomic, and java.util.concurrent.locks packages provide a powerful, extensible framework of high-performance, scalable, thread-safe building blocks for developing concurrent classes and applications, including thread pools, thread-safe collections, semaphores, a task scheduling framework, task synchronization utilities, atomic variables, and locks. The addition of these packages to the core class library frees the programmer from the need to craft these utilities by hand, in much the same manner that the Collections Framework did for data structures. Additionally, these packages provide low-level primitives for advanced concurrent programming which take advantage of concurrency support provided by the processor, enabling programmers to implement high-performance, highly scalable concurrent algorithms in the Java language to a degree not previously possible without resorting to native code. Refer to JSR 166 .
Threads
The java.lang.Thread class has the following enhancements:

* Thread priority handling has changed; see the above link for details.
* Thread.State enum class and the new getState() API are provided for querying the execution state of a thread.
* The new thread dump API - the getStackTrace and getAllStackTraces methods in the Thread class - provides a programmatic way to obtain the stack trace of a thread or all threads.
* The uncaughtExceptionHandler mechanism, previously available only through the ThreadGroup class, is now available directly through the Thread class.
* A new form of the sleep() method is provided which allows for sleep times smaller than one millisecond.

Monitoring and Management
This release of J2SE offers significant enhancements for monitoring and management for the Java platform. See the above link for details.

* Monitoring and management API for the Java virtual machine
The new java.lang.management package provides the interface for monitoring and managing the Java virtual machine.
* Monitoring and management API for the logging facility
The new java.util.logging.LoggingMXBean interface is the management interface for the logging facility.
* JMX instrumentation of the Java virtual machine
The Java virtual machine (JVM) has built-in instrumentation that enables you to monitor and manage it using JMX. You can easily start a JMX agent for monitoring and managing remote or local Java VMs instrumentation or of any application with JMX instrumentation. See Monitoring and Management Using JMX for details.
* The SNMP agent publishes the standard MIB for the Java virtual machine instrumentation as defined by JSR 163. For more information, see SNMP Monitoring and Management.
* JavaTM Management Extensions
JMXTM API version 1.2 and the RMI connector of the JMX Remote API version 1.0 are included in J2SE 5 release. The JMX API allows you to instrument libraries and applications for monitoring and management. The RMI connector allows this instrumentation to be remotely accessible. See the JMX documentation for more details.

Integration Libraries

Remote Method Invocation (RMI)
RMI has been enhanced in the following areas:

* Dynamic Generation of Stub Classes - This release adds support for the dynamic generation of stub classes at runtime, obviating the need to use the Java Remote Method Invocation (Java RMI) stub compiler, rmic, to pregenerate stub classes for remote objects. Note that rmic must still be used to pregenerate stub classes for remote objects that need to support clients running on earlier versions.
* Standard SSL/TLS Socket Factory Classes - This release adds standard Java RMI socket factory classes, javax.rmi.ssl.SslRMIClientSocketFactory and javax.rmi.ssl.SslRMIServerSocketFactory, which communicate over the Secure Sockets Layer (SSL) or Transport Layer Security (TLS) protocols using the Java Secure Socket Extension (JSSE).
* Launching rmid or a Java RMI Server from inetd/xinetd - A new feature, provided by the System.inheritedChannel method, allows an application to obtain a channel (java.nio.channels.SocketChannel or java.nio.channels.ServerSocketChannel, for example) inherited from the process that launched the virtual machine (VM). Such an inherited channel can be used to either service a single incoming connection (as with SocketChannel) or accept multiple incoming connections (as with ServerSocketChannel). Therefore, Java networking applications launched by inetd (Solaris(tm) Operating System) or xinetd (Linux) can now obtain the SocketChannel or ServerSocketChannel inherited from inetd/xinetd.

Java Database Connectivity (JDBC)
RowSet interface, part of the javax.sql package, introduced in J2SE version 1.4, provides a lightweight means of passing data between components.

At this release, as an aid to developers, the RowSet interface has been implemented (as JSR 114) in five of the more common ways a RowSet object can be used. These implementations provide a standard that developers are free to use as is or to extend.

Following are the five standard implementations:

* JdbcRowSet - used to encapsulate a result set or a driver that is implemented to use JDBC technology
* CachedRowSet - disconnects from its data source and operates independently except when it is getting data from the data source or writing modified data back to the data source. This makes it a lightweight container for as much data as it can store in memory.
* FilteredRowSet - extends CachedRowSet and is used to get a subset of data
* JoinRowSet - extends CachedRowSet and is used to get an SQL JOIN of data from multiple RowSet objects
* WebRowSet - extends CachedRowSet and is used for XML data. It describes tabular components in XML using a standardized XML schema.

CORBA, Java IDL, and Java RMI-IIOP

Enhancements to CORBA, Java IDL, and Java RMI-IIOP are discussed in Changes in CORBA Features Between J2SE 1.4.x and 5.0.
Java Naming and Directory InterfaceTM (JNDI)
JNDI provides the following new features.

* Enhancements to javax.naming.NameClassPair to access the fullname from the directory/naming service
* Support for standard LDAP controls: Manage Referral Control, Paged Results Control and Sort Control
* Support for manipulation of LDAP names.

User Interface

Internationalization

* To render multilingual text, using logical fonts, 2D now takes advantage of installed host OS fonts for all supported writing systems. For example, if you run in a Thai locale environment, but have Korean fonts installed, both Thai and Korean are rendered. The J2RE now also automatically detects physical fonts that are installed into its lib/fonts/fallback directory and adds these physical fonts to all logical fonts for 2D rendering.
* AWT now uses the Unicode APIs on Windows 2000/XP. As a result, some of its components can handle text without being restricted by Windows locale settings. For example, AWT text components can accept and display text in the Devanagari writing system regardless of the Windows locale settings.

Java Sound Technology

* Ports are now available on all platforms (RFE 4782900).
* MIDI device i/o is now available on all platforms (RFE's 4812168, 4782924).
* Optimized direct audio access is implemented on all platforms (RFEs 4908240 and 4908879). It is enabled by default on systems which offer native mixing (i.e. Linux ALSA with hardware mixing, Solaris Mixer enabled, Windows DirectSound).
* The new real-time Sequencer works with all MIDI devices and allows unlimited Transmitters (RFE 4773012).
* The sound.properties configuration file allows choice of default devices (RFE 4776511). For details, see MidiSystem and AudioSystem for details.
* MidiDevices can query connected Receivers and Transmitters (RFE 4931387, methods MidiDevice.getReceiver and MidiDevice.getTransmitter).
* AudioFormat, AudioFileFormat, and MidiFileFormat now have properties that allow further description and qualification of the format (RFEs 4925767 and 4666845).
* A set of ease-of-use methods allow easier retrieval of lines from AudioSystem (RFE 4896221).
* The Sequencer interface is extended with loop methods, for seamless looping of specific portions of a MIDI sequence (RFE 4204105).
* Java Sound no longer prevents the VM from exiting (bug 4735740).

Java 2DTM Technology
Added 2D features include expanded Linux and Solaris printer support, new methods for creating fonts from files and streams, and new methods related to VolatileImages and hardware acceleration of images. A number of internal changes to text rendering code greatly improve its robustness, performance, and scalability. Other performance work includes hardware-accelerated rendering using OpenGL (disabled by default).
Image I/O
The Image I/O system now has readers and writers for BMP and WBMP formats.
AWT
Version 5.0 features many AWT enhancements and bug fixes, including some that have often been requested by our customers. Most notably, the new MouseInfo class makes it possible to determine the mouse location on the desktop. New Window methods make it possible to specify the default location for a newly created window (or frame), appropriate to the platform. Another Window enhancement makes it possible to ensure that a window (or frame) is always on top. (This feature does not work for some window managers on Solaris/Linux.) In the area of data transfer, the new DropTargetDragEvent API allows the drop target to access transfer data during the drag operation.
Swing
With the 1.4.2 release we provided two new look and feels for Swing: XP and GTK. Rather than taking a break, in 5.0 we're providing two more look and feels: Synth, a skinnable look and feel, and Ocean, a new theme for Metal. Beyond look and feels, we've added printing support to JTable, which makes it trivial to get a beautiful printed copy of a JTable. Lastly, after seven years, we've made jFrame.add equivalent to jFrame.getContentPane().add().

Deployment

General Deployment
Pack200, a new hyper-compression format for JAR files defined by JSR 200, can significantly reduce the download size of JAR files used in Java Webstart applications and Java Plug-in applets.

For a synopsis of general deployment features and enhancements, click the General Deployment link above.
Java Web Start Deployment
For a synopsis of Java Web Start deployment features and enhancements, click the above link.

Tools and Tool Architecture

Java Virtual Machine Tool Interface (JVMTI)
JVMTI is a new native programming interface for use by development and monitoring tools. It provides both a way to inspect the state and to control the execution of applications running in the Java virtual machine (VM). JVMTI is intended to provide a VM interface for the full breadth of tools that need access to VM state, including but not limited to: profiling, debugging, monitoring, thread analysis, and coverage analysis tools.

JVMTI will replace the now deprecated JVMPI and JVMDI in the next major release of J2SE.

Java Platform Debugger Architecture (JPDA)
JPDA itself has many new features, described in more detail on the JPDA enhancements page.

* A read-only subset of JDI has been defined. This subset can be used on a debuggee in which no debug code can be executed (such as a core file or a process that is hung or was not started in debug mode). The subset allows creation of JDI connectors for use in debugging such debuggees.
* A service provider interface for connectors and transports allows debugger vendors, or even end users, to create their own JDI connectors and transports and plug them into the JPDA reference implementation. For example, a connector could be provided to use SSL to communicate between the debugger and debuggee.
* JDI supports the new language features (generics, enums, and varargs).
* The lowest layer of JPDA, the Java Virtual Machine Debugger Interface (JVMDI), has been deprecated and will be removed in the next major J2SE release. Replacing it is the Java Virtual Machine Tool Interface (JVMTI). This is a more general interface that allows profiling to be done as well as debugging. The current profiling interface, Java Virtual Machine Profiling Interface(JVMPI) is also deprecated and will be removed in the next major release.
* The JPDA reference implementation includes new JDI connectors that allow corefiles and hung processes to be debugged.

Java Compiler (javac)
Compiler options include:

* -source 1.5 - Enable 1.5 specific language features to be used in source files. (-target 1.5 is implied.)
* -target 1.5 - Allow javac to use 1.5 specific features in the libraries and virtual machine.
* -Xlint - Enable javac to produce warning messages about legal, but suspect and often problematic, program constructs. An example would be declaring a class that implements Serializable but does not define a serialVersionUID.
* -d32 - Indicate a 32-bit Solaris or Linux platform.
* -d64 - Indicate a 64-bit Solaris or Linux platform.

New Programmatic Interface

The com.sun.tools.javac.Main class provides two static methods to invoke the compiler from a program. See the man page for details.
Javadoc Tool
See What's New in Javadoc 5.0
Annotation Processing Tool (apt)
apt is a new command-line utility for annotation processing. It includes a set of reflective APIs and supporting infrastructure to process program annotations.

OS & Hardware Platforms

Supported System Configurations
For more information, click the above link.

64-Bit AMD Opteron Processors
With J2SE 5, AMD Opteron processors are supported by the server VM on Suse Linux and on Windows 2003.

Copyright © 2004 Sun Microsystems, Inc. All Rights Reserved.

jv'version1.4

name::
* McsEngl.jv'version1.4@cptIt,
* McsEngl.jv1.4@cptIt,

The new features of version 1.4 of the Java 2 SDK, Standard Edition are listed below. The full list of features, including features brought forward from previous versions of the SDK, is available at Guide to Features.

Java 2 Platform
* XML Processing
* New I/O APIs
* Security
* Java 2DTM technology
* Image I/O Framework
* Java Print Service
* AWT
* Swing
* Drag and Drop
* Logging API
* JavaTM Web Start Product
* Long-term Persistence of JavaBeansTM Components
* JDBCTM 3.0 API
* Assertion Facility
* Preferences API
* Chained Exception Facility
* Endorsed Standards Override Mechanism
* Java Virtual Machines
* Performance
* Networking Support, Including IPv6
* RMI
* Serialization
* Java Naming and Directory InterfaceTM (JNDI)
* CORBA, Java IDL, and RMI-IIOP
* JavaTM Platform Debugger Architecture
* Internationalization
* JavaTM Plug-in Product
* Collections Framework
* Accessibility
* Regular Expressions
* Math
* Reflection
* Java Native Interface

Tools
* Tools and Utilities

Java 2 Platform

* XML Processing

The JavaTM API for XML processing has been added to the Java 2 Platform. It provides basic support for processing XML documents through a standardized set of Java Platform APIs.

* New I/O APIs

The new I/O (NIO) APIs provide new features and improved performance in the areas of buffer management, character-set support, regular-expression matching, file I/O, and scalable network I/O.

* Security
o The JavaTM Cryptography Extension (JCE), JavaTM Secure Socket Extension (JSSE), and JavaTM Authentication and Authorization Service (JAAS) security features have now been integrated into the JavaTM 2 SDK, Standard Edition (Java 2 SDK), v 1.4 rather than being optional packages.
o There are two new security features:
+ The JavaTM GSS-API can be used for securely exchanging messages between communicating applications using the Kerberos V5 mechanism.
+ The JavaTM Certification Path API includes new classes and methods in the java.security.cert package that allow you to build and validate certification paths (also known as "certificate chains").
o Due to import control restrictions, the JCE jurisdiction policy files shipped with the Java 2 SDK, v 1.4 allow "strong" but limited cryptography to be used. An "unlimited" version of these files indicating no restrictions on cryptographic strengths is available.
o The JSSE implementation provided in this release includes strong cipher suites. However, due to U.S. export control restrictions, this release does not allow alternate "pluggable" SSL/TLS implementations to be used. For more information, please see the JSSE Reference Guide.
o With the integration of JAAS into the Java 2 SDK, the java.security.Policy API handles Principal-based queries, and the default policy implementation supports Principal-based grant entries. Thus, access control can now be based not just on what code is running, but also on who is running it.
o Support for dynamic policies has been added. In Java 2 SDK releases prior to version 1.4, classes were statically bound with permissions by querying security policy during class loading. The lifetime of this binding was scoped by the lifetime of the class loader. In version 1.4 this binding is now deferred until needed by a security check. The lifetime of the binding is now scoped by the lifetime of the security policy.
o The graphical Policy Tool utility has been enhanced to enable specifying a Principal field indicating what user is to be granted specified access control permissions.

* Java 2DTM Technology

Java 2D includes many new features including: performance improvements, support for hardware acceleration for offscreen images, a pluggable image I/O framework, a new print service API, and several new font features.

* Image I/O Framework

The Java Image I/O Framework provides a pluggable architecture for working with images stored in files and accessed across the network. It offers substantially more flexibility and power than the current APIs for loading and saving images.

* Java Print Service API

The JavaTM Print Service is a new Java Print API that enables client and server applications to:
o Discover and select print services based on their capabilities
o Specify the format of print data
o Submit print jobs to services that support the document type to be printed.

* AWT

Changes to the AWT package center on improving the robustness, behavior, and performance of programs that present a graphical user interface. A new focus architecture replaces the previous implementation and addresses many focus-related bugs caused by platform inconsistencies, and incompatibilities between AWT and Swing components. The new full-screen exclusive mode API supports high performance graphics by suspending the windowing system so that drawing can be done directly to the screen; a benefit to applications like games, or other rendering-intensive applications. Headless support is now enabled by new graphics environment methods that indicate whether a display, keyboard, and mouse can be supported in a graphics environment. The ability to disable native frame decorations is now available for applications which need to take full control of specifying how a frame will look; when enabled this prevents the rendering of a native titlebar, system menu, border, or other native operating system dependent screen components. The oft-requested mouse wheel, with a scroll wheel in place of the middle mouse button, is enabled with new built-in Java support for scrolling via the mouse wheel. Also, a new mouse wheel listener class allows customization of mouse wheel behavior. The AWT package has been modified to be fully 64-bit compliant and now runs on Solaris machines with 64-bit and 32-bit addresses.

* Swing

Many new features have been added to Swing. The new spinner component is a single line input field that allows the user to select a number or a value by cycling through a sequence of values using a tiny pair of up/down arrow buttons. The new formatted text field component allows formatting of dates, numbers, and strings, such as a text field that accepts only decimal money values. The Windows look and feel implementation is updated to track features available in the 2000/98 versions. A new drag and drop architecture provides seamless drag and drop support between components as well as an easy way to implement drag and drop in your customized Swing components - writing a couple of methods which describe the particulars of your data model is all that is required. Swing's progress bar component has been enhanced to support an indeterminate state; rather than showing the degree of completeness, the indeterminate progress bar uses constant animation to show that a time-consuming operation is occurring. Due to great customer demand, the tabbed pane component has been enhanced to support scrollable tabs. With this feature enabled, if all the tabs will not fit within a single tab run, the tabbed pane component will display a single, scrollable run of tabs, instead of wrapping the tabs onto multiple runs. The popup and popup factory classes, which were previously package private, have been exposed and made public so that programmers may customize or create their own popups. The new focus architecture is fully integrated into Swing.

* Drag and Drop

Swing has added support for data transfer between applications. A drag and drop operation is a data transfer request that has been specified by a gesture with a graphical pointing device. In the case of copy/paste, data transfer is often initiated with the keyboard. The ability to transfer data takes two forms: Drag and drop (DnD) support and clipboard transfer via cut/copy/paste. See Swing Data Transfer.

* Logging API

The Java Logging APIs facilitate software servicing and maintenance at customer sites by producing log reports suitable for analysis by end users, system administrators, field service engineers, and software development teams. The Logging APIs capture information such as security failures, configuration errors, performance bottlenecks, and/or bugs in the application or platform.

* JavaTM Web Start Product

The Java Web Start product is a new application-deployment technology that is bundled with J2SE 1.4.0. With Java Web Start, you launch applications simply by clicking on a Web page link. If the application is not present on your computer, Java Web Start automatically downloads all necessary files. It then caches the files on your computer so the application is always ready to be relaunched anytime you want -- either from an icon on your desktop or from the browser link. And no matter which method you use to launch the application, the most current version of the application is always presented to you.

* Long-term Persistence of JavaBeans Components

The new persistence model is designed to handle the process of converting a graph of beans to and from a persistent form. The new API is suitable for creating archives of graphs of JavaBeans components as textual representations of their properties.

* JDBC 3.0 API

The JDBC 3.0 API, comprised of packages java.sql and javax.sql, provides universal data access from the Java programming language. Using the JDBC 3.0 API, you can access virtualy any data source, from relational databases to spreadsheets and flat files. JDBC technology also provides a common base on which tools and alternative interfaces can be built.

New features include the ability to set savepoints in a transaction, to keep result sets open after a transaction is committed, to reuse prepared statements, to get metadata about the parameters to a prepared statement, to retrieve keys that are automatically generated, and to have multiple result sets open at one time. There are two new JDBC data types, BOOLEAN and DATALINK, with the DATALINK type making it possible to manage data outside of a data source. This release also establishes the relationship between the JDBC Service Provider Interface and the Connector architechture.

* Assertion Facility

An assertion facility has been added to the Java 2 Platform. Assertions are boolean expressions that the programmer believes to be true concerning the state of a computer program. For example, after sorting a list, the programmer might assert that the list is in ascending order. Evaluating assertions at runtime to confirm their validity is one of the most powerful tools for improving code quality, as it quickly uncovers the programmer's misconceptions concerning a program's behavior.

* Preferences API

This new feature is a simple API for managing user preference and configuration data. Applications require preference and configuration data to adapt to different users, environments and needs. Applications need a way to store, retrieve, and modify this data. This need is met by the Preferences API. The Preferences API is intended to replace most common uses of class java.util.Properties, rectifying many of its deficiencies, while retaining its light weight.

* Endorsed Standards Override Mechanism

An endorsed standard is a JavaTM API defined through a standards process other than the Java Community ProcessSM (JCPSM). Because endorsed standards are defined outside the JCP, it is anticipated that such standards may be revised between releases of the Java 2 Platform. In order to take advantage of new revisions to endorsed standards, developers and software vendors may use the Endorsed Standards Override Mechanism to provide newer versions of an endorsed standard than those included in the Java 2 Platform as released by Sun Microsystems.

* Chained Exception Facility

This new facility provides a common API to record the fact that one exception caused another, to access causative exceptions, and to acess the entire "causal chain" as part of the standard stack backtrace, ensuring that preexisting programs will provide this information with no additional effort on the part of their authors.

* Java Virtual Machines

The Java virtual machines in this release include several enhancements.
o Signal-chaining facility.
o 64-bit support on SolarisTM-SPARCTM platform edition.
o Error-reporting mechanism.
o New command-line option for performing additional Java Native Interface (JNI) checks.
o New facility for logging garbage-collection events.
The Classic virtual machine is no longer shipped as part of the Java 2 SDK.

* Performance

This release includes performance enhancements in many areas of the platform. See Performance Enhancements for a description of some of them.

* Networking Support, Including IPv6

New features include support for IPv6 in TCP- and UDP-based applications, and support for unconnected/unbound sockets, allowing more flexible socket creation, binding, and connection. A mechanism called Java Secure Socket Extension provides encryption for data sent via sockets, and a new class, URI, allows URI construction and parsing without the presence of a protocol handler. The FTP Protocol Handler has been overhauled for conformity to current standards. The default character set is now UTF8, and APIs have been added to enable other character schemes.

A new class, NetworkInterface, allows enumeration of interfaces and addresses, and JNDI DNS SP Support in InetAddress enables applications to configure a pure Java name service provider. TCP out-of-band data provides support for legacy applications; a UDP Connection function registers destination address with the OS, enabling asynchronous errors to be returned on the UDP socket; and full SOCkS V5 and V4 TCP support includes auto-negotiation with the proxy for which version to use. In addition, there are improvements to streaming, request and response headers processing, and error handling.

* RMI

Server-side Stack Traces Now Retained in Remote Exceptions
The RMI runtime implementation will now preserve the server-side stack trace information of an exception that is thrown from a remote call, in addition to filling in the client-side stack trace as it did previous releases. Therefore, when such an exception becomes accessible to client code, its stack trace will now contain all of its original server-side trace data followed by the client-side trace.

Service Provider Interface for RMIClassLoader
Certain static methods of java.rmi.server.RMIClassLoader now delegate their behavior to an instance of a new service provider interface, java.rmi.server.RMIClassLoaderSpi. This service provider object can be configured to augment RMI's dynamic class loading behavior for a given application. By default, the service provider implements the standard behavior of all of the static methods in RMIClassLoader. See the class documentation of RMIClassLoader and RMIClassLoaderSpi for more details.

Dynamic Server Host Name
The java.rmi.server.hostname property can now be dynamically updated to indicate that future exports should use a new host name. Therefore, the new host name value will be contained in the stub for an object that is exported after the property is updated.

* Serialization

This release has several changes and enhancements to the serialization API, including
o Support for deserialization of objects that are known to be unshared in the data-serialization stream.
o Support for a class-defined readObjectNoData method.
o Important bug fixes.

* Java Naming and Directory InterfaceTM (JNDI)
o An Internet Domain Naming System (DNS) service provider is part of the Java 2 Platform, Standard Edition, v1.4. This component enables applications to read data stored in the DNS.
o The JNDI Lightweight Directory Access Protocol (LDAP) service provider has security enhancements that enable applications to establish secure sessions over existing LDAP connections and to use different authentication protocols.
o The JNDI CORBA Object Services (COS) naming service provider supports the Interoperable Naming Service (INS) specification (99-12-03).

See JNDI Enhancements for details.

* CORBA, Java IDL, and RMI-IIOP

The ORB shipping as part of Java 2 Platform now includes a Portable Object Adapter (POA) functionality. An ORB makes it possible for client(s) to make method invocations on the objects being supported by server(s) executing on the same or different machine(s). ThePOA functionality allows programmers to construct object implementations that are portable between different ORB products, provide support for objects with persistent identities, and much more. Other new features include Portable Interceptors, Interoperable Naming Service, GIOP 1.2 support, Dynamic Management of Any values, and new tools that support a persistent naming service and other features. To learn more about the new features in Java IDL and RMI-IIOP between J2SE v.1.3 and J2SE v.1.4, link to Changes in CORBA Features Between J2SE 1.3 and 1.4.

* JavaTM Platform Debugger Architecture

Full Speed Debugging Support
The Java HotSpot[TM] virtual machine now uses "full-speed debugging". In the previous version of HotSpot, when debugging was enabled, the program executed using only the interpreter. Now, the full performance advantage of HotSpot Technology is available to programs running with debugging enabled. The improved performance allows long running programs to be more easily debugged. It also allows testing to proceed at full speed and the launch of a debugger to occur on an exception.

HotSwap
This feature has been added to allow a class to be updated while under the control of a debugger.

Instance Filters
EventRequests now have the capability of specifying an instance filter, which restricts the events generated by the request to those in which the currently executing instance is the object specified.

Support For Debugging Other Languages
The Java Platform Debugger Architecture has been extended so that non-Java programming language source, which is translated to Java programming language source, can be debugged in the future.

VMDeathRequests
A request can now be made to control target VM termination notification, allowing clean shutdown synchronization

* Internationalization

Unicode 3.0 Support
Character handling in J2SE 1.4 is based on version 3.0 of the Unicode standard. This affects the Character and String classes in the java.lang package as well as the collation and bidirectional text analysis functionality in the java.text package.

Support for Thai and Hindi
Thai and Hindi are now supported in all areas of functionality. See the Supported Locales document for complete information on supported locales and writing systems.

Currency class
The class java.util.Currency was introduced so that currencies can be referenced independent of locales. There are new methods on java.text.NumberFormat and related classes to specify the currency for formatting monetary values.

* JavaTM Plug-in Product

Java Plug-in 1.4 offers the following new features: support of HTTPS through Java Secure Socket Extension (JSSE) rather than the browser; enhanced applet caching so that other files, such as GIF, JPEG, AU, etc., can be cached as part of the download in addition to JAR and class files; applet persistence so that applets may persist across browser page changes; various applet-compatibility enhancements to allow most JDK 1.1 applets to run seemlessly in Java 2; and on Microsoft Windows platforms, support in Java Plug-in for launching applets using the <APPLET> tag.

Version 1.4 also provides access to the DOM via standard, w3c-defined interfaces; assertion and logging support; applet usability enhancements, including a customizable progress bar for applet loading; and enhanced options in the Java Console to allow dynamic reconfiguration of proxy settings, the policy file, etc., while the applet is running.

* Collections Framework

The collections framework has several enhancements in Java 2 SDK 1.4, including a marker interface to advertise random access, an identity-based (rather than equality-based) Map, insertion-order-preserving Map and Set implementations, and several new algorithms for manipulating and returning values from lists. See Collections Framework Enhancements for details.

* Accessibility

New features include support for:
o Mnemonic tab navigation on a JTabbedPane
o Text editing by assistive technologies
o Accessibility of HTML components
o Accessibility of Swing Actions
o List navigation using the first letter of list items
o Component roles DATE_EDITOR, FONT_CHOOSER, GROUP_BOX, SPIN_BOX, STATUS_BAR
o Properties to indicate the presence of a screen magnifier or screen reader, or to specify assistive technologies to load into the Java virtual machine

* Regular Expressions

New package java.util.regex contains classes for matching character sequences against patterns specified by regular expressions.

* Math

A new, efficient method for generating prime numbers with no need for the caller to specify a certainty has been added to class java.math.BigInteger.

* Reflection

Certain reflective operations, specifically java.lang.reflect.Field, java.lang.reflect.Method.invoke(), java.lang.reflect.Constructor.newInstance(), and Class.newInstance(), have been rewritten for higher performance. Reflective invocations and instantiations are several times faster than in previous releases.

* Java Native Interface

A few changes have been made to JNI in v 1.4. First, the version number has been incremented and the specification of JNI_OnLoad updated accordingly. Second, JNI has been enhanced to reflect a new feature of the java.nio package: direct buffers. The contents of a direct buffer can, potentially, reside in native memory outside of the ordinary garbage-collected heap. Finally, the new Invocation Interface routine AttachCurrentTreadAsDaemon allows native code to attach a daemon thread to the virtual machine; this is useful when the VM should not wait for this thread to exit upon shutdown. See JNI Enhancements for more on these enhancements.

Tools and Utilities

See Tool Changes for details on the changes summarized here.

* The java application launcher supports command-line options for support of the new Assertions Facility. On the SolarisTM Operating Environment (SPARCTM Platform Edition) new command-line options are available for specifying 64-bit or 32-bit operation. On all platforms, new option -Xloggc:file logs each garbage-collection event in the specified file. Also on all platforms, the new option -Xcheck:jni performs additional checks for Java Native Interface (JNI) functions at the cost of some performance degradation

* The javadoc tool has several new tags, a dozen new options, smarter inheriting of doc comments, more control over HTML output, improvements to the Doclet API, better error messages, dozens of bug fixes, and is easier to run. For more details, see What's New in Javadoc 1.4. Downloaded separately from the SDK, the MIF doclet has had a major upgrade -- it generates API documentation in FrameMaker and PDF format.

* The native2ascii tool contains bug fixes to now correctly process source files encoded with Unicode encoding.

* The idlj tool now generates server-side bindings following the Portable Servant Inheritance Model. This change involves producing new POA bindings by default. A new command-line option is added to enable you to continue to generate backwards-compatible server-side bindings. To learn more about the Portable Servant Inheritance Model, follow the link.

* The orbd tool, or Object Request Broker Daemon, is a new alternative tool for the Transient Naming Service, tnameserv. ORBD includes both a Transient Naming Service and a Persistent Naming Service. The orbd tool is used to enable clients to transparently locate and invoke persistent objects on servers in the CORBA environment. The orbd tool incorporates the functionality of a Server Manager, an Interoperable Naming Service, and a Bootstrap Name Server. When used in conjunction with the servertool, the Server Manager locates, registers, and activates a server when a client wants to access the server.

* The servertool is new to this release. The servertool provides an ease-of-use interface for application programmers to register, unregister, startup, and shutdown a server.

* The rmic compiler has a new option to enable Portable Object Adapter, or POA support for Remote Method Invocation. The POA enables portability among vendor ORBs, among other uses. To lea rn more about the POA, follow the link. To enable POA support with the rmic compiler, use the arguments rmic -iiop -poa.

* The graphical Policy Tool utility has been enhanced to enable specifying a Principal field indicating what user is to be granted specified access control permissions.

jv'version1.2

name::
* McsEngl.jv'version1.2@cptIt,
* McsEngl.jv1.2@cptIt,

I consider the new collections to be one of the two major features in Java 1.2 (the other is the Swing library,
[B. ECKEL, Thinking In Java, 1998jan]

jv'version1.1

name::
* McsEngl.jv'version1.1@cptIt,
* McsEngl.jv1.1@cptIt,

In Java 1.1 a dramatic change has been accomplished in the creation of the new AWT. Most of this change revolves around the new event model used in Java 1.1: as bad, awkward, and non-object-oriented as the old event model was, the new event model is possibly the most elegant I have seen.
[B. ECKEL, Thinking In Java, 1998jan]

jv'version1.0

name::
* McsEngl.jv'version1.0@cptIt,
* McsEngl.jv1.0@cptIt,

lcp.instance.JavaScript (ljs) {1995}

name::
* McsEngl.conceptIt554,
* McsEngl.JavaScript,
* McsEngl.js,
* McsEngl.lagJsg, {2017-02-23}
* McsEngl.ljs, {2016-05-10}
* McsEngl.JavaScript,
* McsEngl.language.JavaScript,
* McsEngl.language.Javacript.Generic {2017-02-23},
* McsEngl.pl.javascript, {2014-01-30}
* McsEngl.programing-language.JavaScript,
* McsEngl.js@cptIt554,
* McsEngl.lcpJs,
* McsEngl.plJs, {2014-01-29}
* McsElln.ΤζαβαΣκριπτ@cptIt554,
* McsElln.ΤΣ@cptIt554,

ljs'DEFINITION

JavaScript is a scripting language designed and first implemented by Netscape (with help from Sun Microsystems). Netscape first introduced a JavaScript interpreter in Navigator 2. The interpreter was an extra software component in the browser that was capable of interpreting JavaSript source code inside an HTML document. This meant that Web page authors using no more than a simple text editor could place special instructions or programs directly inside Web pages to make them more dynamic and interactive.
[http://www.ryerson.ca/JavaScript/lectures/newIndex.html]

JavaScript provides the means to perform useful, simple tasks to improve the style of your Web site.
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

JavaScript is a general purpose programming language that was introduced as the page scripting language for Netscape Navigator. It is still widely believed to be a subset of Java, but it is not.
It is a Scheme-like language with C-like syntax and soft objects.
JavaScript was standardized in the ECMAScript Language Specification, Third Edition.
[http://www.json.org/js.html] 2010-10-07

ljs'Archetype

name::
* McsEngl.ljs'Archetype@cptIt,

ljs'Model (Algorithm)

name::
* McsEngl.ljs'Model (Algorithm)@cptIt,
* McsEngl.ljsalgo@cptIt,

ljsalgo'sut.FUNCTION (ljsf)

name::
* McsEngl.ljsalgo'sut.FUNCTION (ljsf)@cptIt,
* McsEngl.ljsf@cptIt,

_ADDRESS.WPG:
* http://wesbos.com/arrow-functions//

ljsf'argument

name::
* McsEngl.ljsf'argument@cptIt,

_DEFAULT:
function calculateBill(total, tax = 0.13, tip = 0.15) {
return total + (total * tax) + (total * tip);
}
[http://wesbos.com/javascript-default-function-arguments/]

ljsf'NAME

name::
* McsEngl.ljsf'NAME@cptIt,
* McsEngl.ljsarchetype.algorithm.SUBPROGRAM@cptIt,
* McsEngl.ljs'function@cptIt554i,
* McsEngl.ljs'subroutine@cptIt,
* McsEngl.ljs'codeS.unitM.collection.FUNCTION@cptIt,
* McsEngl.ljsf@cptIt, {2014-06-08}
* McsEngl.ljsf@cptIt, {2014-06-08}
* McsEngl.ljsfcn@cptIt, {2014-03-09}

ljsf'name-notation

name::
* McsEngl.ljsf'name-notation@cptIt,

fWhoDoingReturn:
* f1EncodeRs
[hmnSngo.2016-08-27]

fWhoDoing_RReturn:
- fEvtStopPropagation_RB: return boolean.
- We see THE-INPUT of a-function in its arguments.
[hmnSngo.2015-12-15]

ljsf'DEFINITION

name::
* McsEngl.ljsf'DEFINITION@cptIt,

_DEFINITION:
Functions are one of the fundamental building blocks in JavaScript. A function is a JavaScript procedure—a set of statements that performs a task or calculates a value. To use a function, you must define it somewhere in the scope from which you wish to call it.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions]
===
Generally speaking, a function is a "subprogram" that can be called by code external (or internal in the case of recursion) to the function. Like the program itself, a function is composed of a sequence of statements called the function body. Values can be passed to a function, and the function will return a value.
In JavaScript, functions are first-class objects, because they can have properties and methods just like any other object. What distinguishes them from other objects is that functions can be called. In brief, they are Function objects.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions]
===
A JavaScript function is a block of code designed to perform a particular task.
A JavaScript function is executed when "something" invokes it (calls it).
[http://www.w3schools.com/js/js_functions.asp]

ljsf'GENERIC

name::
* McsEngl.ljsf'GENERIC@cptIt,

_GENERIC:
Functions are objects of the-Function constructor.
> Function.prototype.isPrototypeOf(function f(){}) true
* Function.prototype === Function.__proto__true
* js-named-semantic-unit#ql:js'named_semantic_unit#

_DESCRIPTION:
js-functions ARE js-objects:
1) they can have members like objects:
> function f(){}
undefined
> f.s = "a string"
"a string"
> f.s
"a string"
2) they have a constructor-function, like all objects, the Function function:
> (function f(){}) instanceof Function
true
3) their prototype is the same with its constructor prototype:
> (function f(){}).__proto__ === Function.prototype
true
[hmnSngo.2014-07-23]

ljsf'code

name::
* McsEngl.ljsf'code@cptIt,
* McsEngl.ljsfunction@cptIt,
* McsEngl.ljsfunction-keyword@cptIt,
* McsEngl.ljs'calling-code@cptIt,
* McsEngl.ljs'code.function@cptIt,
* McsEngl.ljsfcn'code@cptIt,
* McsEngl.ljs'function@cptIt554i,
* McsEngl.ljs'subroutine@cptIt,
* McsEngl.ljs'code.object.FUNCTION@cptIt,
* McsEngl.ljs'fcn@cptIt, {2013-09-05}

=== _NOTES: Since all functions are stored under (at least) the window object they can all be referred to as ‘methods’.
[http://net.tutsplus.com/tutorials/javascript-ajax/javascript-and-the-dom-series-lesson-1/]

_GENERIC:
* js-object#ql:js'object#
* js-prebuilt-object#ql:js'object.prebuilt#,
* unit-of-code#ql:js'unit_of_code#,
===
Arrays and functions are implemented as objects.
[http://javascript.crockford.com/survey.html]

_DEFINITION:
A function is an 'object' with ONE key-value where the value is a 'subprogram' (= does processing).
[hmnSngo.2013-12-23]
===
A function is a block of code that will be executed when "someone" calls it:
[http://www.w3schools.com/js/js_functions.asp]
===
JavaScript functions perform actions; they can also return values. Sometimes these are the results of calculations or comparisons. Functions are also called "global methods".
Functions combine several operations under one name. This lets you streamline your code. You can write out a set of statements, name it, and then execute the entire set by calling it and passing to it any information it needs.
You pass information to a function by enclosing the information in parentheses after the name of the function. Pieces of information that are passed to a function are called arguments or parameters. Some functions do not take any arguments at all while others take one or more arguments. In some functions, the number of arguments depends on how you are using the function.
JavaScript supports two kinds of functions: those that are built into the language, and those you create yourself.
[http://msdn.microsoft.com/en-us/library/ie/yh6c50h7(v=vs.94).aspx]
===
Generally speaking, a function is a "subprogram" that can be called by code external (or internal in the case of recursion) to the function. Like the program itself, a function is composed of a sequence of statements called the function body. Values can be passed to a function, and the function can return a value.
In JavaScript, functions are first-class objects, i.e. they are objects and can be manipulated and passed around like just like any other object. Specifically, they are Function objects.
[https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope]
===
* Function is a container of code which RETURNS code when we use it.
Object is a container of code which inherits members and whose members we use.
[hmnSngo.2012-01-29]
* Function is a container of code that will be executed by an event or by a call to the function.
[hmnSngo.2012-01-27]
* Function is a processing--unit-of-code we can call upon.
[hmnSngo.2011-10-16]
===
Objects and functions are the other fundamental elements in the language. You can think of objects as named containers for values, and functions as procedures that your application can perform.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals]
===
Every function in Javascript is an instance of the Function object:
...
A function instance has properties and methods.
[http://en.wikipedia.org/wiki/JavaScript_syntax]
===
A function is a piece of code that sits dormant until it is referenced or called upon to do its "function". In addition to controllable execution, functions are also a great time saver for doing repetitive tasks.
Instead of having to type out the code every time you want something done, you can simply call the function multiple times to get the same effect. This benefit is also known as "code reusability".
[http://www.tizag.com/javascriptT/javascriptfunction.php]
===
* "A function is a reusable code-block that will be executed by an event, or when the function is called." - http://www.w3schools.com/js/js_functions.asp
===
* A function is just another type of variable. The only difference from the other types we have looked at so far is that a function contains code rather than numbers or text strings.
[http://javascript.about.com/od/3functions/a/fun01.htm]
===
* Συνάρτηση (function) ονομάζεται ένα ΤΜΗΜΑ ΚΩΔΙΚΑ (μια ομάδα από εντολές) με ξεχωριστό όνομα που εκτελεί μια συγκεκριμένη εργασία. Μια συνάρτηση καταρχήν ορίζεται και κατόπιν καλείται. Η κλήση μιας συνάρτησης γίνεται με το όνομά της και έχει αποτέλεσμα την εκτέλεση του κώδικα που περιέχει.
[Λιακέας, Η γλώσσα JavaScript. 2002, 101]
===
Arrays and functions are implemented as objects.
[http://javascript.crockford.com/survey.html]
===
* As soon as your JavaScript code grows to more than a few lines you will start getting sections of the code that you will want to run more than once. Rather than duplicating the code multiple times (and hence having multiple places to make changes if you decide to change what it does) we can pull the code out into a separate module of its own and call that module from each place where we want the code to run. In JavaScript these separate modules are called functions and JavaScript provides three ways to define a function.
[http://javascript.about.com/od/3functions/a/functions.htm]
===
* The most basic purpose of a function is to contain code. A function's advanced features are that it can take parameters and return values.
[http://www.webdevelopersjournal.com/articles/jsintro3/js_begin3.html]
===
The function keyword begins the definition of a subroutine that can be called in other parts of the program. A function is declared as:

function myfunction(parameter1, parameter2) { // body of the function }
The keyword is followed by a name for the function. The rules for function names are the same as for variable names. After the name within the parentheses is a list of all the parameters. In our example the function has only two parameters, but it actually can have as many parameters as you need. Unlike C and other languages, the loose typing of JavaScript does not require that you indicate what data type these parameters are. The data types are interpreted when the function is called elsewhere. For example, suppose we have defined a function to find the average of two numbers. This function can be called in the code else as shown below.

xxx = 23; yyy = 14; averaged_value = Average(xxx, yyy);
After any processing within itself, the function can return a value by using the return keyword followed by a value. The actual code for the Average function we used above might be:

function Average(value1, value2)
{
average = (value1 + value2) / 2;
return average;
}
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

lcpJs'subroutine.return:
return {'headers':headers, 'min_indent':min_indent, 'href':document.location.href};

ljsf'body

name::
* McsEngl.ljsf'body@cptIt,

_DESCRIPTION:
In JavaScript, addition is an operator, but it could be wrapped in a function like this (and as pointless as this looks, we will come across situations where it is actually useful):

function add(a, b) {
return a + b;
}

show(add(2, 2));

add is the name of the function. a and b are the names of the two arguments. return a + b; is the body of the function.
[http://eloquentjavascript.net/chapter3.html#p6a4d922b]

ljsf'doing.ACTION-OF-FUNCTION

name::
* McsEngl.ljsf'doing.ACTION-OF-FUNCTION@cptIt,
* McsEngl.ljsf'action@cptIt,

_DESCRIPTION:
ALL functions have an-action.
[hmnSngo.2015-12-15]

ljsf'doing.DEFINING

name::
* McsEngl.ljsf'doing.DEFINING@cptIt,
* McsEngl.ljsf'creation@cptIt,
* McsEngl.ljsfcn'definition@cptIt,
* McsEngl.ljsfcn'declaration@cptIt,
* McsEngl.ljsfcn'creating@cptIt,
====== lagoGreek:
* McsElln.τσ'ορισμός-συνάρτησης@cptIt554,

_DESCRIPTION:
declaration: function fname() {...}
===
var fname = function() {}
===
http://dmitrysoshnikov.com/ecmascript/es5-chapter-3-1-lexical-environments-common-theory/#first-class-functions
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-3-1-lexical-environments-common-theory/#rules-of-function-creation-and-application]
===
All functions should be declared before they are used.
[http://javascript.crockford.com/code.html]
===
There are disadvantages to the first two methods shown. The main one is that the entire functions are effectively treated as one statement. The method used in the last example is exactly the same function written in a way that makes it easier to split the code over multiple lines. This makes this third alternative the easiest one to use most of the time. There will be times when using one of the other two methods makes the code much easier to write so it is worth remembering that there are three ways of defining functions.
[http://javascript.about.com/od/3functions/a/fun01.htm]

_SPECIFIC:
There are three notations for defining functions:
- function statement,
- function operator, and
- function constructor.
[http://javascript.crockford.com/survey.html]

1) var x = Function('a = 2; b = 3; c = 4;');

2) var x = function() {a = 2; b = 3; c = 4;};

3) function x() {
a = 2;
b = 3;
c = 4;
}

scope:
(function () {
var x = ...;
})();

or

v = (function () {
...
return expr;
})();

_Example:
//x,y is the argument. 'return x+y' is the function body, which is the last in the argument list.
var add = new Function('x', 'y', 'return x+y');
var t = add(1, 2);
alert(t); //3
...
function add(x, y) {
return x + y;
}
var t = add(1, 2);
alert(t); //3
[http://en.wikipedia.org/wiki/JavaScript_syntax]

ljsf'defining.function-operator

name::
* McsEngl.ljsf'defining.function-operator@cptIt,

_DESCRIPTION:
The function operator is a prefix operator that produces a function object. It looks similar to the function statement.

function name(argumentlist) block

The name is optional. If it is provided, then it can be used by the function body to call itself recursively. It can also be used to access the function's object members (except on IE). If the name is omitted, then it is an anonymous function.

The function operator is commonly used to assign functions to a prototype.

The function operator can also be used to define functions in-place, which is handy when writing callbacks.
[http://javascript.crockford.com/survey.html]
===
Here’s an example where the same function is declared dynamically using the function operator:

var eatCakeAnon = function(){
alert("So delicious and moist");
};
eatCakeAnon();
[http://helephant.com/2008/08/23/javascript-anonymous-functions/]

ljbf'defining.Function-declaration

name::
* McsEngl.ljbf'defining.Function_declaration@cptIt,
* McsEngl.ljsf'defining.Function-statement@cptIt,
* McsEngl.ljsfcn-statement@cptIt,
* McsEngl.ljs'statement.function@cptIt,

_DESCRIPTION:
A Function Declaration defines a named function variable without requiring variable assignment. Function Declarations occur as standalone constructs and cannot be nested within non-function blocks. It’s helpful to think of them as siblings of Variable Declarations. Just as Variable Declarations must start with “var”, Function Declarations must begin with “function”.
e.g.
function bar() {
return 3;
}

ECMA 5 (13.0) defines the syntax as
function Identifier ( FormalParameterListopt ) { FunctionBody }
[http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions//]

===
Note: The function statement
function membername(...) {...}
is shorthand for
var membername = function membername(...) {...};
[http://javascript.crockford.com/private.html]

===
Function Declarations
Perhaps the most interesting change that we can make is a rather subtle one, but it's eschewing normal function declarations for creating anonymous functions and assigning them to a variable.

// Don't do this:
function getData() { }
// Do this instead:
var getData = function() { };

There are a number of good habits that are instilled when you use this particular technique.
* Makes it easier to understand "functions as an object". I've found that when you show new developers a function being assigned to a variable it suddenly becomes much more obvious that a function is actually an object and can be manipulated as such (and that a function can be passed as an argument to another function). Thus students are advanced along the path towards a better understanding of functional programming.
* It enforces good semicolon habits. Traditional function declaration is the only situation in which semicolons aren't needed (save for conditional statements and loops, naturally) and it makes it much more obvious when they're required all the time.
* Doesn't have much of the baggage traditionally associated with functions and scope.
[http://ejohn.org/blog/javascript-as-a-first-language/]
===
Use declarations, please
In the code of unexperienced developers, functions are often declared by expressions:

... code ...
var f = function() { ... }
...
Function Declarations are much more readable and shorter. Use them instead.

... code ...
function f() { ... }
...
Besides, functions declared this way can be called before it’s definition.

Use expressions only if you mean it. E.g for conditional function definition.
[http://javascript.info/tutorial/functions-declarations-and-expressions]

_DESCRIPTION:
So what’s a Function Statement?
Its sometimes just a pseudonym for a Function Declaration. However as kangax pointed out, in mozilla a Function Statement is an extension of Function Declaration allowing the Function Declaration syntax to be used anywhere a statement is allowed. It’s as yet non standard so not recommended for production development
[http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions//]

===
The function statement creates a named function within the current scope.

function name(argumentlist) block

Functions can be nested. See Closures. An argumentlist is zero or more argument names, separated with commas. A block is a list of zero or more statements enclosed in { }.

The function statement is a shorthand for the function operator form:

var name = function name (argumentlist) block ;
[http://javascript.crockford.com/survey.html]

===
Here’s an example where a function is declared in the regular way using the function statement:

function eatCake(){
alert("So delicious and moist");
};
eatCake();
[http://helephant.com/2008/08/23/javascript-anonymous-functions/]

ljbf'defining.Function_expression

name::
* McsEngl.ljbf'defining.Function_expression@cptIt,

_DESCRIPTION:
FUNCTION DECLARATION
function foo() { ... }
Because of FUNCTION HOISTING, the function declared this way can be called both after and before the definition.

FUNCTION EXPRESSION

NAMED FUNCTION EXPRESSION
var foo = function bar() { ... }

ANONYMOUS FUNCTION EXPRESSION
var foo = function() { ... }

foo() can be called only after creation.

IMMEDIATELY-INVOKED FUNCTION EXPRESSION (IIFE)
(function() { ... }());

Conclusion?
Crockford recommends to use function expression because it makes it clear that foo is a variable containing a function value. Well, personally, I prefer to use Declaration unless there is a reason for Expression.
[http://stackoverflow.com/a/13481152]
===
What is a Function Expression?
A Function Expression defines a function as a part of a larger expression syntax (typically a variable assignment ). Functions defined via Functions Expressions can be named or anonymous. Function Expressions must not start with “function” (hence the parentheses around the self invoking example below)

e.g.
//anonymous function expression
var a = function() {
return 3;
}

//named function expression
var a = function bar() {
return 3;
}

//self invoking function expression
(function sayHello() {
alert("hello!");
})();

ECMA 5 (13.0) defines the syntax as
function Identifieropt ( FormalParameterListopt ) { FunctionBody }

(though this feels incomplete since it omits the requirement that the containing syntax be an expression and not start with “function”)

The function name (if any) is not visible outside of it’s scope (contrast with Function Declarations).
[http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions//]

ljsf'defining.Function-constructor

name::
* McsEngl.ljsf'defining.Function-constructor@cptIt,

_DESCRIPTION:
The LAST parameter is the function's body.
===
The function constructor takes strings containing the arguments and body, and produces a function object.
new Function(strings...)
Do not use this form. The quoting conventions of the language make it very difficult to correctly express a function body as a string. In the string form, early error checking cannot be done. It is slow because the compiler must be invoked every time the constructor is called. And it is wasteful of memory because each function requires its own independent implementation.
[http://javascript.crockford.com/survey.html]

_CODE.LJS:
> var f=new Function('x','y','z','x=x+2;return x+y+z')
undefined
> f(1,2,3)
8
> f(1,1,1)
5
===
> var f3 = new Function("a", "b", "return a + b");
undefined
> f3(2,4)
6

ljsf'doing.CALLING

name::
* McsEngl.ljsf'doing.CALLING@cptIt,
* McsEngl.ljs'call-of-function@cptIt,
* McsEngl.ljsf'call@cptIt,
* McsEngl.ljsfcn'activation@cptIt,
* McsEngl.ljsfcn'applying@cptIt,
* McsEngl.ljsfcn'call@cptIt,
* McsEngl.ljsfcn'execution@cptIt,
* McsEngl.ljsfcn'invokation@cptIt,
* McsEngl.ljsfcn'invoking@cptIt,
====== lagoGreek:
* McsElln.τσ'κλήση-συνάρτησης@cptIt554,
* McsElln.τσ'εκτέλεση-συνάρτησης@cptIt554,

_DESCRIPTION:
When calling a function, it is not required that you pass a fixed number of parameters.
Excess parameters are ignored.
Missing parameters are given the value undefined.
This makes it easy to write functions that deal with optional arguments.
[http://javascript.crockford.com/survey.html]
===
A new set of vars is made every time the function is called. This allows functions to be recursive.
[http://javascript.crockford.com/survey.html]
===
ECMAScript manages executions of functions with using the model of a call-stack, which is called here the execution context stack. Let’s consider some generic models for storing the variables (bindings). The things interesting for us — systems with closures and without them.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-3-1-lexical-environments-common-theory/#environment]

ljsf'calling.Method-form

name::
* McsEngl.ljsf'calling.Method-form@cptIt,

_CODE.LJS:
thisObject.methodName(arguments)
thisObject[methodName](arguments)

ljsf'calling.Function-form

name::
* McsEngl.ljsf'calling.Function-form@cptIt,

_CODE.LJS:
functionObject(arguments)

ljsf'calling.Construction-form

name::
* McsEngl.ljsf'calling.Construction-form@cptIt,

_CODE.LJS:
new FunctionObject(arguments)

ljsf'calling.Apply-form

name::
* McsEngl.ljsf'calling.Apply-form@cptIt,

_CODE.LJS:
functionObject.apply(thisObject,arguments)
functionObject.call(thisObject,arguments)

ljsf'calling.Passing-by-Value-or-by-Reference

name::
* McsEngl.ljsf'calling.Passing-by-Value-or-by-Reference@cptIt,

_DESCRIPTION:
When passing in a primitive type variable like a string or a number, the value is passed in by value. This means that any changes to that variable while in the function are completely separate from anything that happens outside the function. Let’s take a look at the following example:

function myfunction(x)
{
// x is equal to 4
x = 5;
// x is now equal to 5
}

var x = 4;
alert(x); // x is equal to 4
myfunction(x);
alert(x); // x is still equal to 4
[http://snook.ca/archives/javascript/javascript_pass]

ljsf'doing.OBJECT-CREATING

name::
* McsEngl.ljsf'doing.OBJECT-CREATING@cptIt,

_DESCRIPTION:
Js functions are at the same time 'constructors', ie they can create objects like the classes in ool with class inheritance.
var obj = new fcn();
[hmnSngo.2014-03-23]

ljsf'first-class-citizen

name::
* McsEngl.ljsf'first-class-citizen@cptIt,

_DESRIPTION:
In JavaScript, functions are “first-class citizens” — they can be assigned to variables or passed to other functions as arguments.
[http://autotelicum.github.io/Smooth-CoffeeScript/literate/js-intro.html#functions-as-arguments]

ljsf'input (optional)

name::
* McsEngl.ljsf'input (optional)@cptIt,

_DESCRIPTION:
* PARAMETERS usually name the input variables in the-function code.
* ARGUMENTS usually name the-values of input variables in the execution of functions.
[hmnSngo.2015-12-15]
===
Arguments and parameters are often referred to interchangeably. Nevertheless, for the purpose of this tutorial, we will make a distinction. In most standards, parameters (or formal parameters) are what’s given in the function declaration, and arguments (or actual parameters) are what’s passed to the function.
[https://www.smashingmagazine.com/2016/07/how-to-use-arguments-and-parameters-in-ecmascript-6/#arguments-versus-parameters]

ljsf'variable.INPUT

name::
* McsEngl.ljsf'variable.INPUT@cptIt,
* McsEngl.ljsf'input@cptIt,
* McsEngl.ljsf'parameter@cptIt,

_NOTATION:
* xNameIn
[hmnSngo.2015-12-15]
===
* xInName
[hmnSngo.2014-12-01]

_DESCRIPTION:
'Parameters' usually they call the input-variables, 'arguments' the input values.
[hmnSngo.2014-12-01]

_CODE.LJS:
function add(x, y) {
var total = x + y;
return total;
}
> add()
NaN // You can't perform addition on undefined
> add(2, 3, 4)
5 // added the first two; 4 was ignored
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Functions]

ljsf'argument

name::
* McsEngl.ljsf'argument@cptIt,
* McsEngl.lcpJs'value-of-parameter-of-function@cptIt,

_DESCRIPTION:
Arguments are the-values of the-parameters of a-function.
[hmnSngo.2015-11-22]
===
A function has access to an arguments array. It contains all of the parameters that were actually sent by the caller. It makes it easy to deal with functions taking a variable number of arguments.
[http://javascript.crockford.com/survey.html]
===
Functions can become more powerful. They can take parameters, which means that we can pass variables to a function for the function to work on.
[http://www.webdevelopersjournal.com/articles/jsintro3/js_begin3.html]
===
Every function, when called, receives a hidden parameter called arguments, which is an array of all the arguments passed to the function.

_CODE.LJS:
function sumValues() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}

* RETURNS: the correct value, no matter the quantity of arguments.

function sumValues(val1, val2, val3) {
return val1 + val2 + val3;
}

var R1 = sumValues(3, 5, 6, 2, 7);
var R2 = sumValues(12, 20);

Both calls will return surprising results (surprising from the caller's perspective.)

In the first case, since we are not expecting more than 3 arguments, the extra values, 2 and 7, will simply be ignored. It's bad because the returned value is probably not what the calling code expected.

It's even worse when we look at the second example. We are passing only 2 arguments. What happens to val3? It will have the value of undefined. This will cause the resulting sum to be NaN, which is clearly undesirable.
[http://www.learn-javascript-tutorial.com/AdvancedTechniques.cfm#beyond-basics]

ljsfmbr.arguments

name::
* McsEngl.ljsfmbr.arguments@cptIt,
* McsEngl.ljs'arguments-of-function@cptIt,
* McsEngl.ljsfcn'arguments@cptIt,
* McsEngl.ljsfcn'arguments-array@cptIt,

_DESCRIPTION:
That may seem a little silly, but functions have access to an additional variable inside their body called arguments, which is an array-like object holding all of the values passed to the function. Let's re-write the add function to take as many values as we want:

function add() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i];
}
return sum;
}

> add(2, 3, 4, 5)
14
That's really not any more useful than writing 2 + 3 + 4 + 5 though. Let's create an averaging function:

function avg() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i];
}
return sum / arguments.length;
}
> avg(2, 3, 4, 5)
3.5
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Functions]

_CODE.LJS:
> function Mammal(){}
undefined
> Mammal.arguments
null

_DESCRIPTION:
A function has access to an arguments array. It contains all of the parameters that were actually sent by the caller. It makes it easy to deal with functions taking a variable number of arguments.
[http://javascript.crockford.com/survey.html]
===
Every function, when called, receives a hidden parameter called arguments, which is an array of all the arguments passed to the function.

_CODE.LJS:
function sumValues() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}

* RETURNS: the correct value, no matter the quantity of arguments.

ljsf'as-argument

name::
* McsEngl.ljsf'as-argument@cptIt,

Passing an anonymous function as an argument:

var myFn = function(fn) {
var result = fn();
console.log(result);
};

myFn(function() { return 'hello world'; }); // logs 'hello world'
[http://autotelicum.github.io/Smooth-CoffeeScript/literate/js-intro.html#functions-as-arguments]

Passing a named function as an argument:

var myFn = function(fn) {
var result = fn();
console.log(result);
};

var myOtherFn = function() {
return 'hello world';
};

myFn(myOtherFn); // logs 'hello world'
[http://autotelicum.github.io/Smooth-CoffeeScript/literate/js-intro.html#functions-as-arguments]

ljsfipt'resource

name::
* McsEngl.ljsfipt'resource@cptIt,

_ADDRESS.WPG:
* https://www.smashingmagazine.com/2016/07/how-to-use-arguments-and-parameters-in-ecmascript-6//

ljsf'member (member)

name::
* McsEngl.ljsf'member (member)@cptIt,
* McsEngl.ljsf'member@cptIt,
* McsEngl.ljsf'property@cptIt,
* McsEngl.ljsfcn'attribute@cptIt,

_DESCRIPTION:
In js we can set and access attributes to functions (because they are 'objects'):
var myFun = function(){
...
};
myFun.someProperty= 'abc';
console.log(myFun.someProperty); //#=> 'abc
[http://nodetuts.com/pdf/handson-nodejs-sample.pdf]

_PROPERTY:
> Object.getOwnPropertyNames(f).sort()
* jsf.arguments#ql:jsf.arguments_property#,
* jsf.caller,
* jsf.length,
* jsf.name,
* jsf.prototype,
> Function.prototype: Object.getOwnPropertyNames(f.__proto__).sort()
* jsf.apply,
* jsf.arguments,
* jsf.bind,
* jsf.call,
* jsf.caller,
* jsf.constructor,
* jsf.length,
* jsf.name,
* jsf.toString,
> Object.prototype: Object.getOwnPropertyNames(f.__proto__.__proto__).sort()
* __defineGetter__,
* __defineSetter__,
* __lookupGetter__,
* __lookupSetter__,
* __proto__,
* jsf.constructor,
* jsf.hasOwnProperty,
* jsf.isPrototypeOf,
* jsf.propertyIsEnumerable,
* jsf.toLocaleString,
* jsf.toString,
* jsf.valueOf,
===
> function f(){}
undefined
> Object.getOwnPropertyNames(f).sort()
["arguments", "caller", "length", "name", "prototype"]
> Object.getOwnPropertyNames(f.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
> Object.getOwnPropertyNames(f.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames(f.__proto__.__proto__.__proto__).sort()
TypeError: Object.getOwnPropertyNames called on non-object
===
Object.getOwnPropertyNames(Function).sort()
["arguments", "caller", "length", "name", "prototype"]
Object.getOwnPropertyNames(Function.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
Object.getOwnPropertyNames(Function.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

SPECIFIC

_SPECIFIC:
> var fc = new Function()
undefined
> typeof fc
"function"
> Object.getOwnPropertyNames(fc).sort()
["arguments", "caller", "length", "name", "prototype"]
> Object.getOwnPropertyNames(Function).sort()
["arguments", "caller", "length", "name", "prototype"]
===
> Object.getOwnPropertyNames(Object.getPrototypeOf(fc)).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
> Object.getOwnPropertyNames(fc.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
> Object.getOwnPropertyNames(Function.prototype).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]

ljsfmbr.apply()

name::
* McsEngl.ljsfmbr.apply()@cptIt,
* McsEngl.ljsapply@cptIt,
* McsEngl.ljsf'apply@cptIt,
* McsEngl.ljs'apply@cptIt,
* McsEngl.ljsfcn'apply@cptIt,

_DESCRIPTION:
Every JavaScript function is equipped with an apply method that allows you to call that function with specific binding (a specific this, if you will). It takes two arguments: the binding object, and an array of the arguments to be passed to the function.
The nice thing with an array is, you don’t need to know in advance which arguments the function you’ll call apply on will take. You can write code independent of the actual argument list—just construct the array any way you want, and pass it on. You can also take an existing array of arguments and tweak it to your heart’s content before passing it along.
[http://alistapart.com/article/getoutbindingsituations#section4]
===
Calls the function, substituting the specified object for the this value of the function, and the specified array for the arguments of the function.
apply([thisObj[,argArray]])
[http://msdn.microsoft.com/en-us/library/ie/4zc42wh1(v=vs.94).aspx]
===
apply([thisArg : Object, [parameters : Array]]) : Object
Call this with the this value inside the function bound to thisArg and the parameters to the function from parameters. Returns the result of the function call.
[http://www.javascripture.com/Function#apply]
===
NOTE: While the syntax of this function is almost identical to that of call(), the fundamental difference is that call() accepts an argument list, while apply() accepts a single array of arguments.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply]

_CODE.LJS:
> var x,o1,p2,r1,r2,r3
> x=4
> o1={x:2}
> o2={x:7}
> f=function(m,n){return m * n * this.x;}
> r1=f(3,1)
12 {= 3*1*4}
> r2=f.call(o1,3,1)
6 {= 3*1*2}
> r2=f.call(o2,3,1)
21 {= 3*1*7}
> r3=f.apply(o2,[3,1])
21
> r3=f.apply(o1,[3,1])
6
[http://javascript.about.com/od/byexample/a/objectoriented-call-apply-example.htm]
===
var whatsThis = function() { console.log(this); }
whatsThis.apply('hello'); //hello
===
> Math.max.apply(undefined, [1,3,4,8])
8
> Math.max(1,3,4,8)
8

ljsfmbr.arguments

name::
* McsEngl.ljsfmbr.arguments@cptIt,
* McsEngl.ljsarguments@cptIt,
* McsEngl.ljsf'arguments@cptIt,
* McsEngl.ljsf.arguments-property@cptIt,

_DESCRIPTION:
Every function has an automatic arguments variable that behaves as an array of all the arguments that were passed to it.
[http://alistapart.com/article/getoutbindingsituations#section7]
===
An Array-like object corresponding to the arguments passed to a function.

Variable of the function scope
Implemented in  JavaScript 1.1
ECMAScript Version  ECMA-262
Description
The arguments object is a local variable available within all functions; arguments as a property of Function can no longer be used.

You can refer to a function's arguments within the function by using the arguments object. This object contains an entry for each argument passed to the function, the first entry's index starting at 0. For example, if a function is passed three arguments, you can refer to the argument as follows:

arguments[0]
arguments[1]
arguments[2]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments]

_CODE.LJS:
> function f(){console.log(arguments)}
undefined
> f(1)
[1]
undefined
> f(1,"s")
[1, "s"]
undefined
> f(1,"s",{p1:1})
[1, "s", Object]
0: 1
1: "s"
2: Object
callee: function f(){console.log(arguments)}
length: 3
__proto__: Object
===
> function f(){console.log(arguments.callee)}
undefined
> f({p1:1})
function f(){console.log(arguments.callee)}
===
//with 3 parameters:
0: Object
1: Object
2: Object
callee: (...)
get callee: function ThrowTypeError() { [native code] }
set callee: function ThrowTypeError() { [native code] }
caller: (...)
get caller: function ThrowTypeError() { [native code] }
set caller: function ThrowTypeError() { [native code] }
length: 3
__proto__: Object
===
> typeof f.arguments
"object"
===
> function f(n){console.log(arguments[0]);console.log(arguments[1]);return "return"}
undefined
> f(5)
5
undefined
"return"
===
> function f(n){console.log(arguments[0]);console.log(arguments[1]);return arguments}
undefined
> f(5,6)
5
6
[5, 6]
> f(5)
5
undefined
[5]

ljsfmbr.bind-function

name::
* McsEngl.ljsfmbr.bind-function@cptIt,
* McsEngl.ljsbind@cptIt,
* McsEngl.ljsbind-function@cptIt,

_DESCRIPTION:
The bind() method creates a new function that, when called, has its this keyword set to the provided value, with a given sequence of arguments preceding any provided when the new function is called.
Syntax
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Parameters
thisArg
The value to be passed as the this parameter to the target function when the bound function is called. The value is ignored if the bound function is constructed using the new operator.
arg1, arg2, ...
Arguments to prepend to arguments provided to the bound function when invoking the target function.
Return value
A copy of the given function with the specified this value and initial arguments.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind]

_CODE.LJS:
> Object.getPrototypeOf(Math) === Object.prototype //true
> const fProto = Object.getPrototypeOf.bind(Object) //undefined
> fProto(Math) === Object.prototype //true

ljsfmbr.call()

name::
* McsEngl.ljsfmbr.call()@cptIt,
* McsEngl.lgjscall@cptIt,
* McsEngl.ljscall@cptIt,
* McsEngl.ljscall-function@cptIt,

_DESCRIPTION:
When you do know exactly which arguments you want to pass, call may feel nicer, as it takes the arguments themselves, not an array of them:
var fx = christophe.greet;
fx.call(christophe, elodie);
// => "Hi Elodie, I'm Christophe."
However, with call you lose the flexibility of an array. It all depends on your particular situation: aside from this difference, apply and call have identical semantics and behavior.
[http://alistapart.com/article/getoutbindingsituations#section4]
===
The call and apply properties allow us to identify which particular object is to be the one meant by any references to "this" within the function being called. It basically allows us to define a method that is intended for use with a number of different objects and identify which object we want to use the method with at the time that we run it. The only difference between the two is that call needs all of the parameters to be specified normally with just the one extra one at the start to identify the object whereas apply just takes two parameters with all of the parameters for the function being passed as an array in the second parameter.
[http://javascript.about.com/od/byexample/a/objectoriented-call-apply-example.htm]

_CODE.LJS:
> var x,o1,p2,r1,r2,r3
> x=4
> o1={x:2}
> o2={x:7}
> f=function(m,n){return m * n * this.x;}
> r1=f(3,1)
12
> r2=f.call(o1,3,1)
6
> r2=f.call(o2,3,1)
21
> r3=f.apply(o2,[3,1])
21
> r3=f.apply(o1,[3,1])
6
[http://javascript.about.com/od/byexample/a/objectoriented-call-apply-example.htm]

ljsfmbr.constructor

name::
* McsEngl.ljsfmbr.constructor@cptIt,
* McsEngl.ljsf'constructor@cptIt,
* McsEngl.ljsfcn'constructor@cptIt,

_CODE.LJS:
> function f(){}
undefined
> f.constructor
function Function() { [native code] }
===
> Object.getOwnPropertyNames(Object.getPrototypeOf(Animal.constructor)).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
> Object.getOwnPropertyNames(Animal.constructor).sort()
["arguments", "caller", "length", "name", "prototype"]
> Object.getOwnPropertyNames(Function.constructor).sort()
["arguments", "caller", "length", "name", "prototype"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(Function.prototype)).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

ljsfmbr.name

name::
* McsEngl.ljsfmbr.name@cptIt,
* McsEngl.ljsf.name-methodNo@cptIt,
* McsEngl.ljsfp.name@cptIt,
* McsEngl.ljsfcn'name@cptIt,

_CODE.LJS:
> typeof f.name
"string"
===
> var f = function f(){}
undefined
> f.name
"f"
> var f = function (){}
undefined
> f.name
""
===
> function ftest(){}
undefined
> ftest.name
"ftest"
===
function f-test(){}
SyntaxError: Unexpected token -
===
> var f = function fTest(){}
undefined
> f.name
"fTest"

ljsfmbr.prototype

name::
* McsEngl.ljsfmbr.prototype@cptIt,
* McsEngl.ljsfproperty.prototype@cptIt,
* McsEngl.ljsobt'prototype-property@cptIt,
* McsEngl.ljs'prototype-property-of-object@cptIt,
* McsEngl.ljs'prototype-variable-of-object@cptIt,
* McsEngl.ljsfcn'prototype@cptIt,
* McsEngl.ljs'prototype-property-of-function@cptIt,

_DESCRIPTION:
Functions in JavaScript have a property called a prototype. When we call a JavaScript constructor to create an object, all the properties of the constructor's prototype are then made available to the new object.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#constructorpatternjavascript]

_CODE.LJS:
> function Mammal(){}
undefined
> Mammal.prototype
Mammal {}
> Mammal.__proto__
function Empty() {}
> Mammal.__proto__ === Mammal.prototype
false
> Object.getPrototypeOf(Mammal) === Mammal.prototype
false
> Object.getPrototypeOf(Mammal) === Mammal.__proto__
true
> Object.getOwnPropertyNames(Mammal.prototype).sort()
["constructor"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(Mammal.prototype)).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

_DESCRIPTION:
> var o={}
undefined
> o.prototype
undefined
===
All objects have a prototype property. Whenever the interpreter looks for a property, it also checks the prototype.
[http://docs.jquery.com/Types]
===
NOTE A prototype property is automatically created for every function, to allow for the possibility that the function will be used as a constructor.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.26Div1]
===
Prototyping is a way to create objects by replicating another object (the so called prototype.) The new object may or may not have a link to the original object, depending on the language implementation. JavaScript maintains a link between the two as we will see shortly.
In prototype-based languages there's usually an operator to effect the object creation by copying another object. Surprisingly JavaScript does not offer such operator, which is often consider a design flaw of the language.
[http://www.learn-javascript-tutorial.com/Prototype-Based-Inheritance.cfm]
===
NOTE Function objects created using Function.prototype.bind do not have a prototype property or the [[Code]], [[FormalParameters]], and [[Scope]] internal properties.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec15.3.4.5Div1]
===
The value of the prototype property is used to initialise the [[Prototype]] internal property of a newly created object before the Function object is invoked as a constructor for that newly created object. This property has the attribute { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec15.3.4.5Div1]
===
In Edition 5, the prototype property of Function instances is not enumerable. In Edition 3, this property was enumerable.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec15.3.5.2Div1]

_CODE.LJS:
> Object.getPrototypeOf(rabbit)
Object {eats: "grass", eat: function, leg: 4}
===
var mycar = {
brand: "Honda",
model: "Accord",
year: 1998
};
alert(mycar.brand);
=> Honda
===
<script type="text/javascript">

function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}

var fred=new employee("Fred Flintstone","Caveman",1970);
employee.prototype.salary=null;
fred.salary=20000;

document.write(fred.salary);

</script>
[http://www.w3schools.com/jsref/jsref_prototype_string.asp]

ljb'prototype_object

name::
* McsEngl.ljb'prototype_object@cptIt,

ljsfmbr.OBJECT'S (instance)

name::
* McsEngl.ljsfmbr.OBJECT'S (instance)@cptIt,
* McsEngl.ljs'object-property-of-function@cptIt,
* McsEngl.ljsfmbr.instance@cptIt,
* McsEngl.ljsinstance-property@cptIt,
* McsEngl.ljspublic-property-of-function@cptIt,

_DESCRIPTION:
The-members of the-function that prefixed with 'this'.
[hmnSngo.2016-12-02]
===
Instance-property-of-a-function is a property which is AND property of its instance-object.
[hmnSngo.2014-06-13]

_CODE.LJS:
> function f(){this.b=true}
undefined
> Object.getOwnPropertyNames(new f).sort()
["b"]
===
//constructor function (class)
function Maths(x, y) {
//public properties
this.x =x;
this.y = y;

//public methods
this.add = function () { _sum = x + y; return _sum; }
this.mod = function () { _mod = x % y; return _mod; }

//public method calls private method
this.show = function () {
this.add();
this.mod();
showResult();
}

//private variables
var _sum=0;
var _mod=0;

//private methods
function showResult() {
alert( "sum: " + _sum + ", mod: " + _mod );
}

}
//end function

//create instance
var plus = new Maths(3, 4);
plus.show();
[https://zaman91.wordpress.com/tag/javascript-public-property/]
===
> function f(){return {s:"string"}}
undefined
> Object.getOwnPropertyNames(new f).sort()
["s"]
===

ljsfmbr.OBJECT.NO

name::
* McsEngl.ljsfmbr.OBJECT.NO@cptIt,
* McsEngl.ljsinstanceNo-property-of-function@cptIt,

_DESCRIPTION:
Non-instance-property-of-a-fanction is a property which is NOT property of its instance-object.
[hmnSngo.2014-06-13]

_SPECIFIC:
* private
* static

ljbf'member.PRIVATE

name::
* McsEngl.ljbf'member.PRIVATE@cptIt,
* McsEngl.ljsprivate-property-of-function@cptIt,
* McsEngl.ljsvar-property-of-function@cptIt,

_DESCRIPTION:
It is a property which we have NOT access from outside of the function AND it is not a property of an instance-object of it.
[hmnSngo.2014-06-13]

ljbf'member.PRIVATE.NO (static; public)

name::
* McsEngl.ljbf'member.PRIVATE.NO (static@cptIt, public),
* McsEngl.ljsf'static-property@cptIt,
* McsEngl.ljsfcn'property.STATIC@cptIt,
* McsEngl.ljsstatic-property@cptIt,
* McsEngl.static-property-of-function-of-js@cptIt,
* McsEngl.ljsfproperty.STATIC@cptIt,
* McsEngl.ljs'static-property@cptIt,

_DESCRIPTION:
STATIC is a property (= method or not) that we have access to it from outside of a function and without the use of an instance-object of the function.
[hmnSngo.2014-06-13]

_CODE.LJS:
function foo() {
if( typeof foo.counter == 'undefined' ) {
foo.counter = 0;
}
foo.counter++;
console.log(foo.counter);
}
foo()
1
undefined
foo()
2
undefined
===
function f(){f.n=1}
f.n
undefined
Object.getOwnPropertyNames(f).sort()
["arguments", "caller", "length", "name", "prototype"]
f.n=2
2
Object.getOwnPropertyNames(f).sort()
["arguments", "caller", "length", "n", "name", "prototype"]
===

===
//constructor function (class)
function Maths(x, y) {
...
//static method multiply, you can use it without instance of Maths
Maths.multiply = function (x,y) { return x * y; }

//call static method by constructor function (class) without instance of Maths
var result = Maths.multiply(5,7);
alert(result);
//output: 35
[https://zaman91.wordpress.com/tag/javascript-public-property/]

_DESCRIPTION:
A static member is shared by all instances of the class as well as the class itself (i.e. the Kid object), but it is only stored in one place. This means that its value is not inherited down to the object’s instances:
[http://css.dzone.com/news/javascript-how-to-get-private-]
===
Constructors provide the features that classes provide in other languages, including static variables and methods.
[http://javascript.crockford.com/private.html]

_CODE.LJS:
function MyClass () { // constructor function
var privateVariable = "foo";
this.publicVariable = "bar";
this.privilegedMethod = function () {
alert(privateVariable);
};
}
MyClass.staticProperty = "baz";
> Object.getOwnPropertyNames(MyClass).sort()
["arguments", "caller", "length", "name", "prototype", "staticProperty"] //not privateVariable

ljsfmbr.PUBLIC (static)

name::
* McsEngl.ljsfmbr.PUBLIC (static)@cptIt,
* McsEngl.ljsfmbr.STATIC@cptIt,
* McsEngl.ljsfmbr.public@cptIt,
* McsEngl.ljsfmbr.static@cptIt,
* McsEngl.static-member-of-ljs-function@cptIt,

_DESCRIPTON:
The-member we have access from outside of a-function.
[hmnSngo.2016-12-02]

_CODE.LJS:
> function f(){var s1='private';}
undefined
> f.s2="public"
"public"
> f.s2
"public"
> f.s1
undefined
===
> function f(){this.s1='private';}
undefined
> f.s1
undefined

ljsfmbr.PUBLIC.NO (private|staticNo)

name::
* McsEngl.ljsfmbr.PUBLIC.NO (private|staticNo)@cptIt,
* McsEngl.ljsfmbr.private@cptIt,
* McsEngl.ljsfmbr.publicNo@cptIt,
* McsEngl.ljsfmbr.staticNo@cptIt,
* McsEngl.static-member-of-ljs-function@cptIt,

ljsfmbr.INNER

name::
* McsEngl.ljsfmbr.INNER@cptIt,
* McsEngl.ljsfmbr.inner@cptIt,
* McsEngl.ljsfmbr.private-not-instance@cptIt,

_DESCRIPTION:
* PublicNo bun NOT 'instance'.
[hmnSngo.2016-12-04]

ljsfmbr.INSTANCE

name::
* McsEngl.ljsfmbr.INSTANCE@cptIt,
* McsEngl.ljsfmbr.instance@cptIt,
* McsEngl.ljsfmbr.object@cptIt,

_DESCRIPTION:
The-members of the-object created by the-function.
Prefixed with 'this'.
[hmnSngo.2016-12-04]

ljsf'relation-to-class

name::
* McsEngl.ljsf'relation-to-class@cptIt,

_DESCRIPTION:
JavaScript is a prototype-based language which contains no class statement, such as is found in C++ or Java. (This is sometimes confusing for programmers accustomed to languages with a class statement.) Instead, JavaScript uses functions as classes.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Custom_objects]

ljsf'relation-to-jsobject

name::
* McsEngl.ljsf'relation-to-jsobject@cptIt,

_ADDRESS.WPG:
* http://stackoverflow.com/a/24811539,

ljsf'resource

name::
* McsEngl.ljsf'resource@cptIt,

_SPECIFIC:
* var f1 = function(){} vs function f2(){}: http://stackoverflow.com/q/336859,
* http://kangax.github.com/nfe//

ljsf'return-value (optional)

name::
* McsEngl.ljsf'return-value (optional)@cptIt,
* McsEngl.ljsf'output@cptIt,
* McsEngl.ljsreturn@cptIt,
* McsEngl.ljs'return-keyword@cptIt,
* McsEngl.ljs'return@cptIt,

_DESCRIPTION:
JavaScript does not have a void type, so every function must return a value. The default value is undefined, except for constructors, where the default return value is this.
[http://javascript.crockford.com/survey.html]
===
Functions with side effects do not have to contain a return statement. If no return statement is encountered, the function returns undefined.
[http://eloquentjavascript.net/chapter3.html#p5d70151c]
===
IF a function returns a function, THEN it needs assignment, and then calling.
[http://toddmotto.com/everything-you-wanted-to-know-about-javascript-scope/]

_CODE.LJS:
// Is hidden then return undefined
if (self._isHidden()) {
return;
}

ljsf'return-statement

name::
* McsEngl.ljsf'return-statement@cptIt,
* McsEngl.lscpJs'return-statement@cptIt,
* McsEngl.ljs'statement.return@cptIt,

_DESCRIPTION:
A return statement with a value should not use ( ) (parentheses) around the value. The return value expression must start on the same line as the return keyword in order to avoid semicolon insertion.
[http://javascript.crockford.com/code.html]

ljsf'variable.OUTPUT

name::
* McsEngl.ljsf'variable.OUTPUT@cptIt,
* McsEngl.ljsf'output@cptIt,

_DESCRIPTION:

_NOTATION:
* xNameOut
[hmnSngo.2015-12-15]
===
* xOutName
[hmnSngo.2014-12-01]

SPECIFIC

_SPECIFIC:
* a-array,
* b-boolean,
* f-function,
* l-null, {2016-03-03}
* n-number,
* o-object,
* r-regexp,
* s-string,
* u-undefined,
* x-mixed,

ljsf'scope

name::
* McsEngl.ljsf'scope@cptIt,

_DESCRIPTION:
In JavaScript blocks do not have scope. Only functions have scope. Do not use blocks except as required by the compound statements.
[http://javascript.crockford.com/code.html]
===
Named variables are defined with the var statement. When used inside of a function, var defines variables with function-scope. The vars are not accessible from outside of the function. There is no other granularity of scope in JavaScript. In particular, there is no block-scope.
[http://javascript.crockford.com/survey.html]
===
Scope

In many languages, a block introduces a scope. Variables introduced in a block are not visible outside of the block.

In JavaScript, blocks do not introduce a scope. There is only function-scope. A variable introduced anywhere in a function is visible everywhere in the function. JavaScript's blocks confuse experienced programmers and lead to errors because the familiar syntax makes a false promise.

JSLint expects blocks with function, if, switch, while, for, do, and try statements and nowhere else.

In languages with block scope, it is usually recommended that variables be declared at the site of first use. But because JavaScript does not have block scope, it is wiser to declare all of a function's variables at the top of the function. It is recommended that a single var statement be used per function. This can be enforced with the onevar option.
[http://www.jslint.com/lint.html]

_DESCRIPTION:
Functions have lexical scoping.
[http://javascript.crockford.com/survey.html]
===
Named variables are defined with the var statement. When used inside of a function, var defines variables with function-scope. The vars are not accessible from outside of the function. There is no other granularity of scope in JavaScript. In particular, there is no block-scope.
Any variables used in a function which are not explicitly defined as var are assumed to belong to an outer scope, possibly to the Global Object.
[http://javascript.crockford.com/survey.html]

_CODE.LJS:
var currentScope = 0; // global scope
(function () {
var currentScope = 1, one = 'scope1';
alert(currentScope);
(function () {
var currentScope = 2, two = 'scope2';
alert(currentScope);
(function () {
var currentScope = 3, three = 'scope3';
alert(currentScope);
alert(one + two + three); // climb up the scope chain to get one and two
}());
}());
}());

ljsf'signature

name::
* McsEngl.ljsf'signature@cptIt,
* McsEngl.ljsf'syntax@cptIt,

_DESCRIPTION:
Is this some javascript functionality that you can call functions with some other amount of arguments than what is declared in the function?

This is correct. JavaScript does not require that you call a function with the same number of arguments as was used to define it.

If you call it with too few, the missing values will have the special value undefined. If you call it with too many, the function will need to use the special array value arguments to get at them.
[http://stackoverflow.com/a/6892343]

ljsf'parameter#ql:ljsf'parameter#

name::
* McsEngl.ljsf'parameter@cptIt,

ljsf'variable

name::
* McsEngl.ljsf'variable@cptIt,
* McsEngl.ljs'variable.function@cptIt,

_DESCRIPTION:
function example(param) {
this.a = param;
var b = true;
}
Here we create three variables in the object constructor, one of them is public (this.a) and the other two (param and b) are private.
[http://javascript.about.com/od/objectorientedjavascript/a/oop18.htm]
===
var x = function() {a = 2; b = 3; c = 4;};
===
In js we can assign a function to a variable. Then we can call the function like this: var().
===
Declare all variables at the beginning of each function
Since JavaScript only has function scope, declaring variables inside other blocks, like if or for may give the false impression that the variable is scoped inside that block, which could lead to bugs.
===
Inside a function a special variable "arguments" is always available. It's similar to an array in that it has a length property, but it lacks the built-in methods of an array. The elements of the pseudo-array are the argument of the function call.

function log(x) {
console.log(typeof x, arguments.length);
}
log(); // "undefined", 0
log(1); // "number", 1
log("1", "2", "3"); // "string", 3
[http://docs.jquery.com/Types]

SPECIFIC

name::
* McsEngl.ljsf.specific@cptIt,
* McsEngl.ljsfcn.specific@cptIt,

_SPECIFIC_DIVISION.name:
* anonymous-function,
* named-function,

_SPECIFIC_DIVISION.user_creation:
* built-in--function,
* user-defined--function,

ljsf.SPECIFIC-DIVISION.return

name::
* McsEngl.ljsf.SPECIFIC-DIVISION.return@cptIt,

_SPECIFIC:
* fraName##
* frbName##
* frfName##
* frnName##
* frsName##
* frrName##
* froName##
* fruName##
==

ljsf.ANONYMOUS

name::
* McsEngl.ljsf.ANONYMOUS@cptIt,
* McsEngl.ljsfcn.unnamed@cptIt,

_DESCRIPTION:
with no name.
===
4.1 What is (function(){ /*...*/ })() ?

This is an anonymous FunctionExpression that is called immediately after creation.

Variables declared inside a function are not accessible from outside the function. This can be useful, for example, to hide implementation details or to avoid polluting the global scope.
[http://jibbering.com/faq/]
===
JavaScript also has anonymous functions, which act as lambda expressions.
[http://javascript.crockford.com/survey.html]

_CODE.LJS:
> var f1 = function(){}
undefined
> f1.toString()
"function (){}"
> f1.name
""
===
> function f2(){}
undefined
> f2.toString()
"function f2(){}"
> f2.name
"f2"
===
> function(){}
SyntaxError: Unexpected token (

_CODE.LJS:
var VALUES = [5, 2, 1, 7, 1];
var SUM = combineAll(VALUES, 0, function (a, b) {
return a+b;
});
console.log(SUM);
==============
16 (0+16)

_CODE.LJS:
var VALUES = [5, 2, 1, 7, 1];
var SUM = combineAll(VALUES, 5, function (a, b) {
return a+b;
});
console.log(SUM);
=============
21 (5+16)

_CODE.LJS:
Anonymous functions are also really handy when you need to pass a little bit of code to a another function. If the function you need is very short, it’s often convenient to declare it when you call the function you want to pass it to:

window.addEventListener("load",
function() { alert("All done");},
false);
[http://helephant.com/2008/08/23/javascript-anonymous-functions/]

_CODE.LJS:
function() {
console.log("hello");
}
Anonymous NEVER executed.

(function() {
console.log("hello");
})();
Here we executing the function immedietly after declearing it.
[http://nodetuts.com/pdf/handson-nodejs-sample.pdf]

ljsf.ANONYMOUS.NO

name::
* McsEngl.ljsf.ANONYMOUS.NO@cptIt,
* McsEngl.ljsf.NAMED@cptIt,

_CODE.LJS:
> function f(){}
undefined
> f.name
"f"
===
> var f1 = function(){}
undefined
> f1.name
""
===
> var f1 = function f2(){}
undefined
> f1.name
"f2"
> f2.name
ReferenceError: f2 is not defined
===
//named function declaration
function bar() {
return 3;
}
bar() //3
...
//named function expression
var a = function bar() {
return 3;
}

[http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions//]

ljsf.Boolean

name::
* McsEngl.ljsf.Boolean@cptIt,
* McsEngl.ljs'Boolean-function@cptIt,

_GENERIC:
* js-prebuilt-object#ql:js'object.prebuilt#,
===
typeof Boolean
"function"

_DESCRIPTION:
4.3.15 Boolean object
member of the Object type that is an instance of the standard built-in Boolean constructor
NOTE A Boolean object is created by using the Boolean constructor in a new expression, supplying a Boolean value as an argument. The resulting object has an internal property whose value is the Boolean value. A Boolean object can be coerced to a Boolean value.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.15]
===
new Boolean(value)
The Boolean object is an object wrapper for a Boolean value and is constructed with the above Boolean constructor. If there is no initial value or if it is 0, -0, null, false, NaN, undefined, or the empty string (""), the initial value is false. Otherwise, even with the string "false", it is true.
[http://www.devguru.com/technologies/ecmascript/quickref/boolean.html]

ljb'TYPE-COERSION

name::
* McsEngl.ljb'TYPE-COERSION@cptIt,

JavaScript, as we already know, has a boolean data type, which has only two possible values: true or false. Boolean expressions also evaluate to a boolean value. But that's not the entire story.

When used in a context that expects a boolean value, any JavaScript expression can be used. See below.

var NUMBER = 0;
if (NUMBER) {
alert('You should not see this');
}
NUMBER = 1;
if (NUMBER) {
alert('You should be reading this');
}
var TEXT;
if (TEXT) {
alert('You should not see this');
}
TEXT = "";
if (TEXT) {
alert('You should not see this');
}
TEXT = "hi";
if (TEXT) {
alert('You should be reading this');
}

In the example above we are using non-boolean expressions (NUMBER and TEXT) in the if statement and some of these expressions are being understood as true and some others false.

What is happening here is Type Coercion. JavaScript does its best to convert the given expression into the desired type (boolean.)

JavaScript resolves the following values to false.

* false (of course)
* null
* undefined
* 0 (zero)
* NaN
* "" (empty string)

The above values are all referred to as falsy, which is a way of saying "Not the same as false but can be interpreted like such."

Every other value, including the strings "0" and "false", will resolve to true and will be referred to as truthy. Again, "Not the same as true but can be interpreted as such."

Type coercion is the reason we have the === (triple-equal or strictly equal) comparison operator in JavaScript. The regular equality operator == applies type coercion and sometimes your comparisons will not result as expected. Look at the following sample code.

var NUM = 0;
if (NUM == "") {
alert('Hey, I did not expect to see this.');
}
if (NUM === "") {
alert('This will not be displayed.');
}

In the first if conditional is comparing two falsy values, and the type coercion will resolve both of them to false, causing the result of the comparison to be true, which is probably not the original intent of the code.

To detect the type difference (string vs. number) we would need to use the triple equal operator, as shown in the second if statement.
[http://www.learn-javascript-tutorial.com/AdvancedTechniques.cfm#beyond-basics]

ljsf.BUILTIN

name::
* McsEngl.ljsf.BUILTIN@cptIt,
====== lagoGreek:
* McsElln.τσ'εσωτερική-συνάρτηση-advb@cptIt,

_RELATION:
Built-in Functions vs. Methods
Methods and functions are similar in that they both make things happen. They are also syntactically similar. The major difference is that methods are tied to an object; whereas, functions are not. For example, alert() is a method of the window object; whereas parseInt() is a standalone function.
[http://www.learn-javascript-tutorial.com/JavaScript-Functions.cfm]

isNaN(object)
The isNaN() function takes one argument: an object. The function checks if the object is not a number (or cannot be converted to a number). It returns true if the object is not a number and false if it is a number.

parseFloat() and parseInt()
The parseFloat() function takes one argument: a string. If the string begins with a number, the function reads through the string until it finds the end of the number, hacks off the remainder of the string, and returns the result. If the string does not begin with a number, the function returns NaN.

The parseInt() function also takes one argument: a string. If the string begins with an integer, the function reads through the string until it finds the end of the integer, hacks off the remainder of the string, and returns the result. If the string does not begin with an integer, the function returns NaN.

ljb.Number(object)

name::
* McsEngl.ljb.Number(object)@cptIt,

he Number() function takes one argument: an object, which it attempts to convert to a number. If it cannot, it returns NaN, for "Not a Number."
[http://www.learn-javascript-tutorial.com/JavaScript-Functions.cfm#h1.1]

ljb.String(object)

name::
* McsEngl.ljb.String(object)@cptIt,

ljsf.BUILTIN.NO

name::
* McsEngl.ljsf.BUILTIN.NO@cptIt,

_CODE.LJS:
/// Function that performs an action
function Test1()
{
alert("Test1");
}

/// Function that accepts arguments and performs an action
function Test2(a, b)
{
alert(a + b);
}

/// Function that returns returns a value
function Test3(a, b)
{
return a + b;
}
[http://pietschsoft.com/post/2008/02/JavaScript-Function-Tips-and-Tricks.aspx]

ljsf.sumation

name::
* McsEngl.ljsf.sumation@cptIt,

_CODE.LJS:
> function f(a,b){
var n=a+b;
console.log("το άρθροισμα των "+a +" και " +b +" είναι = " + n)}
undefined
> f(13,16)
το άρθροισμα των 13 και 16 είναι = 29

ljsf.CALLBACK

name::
* McsEngl.ljsf.CALLBACK@cptIt,
* McsEngl.ljs'Callback-Function@cptIt,

_DEFINITION:
A callback is a function, or the name of a function that is run on the completion of the function you called. This is very, very useful on actions that take time to complete (for example: the SlideUp method).
When I didn’t know how to use
a callback, I would use a timeout like this:
$('#test').slideUp(400);
setTimeout(function () {
 alert('ran after the slideup!');
}, 400);
Although this works fine, what if you don’t know the length of the delay, like in an AJAX request? Sometimes the code would work, sometimes, not.
The solution is to use the callback function. You have two options:
You can create a function and then pass it as a string ‘functionName’
You can use what is known as an anonymous function. This is a function that has no name is typically used only once.
You can use the variable this in the callbacks. this is the HTML DOM object of the element, that in this case is being slid up. Like before, to manipulate it with jQuery you must use ‘$(“this”)’. I usually prefer the anonymous method, but I will show you both:
function makeAlert () {
 $(this).html('Ran this function!');
}
// both lines do the same thing
$('#test').slideUp(400, makeAlert);
$('#test').slideUp(400, function () {
 $(this).html('Ran the anonymous function!');
});
[http://blog.themeforest.net/tutorials/7-things-i-wish-i-had-known-about-jquery//]
===

setTimeout(function() {
console.log('World!');
}, 2000);
console.log('Hello');

In this example, the 'hello' comes first EVENTHOUGH it is a second statement. This is why the anonymous function which is a parameter of the first statement setTimeout is executed (called back) after 2 minutes, when the execution of this statement happens.
[http://nodetuts.com/handson-nodejs-book.html]
===

A callback function is a reference to a function that will be invoked at some later point, such as when an ajax request returns. One common error is indicating the callback function with parens, callbackFunction() – this will execute the function immediately, and not on callback, although if you return a function this way, that should work too.
The idea of a callback is to specify either a function by name, or a string to eval.
[http://swik.net/JavaScript/Common+JavaScript+Development+Mistakes]
===

* A callback function is a function that is going to be called later, usually when some event occurs. For example, when adding an event listener:
[http://stackoverflow.com/questions/1699938/javascript-callback-question]

ljsf.CLASS

name::
* McsEngl.ljsf.CLASS@cptIt,
* McsEngl.ljs'class@cptIt,
* McsEngl.ljs'class-of-objects@cptIt,
* McsEngl.ljs'generic-object@cptIt,
* McsEngl.ljsobt'class@cptIt,
* McsEngl.ljsobt.generic@cptIt,

_DESCRIPTION:
JavaScript classes introduced in ECMAScript 2015 are syntactical sugar over JavaScript's existing prototype-based inheritance. The class syntax is not introducing a new object-oriented inheritance model to JavaScript. JavaScript classes provide a much simpler and clearer syntax to create objects and deal with inheritance.
Defining classes
Classes are in fact "special functions", and just as you can define function expressions and function declarations, the class syntax has two components: class expressions and class declarations.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes]
===
Class is a generic-object whose individuals inherite the characteristics of its parent.
[hmnSngo.2013-11-24]
===
JavaScript is a class-less language, however classes can be simulated using functions.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]
===
Μια κλάση αποτελεί μια γενική φόρμα κατασκευής αντικειμένων που διαθέτουν ανάλογες ιδιότητες και μεθόδους. Με άλλα λόγια, η κλάση αποτελεί μια "συνταγή" δημιουργίας αντικειμένων...
Οι πλήρως αντικειμενοστρεφείς γλώσσες ... επιτρέπουν στον προγραμματιστή να φτιάξει και τις δικές του κλάσεις με τη χρήση της δεσμευμένης λέξης "class". Η JavaScript (με εξαίρεση την JScript.NET) δε διαθέτει τέτοια δεσμευμένη λέξη, αλλά επιτρέπει στον προγραμματιστή αφ' ενός μεν να δουλεύει με αντικείμενα, και αφ' ετέρου να δημιουργεί νέα με τη βοήθεια συναρτήσεων, όπως θα δούμε σε επόμενα κεφάλαια.
[Λιακέας, Η γλώσσα JavaScript. 2002, 31]
===
It's important to note that there are no classes in JavaScript. Functions can be used to somewhat simulate classes, but in general JavaScript is a class-less language. Everything is an object. And when it comes to inheritance, objects inherit from objects, not classes from classes as in the "class"-ical languages.
[http://www.phpied.com/3-ways-to-define-a-javascript-class/]

_SPECIFIC:
* constructor-function#ql:js'object.constructor#
* prototype-object#ql:js'object.prototype#

name::
* McsEngl.ljs'class@cptIt,
* McsEngl.ljsc@cptIt,
=== notation:
* McsEngl.fNameCls@cptIt, {2016-12-22}

_DESCRIPTION:
JavaScript classes introduced in ECMAScript 6 are syntactical sugar over JavaScript's existing prototype-based inheritance. The class syntax is not introducing a new object-oriented inheritance model to JavaScript. JavaScript classes provide a much simpler and clearer syntax to create objects and deal with inheritance.
Defining classes
Classes are in fact "special functions", and just as you can define function expressions and function declarations, the class syntax has two components: class expressions and class declarations.
[https://developer.mozilla.org/el/docs/Web/JavaScript/Reference/Classes]

ljsc'Creating

name::
* McsEngl.ljsc'Creating@cptIt,

_CODE.LJS:
JavaScript is a class-less language, however classes can be simulated using functions.

The most common approach to achieving this is by defining a JavaScript function where we then create an object using the new keyword. this can be used to help define new properties and methods for the object as follows:

// A car "class"
function Car( model ) {

this.model = model;
this.color = "silver";
this.year = "2012";

this.getInfo = function () {
return this.model + " " + this.year;
};

}
We can then instantiate the object using the Car constructor we defined above like this:

var myCar = new Car("ford");

myCar.year = "2010";

console.log( myCar.getInfo() );
For more ways to define "classes" using JavaScript, see Stoyan Stefanov's useful post[http://www.phpied.com/3-ways-to-define-a-javascript-class/] on them.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

3 ways to define a JavaScript class:
September 29th, 2006. Tagged: JavaScript
Introduction
JavaScript is a very flexible object-oriented language when it comes to syntax. In this article you can find three ways of defining and instantiating an object. Even if you have already picked your favorite way of doing it, it helps to know some alternatives in order to read other people's code.

It's important to note that there are no classes in JavaScript. Functions can be used to somewhat simulate classes, but in general JavaScript is a class-less language. Everything is an object. And when it comes to inheritance, objects inherit from objects, not classes from classes as in the "class"-ical languages.

1. Using a function
This is probably one of the most common ways. You define a normal JavaScript function and then create an object by using the new keyword. To define properties and methods for an object created using function(), you use the this keyword, as seen in the following example.

function Apple (type) {
this.type = type;
this.color = "red";
this.getInfo = getAppleInfo;
}

// anti-pattern! keep reading...
function getAppleInfo() {
return this.color + ' ' + this.type + ' apple';
}
To instantiate an object using the Apple constructor function, set some properties and call methods you can do the following:

var apple = new Apple('macintosh');
apple.color = "reddish";
alert(apple.getInfo());
1.1. Methods defined internally
In the example above you see that the method getInfo() of the Apple "class" was defined in a separate function getAppleInfo(). While this works fine, it has one drawback – you may end up defining a lot of these functions and they are all in the "global namespece". This means you may have naming conflicts if you (or another library you are using) decide to create another function with the same name. The way to prevent pollution of the global namespace, you can define your methods within the constructor function, like this:

function Apple (type) {
this.type = type;
this.color = "red";
this.getInfo = function() {
return this.color + ' ' + this.type + ' apple';
};
}
Using this syntax changes nothing in the way you instantiate the object and use its properties and methods.

1.2. Methods added to the prototype
A drawback of 1.1. is that the method getInfo() is recreated every time you create a new object. Sometimes that may be what you want, but it's rare. A more inexpensive way is to add getInfo() to the prototype of the constructor function.

function Apple (type) {
this.type = type;
this.color = "red";
}

Apple.prototype.getInfo = function() {
return this.color + ' ' + this.type + ' apple';
};
Again, you can use the new objects exactly the same way as in 1. and 1.1.

2. Using object literals
Literals are shorter way to define objects and arrays in JavaScript. To create an empty object using you can do:
var o = {};
instead of the "normal" way:
var o = new Object();
For arrays you can do:
var a = [];
instead of:
var a = new Array();
So you can skip the class-like stuff and create an instance (object) immediately. Here's the same functionality as described in the previous examples, but using object literal syntax this time:

var apple = {
type: "macintosh",
color: "red",
getInfo: function () {
return this.color + ' ' + this.type + ' apple';
}
}
In this case you don't need to (and cannot) create an instance of the class, it already exists. So you simply start using this instance.

apple.color = "reddish";
alert(apple.getInfo());
Such an object is also sometimes called singleton. It "classical" languages such as Java, singleton means that you can have only one single instance of this class at any time, you cannot create more objects of the same class. In JavaScript (no classes, remember?) this concept makes no sense anymore since all objects are singletons to begin with.

3. Singleton using a function
Again with the singleton, eh? :)

The third way presented in this article is a combination of the other two you already saw. You can use a function to define a singleton object. Here's the syntax:

var apple = new function() {
this.type = "macintosh";
this.color = "red";
this.getInfo = function () {
return this.color + ' ' + this.type + ' apple';
};
}
So you see that this is very similar to 1.1. discussed above, but the way to use the object is exactly like in 2.

apple.color = "reddish";
alert(apple.getInfo());
new function(){...} does two things at the same time: define a function (an anonymous constructor function) and invoke it with new. It might look a bit confusing if you're not used to it and it's not too common, but hey, it's an option, when you really want a constructor function that you'll use only once and there's no sense of giving it a name.

Summary
You saw three (plus one) ways of creating objects in JavaScript. Remember that (despite the article's title) there's no such thing as a class in JavaScript. Looking forward to start coding using the new knowledge? Happy JavaScript-ing!
[http://www.phpied.com/3-ways-to-define-a-javascript-class/]

ljsc'Member

name::
* McsEngl.ljsc'Member@cptIt,

_DESCRIPTION:

ljscmbr.Constructor

name::
* McsEngl.ljscmbr.Constructor@cptIt,

_DESCRIPTION:

ljscmbr.PROTOTYPE

name::
* McsEngl.ljscmbr.PROTOTYPE@cptIt,

_DESCRIPTION:
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}

get area() {
return this.calcArea();
}

calcArea() {
return this.height * this.width;
}
}

const square = new Polygon(10, 10);

console.log(square.area);
[https://developer.mozilla.org/el/docs/Web/JavaScript/Reference/Classes#Prototype_methods]

ljscmbr.STATIC

name::
* McsEngl.ljscmbr.STATIC@cptIt,

_DESCRIPTION:
The static keyword defines a static method for a class. Static methods are called without instantiating their class and are also not callable when the class is instantiated. Static methods are often used to create utility functions for an application.

class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}

static distance(a, b) {
const dx = a.x - b.x;
const dy = a.y - b.y;

return Math.sqrt(dx*dx + dy*dy);
}
}

const p1 = new Point(5, 5);
const p2 = new Point(10, 10);

console.log(Point.distance(p1, p2));
[https://developer.mozilla.org/el/docs/Web/JavaScript/Reference/Classes#Static_methods]

ljsc'Object

name::
* McsEngl.ljsc'Object@cptIt,

ljsc.SUBCLASS

name::
* McsEngl.ljsc.SUBCLASS@cptIt,

_DESCRIPTION:
Note that classes cannot extend regular (non-constructible) objects. If you want to inherit from a regular object, you can instead use Object.setPrototypeOf():

var Animal = {
speak() {
console.log(this.name + ' makes a noise.');
}
};

class Dog {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + ' barks.');
}
}

Object.setPrototypeOf(Dog.prototype, Animal);

var d = new Dog('Mitzie');
d.speak();
[https://developer.mozilla.org/el/docs/Web/JavaScript/Reference/Classes#Sub_classing_with_extends]

ljsc.SUPERCLASS

name::
* McsEngl.ljsc.SUPERCLASS@cptIt,

ljsf.CONSTRUCTOR (csr)

_CREATED: {2014-02-10}

name::
* McsEngl.ljsf.CONSTRUCTOR (csr)@cptIt,
* McsEngl.ljscsr@cptIt,
* McsEngl.ljsconstructor@cptIt,
* McsEngl.ljs'constructor@cptIt,
* McsEngl.ljs'constructor-function@cptIt,
* McsEngl.ljs'constructor@cptIt,
* McsEngl.ljs'constructor-function@cptIt,
* McsEngl.ljs'object-constructor@cptIt,
=== notation:
* McsEngl.fNameCsr@cptIt, {2016-12-22}

_DEFINITION:
Constructor is a-jsf used to create OBJECTS, using the-'new' operator.
[hmnSngo.2016-01-28]
===
A "constructor" in JavaScript is "just" a function that happens to be called with the new operator.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain]
===
A constructor is any function which is used as a constructor. The language doesn’t make a distinction. A function can be written to be used as a constructor or to be called as a normal function, or to be used either way.
[http://pivotallabs.com/javascript-constructors-prototypes-and-the-new-keyword/]
===
Many built-in objects are functions: they can be invoked with arguments. Some of them furthermore are constructors: they are functions intended for use with the new operator.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec15P3]
===
Each constructor is a function that has a property named “prototype” that is used to implement prototype-based inheritance and shared properties.
[http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf, p3]
===
JavaScript is case sensitive. It is common to start the name of a constructor with a capitalised letter, and the name of a function or variable with a lower-case letter.
[http://en.wikipedia.org/wiki/JavaScript_syntax]
===
ECMAScript does not use classes such as those in C++, Smalltalk, or Java. Instead objects may be created in various ways including via a literal notation or via constructors which create objects and then execute code that initialises all or part of them by assigning initial values to their properties. Each constructor is a function that has a property named “prototype” that is used to implement prototype-based inheritance and shared properties. Objects are created by using constructors in new expressions; for example, new Date(2009,11) creates a new Date object. Invoking a constructor without using new has consequences that depend on the constructor. For example, Date() produces a string representation of the current date and time rather than an object.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2.1P1]
===
The 'constructor' is the object that created it.
The 'prototype' is the object that inherites variables to it. It is the 'generic' entity of it.
[hmnSngo.2013-10-30]
===
There's a variation of the factory function methodology that may feel more natural to you. In JavaScript, when function is called preceded by the new operator, the function receives an implicit this argument that is a brand new object, ready to be assembled with properties and methods. Also, if we do not return anything explicitly, the new operator automatically returns this.

Let's rework our last example into a constructor. A good convention is to start constructor functions with a capital letter, to differentiate from a regular function, signaling to the programmer that it needs to be called with the new operator.

Code Sample: ObjectOrientedJS/Demos/constructors.html

---- Code Omitted ----

function Guitar(color, strings) {
this.color = color;
this.strings = strings;
this.tune = function (newStrings) {
this.strings = newStrings;
};
this.play = function (chord) {
alert('Playing chord: ' + chord);
};
this.print = function (price, currency) {
alert('This guitar is ' +
this.color +
', it has ' + this.strings.length + ' strings' +
' and it costs ' + price + currency);
};
}

var GUITAR = new Guitar('black', ['E', 'A', 'D', 'G', 'B', 'e']);
debugWrite('this guitar is: ' + GUITAR.color);
GUITAR.play('Dm7');
GUITAR.tune( ['D', 'A', 'D', 'G', 'B', 'e' ] );
GUITAR.print(850, 'USD');

---- Code Omitted ----

The biggest differences here are two. First we no longer need to create the new object because the new operator has already taken care of that and passed the new object under the this identifier. The other difference is that we will use this wherever we were using guitar before. We could have returned this but that, as we explained above, is no longer necessary.
[http://www.learn-javascript-tutorial.com/ObjectOrientedJS.cfm#simple-obj]

_USAGE:
Date()
"Wed Oct 30 2013 12:02:35 GMT+0200 (?e?µe???? ??a GTB)"
Invoking a constructor without using new has consequences that depend on the constructor. For example, Date() produces a string representation of the current date and time rather than an object.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2P2]
===
> typeof Date()
"string"
> typeof new Date()
"object"

_CODE.LJS:
> function cat(name) {
 this.name = name;
 this.talk = function() {
   alert( this.name + " say meeow!" )
 }
}
> cat1 = new cat("felix")
> cat1.talk() //alerts "felix says meeow!"
> cat2 = new cat("ginger")
> cat2.talk() //alerts "ginger says meeow!"
> cat1.name
"felix"
> cat.prototype.color = "black"
"black"
> cat1.color
"black"

_RETURN:
Side note: Above, I said the use of the new keyword returned the constructed object. This is correct unless the constructor returns something explicitly. Then that object is returned, and the constructed object is just dropped. But really. JavaScript slaves over a hot CPU to create this object for you and then you just throw it away? Rude. And confusing to people who use your constructor. So unless you have a really good reason, don’t return anything from constructor functions.
[http://pivotallabs.com/javascript-constructors-prototypes-and-the-new-keyword/]

ljb'subclass

name::
* McsEngl.ljb'subclass@cptIt,

_DESCRIPTION:
Subclasses and Superclasses

In Java and C++, there is an explicit concept of the class hierarchy. i.e. Every class can have a super class from which it inherits properties and methods. Any class can be extended, or sub-classed so the resulting subclass can inherit its parent's behavior. As we have seen, JavaScript supports prototype inheritance instead of class based. It's possible for inheritance to happen other ways, however.

The following is an example of inheritance through functions.

<script language="javascript" type="text/javascript">
<!--

// thanks to webreference

function superClass() {
this.supertest = superTest; //attach method superTest
}

function subClass() {
this.inheritFrom = superClass;
this.inheritFrom();
this.subtest = subTest; //attach method subTest
}

function superTest() {
return "superTest";
}

function subTest() {
return "subTest";
}


var newClass = new subClass();

alert(newClass.subtest()); // yields "subTest"
alert(newClass.supertest()); // yields "superTest"

//-->
</script>
Prototype based inheritance is a far better bet for JavaScript applications in most cases.
[http://www.javascriptkit.com/javatutors/oopjs3.shtml]

ljsf.CONSTRUCTOR.NO

_CREATED: {2014-02-14}

name::
* McsEngl.ljsf.CONSTRUCTOR.NO@cptIt,
* McsEngl.ljs'constructorNo@cptIt,
* McsEngl.ljs'non-constructor-function@cptIt,

_DEFINITION:
A constructor is any function which is used as a constructor. The language doesn’t make a distinction. A function can be written to be used as a constructor or to be called as a normal function, or to be used either way.
[http://pivotallabs.com/javascript-constructors-prototypes-and-the-new-keyword/]

ljsf.CSSStyleDeclaration

name::
* McsEngl.ljsf.CSSStyleDeclaration@cptIt,

ljsf.Date

name::
* McsEngl.ljsf.Date@cptIt,
* McsEngl.ljsDate@cptIt,
* McsEngl.ljs'Date@cptIt,
* McsEngl.ljs'Date-function@cptIt,

_GENERIC:
> typeof Date
"function"
===
* js-prebuilt-object#ql:js'object.prebuilt#

_DESCRIPTION:
Το αντικείμενο Date μας παρέχει αρκετές μεθόδους για το χειρισμό της ημερομηνίας και ώρας.
[Λιακέας, Η γλώσσα JavaScript. 2002, 152]

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FDate,

_CODE.LJS:
> new Date()
Sun Mar 09 2014 16:40:46 GMT+0200 (?e?µe???? ??a GTB)
===
function fDateYMD() {
var
oD, sY, sM, sD;
oD = new Date();
sY = oD.getFullYear().toString();
sM = (oD.getMonth() + 1).toString();
if (sM.length === 1) {
sM = "0" + sM;
}
sD = oD.getDate().toString();
if (sD.length === 1) {
sD = "0" + sD;
}
return sY + "-" + sM + "-" + sD;
}
> Date_toYMD(new Date())
"2014-03-09"
===
Number(new Date())
1404987377078
+new Date()
1404987388202
new Date()
Thu Jul 10 2014 13:16:57 GMT+0300 (Te???? ??a GTB)
new Date()
Thu Jul 10 2014 13:17:01 GMT+0300 (Te???? ??a GTB)
[http://stackoverflow.com/a/221565]

ljb'fdate'member

name::
* McsEngl.ljb'fdate'member@cptIt,

_SPECIFIC:
getMemberAll(Date).sort()
["UTC", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "apply", "arguments", "bind", "call", "caller", "constructor", "hasOwnProperty", "isPrototypeOf", "length", "name", "now", "parse", "propertyIsEnumerable", "prototype", "toLocaleString", "toString", "valueOf"]
===
Object.getOwnPropertyNames(Date).sort()
["UTC", "arguments", "caller", "length", "name", "now", "parse", "prototype"]
===
Object.getOwnPropertyNames(Date.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]

Object.getOwnPropertyNames(Date.prototype).sort()
["constructor", "getDate", "getDay", "getFullYear", "getHours", "getMilliseconds", "getMinutes", "getMonth", "getSeconds", "getTime", "getTimezoneOffset", "getUTCDate", "getUTCDay", "getUTCFullYear", "getUTCHours", "getUTCMilliseconds", "getUTCMinutes", "getUTCMonth", "getUTCSeconds", "getYear", "setDate", "setFullYear", "setHours", "setMilliseconds", "setMinutes", "setMonth", "setSeconds", "setTime", "setUTCDate", "setUTCFullYear", "setUTCHours", "setUTCMilliseconds", "setUTCMinutes", "setUTCMonth", "setUTCSeconds", "setYear", "toDateString", "toGMTString", "toISOString", "toJSON", "toLocaleDateString", "toLocaleString", "toLocaleTimeString", "toString", "toTimeString", "toUTCString", "valueOf"]

ljb'fdate'prototype

name::
* McsEngl.ljb'fdate'prototype@cptIt,

_CODE.LJS:
typeof Date.prototype
"object"
typeof Date.__proto__
"function"

ljsf.Error

name::
* McsEngl.ljsf.Error@cptIt,
* McsEngl.ljs'Error-object@cptIt,

_GENERIC:
* js-prebuilt-object#ql:js'object.prebuilt#,
===
typeof Error
"function"

ljsf.FIRST-CLASS

name::
* McsEngl.ljsf.FIRST-CLASS@cptIt,

_DESCRIPTION:
A first-class function is one that may participate as a normal data, i.e. be created literally at runtime, be passed as an argument, or be returned as a value from another function.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-3-1-lexical-environments-common-theory/#first-class-functions]

ljsf.Function

name::
* McsEngl.ljsf.Function@cptIt,
* McsEngl.ljs'ffunction@cptIt,

_GENERIC:
> typeof Function
"function"
===
> Function instanceof Function
true
> Function.constructor
function Function() { [native code] }
===
> Object.getPrototypeOf(Function)
function Empty() {}
> Function.prototype
function Empty() {}
> Function.__proto__
function Empty() {}

ljb'ffunction'property

name::
* McsEngl.ljb'ffunction'property@cptIt,

_SPECIFIC:
===
> Object.getOwnPropertyNames(Function).sort()
["arguments", "caller", "length", "name", "prototype"]
===
> Object.getOwnPropertyNames(Function.prototype).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
===
> Object.getOwnPropertyNames(Function.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
===
> Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> getAllPropertyNames(Function).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "apply", "arguments", "bind", "call", "caller", "constructor", "hasOwnProperty", "isPrototypeOf", "length", "name", "propertyIsEnumerable", "prototype", "toLocaleString", "toString", "valueOf"]

ljb'fmember.constructor

name::
* McsEngl.ljb'fmember.constructor@cptIt,
* McsEngl.ljs'constructor-of-function@cptIt,
* McsEngl.ljsfcn'constructor-property@cptIt,

_DESCRIPTION:
If you define a simple function foo() you can access its properties as you would do with any other object:
>>>function foo(a, b){return a * b;}
>>>foo.length
2
>>>foo.constructor
Function()
[http://www.packtpub.com/article/using-prototype-property-in-javascript]

ljb'fmember.length

name::
* McsEngl.ljb'fmember.length@cptIt,
* McsEngl.ljsfcn'length-property@cptIt,
* McsEngl.ljs'length-of-function@cptIt,

_DESCRIPTION:
return the quantity of arguments when the function created, not called.
[hknu, 2011-03-12]
===
If you define a simple function foo() you can access its properties as you would do with any other object:
>>>function foo(a, b){return a * b;}
>>>foo.length
2
[http://www.packtpub.com/article/using-prototype-property-in-javascript]

ljb'fmember.method

name::
* McsEngl.ljb'fmember.method@cptIt,
* McsEngl.ljsfcn'Method@cptIt,

_DESCRIPTION:
METHODS
apply Method
The apply method allows you to apply to a function a method from another function.

Syntax: Function.apply(thisArg[, argArray])

call Method
The call method allows you to call a method from another object

Syntax: Function.call(thisArg[, arg1[, arg2[, ...]]])

toSource Method
The toSource method creates a string representing the source code of the function. This over-rides the Object.toSource method

Syntax: Function.toSource ()

toString Method
The toString method (like the valueOf method below) returns a string which represents the source code of a function. This over-rides the Object.toString method.

Syntax: Function.toString ()

valueOf Method
The valueOf method (like the ToString method above) returns a string which represents the source code of a function. This over-rides the Object.valueOf method.

Syntax: Function.valueOf ()
[http://www.devguru.com/technologies/ecmascript/quickref/function_object.html]

ljb'fmember.methodNo

name::
* McsEngl.ljb'fmember.methodNo@cptIt,
* McsEngl.ljsfcn'Property@cptIt,

PROPERTIES
arguments Property
The arguments property consists of an array of all the arguments passed to a function.

Syntax: [Function.]arguments

arguments.callee Property
The arguments.callee property can only be used within the body of a function and returns a string specifying what that function is.

Syntax: [Function.]arguments.callee

arguments.caller Property
The arguments.caller property is deprecated in JavaScript 1.3 and is no longer used, but where it is, it specifies the name of the function that called the currently executing function.

Syntax: [Function.]arguments.caller

arguments.length Property
The arguments.length property returns the number of arguments passed to a function.

Syntax: [Function.]arguments.length

arity Property
The arity property specifies the number of arguments expected by a function. It is external to the function and is in contrast to the arguments.length property which specifies the number of arguments actually passed to a function.

Syntax: [Function.]arity Compare the length property below.

constructor Property
The constructor property specifies the function that creates an object's prototype. It is a direct reference to the function itself rather than a string containing the function's name. See the constructor property of the Object object for more details and examples.

Syntax: Function.constructor

length Property
The length property specifies the number of arguments expected by a function. It is external to the function and is in contrast to the arguments.length property which specifies the number of arguments actually passed to a function. Compare the arity property above.

Syntax: Function.length

prototype Property
The prototype property is a value from which all instances of an object are constructed, and which also allows you to add other properties and methods to an object. See also the prototype property of the Object object for more details and examples.

Syntax: Function.prototype.name = value
[http://www.devguru.com/technologies/ecmascript/quickref/function_object.html]

ljb'fmember.prototype

name::
* McsEngl.ljb'fmember.prototype@cptIt,
* McsEngl.ljsfcn'prototype-property@cptIt,

_DESCRIPTION:
The functions in JavaScript are objects and they contain methods and properties. Some of the common methods are apply() and call() and some of the common properties are length and constructor. Another property of the function objects is prototype.
[http://www.packtpub.com/article/using-prototype-property-in-javascript]
===
prototype  Allows you to add properties and methods to an object

_CODE.LJS:

<script type="text/javascript">

function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}
var fred=new employee("Fred Flintstone","Caveman",1970);

employee.prototype.salary=null;

fred.salary=20000;

document.write(fred.salary);

</script>

</body>
</html>

20000
[http://www.w3schools.com/jsref/jsref_prototype_array.asp]

===
var animal = { eats: true }
function Rabbit(name) {
this.name = name
}
Rabbit.prototype = animal
var rabbit = new Rabbit('John')
alert( rabbit.eats ) // true, because rabbit.__proto__ == animal
The code Rabbit.prototype = animal literally means the following:
”set __proto__ = animal for all objects created by new Rabbit”.
[http://javascript.info/tutorial/inheritance]

_CODE.LJS:
function Pet(name, species, hello)
{
this.name = name;
this.species = species;
this.hello = hello;
}

Pet.prototype.sayHello = function()
{
alert(this.hello);
}

var rufus = new Pet("Rufus", "cat", "miaow");
rufus.sayHello();

In the previous example we just added another property to object that was automatically created. Instead we could have overriden the default empty object with a new one instead:

Pet.prototype = {
sayHello : function()
{
alert(this.hello);
}
};

[http://helephant.com/2009/01/javascript-object-prototype/]

ljsf.GLOBAL

name::
* McsEngl.ljsf.GLOBAL@cptIt,

_DESCRIPTION:
Use of global functions should be minimized.
[http://javascript.crockford.com/code.html]

_SPECIFIC:
JavaScript Global Functions

Function    Description
decodeURI()  Decodes a URI
decodeURIComponent()  Decodes a URI component
encodeURI()  Encodes a URI
encodeURIComponent()  Encodes a URI component
escape()    Encodes a string
eval()    Evaluates a string and executes it as if it was script code
isFinite()    Determines whether a value is a finite, legal number
isNaN()    Determines whether a value is an illegal number
Number()    Converts an object's value to a number
parseFloat()    Parses a string and returns a floating point number
parseInt()    Parses a string and returns an integer
String()    Converts an object's value to a string
unescape()    Decodes an encoded string
[http://www.w3schools.com/jsref/jsref_obj_global.asp]

ljsf.IN-LINE

name::
* McsEngl.ljsf.IN-LINE@cptIt,

In-Line JavaScript Functions

You can write JavaScript Function "in-line".

var myFunction = function(a, b){ return a + b; };

/// This actually does the exact same as the following:
function myFunction(a, b)
{
return a + b;
}

You can also use "in-line" function to define custom functions for use within a specific context. This allows you to reference variables within the context that the "in-line" function was defined without having to actually pass them as arguments.

function AddNumbers(a, b)
{
var add = function(){ return a + b; };

return add();
}
[http://pietschsoft.com/post/2008/02/JavaScript-Function-Tips-and-Tricks.aspx]

ljsf.INNER (closure)

name::
* McsEngl.ljsf.INNER (closure)@cptIt,
* McsEngl.closure.js@cptIt,
* McsEngl.ljs'CLOSURE@cptIt,

_DESCRIPTION:
Closures
This pattern of public, private, and privileged members is possible because JavaScript has closures. What this means is that an inner function always has access to the vars and parameters of its outer function, even after the outer function has returned. This is an extremely powerful property of the language. There is no book currently available on JavaScript programming that shows how to exploit it. Most don't even mention it.
[http://javascript.crockford.com/private.html]
===
JavaScript has inner functions, which serve the same purpose as inner classes in Java, but are much lighter.
...
Closure
Functions can be defined inside of other functions. The inner function has access to the vars and parameters of the outer function. If a reference to an inner function survives (for example, as a callback function), the outer function's vars also survive.
[http://javascript.crockford.com/survey.html]
===
Inner functions should follow the var statement. This helps make it clear what variables are included in its scope.
function outer(c, d) {
var e = c * d;

function inner(a, b) {
return (e * a) + b;
}

return inner(0, 1);
}
[http://javascript.crockford.com/code.html]
===
Inner Functions

Since functions in JavaScript are just one more type of object, we can create a function inside another function. These are called inner functions.

The example below shows how to create and use a function inside another one.

function analyzeText(text) {
var index = 0;

function getNextCharacter() {
if (index < index.legth) {
return text.charAt(index);
}
return false;
}

var c = getNextCharacter();
while (c) {
alert(index + ' ---> ' + c );
c = getNextCharacter();
}
}
analyzeText('abcdef');

The above example is not particularly useful. We will see more important uses of inner function when we look at private members. For the time being, just notice how getNextCharacter() has access to index and text, which are scoped to the analyzeText() function.
[http://www.learn-javascript-tutorial.com/AdvancedTechniques.cfm#beyond-basics]

===
Closures are an extension of the concept of scope — functions have access to variables that were available in the scope where the function was created.
[http://autotelicum.github.io/Smooth-CoffeeScript/literate/js-intro.html#closures]

ljsf.INSTANCE (with new)

_CREATED: {2013-11-18}

name::
* McsEngl.ljsf.INSTANCE (with new)@cptIt,
* McsEngl.ljs'instance-function@cptIt,

_GENERIC:
> var fc = new Function()
undefined
> typeof fc
"function"

_PROPERTY:
> var fc = new Function()
undefined
> Object.getOwnPropertyNames(fc).sort()
["arguments", "caller", "length", "name", "prototype"]
> Object.getOwnPropertyNames(Function).sort()
["arguments", "caller", "length", "name", "prototype"]
===
> Object.getOwnPropertyNames(Object.getPrototypeOf(fc)).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
> Object.getOwnPropertyNames(fc.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
> Object.getOwnPropertyNames(Function.prototype).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]

ljsf.INSTANCE.NO

name::
* McsEngl.ljsf.INSTANCE.NO@cptIt,

ljsf.METHOD

name::
* McsEngl.ljsf.METHOD@cptIt,
* McsEngl.ljs'method-function@cptIt,
* McsEngl.ljs'object'method@cptIt,
* McsEngl.ljs'method@cptIt,
* McsEngl.ljs'mtd@cptIt, {2013-10-13}
* McsEngl.ljs'md@cptIt, {2013-07-15}

_DESCRIPTION:
4.3.27 method
function that is the value of a property
NOTE When a function is called as a method of an object, the object is passed to the function as its this value.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.27H3]
===
A method is a function stored under an object. Since all functions are stored under (at least) the window object they can all be referred to as ‘methods’.
[http://net.tutsplus.com/tutorials/javascript-ajax/javascript-and-the-dom-series-lesson-1/]
===
"Method" is NOT a function. It is 3 entities:
1. method-member: a member(name+value) with value a function.
2. method-name: a variable-name.
3. method-function: a function.
[hmnSngo.2013-10-27]
===
4.3.27 method
function that is the value of a property
NOTE When a function is called as a method of an object, the object is passed to the function as its this value.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.27]
===
When a function is a member of an object, it is called a method.
[http://javascript.crockford.com/survey.html]
===
A method is a function associated with an object.
===
* Οι μέθοδοι (methods) ενός αντικειμένου καθορίζουν το πώς αυτό συμπεριφέρεται ή ενεργεί, ακριβώς όπως τα ρήματα καθορίζουν τη συμπεριφορά ενός ουσιαστικού (το αυτοκίνητο κινείται, στρίβει, σταματά, κλπ)... Προσέξτε ότι κάθε μέθοδος ακολουθείται από ένα ζεύγος παρενθέσεων μέσα στις οποίες τοποθετούνται οι παράμετροι ή τα ορίσματα της μεθόδου.
[Λιακέας, Η γλώσσα JavaScript. 2002, 31]

_DEFINITION:
Methods are the actions that can be performed on objects.
[http://www.w3schools.com/js/js_obj_intro.asp]
===
When a function is a member of an object, it is called a method.
[http://javascript.crockford.com/survey.html]

_METHOD_CALL:
When a method of an object is invoked, the this variable is set to the object.
[http://javascript.crockford.com/private.html]

Built-in Functions vs. Methods
Methods and functions are similar in that they both make things happen. They are also syntactically similar. The major difference is that methods are tied to an object; whereas, functions are not. For example, alert() is a method of the window object; whereas parseInt() is a standalone function.
[http://www.learn-javascript-tutorial.com/JavaScript-Functions.cfm]

ljb'object'method'adding

name::
* McsEngl.ljb'object'method'adding@cptIt,

_DESCRIPTION:
function Person(first, last) {
this.first = first;
this.last = last;
}

Person.prototype.toString = function() {
return this.first + " " + this.last;
[http://www.kevlindev.com/tutorials/javascript/inheritance/index.htm]

===
How to add methods to your own object

Adding methods to a user defined object is a bit more complicated. We need to first declare and define a function for each method, then associate this function with the object function. For the sake of simplicity, we will simply call functions defined for methods "method functions." Lets get a clean start, and create a new object called "circle" that will contain methods that compute the area and diameter of a circle, respectively.

The first step to adding methods is to implement the method functions. Method functions define what a method does:

//first method function
function computearea(){
var area=this.radius*this.radius*3.14
return area
}

//second method function
function computediameter(){
var diameter=this.radius*2
return diameter
}
In the above case, we've created two method functions, "computearea" and "computediamter", which calculates various aspects of a circle. The two functions, as you can see, are just functions, with one major distinction. Take the first one, for example:

function computearea(){
var area=this.radius*this.radius*3.14
return area
What the heck is this.radius? It looks like a property of a custom object to me (back up and see how a property is defined in a custom object). Since a method function will eventually be connected to the custom object, it has access to the properties of the object. We haven't defined the properties yet, but we will, and the method functions will use them in its calculation.

We will now associate the two method functions above to the new object "circle", so they become methods of the object:

<script type="text/javascript">
/*the below creates a new object, and gives it the two methods defined earlier*/
function circle(r){
//property that stores the radius
this.radius=r
this.area=computearea
this.diameter=computediameter
}
</script>
Finally, to use these methods, instantiate the object, and access the methods just like any other method:

<script type="text/javascript">
var mycircle=new circle(20)
//alerts 1256
alert("area="+mycircle.area())
//alerts 400
alert("diameter="+mycircle.diameter())
</script>
As you can see, creating your own objects requires quite a bit of work, but can be very rewarding and even necessary as your JavaScript becomes more sophisticated.
[http://www.javascriptkit.com/javatutors/object4.shtml]

ljsf.confirm()

name::
* McsEngl.ljsf.confirm()@cptIt,
* McsEngl.lcpJs'confirm-function@cptIt,

confirm(msg)  Displays a Confirm dialog box with the specified message and OK and Cancel buttons.
[http://www.javascriptkit.com/jsref/globalfunctions.shtml]

_CODE.LJS:
var yourstate=window.confirm("Are you sure you are ok?")
if (yourstate) //Boolean variable. Sets to true if user pressed "OK" versus "Cancel."
window.alert("Good!")

ljsf.eval()

name::
* McsEngl.ljsf.eval()@cptIt,
* McsEngl.ljseval@cptIt,
* McsEngl.ljs'eval-Function@cptIt,

_DESCRIPTION:
Remember this, eval is evil. Avoid it as much as you can. If you think you need it, maybe it's because you did not learn yet about an alternative way in JavaScript.
[http://www.learn-javascript-tutorial.com/AdvancedTechniques.cfm#beyond-basics]
===
The eval() function evaluates or executes an argument.
If the argument is an expression, eval() evaluates the expression. If the argument is one or more JavaScript statements, eval() executes the statements.
[http://www.w3schools.com/jsref/jsref_eval.asp]

_SYNTAX:
eval(string)
Parameter  Description
string  A JavaScript expression, variable, statement, or sequence of statements

_CODE.LJS:
> eval(1+2)
3
===
> eval('({"p":1})')
Object {p: 1}

ljsf.isNaN()

name::
* McsEngl.ljsf.isNaN()@cptIt,
* McsEngl.lcpJs'isNaN-Function@cptIt,

isNaN(object)

The isNaN() function takes one argument: an object. The function checks if the object is not a number (or cannot be converted to a number). It returns true if the object is not a number and false if it is a number.

ljsf.prompt

name::
* McsEngl.ljsf.prompt@cptIt,
* McsEngl.ljs'prompt-function@cptIt,

_DESCRIPTION:
prompt(msg, [input])  Displays a Prompt dialog box with a message. Optional "input" argument allows you to specify the default input (response) that gets entered into the dialog box. Set "input" to "" to create a blank input field.
[http://www.javascriptkit.com/jsref/globalfunctions.shtml]

===
JavaScript Prompt

The JavaScript prompt is a relic from the 1990's that you seldom see being used in modern day websites. The point of the JavaScript prompt is to gather information from the user so that the information can be used throughout the site to give the visitor a personalized feel.

Back in the day, you'd often see prompts on personal webpages asking for your name. After you typed in the information, you would be greeted with a page that had a welcome message, such as, "Welcome to My Personal WebPage John Schmieger!" (If your name just so happened to be John Schmieger).

The JavaScript prompt is not very useful and many find it slightly annoying, but hey, this tutorial is here to educate you, so let's learn how to make that prompt!
Simple JavaScript Prompt

You can use a prompt for a wide variety of useless tasks, but below we use it for an exceptionally silly task. Our prompt is used to gather the user's name to be displayed in our alert dialogue box.
HTML & JavaScript Code:

<head>
<script type="text/javascript">
<!--
function prompter() {
var reply = prompt("Hey there, good looking stranger! What's your name?", "")
alert ( "Nice to see you around these parts " + reply + "!")
}
//-->
</script>
</head>
<body>
<input type="button" onclick="prompter()" value="Say my name!">
</body>

Recap on JavaScript Prompt

It sure is a quick way to gather some information, but it is not as reliable an information gatherer as other options available to you. If you want to find out someone's name and information, the best way to request this information would be through the use of HTML Forms. And if you want to use the information you collected in your website, you might use some PHP to get that job done in a more sophisticated manner.
[http://www.tizag.com/javascriptT/javascriptprompt.php]

_CODE.LJS:
var thename=window.prompt("please enter your name")
window.alert(thename)
[http://www.javascriptkit.com/jsref/globalfunctions.shtml]

ljsf.unescape()

name::
* McsEngl.ljsf.unescape()@cptIt,
* McsEngl.ljs'unescape@cptIt,

_DESCRIPTION:
* http://www.iwebtool.com/html_encrypter, encrepts all message and 'unescape' finds the original.

ljsf.OBJECT-RETURNING#ql:ljsobject-returning-function#

name::
* McsEngl.ljsf.OBJECT-RETURNING@cptIt,

ljsf.PHP

name::
* McsEngl.ljsf.PHP@cptIt,

_ADDRESS.WPG:
* http://phpjs.org/functions//

ljsf.RECURSIVE

name::
* McsEngl.ljsf.RECURSIVE@cptIt,

_DESCRIPTION:
A new set of vars is made every time the function is called. This allows functions to be recursive.
[http://javascript.crockford.com/survey.html]

_CODE.LJS:
JavaScript allows you to call functions recursively. This is particularly useful for dealing with tree structures, such as you get in the browser DOM.

function countChars(elm) {
if (elm.nodeType == 3) { // TEXT_NODE
return elm.nodeValue.length;
}
var count = 0;
for (var i = 0, child; child = elm.childNodes[i]; i++) {
count += countChars(child);
}
return count;
}
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Functions]
===
function factorial (x) {
if (x>1)
return x * factorial (x-1);
else
return 1;
}
==============
function factorial (x) {
var fact=1;
for (var i=x; i>=1; --1)
fact *=i;
return fact;
}

ljsf.SELF-EXECUTING

name::
* McsEngl.ljsf.SELF-EXECUTING@cptIt,
* McsEngl.IIFE.js@cptIt,
* McsEngl.ljs'IIFE@cptIt,
* McsEngl.ljs'immediately-invoked-function-expression@cptIt,
* McsEngl.ljs'self-executing-anonymous-function@cptIt,
* McsEngl.ljs'self-invoked-anonymous-function@cptIt,

_DESCRIPTION:
An IIFE is effectively an unnamed function which is immediately invoked after it's been defined. In JavaScript, because both variables and functions explicitly defined within such a context may only be accessed inside of it, function invocation provides an easy means to achieving privacy.
[http://addyosmani.com/blog/essential-js-namespacing/]
===
Anonymous Closures
This is the fundamental construct that makes it all possible, and really is the single best feature of JavaScript. We’ll simply create an anonymous function, and execute it immediately. All of the code that runs inside the function lives in a closure, which provides privacy and state throughout the lifetime of our application.

(function () {
 // ... all vars and functions are in this scope only
 // still maintains access to all globals
}());
Notice the () around the anonymous function. This is required by the language, since statements that begin with the token function are always considered to be function declarations. Including () creates a function expression instead.
[http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html]
===
Consider the following function:
function doSomeAlert() {
alert('Hello World');
}
As you might have guessed, this function won’t automatically run when the page loads. If we want it to, we need to call it.
doSomeAlert();
Easy enough. Is there any other way to make a function run when the page loads without calling it? Yes; to do so, we’ll wrap our function within parenthesis, and then append one more set – like so.
(
 function doSomething() {
   alert('Hello World');
 }
)();
Now, if you run this block of code in your browser, an alert will immediately be displayed.

How Come?
Notice that second set of parenthesis, just before the closing semi-colon? This set basically means, “Execute!”. We can simplify this code even further by turning our function into an anonymous one.
(
 function() {
   alert('Hello World');
 }
)();
...
What are the Benefits of Using Self-Invoking Anonymous Function?
There are plenty. We just demonstrated one usage. Another one would be to accomplish some work without having to create a bunch of global variables.
Parameters
Now what if we wanted to pass a parameter to our anonymous function? We can accomplish this by passing it through the second set of parenthesis. Let’s revise the previous function so that it accepts a ‘name’ parameter.
(
 function(name) {
   alert('Hello ' + name);
 }
)('Jeffrey');
Notice how we passed ‘Jeffrey’ as a parameter? This value is then sent to our anonymous function!
[http://blog.themeforest.net/tutorials/ask-jw-decoding-self-invoking-anonymous-functions//]

_CODE.LJS:
//self-executing-function inside object
> var o=(function(){var o={s:"s",n:1,b:true,f:(function(a){console.log("o.f")})(),o:{p:1}}; return o })()
o.f
===
(
 function(name) {
   alert('Hello ' + name);
 }
)("nikkas");
=>
Hello nikkas
...
Back to jQuery
Let’s refer back to Travis’ question. How can we pass the ‘$’ symbol without it interfering with other Javascript libraries? Let’s use the same method as we just learned.
(
 function($) {
   $.fn.myPlugin = function() {}
 }
)(jQuery);
Now, you should understand that we’re passing the jQuery object as a parameter, which will then be represented by ‘$’. It’s as easy as that!
[http://blog.themeforest.net/tutorials/ask-jw-decoding-self-invoking-anonymous-functions//]
===
//coffee to js
(function() {
var name;
name = "John Doe";
console.log("Hello, " + name + "!");
}).call(this);

ljsf.User-defined

name::
* McsEngl.ljsf.User-defined@cptIt,
* McsEngl.ljsfcn.custom@cptIt,

_DESCRIPTION:
User-defined Functions
Writing functions makes it possible to reuse code for common tasks. Functions can also be used to hide complex code. For example, an experienced developer can write a function for performing a complicated task. Other developers do not need to know how that function works; they only need to know how to call it.
[http://www.learn-javascript-tutorial.com/JavaScript-Functions.cfm#h1.1]

_PROPERTY:
> function Car(){}
undefined
> Object.getOwnPropertyNames(Car).sort()
["arguments", "caller", "length", "name", "prototype"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(Car)).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(Object.getPrototypeOf(Car))).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> getPropertyAll(Car).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "apply", "arguments", "bind", "call", "caller", "constructor", "hasOwnProperty", "isPrototypeOf", "length", "name", "propertyIsEnumerable", "prototype", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames(Car.prototype).sort()
["constructor"]
> Object.getOwnPropertyNames(Car.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
> Object.getOwnPropertyNames(Car.constructor).sort()
["arguments", "caller", "length", "name", "prototype"]
===
Object.getOwnPropertyNames(o_Hitp).sort()
["fcnCreate_ul_with_headings", "fcnMake_toc", "fcnSplit", "fcnTreeCollapse_all", "fcnTreeExpand_all", "fcnTreeExpand_first", "fcnTreeExpand_parent", "fcnTreeGoto_id", "fcnTreeHighlight_item", "fcnTreeInit", "fcnTreeShow_hide_node", "nPosSplitPrevious", "nTocIdTreeLi"]
Object.getOwnPropertyNames(oHitp.fcnSplit).sort()
["arguments", "caller", "length", "name", "prototype"]
Object.getOwnPropertyNames(Object.constructor).sort()
["arguments", "caller", "length", "name", "prototype"]

ljsf.Window#ql:jsf.window@cptIt#

name::
* McsEngl.ljsf.Window@cptIt,

ljsf.WITH-RETURN-VALUE

name::
* McsEngl.ljsf.WITH-RETURN-VALUE@cptIt,

_DESCRIPTION:
Syntax

function myFunction()
{
var x=5;
return x;
}
===
alert (myFunction) ==> alerts "function myFunction(){..."
alert (myFunction()) ===> alerts "5"
[hmnSngo.2013-07-02]

ljsalgo'sut.MODULE

_CREATED: {2013-11-22}

name::
* McsEngl.ljsalgo'sut.MODULE@cptIt,
* McsEngl.ljsmodule@cptIt,
* McsEngl.ljs'module@cptIt,
* McsEngl.ljs'module-system@cptIt,
* McsEngl.ljs'module'MODULAR-PATTERN@cptIt,
* McsEngl.ljs'modular-pattern@cptIt,
* McsEngl.ljs'module-system@cptIt,
* McsEngl.ljsmdl@cptIt,
* McsEngl.mdlJs@cptIt,

_GENERIC:
* js-pattern#ql:js'pattern#

_ADDRESS.WPG:
* http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html, ben cherry,
* http://omarrr.com/javascript-module-pattern-a-detailed-deconstruction//

_DESCRIPTION:
Module systems offer the option to split your code base into modules.
[http://webpack.github.io/docs/motivation.html]
===
A JavaScript code module is simply some JavaScript code located in a registered location.
[https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Using]
===
In the world of scalable JavaScript, when we say an application is modular, we often mean it's composed of a set of highly decoupled, distinct pieces of functionality stored in modules. Loose coupling facilitates easier maintainability of apps by removing dependencies where possible. When this is implemented efficiently, it's quite easy to see how changes to one part of a system may affect another.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modularjavascript]
===
Module is code that is related with PART-WHOLE relations with the other code. In contrast 'object' is code which is related with GENERIC-SPECIFIC relations with the other code.
[hmnSngo.2013-11-22]

ljsmdl'name

name::
* McsEngl.ljsmdl'name@cptIt,

_DESCRIPTION:
Modules get an uppercase first character. Just a convention that helps code readability.
[http://css-tricks.com/how-do-you-structure-javascript-the-module-pattern-edition/]

ljsmdl'augmenting

name::
* McsEngl.ljsmdl'augmenting@cptIt,

_DESCRIPTION:
Augmentation
One limitation of the module pattern so far is that the entire module must be in one file. Anyone who has worked in a large code-base understands the value of splitting among multiple files. Luckily, we have a nice solution to augment modules. First, we import the module, then we add properties, then we export it. Here’s an example, augmenting our MODULE from above:

var MODULE = (function (my) {
 my.anotherMethod = function () {
   // added method...
 };
 return my;
}(MODULE));
We use the var keyword again for consistency, even though it’s not necessary. After this code has run, our module will have gained a new public method named MODULE.anotherMethod. This augmentation file will also maintain its own private internal state and imports.
[http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html]

ljsmdl'evoluting

name::
* McsEngl.ljsmdl'evoluting@cptIt,

_DESCRIPTION:
We’ll start out with a simple overview of the module pattern, which has been well-known since Eric Miraglia (of YUI) first blogged about it three years ago[2007]. If you’re already familiar with the module pattern, feel free to skip ahead to “Advanced Patterns”.
[http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html]

ljsmdl'file

name::
* McsEngl.ljsmdl'file@cptIt,

ljsmdl'part-module

name::
* McsEngl.ljsmdl'part-module@cptIt,
* McsEngl.ljs'submodule@cptIt,

_DESCRIPTION:
Sub-modules
Our final advanced pattern is actually the simplest. There are many good cases for creating sub-modules. It is just like creating regular modules:

MODULE.sub = (function () {
 var my = {};
 // ...

 return my;
}());
While this may have been obvious, I thought it worth including. Sub-modules have all the advanced capabilities of normal modules, including augmentation and private state.
[http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html]

ljsmdl'property

name::
* McsEngl.ljsmdl'property@cptIt,

ljsmdl'property'overriding

name::
* McsEngl.ljsmdl'property'overriding@cptIt,

ljsmdl'property.PRIVATE

name::
* McsEngl.ljsmdl'property.PRIVATE@cptIt,

ljsmdl'property.private.cross-file

name::
* McsEngl.ljsmdl'property.private.cross-file@cptIt,

_DESCRIPTION:
One severe limitation of splitting a module across multiple files is that each file maintains its own private state, and does not get access to the private state of the other files. This can be fixed. Here is an example of a loosely augmented module that will maintain private state across all augmentations:

var MODULE = (function (my) {
 var _private = my._private = my._private || {},
   _seal = my._seal = my._seal || function () {
     delete my._private;
     delete my._seal;
     delete my._unseal;
   },
   _unseal = my._unseal = my._unseal || function () {
     my._private = _private;
     my._seal = _seal;
     my._unseal = _unseal;
   };

 // permanent access to _private, _seal, and _unseal

 return my;
}(MODULE || {}));
Any file can set properties on their local variable _private, and it will be immediately available to the others. Once this module has loaded completely, the application should call MODULE._seal(), which will prevent external access to the internal _private. If this module were to be augmented again, further in the application’s lifetime, one of the internal methods, in any file, can call _unseal() before loading the new file, and call _seal() again after it has been executed. This pattern occurred to me today while I was at work, I have not seen this elsewhere. I think this is a very useful pattern, and would have been worth writing about all on its own.
[http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html]

ljsmdl'property.PUBLIC

name::
* McsEngl.ljsmdl'property.PUBLIC@cptIt,

ljsmdl'resource

name::
* McsEngl.ljsmdl'resource@cptIt,

_ADDRESS.WPG:
* http://larsjung.de/modulejs//

SPECIFIC

_SPECIFIC:
* AMD-module#linkL#
* CommonJs-module#linkL#
* ES6-module#linkL#
* UMD-module#linkL#

ljsmdl.AMD

name::
* McsEngl.ljsmdl.AMD@cptIt,
* McsEngl.AMD.js@cptIt,
* McsEngl.amdjs@cptIt,
* McsEngl.asynchronous-module-definition@cptIt,
* McsEngl.ljsmodule.requirejs@cptIt,
* McsEngl.ljs'AMD@cptIt,
* McsEngl.ljs'library.AMD@cptIt,

* McsEngl.amdmdl@cptIt,
* McsEngl.mdlAmd@cptIt,

_ADDRESS.WPG:
* http://tagneto.blogspot.gr/2011/04/on-inventing-js-module-formats-and.html,

_DESCRIPTION:
The Asynchronous Module Definition (**AMD**) API specifies a mechanism for defining modules such that the module and its dependencies can be asynchronously loaded. This is particularly well suited for the browser environment where synchronous loading of modules incurs performance, usability, debugging, and cross-domain access problems.
It is unrelated to the technology company AMD and the processors it makes.
[https://github.com/amdjs/amdjs-api/wiki/AMD]
===
AMD – Asynchronous Module Definition, a module format optimized for browser usage.
[http://www.sitepen.com/blog/2012/06/25/amd-the-definitive-source/]

mdlAmd'builder

name::
* McsEngl.mdlAmd'builder@cptIt,

_DESCRIPTION:
Builder – This is a tool that will generate a concatenated JavaScript file composed of a module (or modules) and its dependencies, thus making it possible to take an application composed of numerous modules and create a number of built layers that can be loaded in a minimal number of HTTP requests.
[http://www.sitepen.com/blog/2012/06/25/amd-the-definitive-source/]

mdlAmd'conversion-from-commonjs

name::
* McsEngl.mdlAmd'conversion-from-commonjs@cptIt,

_ADDRESS.WPG:
* http://requirejs.org/docs/commonjs.html,

mdlAmd'evaluation

name::
* McsEngl.mdlAmd'evaluation@cptIt,

_DESCRIPTION:
Having used AMD for a number of projects, my conclusions are that it ticks a lot of the checkboxes developers creating serious applications might desire from a better module format. It avoids the need to worry about globals, supports named modules, doesn't require server transformation to function and is a pleasure to use for dependency management.

It's also an excellent addition for modular development using Backbone.js, ember.js or any number of other structural frameworks for keeping applications organized.

As AMD has been heavily discussed for almost two years within the Dojo and CommonJS worlds, we know it's had time to mature and evolve. We also know it's been battle-tested in the wild by a number of large companies to build non-trivial applications (IBM, BBC iPlayer) and so, if it didn't work, chances are they would have abandoned it by now, but haven't.

That said, there are still areas where AMD could be improved. Developers who have used the format for some time may feel the AMD boilerplate/wrapper-code is an annoying overhead. Whilst I share this concern, there are tools such as Volo that can help work around these issues and I would argue that on the whole, the pros with using AMD far outweigh the cons.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modularjavascript]

_LOADING_FEWER_RESOURCES:
Asynchronous Module Definition, or AMD, is a way of defining JavaScript classes in such a way that they can be loaded when needed, rather than loading all the classes for your system right away. One of the principle advantages of this pattern is the increased performance of the system that inherently comes from loading fewer resources. By leveraging the AMD pattern to create self-contained modules that can be loaded on demand one can build modules that have clearly defined dependencies and are highly cohesive.
[http://www.andrewlarkin.net/?p=14]

mdlAmd'function.define

name::
* McsEngl.mdlAmd'function.define@cptIt,
* McsEngl.define-function.amdjs@cptIt,
* McsEngl.amdjs'define-function@cptIt,

_DESCRIPTION:
The two key concepts you need to be aware of here are the idea of
- a define method for facilitating module definition and
- a require method for handling dependency loading.
define is used to define named or unnamed modules based on the proposal using the following signature:
define(
module_id /*optional*/,
[dependencies] /*optional*/,
definition function /*function for instantiating the module or object*/
);
[http://addyosmani.com/writing-modular-js/]
===
The specification defines a single function "define" that is available as a free variable or a global variable. The signature of the function:
define(id?, dependencies?, factory);
[https://github.com/amdjs/amdjs-api/wiki/AMD#define-function-]

mdlAmd'module-id

name::
* McsEngl.mdlAmd'module-id@cptIt,

mdlAmd'dependencies

name::
* McsEngl.mdlAmd'dependencies@cptIt,
* McsEngl.amdjs'dependency@cptIt,

_DESCRIPTION:
Dependency – This is a module that must be loaded for another module to function properly.
[http://www.sitepen.com/blog/2012/06/25/amd-the-definitive-source/]

mdlAmd'definition-function

name::
* McsEngl.mdlAmd'definition-function@cptIt,
* McsEngl.amdjs'factory@cptIt,
* McsEngl.amdjs'factory-function@cptIt,

_DESCRIPTION:
Factory – The function provided to the module loader via define that is to be executed once all the dependencies are ready
[http://www.sitepen.com/blog/2012/06/25/amd-the-definitive-source/]

mdlAmd'function.require

name::
* McsEngl.mdlAmd'function.require@cptIt,
* McsEngl.amdjs'require-function@cptIt,

_DESCRIPTION:
AMD’s API focuses on two globally-available functions: require() and define(). require() specifies a list of dependent modules or resources that must be loaded before running a set of code. This code resides in a callback function that is executed asynchronously, i.e. it runs later, not in the current “thread”. Specifically, it executes when all of the dependencies are loaded and ready.
Actually, the proposal says that the require() function could have a different name — or could even be implemented differently. To keep with convention — and to better integrate with non-AMD CommonJS modules — we’re using require(), but curl() is also an alias to require().
[http://unscriptable.com/2011/03/30/curl-js-yet-another-amd-loader/]

mdlAmd'layer

name::
* McsEngl.mdlAmd'layer@cptIt,

_DESCRIPTION:
Layer – A file that contains modules that have been optimized into a single file by a Builder.
[http://www.sitepen.com/blog/2012/06/25/amd-the-definitive-source/]

mdlAmd'loader

name::
* McsEngl.mdlAmd'loader@cptIt,
* McsEngl.amdjs'module'loader@cptIt,

_DESCRIPTION:
Module Loader – This is the JavaScript code that resolves and loads modules and their associated dependencies, interacts with plugins, and handles configuration.
[http://www.sitepen.com/blog/2012/06/25/amd-the-definitive-source/]

_SPECIFIC:
Not all async loaders are AMD-compliant. Of the list above, only the following are AMD-compliant:
* curl.js http://github.com/unscriptable/curl
* RequireJS http://requirejs.org/
* bdLoad http://bdframework.org/bdLoad
[http://unscriptable.com/2011/03/30/curl-js-yet-another-amd-loader/]

mdlAmd'module

name::
* McsEngl.mdlAmd'module@cptIt,
* McsEngl.ljs'module.AMD@cptIt,

_DESCRIPTION:
The AMD module format itself is a proposal for defining modules where both the module and dependencies can be asynchronously loaded. It has a number of distinct advantages including being both asynchronous and highly flexible by nature which removes the tight coupling one might commonly find between code and module identity. Many developers enjoy using it and one could consider it a reliable stepping stone towards the module system proposed for ES Harmony.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modularjavascript]
===
What is a module?
A module is a value that can be accessed by a single reference. If you have multiple pieces of data or functions that you want to expose in a module, they have to be properties on a single object that represents the module. Practically speaking, it's overkill to create a module for a simple value like var tinyModule = 'simple value';, but it would be valid. Modules start to make a lot more sense for modularizing your code - splitting it up into logical subsets for handling specific functionality. If you want to represent a person with information like name and address, perhaps even add some methods to your person, it starts to make sense to put all that code in a single location. A module is stored in your file system in a single file.
[http://dojotoolkit.org/documentation/tutorials/1.9/modules/]

mdlAmd'module'creating

name::
* McsEngl.mdlAmd'module'creating@cptIt,

_DESCRIPTION:
How do I create a module?
With AMD, you create a module by registering it with the loader.
The global function define allows you to register a module with the loader.
[http://dojotoolkit.org/documentation/tutorials/1.9/modules/]

mdlAmd'module'id

name::
* McsEngl.mdlAmd'module'id@cptIt,

_DESCRIPTION:
Module ID – This is the unique string that identifies a module. There are relative module ids that resolve to absolute module ids relative to the current module’s id.
[http://www.sitepen.com/blog/2012/06/25/amd-the-definitive-source/]

mdlAmd'module'path

name::
* McsEngl.mdlAmd'module'path@cptIt,

_DESCRIPTION:
Module Path – This is the URL that is used to retrieve a module. A module id is mapped to the module path based on the loader’s configuration rules (by default, modules are assumed to be relative to the base path, typically the parent of the module loader package).
[http://www.sitepen.com/blog/2012/06/25/amd-the-definitive-source/]

mdlAmd'package

name::
* McsEngl.mdlAmd'package@cptIt,

_DESCRIPTION:
Package – A collection of modules grouped together. For example, dojo, dijit, and dgrid are packages.
[http://www.sitepen.com/blog/2012/06/25/amd-the-definitive-source/]

ljsmdl.CommonJS#ql:commonjs@cptIt554i#

name::
* McsEngl.ljsmdl.CommonJS@cptIt,
* McsEngl.commonjs'module-pattern@cptIt,
* McsEngl.commonjs'module-system@cptIt,
* McsEngl.ljsmodule.commonjs@cptIt,
* McsEngl.mdlCjs@cptIt,

_DESCRIPTION:
CommonJS modules basically contain two primary parts: a free variable named exports which contains the objects a module wishes to make available to other modules and a require function that modules can use to import the exports of other modules.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailcommonjs]

mdlJsCmn'browser-usage

name::
* McsEngl.mdlJsCmn'browser-usage@cptIt,

_SPECIFIC:
* browserify#ql:browserify@cptIt#
* webmake: https://github.com/medikoo/modules-webmake,

mdlJsCmn'relation-to-AMD-modules#ql:amdjs'module#

name::
* McsEngl.mdlJsCmn'relation_to_AMD-modules@cptIt,
* McsEngl.AMD-mp-relation-to-commonjs-mp@cptIt,

_DESCRIPTION:
AMD && CommonJS Competing, But Equally Valid Standards

Both AMD and CommonJS are valid module formats with different end-goals.

AMD adopts a browser-first approach to development, opting for asynchronous behavior and simplified backwards compatibility but it doesn't have any concept of File I/O. It supports objects, functions, constructors, strings, JSON and many other types of modules, running natively in the browser. It's incredibly flexible.

CommonJS on the other hand takes a server-first approach, assuming synchronous behavior, no global baggage and attempts to cater for the future (on the server). What we mean by this is that because CommonJS supports unwrapped modules, it can feel a little more close to the ES.next/Harmony specifications, freeing us of the define() wrapper that AMD enforces. CommonJS modules however only support objects as modules.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailcommonjs]

===
AMD

AMD is different format, and although most popular loader for AMD is named RequireJS it works very differently from require as introduced earlier with CommonJS (one that Webmake handles).

Main idea behind AMD is that dependencies are resolved asynchronously (in contrary to synchronous resolution in case of CommonJS format). Sounds promising, but does it really make things better? Cause of waterfall nature of resolution and large number of HTTP requests not necessary. See benchmark that compares resolution speed of both formats when used in development mode.

Agreed advantage of AMD that attributes to its success is that in it's direct form works in a browser (it doesn't require any server setup), that is hard to achieve with CJS style (but not impossible). Still due to large number of requests such approach is usually not suitable for production and it appears it's also not that performant in development mode.

Quirks of AMD style is that it requires you to wrap all your modules with function wrappers, its modules are not runnable in direct form in Node.js and dependency resolution rules are basic and limited if you compare it with design of node.js + npm ecosystem.
[https://github.com/medikoo/modules-webmake#amd]

mdlJsCmn.NODE#ql:lcpnode'module#

name::
* McsEngl.mdlJsCmn.NODE@cptIt,

ljsmdl.ECMAScript (harmony)

name::
* McsEngl.ljsmdl.ECMAScript (harmony)@cptIt,
* McsEngl.ljs'harmony-module-system@cptIt,
* McsEngl.ljs'modula-pattern.es.netx@cptIt,
* McsEngl.ljs'modular-pattern.harmony@cptIt,
* McsEngl.ljs'module'system.harmony@cptIt,
* McsEngl.mdlEs@cptIt,

_ADDRESS.WPG:
* http://wiki.ecmascript.org/doku.php?id=harmony:modules,

_DESCRIPTION:
NCZOnline Blog - ES6 module loading: More complicated than you think
By Nicholas C. Zakas on Apr 04, 2016 05:00 pm
One of the most long-awaited features of ECMAScript 6 is the formal definition of modules as part of the language. For years, JavaScript developers have struggled with organizing their code and needing to decide between alternate ad-hoc module formats like RequireJS, AMD, and CommonJS. Formally defining modules as part of JavaScript will eliminate a lot of heartache in the future, but right now, there is still a lot of confusion about how modules work. The confusion exists partly because, as of my writing, there are no engines that can natively load ES6 modules. In the meantime, I'm hoping this post will clarify some of the confusion.

What is a module?
To start, it's important to understand that the specification defines two different types of JavaScript programs: scripts (what we've all been using since JavaScript was created) and modules (newly defined in ES6). While scripts behave the way everyone is used to, modules behave somewhat differently. Specifically modules:

Are always in strict mode with no option to opt-out
Have a top-level scope that is not the global scope
May import bindings from other modules using import
May specify bindings that should be exported using export
These differences look subtle but in fact make modules different enough that parsing and loading needs to be done differently than with scripts.

Parsing differences
One of the most frequent questions received on ESLint related to ES6 modules is this:

Why do I need to specify that a file is a module before it's parsed? Can't you just look for import or export?

I've seen this question repeated all over the Internet as people struggle to understand why JavaScript engines and tools can't autodetect that a file represents a module rather than a script. At first glance, it seems like detecting the presence of export or import should be enough to determine that a file contains a module, but in reality, that's nowhere near enough.

Trying to guess user intent is a dangerous and imprecise game. If you guess correctly, the world applauds you whereas guessing incorrectly has the potential to cause a great deal of damage.

Parsing challenges
In order to autodetect modules in JavaScript programs, you would first have to parse the entire file. While import statements must appear at the beginning of a file, modules need not use import, and so the only positive signal that a file is a module might be the very last statement using an export. So, you cannot escape parsing the entire file in order to have a chance to determine whether or not it's a module.

However, modules are strict mode environments. Strict mode doesn't just have runtime requirements, it also defines the following as syntax errors:

The with statement
Duplicate named arguments for functions
Octal numeric literals (such as 010)
Duplicate property names (in ES5 only, ES6 eliminates this error)
Use of implements, interface, let, package, private, protected, public, static, and yield as identifiers.
All of these are not syntax errors when running in nonstrict mode. If the only signal you have is an export in the last statement of the file, then you would actually have to re-parse the entire file in strict mode to be sure to catch all of these syntax errors. The first parse would have been wasted by running nonstrict mode.

Of course, if you had to detect a module from file contents, you would be forced to always parse files as modules. Since module syntax is strict mode plus import and export, you'd need to default to that in order to allow for import and export to be used. If you were to parse in nonstrict mode, then import and export are a syntax error. You could alternately created a parsing mode that combined nonstrict mode with import and export, but that's an unnatural mode whose result couldn't be used, thus requiring a second pass once the correct mode was determined.

When is a module a module?
The edge case that many miss in the discussion is that modules are not required to use import or export at all. You can have a module that doesn't import anything and doesn't export anything. It might, for example, just modify something in the global scope. For instance, maybe you want to output a message when window.onload fires in a browser and you define a module such as:

// this is a valid module!

window.addEventListener("load", function() {
console.log("Window is loaded");
});
This module can then be loaded by another module or on its own. From looking at the source, there is no way to know that it's a module.

To sum up: while the presence of import or export might indicate a module, the lack of import or export does not clearly indicate that the file is not a module. So there is no effective way to autodetect that a file is a module during parsing.

Loading Differences
While the parsing differences are a bit subtle for modules, the loading differences are not. When a module is loaded, import statements trigger the loading of the specified files. The imported files must be completed parsed and loaded (without error) in order for module execution to begin. In order to do this as quickly as possible, loading begins as import statement are being parsed, prior to parsing the rest of the file.

Once a dependency has been loaded, there's an extra step of verifying that the imported bindings actually exist in the dependency. If you import foo from the module foo.js, the JavaScript engine needs to verify that foo is exported from foo.js before execution continues.

How loading will work
At this point, hopefully it's clear why you need to specify that a file is a module before it is parsed and loaded. In browsers, you will load modules like this:

<script type="module" src="foo.js"></script>
The <script> tag is the same as always, but the type is set to "module"[1]. This signals to the browser that the file should be loaded as a module. If that foo.js then imports other dependencies, those will be loaded dynamically.

In Node.js, there is not yet a decision on how ES6 modules will be loaded. The most recent recommendation is to use a special file extension, such as .jsm, to indicate that a file is an ES6 module so that Node.js knows how to load it correctly[2].

Conclusion
The differences between scripts and modules are subtle enough that it's hard for developers to understand the restriction of declaring what a JavaScript file represents ahead of time. My hope is that this post clarifies some of the reasons why it's not possible to autodetect modules from inspecting the source code and why tools such as ESLint ask you to specify the file type before executing. There will be a point in the future where ES6 modules are the dominant JavaScript file type and script files are left only on legacy applications, and at that point, it's likely that tools will default to assuming that files are modules. In the meantime, we're going through a difficult adolescence between scripts and modules where mixing the two is going to be a bit painful.

References
The script Element (whatwg.org)
ES6 Module Detection in Node (github.com)

ljsmdl.MODULE-PATERN

name::
* McsEngl.ljsmdl.MODULE-PATERN@cptIt,
* McsEngl.ljs'module-pattern@cptIt,

_HISTORY:
History
From a historical perspective, the Module pattern was originally developed by a number of people including Richard Cornford in 2003. It was later popularized by Douglas Crockford in his lectures. Another piece of trivia is that if you've ever played with Yahoo's YUI library, some of its features may appear quite familiar and the reason for this is that the Module pattern was a strong influence for YUI when creating their components.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript]

ljb'mp'evaluating

name::
* McsEngl.ljb'mp'evaluating@cptIt,

_DESCRIPTION:
Advantages

We've seen why the Singleton pattern can be useful, but why is the Module pattern a good choice? For starters, it's a lot cleaner for developers coming from an object-oriented background than the idea of true encapsulation, at least from a JavaScript perspective.

Secondly, it supports private data - so, in the Module pattern, public parts of our code are able to touch the private parts, however the outside world is unable to touch the class's private parts (no laughing! Oh, and thanks to David Engfer for the joke).

Disadvantages

The disadvantages of the Module pattern are that as we access both public and private members differently, when we wish to change visibility, we actually have to make changes to each place the member was used.

We also can't access private members in methods that are added to the object at a later point. That said, in many cases the Module pattern is still quite useful and when used correctly, certainly has the potential to improve the structure of our application.

Other disadvantages include the inability to create automated unit tests for private members and additional complexity when bugs require hot fixes. It's simply not possible to patch privates. Instead, one must override all public methods which interact with the buggy privates. Developers can't easily extend privates either, so it's worth remembering privates are not as flexible as they may initially appear.

For further reading on the Module pattern, see Ben Cherry's excellent in-depth article on it.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailmodule]

EXAMPLE

_CODE.LJS:
Let's begin looking at an implementation of the Module pattern by creating a module which is self-contained.

var testModule = (function () {

var counter = 0;

return {

incrementCounter: function () {
return counter++;
},

resetCounter: function () {
console.log( "counter value prior to reset: " + counter );
counter = 0;
}
};

})();

// Usage:

// Increment our counter
testModule.incrementCounter();

// Check the counter value and reset
// Outputs: 1
testModule.resetCounter();
...
var myNamespace = (function () {

var myPrivateVar, myPrivateMethod;

// A private counter variable
myPrivateVar = 0;

// A private function which logs any arguments
myPrivateMethod = function( foo ) {
console.log( foo );
};

return {

// A public variable
myPublicVar: "foo",

// A public function utilizing privates
myPublicFunction: function( bar ) {

// Increment our private counter
myPrivateVar++;

// Call our private method using bar
myPrivateMethod( bar );

}
};

})();
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript]

ljb'mp.IMPORT-GLOBALS

name::
* McsEngl.ljb'mp.IMPORT-GLOBALS@cptIt,

_CODE.LJS:
Import mixins
This variation of the pattern demonstrates how globals (e.g jQuery, Underscore) can be passed in as arguments to our module's anonymous function. This effectively allows us to import them and locally alias them as we wish.

// Global module
var myModule = (function ( jQ, _ ) {

function privateMethod1(){
jQ(".container").html("test");
}

function privateMethod2(){
console.log( _.min([10, 5, 100, 2, 1000]) );
}

return{
publicMethod: function(){
privateMethod1();
}
};

// Pull in jQuery and Underscore
}( jQuery, _ ));

myModule.publicMethod();
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript]

ljb'mp.EXPORT-OBJECT

name::
* McsEngl.ljb'mp.EXPORT-OBJECT@cptIt,

_CODE.LJS:
var myModule = (function () {

// Module object
var module = {},
privateVariable = "Hello World";

function privateMethod() {
// ...
}

module.publicProperty = "Foobar";
module.publicMethod = function () {
console.log( privateVariable );
};

return module;

}());
undefined
> myModule.publicProperty
"Foobar"

ljsmdl.REVEALING-MODULE-PATTERN

name::
* McsEngl.ljsmdl.REVEALING-MODULE-PATTERN@cptIt,

_DESCRIPTION:
Now that we're a little more familiar with the module pattern, let’s take a look at a slightly improved version - Christian Heilmann’s Revealing Module pattern.

The Revealing Module pattern came about as Heilmann was frustrated with the fact that he had to repeat the name of the main object when we wanted to call one public method from another or access public variables. He also disliked the Module pattern’s requirement for having to switch to object literal notation for the things he wished to make public.

The result of his efforts was an updated pattern where we would simply define all of our functions and variables in the private scope and return an anonymous object with pointers to the private functionality we wished to reveal as public.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript]

_CODE.LJS:
An example of how to use the Revealing Module pattern can be found below:

var myRevealingModule = function () {

var privateVar = "Ben Cherry",
publicVar = "Hey there!";

function privateFunction() {
console.log( "Name:" + privateVar );
}

function publicSetName( strName ) {
privateVar = strName;
}

function publicGetName() {
privateFunction();
}


// Reveal public pointers to
// private functions and properties

return {
setName: publicSetName,
greeting: publicVar,
getName: publicGetName
};

}();

myRevealingModule.setName( "Paul Kinlan" );

The pattern can also be used to reveal private functions and properties with a more specific naming scheme if we would prefer:

var myRevealingModule = function () {

var privateCounter = 0;

function privateFunction() {
privateCounter++;
}

function publicFunction() {
publicIncrement();
}

function publicIncrement() {
privateFunction();
}

function publicGetCount(){
return privateCounter;
}

// Reveal public pointers to
// private functions and properties

return {
start: publicFunction,
increment: publicIncrement,
count: publicGetCount
};

}();

myRevealingModule.start();
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript]

ljsmdl.SCRIPT

name::
* McsEngl.ljsmdl.SCRIPT@cptIt,

_DESCRIPTION:
<script>-tag style
This is how you would handle a modularized code base if you didn’t use a module system.

<script src="module1.js"></script>
<script src="module2.js"></script>
<script src="libraryA.js"></script>
<script src="module3.js"></script>
Modules export an interface to the global object, i. e. the window object. Modules can access the interface of dependencies over the global object.

Common problems
Conflicts in the global object.
Order of loading is important.
Developers have to resolve dependencies of modules/libraries.
In big projects the list can get really long and difficult to manage.
[http://webpack.github.io/docs/motivation.html]

ljsmdl.UMD

name::
* McsEngl.ljsmdl.UMD@cptIt,
* McsEngl.UMD@cptIt,
* McsEngl.umdjs@cptIt,
* McsEngl.universal-module-definition@cptIt,

_DESCRIPTION:
For developers wishing to create modules that can work in both browser and server-side environments, existing solutions could be considered little lacking. To help alleviate this, James Burke, I and a number of other developers created UMD (Universal Module Definition)
[https://github.com/umdjs/umd]
===
UMD is an experimental module format that allows the definition of modules that work in both client and server environments with all or most of the popular script-loading techniques available at the time of writing. Although the idea of (yet) another module format may be daunting, we will cover UMD briefly for the sake of thoroughness.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailcommonjs]

ljsalgo'sut.ARRAY

name::
* McsEngl.ljsalgo'sut.ARRAY@cptIt,
* McsEngl.ljsa@cptIt,

* McsEngl.ljs'array@cptIt,
* McsEngl.ljsarr@cptIt,
* McsEngl.ljsarray@cptIt, {2014-02-21}
* McsEngl.ljsoArray@cptIt,
* McsEngl.ljs'array-archetype@cptIt,
* McsEngl.ljs'codeS.unitM.collection.ARRAY@cptIt,
* McsEngl.ljsa@cptIt,
* McsEngl.ljsarr@cptIt,

ljsa'GENERIC

name::
* McsEngl.ljsa'GENERIC@cptIt,

_GENERIC:
* Array.prototype === [].__proto__ // true
* Object.prototype === [].__proto__.__proto__ // true

> typeof []
"object"
===
* js-named-semantic-unit#ql:js'named_semantic_unit#

jsa'relation_to_object:
The main difference between objects and arrays is the length property. The length property is always 1 larger than the largest integer key in the array.
[http://javascript.crockford.com/survey.html]

ljba'type

name::
* McsEngl.ljba'type@cptIt,

_DESCRIPTION:
The type of an array is "object":
typeof []; // "object"
typeof [1, 2, 3]; // "object"
[http://docs.jquery.com/Types]
===
Arrays are not typed. They can contain numbers, strings, booleans, objects, functions, and arrays.You can mix strings and numbers and objects in the same array. You can use arrays as general nested sequences, much as s-expressions. The first index in an array is usually zero.
[http://javascript.crockford.com/survey.html]

_CODE.LJS:
> typeof []
"object"
> [].constructor === Array
true

ljsa'Array-function

name::
* McsEngl.ljsa'Array-function@cptIt,
* McsEngl.ljs'arrayF@cptIt, {2013-11-17}
* McsEngl.ljs'arrayF@cptIt,
* McsEngl.ljs'object.Array-function@cptIt,
* McsEngl.ljsarr'constructor@cptIt,
* McsEngl.ljsf.Array@cptIt,
* McsEngl.ljsfArray@cptIt,

_GENERIC:
* Function.prototype === Array.__proto__ // true
* Object.prototype === Array.__proto__.__proto__ // true
===
> typeof Array
"function"
===
> Array instanceof Function
true
===
* js-prebuilt-object#ql:js'object.prebuilt#,
===
Object.getPrototypeOf(Array)
function Empty() {}
===
Array is not data, because can contain and functions.
[hmnSngo.2011-10-17]

_DEFINITION:
Array is a specific object (hastable) with keys 0, 1, ... length-1.
[hmnSngo.2013-09-25]
===
Arrays in JavaScript are also hashtable objects. This makes them very well suited to sparse array applications. When you construct an array, you do not need to declare a size. Arrays grow automatically, much like Java vectors. The values are located by a key, not by an offset. This makes JavaScript arrays very convenient to use, but not well suited for applications in numerical analysis.
[http://javascript.crockford.com/survey.html]
===
An array is an ordered set of values grouped together under a single variable name created by using an Array object constructor. You can create an Array literal by specifying the name of the array and the values of all its elements. The following example creates an array of three elements:
Code:
cars = new Array("Mercedes", "Ford", "Chrysler")
[http://www.devguru.com/Technologies/ecmascript/quickref/array.html]
===
An array is a variable that can store many variables within it.
[http://www.tizag.com/javascriptT/javascriptarray.php]

_DESCRIPTION:
Arrays and functions are implemented as objects.
[http://javascript.crockford.com/survey.html]
===
The Array object is used to store multiple values in a single variable.

_ADDRESS.WPG:
* http://www.w3schools.com/jsref/jsref_obj_array.asp,

jsfArray'member

name::
* McsEngl.jsfArray'member@cptIt,

_SPECIFIC:
//FIREFOX:
> Object.getOwnPropertyNames(Array).sort()
["concat", "every", "filter", "forEach", "from", "indexOf", "isArray", "join", "lastIndexOf", "length", "map", "name", "of", "pop", "prototype", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "unshift"]
> Object.getOwnPropertyNames(Array.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "isGenerator", "length", "name", "toSource", "toString"]
> Object.getOwnPropertyNames(Array.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]
===

getAllPropertyNames(Array).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "apply", "arguments", "bind", "call", "caller", "constructor", "hasOwnProperty", "isArray", "isPrototypeOf", "length", "name", "propertyIsEnumerable", "prototype", "toLocaleString", "toString", "valueOf"]
===
getMemberInherited(Array).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "apply", "bind", "call", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> Object.getOwnPropertyNames(Array).sort()
["arguments", "caller", "isArray", "length", "name", "prototype"]
> Object.getOwnPropertyNames(Array.prototype).sort()
["concat", "constructor", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]
> Object.getOwnPropertyNames(Array.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]

Array Object Properties:
Property  Description
constructor  Returns the function that created the Array object's prototype
length  Sets or returns the number of elements in an array

Array Object Methods:
Method  Description
concat()  Joins two or more arrays, and returns a copy of the joined arrays
join()  Joins all elements of an array into a string
pop()  Removes the last element of an array, and returns that element
push()  Adds new elements to the end of an array, and returns the new length
reverse()  Reverses the order of the elements in an array
shift()  Removes the first element of an array, and returns that element
slice()  Selects a part of an array, and returns the new array
sort()  Sorts the elements of an array
splice()  Adds/Removes elements from an array
toString()  Converts an array to a string, and returns the result
unshift()  Adds new elements to the beginning of an array, and returns the new length
valueOf()  Returns the primitive value of an array

ljb'arrayF.isArray()

name::
* McsEngl.ljb'arrayF.isArray()@cptIt,
* McsEngl.ljs'isArray@cptIt,

_CODE.LJS:
> Array.isArray([1,{},[]])
true
===
> var ar=[]
undefined
> Array.isArray(ar)
true
===
> Array.isArray({})
false

ljsa'Array.prototype > Object.prototype

name::
* McsEngl.ljsa'Array.prototype > Object.prototype@cptIt,
* McsEngl.ljsArray.prototype@cptIt,

jsArray.prototype.CHROME:
> Object.getOwnPropertyNames(Array.prototype).sort()
["jsconcat", "ljsconstructor", "ljscopyWithin", "ljsentries", "ljsevery", "ljsfill", "ljsfilter", "ljsfind", "ljsfindIndex", "ljsforEach", "ljsindexOf", "ljsjoin", "ljskeys", "ljslastIndexOf", "ljslength", "ljsmap", "ljspop", "ljspush", "ljsreduce", "ljsreduceRight", "ljsreverse", "ljsshift", "ljsslice", "ljssome", "ljssort", "ljssplice", "ljstoLocaleString", "ljstoString", "ljsunshift"]

jsArray.prototype.FF:
Object.getOwnPropertyNames(Array.prototype).sort()
["jsconcat", "ljsconstructor", "ljscopyWithin", "ljsentries", "ljsevery", "ljsfill", "ljsfilter", "ljsfind", "ljsfindIndex", "ljsforEach", "ljsindexOf", "ljsjoin", "ljskeys", "ljslastIndexOf", "ljslength", "ljsmap", "ljspop", "ljspush", "ljsreduce", "ljsreduceRight", "ljsreverse", "ljsshift", "ljsslice", "ljssome", "ljssort", "ljssplice", "ljstoLocaleString", "ljstoSource", "ljstoString", "ljsunshift"]

ljsa'code

name::
* McsEngl.ljsa'code@cptIt,
* McsEngl.array-js@cptIt554i,
* McsEngl.ljs'code.ARRAY@cptIt,
* McsEngl.ljs'array'code@cptIt,
* McsEngl.ljs'stack@cptIt,
* McsEngl.ljs'value.ARRAY@cptIt,
* McsEngl.ljs'a@cptIt, {2013-10-18}
* McsEngl.ljs'ar@cptIt,

_GENERIC:
* js-object#ql:js'object#

_DESCRIPTION:
Arrays are containers that allow access to its items through numerical indices.
[http://www.javascripture.com/Array]
===
In JavaScript, objects and arrays are handled almost identically, because arrays are merely a special kind of object. Both objects and arrays can have properties and methods.
Arrays have a length property but objects do not. When you assign a value to an element of an array whose index is greater than its length (for example, myArray[100] = "hello"), the length property is automatically increased to the new length. Similarly, if you make the length property smaller, any element whose index is outside the length of the array is deleted.
[http://msdn.microsoft.com/en-us/library/ie/89t1khd2(v=vs.94).aspx]

ljsa'doing

name::
* McsEngl.ljsa'doing@cptIt,

_CODE.LJS:
//FIND element
i = array.length;
while (i--) {
 if (array[i] === item) {
   return i;
 }
}
===
function printArray(array) {
for (var i = 0; i < array.length; i++)
print(array[i]);
}

ljsa'doing.CREATING

name::
* McsEngl.ljsa'doing.CREATING@cptIt,

_CODE.LJS:
// The following are equivalent
var x = [];
var y = Array();
var z = new Array();
[http://www.javascripture.com/Array]

ljsa'doing.APPENDING

name::
* McsEngl.ljsa'doing.APPENDING@cptIt,
* McsEngl.ljsa'appending@cptIt,

_CODE.LJS:
> var a1=[1,2], a2=[3,4]; a1.push.apply(a1,a2);
4
> a1
[1, 2, 3, 4]
===
> a1.push([5,6])
5
> a1
[1, 2, 3, 4, Array[2]]
==
> a2.push(3)
3
> a2
[3, 4, 3]
===
> a1
[1, 2]
> a1 = a1.concat(3,4)
undefined
> a1
[1, 2, 3, 4]

ljsa'doing.INSERTING

name::
* McsEngl.ljsa'doing.INSERTING@cptIt,
* McsEngl.ljsa'appending@cptIt,

_CODE.LJS:
Unshift() and shift() work on the front of the array:
var arr = [ 'a', 'b', 'c'];
arr.unshift('1'); // insert as first item
console.log(arr); // ['1','a', 'b', 'c']
console.log(arr.shift()); // remove first item
console.log(arr); // ['a', 'b', 'c']
[http://book.mixu.net/node/single.html]

ljba'as-stack

name::
* McsEngl.ljba'as-stack@cptIt,

_DESCRIPTION:
Arrays can also be used as stacks:
var arr = [ 'a', 'b', 'c'];
arr.push('d'); // insert as last item
console.log(arr); // ['a', 'b', 'c', 'd']
console.log(arr.pop()); // remove last item
console.log(arr); // ['a', 'b', 'c']
[http://book.mixu.net/node/single.html]

ljsa'doing.JOINING

name::
* McsEngl.ljsa'doing.JOINING@cptIt,
* McsEngl.ljsa'joining@cptIt,

_CODE.LJS:
> var a2 = [].concat([1,2],[3,4])
undefined
> a2
[1, 2, 3, 4]

ljsa'element (item)

name::
* McsEngl.ljsa'element (item)@cptIt,
* McsEngl.ljsaelement@cptIt,
* McsEngl.ljsaitem@cptIt,
* McsEngl.ljsamember@cptIt,
* McsEngl.ljsarr'index@cptIt,
* McsEngl.ljsarr'item@cptIt,

_DESCRIPTION:
a[0] the FIRST element.
a[a.length-1] the LAST element.
===
Arrays are not typed. They can contain numbers, strings, booleans, objects, functions, and arrays.You can mix strings and numbers and objects in the same array. You can use arrays as general nested sequences, much as s-expressions.
...
A new item can be added to an array by assignment.
a[i + j] = f(a[i], a[j]);
[http://javascript.crockford.com/survey.html]
===
An array can store anything you can assign to a variable: booleans, numbers, strings, functions, objects, other Arrays, even regular expressions…
var myArray = [ 3, 'hello!', function() {return 5}, {'color':'blue', 'budget':25}, /[ell]/i ];
document.writeln('0>'+myArray[0]+'<BR>'); // Will output: 0>3
document.writeln('1>'+myArray[1]+'<BR>'); // Will output: 1>hello!
document.writeln('2>'+myArray[2]()+'<BR>'); // Will output: 2>5
document.writeln('3>'+myArray[3].color+'<BR>'); // Will output: 3>blue
document.writeln('3>'+myArray[3].budget+'<BR>'); // Will output: 3>25
document.writeln('4>'+myArray[4].test(myArray[1])+'<BR>'); // Will output: 4>true
[http://www.hunlock.com/blogs/Mastering_Javascript_Arrays]

_CODE:
//array have elements AND members as objects.
//2015-11-21
> var a=[1,2]
undefined
> a.s="string"
"string"
> a.n=2
2
> a
[1, 2]
> a[s]
VM1020:2 Uncaught ReferenceError:
> a["s"]
"string"
> a["n"]
2
> a[1]
2

ljsa'evoluting

name::
* McsEngl.ljsa'evoluting@cptIt,

_DESCRIPTION:
Believe it or not, the very first version of Javascript shipped without Arrays.
[http://www.hunlock.com/blogs/Mastering_Javascript_Arrays]

ljsa'member

name::
* McsEngl.ljsa'member@cptIt,
* McsEngl.ljsa'member@cptIt,
* McsEngl.ljsambr@cptIt,

_MEMBER:
* ljsa.@@iterator, __proto__, firefox,
* ljsa.concat, __proto__, chrome, firefox,
* ljsa.constructor, __proto__, chrome, firefox,
* ljsa.entries, __proto__, firefox,
* ljsa.every, __proto__, chrome, firefox,
* ljsa.fill, __proto__, firefox,
* ljsa.filter, __proto__, chrome, firefox,
* ljsa.find, __proto__, firefox,
* ljsa.findIndex, __proto__, firefox,
* forEach, __proto__, chrome, firefox,
* ljsa.indexOf, __proto__, chrome, firefox,
* ljsa.join, __proto__, chrome, firefox,
* ljsa.keys, __proto__, firefox,
* ljsa.lastIndexOf, __proto__, chrome, firefox,
* ljsa.length, __proto__, chrome, firefox,
* ljsa.length, chrome, firefox,
* ljsa.map, __proto__, chrome, firefox,
* ljsa.pop, __proto__, chrome, firefox,
* push, __proto__, chrome, firefox,
* ljsa.reduce, __proto__, chrome, firefox,
* ljsa.reduceRight, __proto__, chrome, firefox,
* ljsa.reverse#ql:jsa.reverse_method#, __proto__, chrome, firefox,
* ljsa.shift, __proto__, chrome, firefox,
* slice#ql:jsa.slice_method#, __proto__, chrome, firefox,
* ljsa.some, __proto__, chrome, firefox,
* ljsa.sort, __proto__, chrome, firefox,
* ljsa.splice, __proto__, chrome, firefox,
* ljsa.toLocaleString, __proto__, chrome, firefox,
* ljsa.toSource, __proto__, firefox,
* ljsa.toString, __proto__, chrome, firefox,
* ljsa.unshift, __proto__, chrome, firefox,
===
> Object.getOwnPropertyNames(new Array()).sort()["length"]
> Object.getOwnPropertyNames(new Array().__proto__).sort()["concat", "constructor", "entries", "every", "filter", "forEach", "indexOf", "join", "keys", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]
> Object.getOwnPropertyNames(new Array().__proto__.__proto__).sort()["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames([]).sort()["length"]
===
> Object.getOwnPropertyNames(new Array().__proto__).sort()
["concat", "constructor", "entries", "every", "filter", "forEach", "indexOf", "join", "keys", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]
> Object.getOwnPropertyNames([].__proto__).sort()
["concat", "constructor", "entries", "every", "filter", "forEach", "indexOf", "join", "keys", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]
> Object.getOwnPropertyNames(Array.prototype).sort()
["concat", "constructor", "entries", "every", "filter", "forEach", "indexOf", "join", "keys", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]

_PROPERTY.CHROME:
* ljsa.length, chrome,

* ljsa.concat, __proto__, chrome,
* ljsa.constructor, __proto__, chrome,
* ljsa.every, __proto__, chrome,
* ljsa.filter, __proto__, chrome,
* forEach, __proto__, chrome,
* ljsa.indexOf, __proto__, chrome,
* ljsa.join, __proto__, chrome,
* ljsa.lastIndexOf, __proto__, chrome,
* ljsa.length, __proto__, chrome,
* ljsa.map, __proto__, chrome,
* ljsa.pop, __proto__, chrome,
* push, __proto__, chrome,
* ljsa.reduce, __proto__, chrome,
* ljsa.reduceRight, __proto__, chrome,
* ljsa.reverse, __proto__, chrome,
* ljsa.shift, __proto__, chrome,
* slice, __proto__, chrome,
* ljsa.some, __proto__, chrome,
* ljsa.sort, __proto__, chrome,
* ljsa.splice, __proto__, chrome,
* ljsa.toLocaleString, __proto__, chrome,
* ljsa.toString, __proto__, chrome,
* ljsa.unshift, __proto__, chrome,

_PROPERTY.FIREFOX:
* ljsa.@@iterator, __proto__, firefox,
* ljsa.concat, __proto__, firefox,
* ljsa.constructor, __proto__, firefox,
* ljsa.entries, __proto__, firefox,
* ljsa.every, __proto__, firefox,
* ljsa.fill, __proto__, firefox,
* ljsa.filter, __proto__, firefox,
* ljsa.find, __proto__, firefox,
* ljsa.findIndex, __proto__, firefox,
* forEach, __proto__, firefox,
* ljsa.indexOf, __proto__, firefox,
* ljsa.join, __proto__, firefox,
* ljsa.keys, __proto__, firefox,
* ljsa.lastIndexOf, __proto__, firefox,
* ljsa.length, __proto__, firefox,
* ljsa.map, __proto__, firefox,
* ljsa.pop, __proto__, firefox,
* push, __proto__, firefox,
* ljsa.reduce, __proto__, firefox,
* ljsa.reduceRight, __proto__, firefox,
* ljsa.reverse, __proto__, firefox,
* ljsa.shift, __proto__, firefox,
* slice, __proto__, firefox,
* ljsa.some, __proto__, firefox,
* ljsa.sort, __proto__, firefox,
* ljsa.splice, __proto__, firefox,
* ljsa.toLocaleString, __proto__, firefox,
* ljsa.toSource, __proto__, firefox,
* ljsa.toString, __proto__, firefox,
* ljsa.unshift, __proto__, firefox,
* ljsa.length, firefox,

_SPECIFIC:
A-literal and an-array-from-constructor have the same properties.
[hmnSngo.2014-06-07]
===
> Object.getOwnPropertyNames([]).sort()
["length"]
> Object.getOwnPropertyNames([].__proto__).sort()
["concat", "constructor", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]
> Object.getOwnPropertyNames(Array.prototype).sort()
["concat", "constructor", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]

> Object.getOwnPropertyNames([].prototype).sort()
TypeError: Object.getOwnPropertyNames called on non-object
===
> var aCtr = new Array()
undefined
> Object.getOwnPropertyNames(aCtr).sort()
["length"]
> Object.getOwnPropertyNames(aCtr.prototype).sort()
TypeError: Object.getOwnPropertyNames called on non-object
> Object.getOwnPropertyNames(aCtr.__proto__).sort()
["concat", "constructor", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]
===
> Object.getOwnPropertyNames(Array).sort()
["arguments", "caller", "isArray", "length", "name", "prototype"]
> Object.getOwnPropertyNames(Array.prototype).sort()
["concat", "constructor", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]
> Object.getOwnPropertyNames(Array.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]

ljsambr.METHOD

name::
* McsEngl.ljsambr.METHOD@cptIt,

_METHOD.JS:
* concat
* forEach
* push
* shift
* slice
* some
* splice

ljs'Array.prototype.concat-function

name::
* McsEngl.ljs'Array.prototype.concat-function@cptIt,
* McsEngl.ljsa'concat-function@cptIt,
* McsEngl.ljsambr.concat-function@cptIt,
* McsEngl.ljs'concat-array-function@cptIt,

_CODE.LJS:
> var a1 = [1,2]
undefined
> var a2 = a1.concat(3,4)
undefined
> a2
[1, 2, 3, 4]
> a1
[1, 2]
===
> var a1 = a1.concat(3,4)
undefined
> a1
[1, 2, 3, 4]
===
> a1
[1, 2, 3, 4]
> var a2 = [5,6]
undefined
> var a3 = a1.concat(a2)
undefined
> a3
[1, 2, 3, 4, 5, 6]

ljs'Array.prototype.copyWithin-function

name::
* McsEngl.ljs'Array.prototype.copyWithin-function@cptIt,
* McsEngl.ljsa'copyWithin-function@cptIt,
* McsEngl.ljsambr.copyWithin-function@cptIt,
* McsEngl.ljs'copyWithin-array-function@cptIt,

_DESCRIPTION:
The copyWithin() method shallow copies part of an array to another location in the same array and returns it, without modifying its size.
["alpha", "bravo", "charlie", "delta"].copyWithin(2, 0);
// results in ["alpha", "bravo", "alpha", "bravo"]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin]
===
["alpha", "bravo", "charlie", "delta"].copyWithin(1);
// results in ["alpha", "alpha", "bravo", "charlie"]

ljs'Array.prototype.entries-function

name::
* McsEngl.ljs'Array.prototype.entries-function@cptIt,
* McsEngl.ljsa'entries-function@cptIt,
* McsEngl.ljsambr.entries-function@cptIt,
* McsEngl.ljs'entries-array-function@cptIt,

_DESCRIPTION:
The entries() method returns a new Array Iterator object that contains the key/value pairs for each index in the array.
var a = ['a', 'b', 'c'];
var iterator = a.entries();
console.log(iterator.next().value); // [0, 'a']
console.log(iterator.next().value); // [1, 'b']
console.log(iterator.next().value); // [2, 'c']
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries]

ljs'Array.prototype.every-function

name::
* McsEngl.ljs'Array.prototype.every-function@cptIt,
* McsEngl.ljsa'every-function@cptIt,
* McsEngl.ljsambr.every-function@cptIt,
* McsEngl.ljs'every-array-function@cptIt,

_DESCRIPTION:
The every() method tests whether all elements in the array pass the test implemented by the provided function.
function isBigEnough(element, index, array) {
return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough); // true
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every]

ljs'Array.prototype.fill-function

name::
* McsEngl.ljs'Array.prototype.fill-function@cptIt,
* McsEngl.ljsa'fill-function@cptIt,
* McsEngl.ljsambr.fill-function@cptIt,
* McsEngl.ljs'fill-array-function@cptIt,

_DESCRIPTION:
The fill() method fills all the elements of an array from a start index to an end index with a static value.
var numbers = [1, 2, 3]
numbers.fill(1);
// results in [1, 1, 1]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill]

ljs'Array.prototype.filter-function

name::
* McsEngl.ljs'Array.prototype.filter-function@cptIt,
* McsEngl.ljsa'filter-function@cptIt,
* McsEngl.ljsambr.filter-function@cptIt,
* McsEngl.ljs'filter-array-function@cptIt,

_DESCRIPTION:
The filter() method creates a new array with all elements that pass the test implemented by the provided function.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter]

_CODE.LJS:
> ['a', false, 'b', undefined, 'c', null, NaN, 3].filter(Number)
[3]

ljs'Array.prototype.find-function

name::
* McsEngl.ljs'Array.prototype.find-function@cptIt,
* McsEngl.ljsa'find-function@cptIt,
* McsEngl.ljsambr.find-function@cptIt,
* McsEngl.ljs'find-array-function@cptIt,

_DESCRIPTION:
The find() method returns a value of the first element in the array that satisfies the provided testing function. Otherwise undefined is returned.
function isBigEnough(element) {
return element >= 15;
}
[12, 5, 8, 130, 44].find(isBigEnough); // 130
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find]

ljs'Array.prototype.findIndex-function

name::
* McsEngl.ljs'Array.prototype.findIndex-function@cptIt,
* McsEngl.ljsa'findIndex-function@cptIt,
* McsEngl.ljsambr.findIndex-function@cptIt,
* McsEngl.ljs'findIndex-array-function@cptIt,

_DESCRIPTION:
The findIndex() method returns an index of the first element in the array that satisfies the provided testing function. Otherwise -1 is returned.
function isBigEnough(element) {
return element >= 15;
}
[12, 5, 8, 130, 44].findIndex(isBigEnough); // 3
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex]

ljs'Array.prototype.forEach-function

name::
* McsEngl.ljs'Array.prototype.forEach-function@cptIt,
* McsEngl.ljsa'forEach-function@cptIt,
* McsEngl.ljsambr.forEach-function@cptIt,
* McsEngl.ljsforEach-array-function@cptIt,

_DESCRIPTION:
The forEach() method executes a provided function once for each array element.
var a = ["a", "b", "c"];
a.forEach(function(element) {
console.log(element);
});
// a
// b
// c
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach]
===
Executes a provided function once per array element.
Method of Array
Implemented in  JavaScript 1.6
ECMAScript Edition  ECMAScript 5th Edition
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach]

jsarr'forEach_method: _CODE.LJS:
> [2, 5, 9].forEach(function (element, index, array) {
console.log("a[" + index + "] = " + element);
});
// logs:
// a[0] = 2
// a[1] = 5
// a[2] = 9

ljs'Array.prototype.includes-function

name::
* McsEngl.ljs'Array.prototype.includes-function@cptIt,
* McsEngl.ljsa'includes-function@cptIt,
* McsEngl.ljsambr.includes-function@cptIt,
* McsEngl.ljs'includes-array-function@cptIt,

_DESCRIPTION:
The includes() method determines whether an array includes a certain element, returning true or false as appropriate.
var a = [1, 2, 3];
a.includes(2); // true
a.includes(4); // false
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes]

_CODE.LJS:
> var a = [1, 2, 'A', 4, 5]
undefined
> a.includes('A')
true
> a.includes('a')
false

ljs'Array.prototype.indexOf-function

name::
* McsEngl.ljs'Array.prototype.indexOf-function@cptIt,
* McsEngl.ljsa'indexOf-function@cptIt,
* McsEngl.ljsambr.indexOf-function@cptIt,
* McsEngl.ljs'indexOf-array-function@cptIt,

_DESCRIPTION:
The indexOf() method returns the first index at which a given element can be found in the array, or -1 if it is not present.
var a = [2, 9, 9];
a.indexOf(2); // 0
a.indexOf(7); // -1
if (a.indexOf(7) === -1) {
// element doesn't exist in array
}
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf]

_CODE.LJS:
> [1,2,3].indexOf(1)
0
> [1,2,3].indexOf(2)
1
> [1,2,3].indexOf(3)
2
> [1,2,3].indexOf(4)
-1
> [1,2,3].indexOf(0)
-1

ljs'Array.prototype.join-function

name::
* McsEngl.ljs'Array.prototype.join-function@cptIt,
* McsEngl.ljsa'join-function@cptIt,
* McsEngl.ljsambr.join-function@cptIt,
* McsEngl.ljs'join-array-function@cptIt,

_DESCRIPTION:
The join() method joins all elements of an array into a string.
var a = ['Wind', 'Rain', 'Fire'];
a.join(); // 'Wind,Rain,Fire'
a.join('-'); // 'Wind-Rain-Fire'
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join]

_CODE.LJS:
> [1,2,3].join()
"1,2,3"
> [1,2,3].join(' ')
"1 2 3"
> [1,2,3].join(' and ')
"1 and 2 and 3"
===
Join all elements of an array into a string:

<script type="text/javascript">
var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.write(fruits.join() + "<br />");
document.write(fruits.join("+") + "<br />");
document.write(fruits.join(" and "));
</script>

The output of the code above will be:

Banana,Orange,Apple,Mango
Banana+Orange+Apple+Mango
Banana and Orange and Apple and Mango

ljs'Array.prototype.keys-function

name::
* McsEngl.ljs'Array.prototype.keys-function@cptIt,
* McsEngl.ljsa'keys-function@cptIt,
* McsEngl.ljsambr.keys-function@cptIt,
* McsEngl.ljs'keys-array-function@cptIt,

_DESCRIPTION:
The keys() method returns a new Array Iterator that contains the keys for each index in the array.
var arr = ["a", "b", "c"];
var iterator = arr.keys();
console.log(iterator.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/keys]

ljs'Array.prototype.lastIndexOf-function

name::
* McsEngl.ljs'Array.prototype.lastIndexOf-function@cptIt,
* McsEngl.ljsa'lastIndexOf-function@cptIt,
* McsEngl.ljsambr.lastIndexOf-function@cptIt,
* McsEngl.ljs'lastIndexOf-array-function@cptIt,

_DESCRIPTION:
The lastIndexOf() method returns the last index at which a given element can be found in the array, or -1 if it is not present. The array is searched backwards, starting at fromIndex.
var numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2); // 3
numbers.lastIndexOf(7); // -1
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf]

ljs'Array.prototype.length number

name::
* McsEngl.ljs'Array.prototype.length number@cptIt,
* McsEngl.ljsa'length-number@cptIt,
* McsEngl.ljsambr.length-number@cptIt,
* McsEngl.ljs'length-array-number-member@cptIt,

_CODE.LJS:
> [].length
0
> ['a', 'b', 'c'].length
3

_DESCRIPTION:
The maximum length until "it gets sluggish" is totally dependent on your target machine and your actual code, so you'll need to test on that (those) platform(s) to see what is acceptable.
However, the maximum length of an array according to the ECMA-262 5th Edition specification is bound by an unsigned 32-bit integer due to the ToUint32 abstract operation, so the longest possible array could have 232-1 = 4,294,967,295 = 4.29 billion elements.
[http://stackoverflow.com/a/6155063]

ljs'Array.prototype.map-function

name::
* McsEngl.ljs'Array.prototype.map-function@cptIt,
* McsEngl.ljsa'map-function@cptIt,
* McsEngl.ljsambr.map-function@cptIt,
* McsEngl.ljs'map-array-function@cptIt,

_DESCRIPTION:
The map() method creates a new array with the results of calling a provided function on every element in this array.
var numbers = [1, 5, 10, 15];
var roots = numbers.map(function(x){
return x * 2;
});
// roots is now [2, 10, 20, 30]
// numbers is still [1, 5, 10, 15]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map]

ljs'Array.prototype.pop-function

name::
* McsEngl.ljs'Array.prototype.pop-function@cptIt,
* McsEngl.ljsa'pop-function@cptIt,
* McsEngl.ljsambr.pop-function@cptIt,
* McsEngl.ljs'pop-array-function@cptIt,

_DESCRIPTION:
The pop() method removes the last element from an array and returns that element. This method changes the length of the array.
var a = [1, 2, 3];
a.pop();
console.log(a); // [1, 2]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop]

ljs'Array.prototype.push-function

name::
* McsEngl.ljs'Array.prototype.push-function@cptIt,
* McsEngl.ljsa'push-function@cptIt,
* McsEngl.ljsambr.push-function@cptIt,
* McsEngl.ljs'push-array-function@cptIt,

_DESCRIPTION:
The push() method adds one or more elements to the end of an array and returns the new length of the array.
var numbers = [1, 2, 3];
numbers.push(4);
console.log(numbers); // [1, 2, 3, 4]
numbers.push(5, 6, 7);
console.log(numbers); // [1, 2, 3, 4, 5, 6, 7]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push]

jsarr'push_method:
> a
[1, 2, 4, 4, 5]
> a.push(4,5,6,"sti")
9
> a
[1, 2, 4, 4, 5, 4, 5, 6, "sti"]
===
> arr=[1,2]
[1, 2]
> arr.push(5)
3
> arr
[1, 2, 5]
===
> a=[1]
[1]
> Array.prototype.push.call(a, 3,'a')
3
> a
[1, 3, "a"]
> Array.prototype.push.apply(a, 3,'a')
Uncaught TypeError:
> Array.prototype.push.apply(a, [3,'a'])
5
> a
[1, 3, "a", 3, "a"]
//apply gets an array parameter
//call gets many arguments

ljs'Array.prototype.reduce-function

name::
* McsEngl.ljs'Array.prototype.reduce-function@cptIt,
* McsEngl.ljsa'reduce-function@cptIt,
* McsEngl.ljsambr.reduce-function@cptIt,
* McsEngl.ljs'reduce-array-function@cptIt,

_DESCRIPTION:
The reduce() method applies a function against an accumulator and each value of the array (from left-to-right) to reduce it to a single value.

var sum = [0, 1, 2, 3].reduce(function(a, b) {
return a + b;
}, 0);
// sum is 6

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
return a.concat(b);
}, []);
// flattened is [0, 1, 2, 3, 4, 5]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce]

_DESCRIPTION:
Syntax
arr.reduce(callback[,initialValue])
Parameters
callback
Function to execute on each value in the array, taking four arguments:
accumulator
The accumulated value previously returned in the last invocation of the callback, or initialValue, if supplied. (See below.)
currentValue
The current element being processed in the array.
currentIndex
The index of the current element being processed in the array. Starts at index 0, if an initialValue is provided, and at index 1 otherwise.
array
The array reduce was called upon.
initialValue
Optional. Value to use as the first argument to the first call of the callback.
Return value
The value that results from the reduction.
How reduce works
Suppose the following use of reduce occurred:

[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
return accumulator + currentValue;
});
The callback would be invoked four times, with the arguments and return values in each call being as follows:

callback  accumulator  currentValue  currentIndex  array  return value
first call  0  1  1  [0, 1, 2, 3, 4]  1
second call  1  2  2  [0, 1, 2, 3, 4]  3
third call  3  3  3  [0, 1, 2, 3, 4]  6
fourth call  6  4  4  [0, 1, 2, 3, 4]  10
The value returned by reduce would be that of the last callback invocation (10).
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce]

_CODE.LJS:
var sum = [4, 1, 2, 3].reduce(function(a, b) { return a + b;}); // SUM 10
var sum = [0, 1, 2, 3].reduce(function(a, b) { return a + b;}); // SUM 6

ljs'Array.prototype.reduceRight-function

name::
* McsEngl.ljs'Array.prototype.reduceRight-function@cptIt,
* McsEngl.ljsa'reduceRight-function@cptIt,
* McsEngl.ljsambr.reduceRight-function@cptIt,
* McsEngl.ljs'reduceRight-array-function@cptIt,

_DESCRIPTION:
The reduceRight() method applies a function against an accumulator and each value of the array (from right-to-left) has to reduce it to a single value.
var flattened = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
return a.concat(b);
}, []);
// flattened is [4, 5, 2, 3, 0, 1]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ReduceRight]

ljs'Array.prototype.reverse-function

name::
* McsEngl.ljs'Array.prototype.reverse-function@cptIt,
* McsEngl.ljsa'reverse-function@cptIt,
* McsEngl.ljsambr.reverse-function@cptIt,
* McsEngl.ljs'reverse-array-function@cptIt,

_DESCRIPTION:
The reverse() method reverses an array in place. The first array element becomes the last, and the last array element becomes the first.
var a = ['one', 'two', 'three'];
a.reverse();
console.log(a); // ['three', 'two', 'one']
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse]

ljsa.reverse_method:
* jsreverse_array,
===
> [1,2].reverse()
[2, 1]

ljs'Array.prototype.shift-function

name::
* McsEngl.ljs'Array.prototype.shift-function@cptIt,
* McsEngl.ljsa'shift-function@cptIt,
* McsEngl.ljsambr.shift-function@cptIt,
* McsEngl.ljs'shift-array-function@cptIt,

_DESCRIPTION:
The shift() method removes the first element from an array and returns that element. This method changes the length of the array.
var a = [1, 2, 3];
a.shift();
console.log(a); // [2, 3]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift]

ljs'Array.prototype.slice-function

name::
* McsEngl.ljs'Array.prototype.slice-function@cptIt,
* McsEngl.ljsa'slice-function@cptIt,
* McsEngl.ljsambr.slice-function@cptIt,
* McsEngl.ljs'slice-array-function@cptIt,

_DESCRIPTION:
The slice() method returns a shallow copy of a portion of an array into a new array object selected from begin to end (end not included). The original array will not be modified.
var a = ["zero", "one", "two", "three"];
var sliced = a.slice(1,3);
console.log(a); // [ "zero", "one", "two", "three" ]
console.log(sliced); // [ "one", "two" ]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice]

CODE.JS:
//create arrays from array-like
> Array.prototype.slice.call({0:'a',1:'b',2:'c',length:3})
["a", "b", "c"]
> Array.prototype.slice.call({0:'a',1:'b',2:'c'})
[]
===
>>> var a = [1, 2, 3]; a.slice(2);
[3]
>>> var a = [1, 2, 3]; a.slice(1);
[2, 3]
===
//creates an array FROM a NodeList
[].slice.call(document.querySelectorAll('#idTocTree li > a'))
[http://stackoverflow.com/a/18129752]
===
//creates an array FROM 'arguments' removing the first 2 members of 'arguments.
Array.prototype.slice.call(arguments, 2)

ljs'Array.prototype.some-function

name::
* McsEngl.ljs'Array.prototype.some-function@cptIt,
* McsEngl.ljsa'some-function@cptIt,
* McsEngl.ljsambr.some-function@cptIt,
* McsEngl.ljs'some-array-function@cptIt,

_DESCRIPTION:
The some() method tests whether some element in the array passes the test implemented by the provided function.
function isBiggerThan10(element, index, array) {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some]

_DESCRIPTION:
The some() method tests whether some element in the array passes the test implemented by the provided function.

Syntax
arr.some(callback[, thisArg])

Parameters
callback
Function to test for each element.
thisArg
Value to use as this when executing callback.
[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some]

jsarr'some_method:
> [12,1].some(function (element, index, array){return (element>=10)})
true
> [2,1].some(function (element){return (element>=10)})
false

ljs'Array.prototype.sort-function

name::
* McsEngl.ljs'Array.prototype.sort-function@cptIt,
* McsEngl.ljsa'sort-function@cptIt,
* McsEngl.ljsambr.sort-function@cptIt,
* McsEngl.ljs'sort-array-function@cptIt,

_DESCRIPTION:
The sort() method sorts the elements of an array in place and returns the array. The sort is not necessarily stable. The default sort order is according to string Unicode code points.
var fruit = ['cherries', 'apples', 'bananas'];
fruit.sort(); // ['apples', 'bananas', 'cherries']
var scores = [1, 10, 21, 2];
scores.sort(); // [1, 10, 2, 21]
// Watch out that 10 comes before 2,
// because '10' comes before '2' in Unicode code point order.
var things = ['word', 'Word', '1 Word', '2 Words'];
things.sort(); // ['1 Word', '2 Words', 'Word', 'word']
// In Unicode, numbers come before upper case letters,
// which come before lower case letters.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort]

ljs'Array.prototype.splice-function

name::
* McsEngl.ljs'Array.prototype.splice-function@cptIt,
* McsEngl.ljsa'splice@cptIt,
* McsEngl.ljsambr.splice-function@cptIt,
* McsEngl.ljs'splice-array-function@cptIt,

_DESCRIPTION:
The splice() method changes the content of an array by removing existing elements and/or adding new elements.
var myFish = ["angel", "clown", "mandarin", "surgeon"];
myFish.splice(2, 0, "drum");
// myFish is ["angel", "clown", "drum", "mandarin", "surgeon"]

_DESCRIPTION:
The splice() method changes the content of an array, adding new elements while removing old elements.

Syntax
array.splice(index , howMany[, element1[, ...[, elementN]]])
array.splice(index) // SpiderMonkey/Firefox extension

Parameters
index
Index at which to start changing the array. If greater than the length of the array, actual starting index will be set to the length of the array. If negative, will begin that many elements from the end.
howMany
An integer indicating the number of old array elements to remove. If howMany is 0, no elements are removed. In this case, you should specify at least one new element. If howMany is greater than the number of elements left in the array starting at index, then all of the elements through the end of the array will be deleted. If no howMany parameter is specified (second syntax above, which is a SpiderMonkey extension), all elements after index are removed.
element1, ..., elementN
The elements to add to the array. If you don't specify any elements, splice simply removes elements from the array.

Returns
An array containing the removed elements. If only one element is removed, an array of one element is returned. If no elements are removed, an empty array is returned.

Description
If you specify a different number of elements to insert than the number you're removing, the array will have a different length at the end of the call.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice]

jsarr'splice_method: CODE.JS:
> var myFish = ["angel", "clown", "mandarin", "surgeon"];

//removes 0 elements from index 2, and inserts "drum"
> var removed = myFish.splice(2, 0, "drum");
//myFish is ["angel", "clown", "drum", "mandarin", "surgeon"]
//removed is [], no elements removed

//removes 1 element from index 3
> removed = myFish.splice(3, 1);
//myFish is ["angel", "clown", "drum", "surgeon"]
//removed is ["mandarin"]

//removes 1 element from index 2, and inserts "trumpet"
removed = myFish.splice(2, 1, "trumpet");
//myFish is ["angel", "clown", "trumpet", "surgeon"]
//removed is ["drum"]

//removes 2 elements from index 0, and inserts "parrot", "anemone" and "blue"
removed = myFish.splice(0, 2, "parrot", "anemone", "blue");
//myFish is ["parrot", "anemone", "blue", "trumpet", "surgeon"]
//removed is ["angel", "clown"]

//removes 2 elements from index 3
removed = myFish.splice(3, Number.MAX_VALUE);
//myFish is ["parrot", "anemone", "blue"]
//removed is ["trumpet", "surgeon"]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice]

ljs'Array.prototype.toLocaleString-function

name::
* McsEngl.ljs'Array.prototype.toLocaleString-function@cptIt,
* McsEngl.ljsa'toLocaleString-function@cptIt,
* McsEngl.ljsambr.toLocaleString-function@cptIt,
* McsEngl.ljs'toLocaleString-array-function@cptIt,

_DESCRIPTION:
The toLocaleString() method returns a string representing the elements of the array. The elements are converted to Strings using their toLocaleString methods and these Strings are separated by a locale-specific String (such as a comma “,”).
var number = 1337;
var date = new Date();
var myArr = [number, date, 'foo'];
var str = myArr.toLocaleString();
console.log(str);
// logs '1337,6.12.2013 19:37:35,foo'
// if run in a German (de-DE) locale with timezone Europe/Berlin
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toLocaleString]

ljs'Array.prototype.toString-function

name::
* McsEngl.ljs'Array.prototype.toString-function@cptIt,
* McsEngl.ljsa'toString-function@cptIt,
* McsEngl.ljsambr.toString-function@cptIt,
* McsEngl.ljs'toString-array-function@cptIt,

_DESCRIPTION:
The toString() method returns a string representing the specified array and its elements.
var months = ["Jan", "Feb", "Mar", "Apr"];
months.toString(); // "Jan,Feb,Mar,Apr"
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString]

ljs'Array.prototype.unshift-function

name::
* McsEngl.ljs'Array.prototype.unshift-function@cptIt,
* McsEngl.ljsa'unshift@cptIt,
* McsEngl.ljsambr.unshift-function@cptIt,
* McsEngl.ljs'unshift-array-function@cptIt,

_DESCRIPTION:
The unshift() method adds one or more elements to the beginning of an array and returns the new length of the array.
var a = [1, 2, 3];
a.unshift(4, 5);
console.log(a); // [4, 5, 1, 2, 3]
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift]

ljs'Array.prototype.values-function

name::
* McsEngl.ljs'Array.prototype.values-function@cptIt,
* McsEngl.ljsa'values-function@cptIt,
* McsEngl.ljsambr.values-function@cptIt,
* McsEngl.ljs'values-array-function@cptIt,

_DESCRIPTION:
The values() method returns a new Array Iterator object that contains the values for each index in the array.
var a = ['w', 'y', 'k', 'o', 'p'];
var iterator = a.values();
console.log(iterator.next().value); // w
console.log(iterator.next().value); // y
console.log(iterator.next().value); // k
console.log(iterator.next().value); // o
console.log(iterator.next().value); // p
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values]

SPECIFIC

* ljsa.specific,

ljsa.FROM-CONSTRUCTOR

name::
* McsEngl.ljsa.FROM-CONSTRUCTOR@cptIt,
* McsEngl.ja'arrayC@cptIt, {2013-11-17}
* McsEngl.ljs'oarray@cptIt, {2013-10-27}

_CODE.LJS:
> var aTest = new Array()
undefined
> typeof aTest
"object"

ljb'arrayC'creating

name::
* McsEngl.ljb'arrayC'creating@cptIt,

_DESCRIPTION:
The following code creates an Array object called myCars:

1:
var myCars=new Array(); // regular array (add an optional integer
myCars[0]="Saab"; // argument to control array's size)
myCars[1]="Volvo";
myCars[2]="BMW";

2:
var myCars=new Array("Saab","Volvo","BMW"); // condensed array

3:
var myCars=["Saab","Volvo","BMW"]; // literal array

// Array to hold callback functions
var callbacks = [];

===
var a = [];
instead of:
var a = new Array();

===
You can define arrays using the array literal as follows:

var x = [];
var y = [1, 2, 3, 4, 5];
An array has a length property that is useful for iteration:

var x = [1, 2, 3, 4, 5];
for (var i = 0; i < x.length; i++) {
// Do something with x[i]
}
[http://www.tutorialspoint.com/jquery/jquery-basics.htm]
===
15.4.1 The Array Constructor Called as a Function
When Array is called as a function rather than as a constructor, it creates and initialises a new Array object. Thus the function call Array(…) is equivalent to the object creation expression new Array(…) with the same arguments.
[http://ecma262-5.com/ELS5_HTML.htm#Section_15.4.1]

ljb'arrayC'property

name::
* McsEngl.ljb'arrayC'property@cptIt,

_PROPERTY:
===
> var aCtr = new Array()
undefined
> Object.getOwnPropertyNames(aCtr).sort()
["length"]
> Object.getOwnPropertyNames(aCtr.prototype).sort()
TypeError: Object.getOwnPropertyNames called on non-object
> Object.getOwnPropertyNames(aCtr.__proto__).sort()
["concat", "constructor", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]
===
> Object.getOwnPropertyNames([]).sort()
["length"]
> Object.getOwnPropertyNames([].prototype).sort()
TypeError: Object.getOwnPropertyNames called on non-object
> Object.getOwnPropertyNames([].__proto__).sort()
["concat", "constructor", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]

ljsa.LITERAL-OBJECT

name::
* McsEngl.ljsa.LITERAL-OBJECT@cptIt,
* McsEngl.ljs'arrayL@cptIt,
* McsEngl.ljs'literal-notation-of-array-554i@cptIt,

_GENERIC:
> typeof []
"object"

_CODE.LJS:
myList = ['oats', 'peas', 'beans', 'barley'];

emptyArray = [];

month_lengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

slides = [
{url: 'slide0001.html', title: 'Looking Ahead'},
{url: 'slide0008.html', title: 'Forecast'},
{url: 'slide0021.html', title: 'Summary'}
];
[http://javascript.crockford.com/survey.html]
===
> var a=[true?1:0,2,3]
undefined
> a
[1, 2, 3]
> var a=[false?1:0,2,3]
undefined
> a
[0, 2, 3]

ljb'arrayL'property

name::
* McsEngl.ljb'arrayL'property@cptIt,

_PROPERTY:
> Object.getOwnPropertyNames([]).sort()
["length"]
> Object.getOwnPropertyNames([].prototype).sort()
TypeError: Object.getOwnPropertyNames called on non-object
> Object.getOwnPropertyNames([].__proto__).sort()
["concat", "constructor", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]
===
> var aCtr = new Array()
undefined
> Object.getOwnPropertyNames(aCtr).sort()
["length"]
> Object.getOwnPropertyNames(aCtr.prototype).sort()
TypeError: Object.getOwnPropertyNames called on non-object
> Object.getOwnPropertyNames(aCtr.__proto__).sort()
["concat", "constructor", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]

Use [] instead of new Array()

name::
* McsEngl.Use [] instead of new Array()@cptIt,

Syntax
//instead of
var BOOKS = new Array();
BOOKS[0] = 'Ship It!';

//prefer this:
var BOOKS = [ ];
BOOKS[0] = 'Ship It!';
[http://www.learn-javascript-tutorial.com/Production-Grade-JS.cfm]

ljsa.MULTIDIMENTIONAL

name::
* McsEngl.ljsa.MULTIDIMENTIONAL@cptIt,

_CODE.LJS:
> var a = [[1,2,3],[4,5,6],[7,8,9]]
undefined
> a[1]
[4, 5, 6]
> a[2][1]
8
> a[2][0]
7
> a[2][2]
9
===
> a.push([10,11,12,13])
4
> a[3][3]
13
> a[2][3]
undefined

ljsalgo'sut.OBJECT

name::
* McsEngl.ljsalgo'sut.OBJECT@cptIt,
* McsEngl.ljs'object@cptIt,
* McsEngl.ljsobject@cptIt,
* McsEngl.ljs'object@cptIt,
* McsEngl.ljs'object-archetype@cptIt,
* McsEngl.object.javascript@cptIt,
* McsEngl.object.js@cptIt,
* McsEngl.ljs'codeS.unitM.collection.OBJECT@cptIt,
* McsEngl.jso@cptIt,
* McsEngl.ljso@cptIt, {2014-06-22}
* McsEngl.ljso@cptIt,
* McsEngl.ljsobt@cptIt, {2014-03-24}
* McsEngl.ljsobt@cptIt,
* McsEngl.ljs-obj@cptIt,

DEFINITION

_DEFINITION:
* Jsobject is an-algo-unit (= object, function, array, string, number, regexp, bool, null, undefined, mixed) which
- contains a-set of variables (= members, methods and methodsNo)
- inherits members from another object2 (Object.getPrototypeOf(o1))
- you can add members at will (primitives can not)
[hmnSngo.2015-12-06]
===
* Jsobject is A-SET of variables (= name-value pairs).
[hmnSngo.2015-09-06]
===
Object is a VARIABLE (= name-code-pair) with 'code' a collection of variables.
[hmnSngo.2014-02-14]
===
JavaScript objects can be thought of as simple collections of name-value pairs. As such, they are similar to:
Dictionaries in Python
Hashes in Perl and Ruby
Hash tables in C and C++
HashMaps in Java
Associative arrays in PHP
The fact that this data structure is so widely used is a testament to its versatility. Since everything (bar core types) in JavaScript is an object, any JavaScript program naturally involves a great deal of hash table lookups. It's a good thing they're so fast!
The "name" part is a JavaScript string, while the value can be any JavaScript value — including more objects. This allows you to build data structures of arbitrary complexity.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Objects]
===
JavaScript is designed on a simple object-based paradigm. An object is a collection of properties, and a property is an association between a name and a value. A value of property can be a function, which is then known as the object's method. In addition to objects that are predefined in the browser, you can define your own objects.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects]
===
JavaScript is fundamentally about objects. Arrays are objects. Functions are objects. Objects are objects. So what are objects? Objects are collections of name-value pairs. The names are strings, and the values are strings, numbers, booleans, and objects (including arrays and functions).
Objects are usually implemented as hashtables so values can be retrieved quickly.
[http://javascript.crockford.com/private.html]
* http://stackoverflow.com/a/24811539,
===
* Object is a container of code which inherits members and whose members we use.
Function is a container of code which RETURNS code when we use it.
[hmnSngo.2012-01-29]
===
Object is a mixed-container of data and processing code we can use its parts.
[hmnSngo.2012-01-27]
===
Objects and functions are the other fundamental elements in the language. You can think of objects as named containers for values, and functions as procedures that your application can perform.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals]
===
For convenience, Types are normally subdivided into primitives and objects. Objects are entities that have an identity (they are only equal to themselves) and that map property names to values ("slots" in prototype-based programming terminology). Objects may be thought of as associative arrays or hashes, and are often implemented using these data structures. However, objects have additional features, such as a prototype chain[clarification needed], which ordinary associative arrays do not have.
[http://en.wikipedia.org/wiki/JavaScript_syntax]
===
Object is a dynamic collection of properties. Not an instance of a class.
[http://www.youtube.com/watch?v=RO1Wnu-xKoY&feature=bf_next&list=PL7664379246A246CB&lf=plpp_video]
===
An object is a referenceable container of name/value pairs. The names are strings (or other elements such as numbers that are converted to strings). The values can be any of the data types, including other objects. Objects are usually implemented as hash-tables, but none of the hash-table nature (such as hash functions or rehashing methods) is visible.
[http://javascript.crockford.com/survey.html]
===
Almost everything in JavaScript can be an Object: Strings, Functions, Arrays, Dates....
Objects are just data, with added properties and methods.
Properties are values associated with objects.
Methods are actions objects can perform.
[http://www.w3schools.com/js/js_objects.asp]
===
Στην καθημερινή ορολογία, ως αντικείμενο χαρακτηρίζεται οποιδήποτε πράγμα βρίσκεται στον κόσμο που μας περιβάλλει, όπως πχ ένα αυτοκίνητο, ένα βιβλίο, μια τηλεόραση, ένα χαρτονόμισμα κλπ. Κάτι ανάλογο συμβαίνει και στον προγραμματισμό: Ως αντικείμενο (object) χαρακτηρίζεται μια δομή δεδομένων η οποία διαθέτει ιδιότητες και μεθόδους.
[Λιακέας, Η γλώσσα JavaScript. 2002, 30]
===
OK back up, what is an object again?
An object in JavaScript is any unordered collection of key-value pairs. If its not a primitive (undefined, null, boolean, number or string) its an object.
[http://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/]

Although you have to give up some object-oriented features available in Java, you still have objects with their methods and variables providing the necessary utility. You can define objects but not classes of objects. The difference between an object and a class, in layspeak, is the difference between a building and its architectural plan; once you have a building, you can use it until its end; but if you have the building's architectural plan, you can build other buildings just like it or make major modifications to it.
You also have to give up object inheritance.
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

Using objects A small set of objects are readily available for use within your code. In C and BASIC, these are usually known as library functions and can be used to perform trigonometric functions, print information to the screen, etc. The object is the basic unit of object-oriented programming systems (OOPS). Each object usually has certain features or variables and also a set of functions or methods associated with the object. Please note that we use the words function and method interchangeably; true OOPS programmers only refer to them as methods, but to bring some familiarity to readers who have done programming in non-object-oriented languages like C and BASIC, we will continue using this term interchangeably.
- anchor the HTML anchor tag object
- applet a Java applet object; currently this is not yet implemented
- button an HTML INPUT tag of type "button"
- checkbox an HTML INPUT tag of type "checkbox"
- Date an object that contains a variety of methods to print, calculate, and interchange dates
- document the object describing an HTML page
- form the controlling object for an entire HTML FORM
- history an object of the current browsers history list
- link an HTML link object
- location an object describing a URL
- Math an object that contains mathematical constants, trigonometric functions, and other basic non-arithmetic methods
- password an HTML INPUT tag of type "password"
- radioButton an HTML INPUT tag of type "radio"
- reset an HTML INPUT tag of type "reset"
- selection a text selection within the HTML TEXTAREA or INPUT type "text" tags
- string the string data type with a variety of methods for printing and manipulating strings
- submit the HTML INPUT tag of type "submit"
- text the HTML INPUT tag of type "text"
- textArea the HTML TEXTAREA tag (Note: the selection object is separate from the textArea object itself)
- window the object describing the current browser or document window
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

The phrase "everything is an object" is UNDEFINED in programing terms because the name 'object' is understood differently by different people and in different computer-languages.

JavaScript code uses 9 different-units plus 1 (multiple):
- 01. array
- 02. boolean
- 03. function
- 04. null
- 05. number
- 06. object
- 07. regexp
- 08. string
- 09. undefined
- 10. multiple

These units are called and 'types'. The 'object' unit is a collection of name-value-pairs. It is created literally with {} notation or as an instance of a 'function' unit with the 'new' operator.

UNFORTUNATELY and all units are called objects because in ool terminology everything INHERITS attributes from a generic entity, which usually is called 'object'.

In JavaScript this generic entity is the 'Object' FUNCTION (with 'o' CAPITAL). All functions inherit from the Object function, and here comes the confusion because the object-units are created AND from functions with the 'new' operator.

> Boolean instanceof Object
true
> new Object instanceof Object
true
> typeof new Object
"object"
> typeof Object
"function"

THEN 'everything is an object' is FALSE, WHEN 'object' we call the 'object' UNIT we use to build JavaScript code.
[http://stackoverflow.com/a/24811539/3850296]

ljso'GENERIC

name::
* McsEngl.ljso'GENERIC@cptIt,

_GENERIC:
* js-named-semantic-unit#ql:js'named_semantic_unit#

_DESCRIPTION:
JS-objects have as generic other js-objects.
Class-based-ool-objects have as generic classes, NOT objects.
[hmnSngo.2016-04-24]
===
The generic of a jso is its constructor.prototype.
> object.__proto__ === Constructor.prototype.
[hmnSngo.2014-07-23]

_CODE.LJS:
//find generic of object:
> localStorage.constructor
function Storage() { [native code] }
> Object.getPrototypeOf(location)
Location {}
> Object.getPrototypeOf(location.__proto__)
Object {}
> location.constructor === Location
true
> toString.call(location) === "[object Location]"
true
===
//generic
> Object.getPrototypeOf(Node)
function EventTarget() { [native code] }
> Object.getPrototypeOf(Node.prototype)
EventTarget {addEventListener: function, ...
===
> var o={}
undefined
> Object.getOwnPropertyNames(o).sort()
[]
> Object.getOwnPropertyNames(o.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> var oGen={1:1,2:2}
undefined
> o.__proto__ = oGenObject {m1: 1, m2: 2}
> Object.getOwnPropertyNames(o).sort()
[]
> Object.getOwnPropertyNames(o.__proto__).sort()
["m1", "m2"]
> Object.getOwnPropertyNames(o.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

ljso'generic'set

name::
* McsEngl.ljso'generic'set@cptIt,

_CODE.LJS:
> var o = {n:1}
undefined
> var o2={}
undefined
> o2.__proto__ = o
Object {n: 1}
> o2
Object {}
> Object.getPrototypeOf(o2)
Object {n: 1}
> o2.n1
> o2 instanceof o
ERROR!!!!

ljso'attribute

name::
* McsEngl.ljso'attribute@cptIt,

_CODE.LJS:
// object of a custom-constructor
> function f(){}
undefined
> var oF = new f
undefined
> oF.__proto__ === f.prototype
true
> oF.constructor === f
true
> oF instanceof f
true
> typeof oF
"object"
> typeof f
"function"
===
// object literal = object of the builtin Object-constructor
> var oL = {}
undefined
> oL.__proto__ === Object.prototype
true
> oL.constructor === Object
true
> oL instanceof Object
true
> typeof oL
"object"
> typeof Object
"function"

ljso'code

name::
* McsEngl.ljso'code@cptIt,
* McsEngl.cpt.ljs'code.OBJECT@cptIt,
* McsEngl.cpt.ljs'hashtable@cptIt554i,
* McsEngl.cpt.ljs'object@cptIt,
* McsEngl.cpt.ljs'object'code@cptIt,
* McsEngl.cpt.ljs'object-datatype@cptIt,
* McsEngl.cpt.ljs'o@cptIt,

=== _NOTES: objects and hashtables are the same thing, so I could have written
var myHashtable = new Object(); [instead of var myHashtable = {};]
and the result would have been exactly the same.
===
====== lagoGreek:
* McsEngl.cpt.τσᾳντικείμενο@cptIt554,

_GENERIC:
* ool-object#ql:ool'object#
* container,
* unit-of-code#ql:js'unit_of_code#,
* js-data-type#ql:"js'data_type"#, 2011-10-16,
* js-value#ql:js'value#

_ADDRESS.WPG:
* http://helephant.com/2008/08/building-simple-objects//

ljso'constructor

name::
* McsEngl.ljso'constructor@cptIt,
* McsEngl.ljs'constructor-function-of-object@cptIt,
* McsEngl.ljsconstructor@cptIt,
* McsEngl.ljsfcn.CONSTRUCTOR@cptIt,

_DESCRIPTION:
New objects are created using a constructor, which is a regular function invoked using new
The new constructor call (e.g. new Foo()):
- creates a new object,
- sets the prototype of that object to Foo.prototype and
- passes that as this to the constructor.
[http://book.mixu.net/node/ch6.html]

ljso'doing.CREATING

name::
* McsEngl.ljso'doing.CREATING@cptIt,
* McsEngl.ljso'creating@cptIt,
* McsEngl.ljsobt'building@cptIt,
* McsEngl.ljsobt'creating@cptIt,
* McsEngl.ljsobt'definition@cptIt,
* McsEngl.ljs'building-object@cptIt,

_DESCRIPTION:
object.create
Crockford does not use "new".
[http://www.youtube.com/watch?v=RO1Wnu-xKoY&feature=bf_next&list=PL7664379246A246CB&lf=plpp_video]
===
The two main ways of building up object systems are by inheritance (is-a) and by aggregation (has-a). JavaScript does both, but its dynamic nature allows it to excel at aggregation.
[http://javascript.crockford.com/javascript.html]
===
Objects can be produced by constructors, which are functions which initialize objects. Constructors provide the features that classes provide in other languages, including static variables and methods.
[http://javascript.crockford.com/private.html]

_ADDRESS.WPG:
* http://www.codeproject.com/Articles/687093/Understanding-JavaScript-Object-Creation-Patterns,

_CODE.LJS:
1. var newRover = {};
===
2. var person = new Object()
---
function Apple (type) {
this.type = type;
this.color = "red";
}
var apple = new Apple('macintosh');
===
3. var childObject = myObject;
===
4. var obj = Object.create(proto);

1. BY LITERAL-NOTATION#ql:js'object.literal#

name::
* McsEngl.1. BY LITERAL-NOTATION@cptIt,

2. BY NEW OPERATOR (constructor-functions)

name::
* McsEngl.2. BY NEW OPERATOR (constructor-functions)@cptIt,
* McsEngl.ljs'constructor-function@cptIt,
* McsEngl.ljs'new@cptIt,
* McsEngl.ljsnew@cptIt,
* McsEngl.ljs'new-expression@cptIt,
* McsEngl.ljs'new-sentence@cptIt,
* McsEngl.ljs'object-constructor@cptIt,

* McsEngl.ljsoc@cptIt,

_DESCRIPTION:
Objects are created by using constructors in new expressions; for example, new Date(2009,11) creates a new Date object.
Invoking a constructor without using new has consequences that depend on the constructor. For example, Date() produces a string representation of the current date and time rather than an object.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2.1P1]

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new,

_CODE.LJS:
function make_person_object(firstname, lastname, age) {
this.firstname = firstname;
this.lastname = lastname;
this.age = age;
// Note, we did not include a return statement
}

var Joe = make_person_object("Joe", "Smith", 23);
console.log(Joe); // undefined
console.log(window.firstname) // "Joe" (oops)

var John = new make_person_object("John", "Smith", 45);
console.log(John); // {firstname: "John", lastname: "Smith", age: 45}
[http://stackoverflow.com/a/5958487]

member.this
member.this

name::
* McsEngl.member.this@cptIt,

_DESCRIPTION:
Some of them furthermore are constructors: they are functions intended for use with the new operator.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec15P3]
===
The first step towards creating an object requires us to define an object function. An object function is virtually identical in syntax as a regular function, although there are some differences which will surface later on. The object function is used to define and declare an object
[http://www.javascriptkit.com/javatutors/object2.shtml]

_CODE.LJS:
function fName(nIn) {
this.nName: nIn,
this.sName: 'sring',
this.fName: function(){}
}
var oName = fName(26);
===
function employee(name,jobtitle,born) {
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}

var fred = new employee("Fred Flintstone","Caveman",1970);
alert(fred.name);

===
function theObject() {
this.num1 = 5;
this.num2 = 8;
this.add = function () {
answer = this.num1 + this.num2;
return answer;
}
}
The object, coded as described is not usable. That is why it is called a prototypical object.

myObject = new theObject();

The reserve word, "prototype" is used to create a child prototypical object from a (parent) prototypical object.
[http://www.associatedcontent.com/article/1733382/creating_javascript_objects_by_constructor_pg4.html?cat=15]

There's a variation of the factory function methodology that may feel more natural to you. In JavaScript, when function is called preceded by the new operator, the function receives an implicit this argument that is a brand new object, ready to be assembled with properties and methods. Also, if we do not return anything explicitly, the new operator automatically returns this.

Let's rework our last example into a constructor. A good convention is to start constructor functions with a capital letter, to differentiate from a regular function, signaling to the programmer that it needs to be called with the new operator.

Code Sample: ObjectOrientedJS/Demos/constructors.html

---- Code Omitted ----

function Guitar(color, strings) {
this.color = color;
this.strings = strings;
this.tune = function (newStrings) {
this.strings = newStrings;
};
this.play = function (chord) {
alert('Playing chord: ' + chord);
};
this.print = function (price, currency) {
alert('This guitar is ' +
this.color +
', it has ' + this.strings.length + ' strings' +
' and it costs ' + price + currency);
};
}

var GUITAR = new Guitar('black', ['E', 'A', 'D', 'G', 'B', 'e']);
debugWrite('this guitar is: ' + GUITAR.color);
GUITAR.play('Dm7');
GUITAR.tune( ['D', 'A', 'D', 'G', 'B', 'e' ] );
GUITAR.print(850, 'USD');

---- Code Omitted ----

The biggest differences here are two. First we no longer need to create the new object because the new operator has already taken care of that and passed the new object under the this identifier. The other difference is that we will use this wherever we were using guitar before. We could have returned this but that, as we explained above, is no longer necessary.
[http://www.learn-javascript-tutorial.com/ObjectOrientedJS.cfm#simple-obj]

_DESCRIPTION:
Creating a function, we create an object.
[hmnSngo.2013-10-26]
===
This is probably one of the most common ways. You define a normal JavaScript function and then create an object by using the new keyword. To define properties and methods for a class created using function(), you use the this keyword, as seen in the following example.

function Apple(type) {
this.type = type;
this.color = "red";
this.getInfo = getAppleInfo;
}

function getAppleInfo() {
return this.color + ' ' + this.type + ' apple';
}
To instantiate an object of the Apple class, set some properties and call methods you can do the following:

var apple = new Apple('macintosh');
apple.color = "reddish";
alert(apple.getInfo());
1.1. Methods defined internally
In the example above you see that the method getInfo() of the Apple class was defined in a separate function getAppleInfo(). While this works fine, it has one drawback – you may end up defining a lot of these functions and they are all in the "global namespece". This means you may have naming conflicts if you (or another library you are using) decide to create another function with the same name. The way to prevent pollution of the global namespace, you can define your methods within the same class, like this:

function Apple (type) {
this.type = type;
this.color = "red";
this.getInfo = function() {
return this.color + ' ' + this.type + ' apple';
};
}
Using this syntax changes nothing in the way you instantiate the object and use its properties and methods.
[http://www.phpied.com/3-ways-to-define-a-javascript-class/]

member.return

name::
* McsEngl.member.return@cptIt,

_CODE.LJS:
function fName(nIn) {
fInternal = function(){};
return {
fInternal: fInternal,
nName: nIn,
sName: 'sring',
fName: function(){}
}
}
var oName = new fName(26);

member.prototype

name::
* McsEngl.member.prototype@cptIt,

_CODE.LJS:
> function fName(nIn) {
fName.prototype.n = nIn;
}
var oName = new fName(26);
undefined
> oName.n
26
===
function fName(nIn) {};
fName.prototype = {
nName: 3,
sName: 'sring'
}
var oName = new fName(26)
> oName.nName
3
===
<!DOCTYPE html>
<html>
<body>
<p id="idDemo"></p>

<script>
function fPerson(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
fPerson.prototype.fName = function() {
return this.firstName + " " + this.lastName
};

var oPerson = new fPerson("John", "Doe", 50, "blue");
document.getElementById("idDemo").innerHTML =
"My father is " + oPerson.fName();
</script>

</body>
</html>

Object_constructor

name::
* McsEngl.Object_constructor@cptIt,

_CODE.LJS:
myObject = new Object();

myObject.num1 = 5;
myObject.num2 = 8;
myObject.add = function () {
answer = myObject.num1 + myObject.num2;
return answer;
}
[http://www.associatedcontent.com/article/1725488/creating_javascript_objects_by_inheritance_pg2.html?cat=15]

3. BY Object.create#ql:ljsfobject.create#
4. BY SELF-EXECUTING-FUNCTION

_ADVANTAGE.NO:
* When you LOAD the-code, this function is-executed.
Then some objects it needs, are loaded next, and an erron occures.
In contrast, object-factory-functions, just loaded as the other code, AND when they executed all code is already loaded.
We execute code, after the-loading-process.
[hmnSngo.2015-11-30]

_CODE.LJS:
> var o = (function(){
var p_private=2;
var p2 = 'string';
return {
p1:1,
p2:p2
}
})()
undefined
> typeof o
"object"
> o.p1
1
> o.p_private
undefined
===
> var o = function(){var p_rivate=2;return {p1:1}}()
undefined
> o.p1
1
===
var o={f:(function(){return{}})()}
undefined
typeof o
"object"
typeof o.f
"object"
===
> var o = {n:2,n2:this.n}
undefined
o.n2
undefined

var o = (function(){var n=2; var nn=n; return nn;})()
undefined
> o.nn
undefined

> var o = (function(){var n=2; var nn=n; return {nn:nn}})()
undefined
> o.nn
2

5. OBJECT-RETURNING-FUNCTIONS (factory)

name::
* McsEngl.5. OBJECT-RETURNING-FUNCTIONS (factory)@cptIt,
* McsEngl.ljsobject-fuctory-function@cptIt,
* McsEngl.ljsobject-returning-function@cptIt,
* McsEngl.ljsoff@cptIt,
* McsEngl.ljsobject-factory@cptIt,
* McsEngl.ljsobject-factory-function@cptIt,
* McsEngl.ljs-object-returning-function@cptIt, {2016-01-28}
* McsEngl.ljsf.factory@cptIt,
* McsEngl.ljsf.object-returning@cptIt,

* McsEngl.ljsff@cptIt,
* McsEngl.orf@cptIt,
* McsEngl.ljsorf@cptIt,
* McsEngl.ljsof@cptIt,

_DESCRIPTON:
When a function returns an object, we call it a factory function.
[https://www.sitepoint.com/factory-functions-javascript/]
===
The new object can have any other object as generif if we create it with Object.create.
[hmnSngo.2016-01-28]
===
Creates an-object with generic Object.prototype.
- It has input for initialization,
- it has the-scope of the-function,
- it is not executed, so you can load before.
[hmnSngo.2015-11-28]
===
Functions that return an object when you call them.
[hmnSngo.2015-11-08]
===
One important thing to notice in the previous two approaches is that we did not need to create a formal class to serve as the template of the GUITAR object. If we needed a second guitar object we would need to create it the same way we did for the first one.

We could just encapsulate that logic in a function that can create a brand new guitar object on demand.

Code Sample: ObjectOrientedJS/Demos/factory-functions.html

function createGuitar(color, strings) {
var guitar = { };
guitar.color = color;
guitar.strings = strings;
guitar.tune = function (newStrings) {
this.strings = newStrings;
};
guitar.play = function (chord) {
alert('Playing chord: ' + chord);
};
guitar.print = function (price, currency) {
alert('This guitar is ' +
this.color +
', it has ' + this.strings.length + ' strings' +
' and it costs ' + price + currency);
};
return guitar;
}

var GUITAR1 = createGuitar('black', ['E', 'A', 'D', 'G', 'B', 'e'] );
var GUITAR2 = createGuitar('maple', ['F', 'Bb', 'D#', 'G#', 'C', 'f'] );
[http://www.learn-javascript-tutorial.com/ObjectOrientedJS.cfm#simple-obj]

jsof'advantage
jsof'advantage

name::
* McsEngl.jsof'advantage@cptIt,

1. ONE LEVEL INHERITANCE:
Constructors create objects with 2 level of inheritance.
[hmnSngo.2015-12-03]

2. CORRECT NAMING:
we have the-correct one:
generic.isPrototypeOf(specific)
===
INCORRECT:
object instanceof constructor

jsof'advantageNo

name::
* McsEngl.jsof'advantageNo@cptIt,

1. instanceof:
You loose this functionality.
[hmnSngo.2015-12-03]
===
this is advantage
[hmnSngo.2016-01-01]

Resource

name::
* McsEngl.Resource@cptIt,

_ADDRESS.WPG:
* https://www.sitepoint.com/factory-functions-javascript//

SPECIFIC

name::
* McsEngl.SPECIFIC@cptIt,

var fNameFtr = function() {
function f1(){}
function f2(){}

return {
f1: f1,
f2: f2,
}
};

ljso'doing.DELETING

name::
* McsEngl.ljso'doing.DELETING@cptIt,

ljso'doing.deleting.property#ql:js'deleting-member-of-object#

name::
* McsEngl.ljso'doing.deleting.property@cptIt,

ljso'doing.INITIALIZING

name::
* McsEngl.ljso'doing.INITIALIZING@cptIt,
* McsEngl.ljso'initializing@cptIt,

_DESCRIPTION:
Initializing is the process of setting new values on NEWLLY created objects.
[hmnSngo.2014-08-14]

_SPECIFIC:
//CONSTRUCTOR'S ARGUMENTS
var o1 = new fConstructor(value1, value2)

===
//INIT FUNCTION
//create a function fInit in the generic and then call it
var o1 = Object.create(o);
o1.fInit(value1, value2)
var o2 = Object.create(o);
o2.fInit(value3, value4)
[hmnSngo.2014-08-14]

===
//OVERWRITING
var o1 = Object.create(o);
o1.p1 = value1;
o1.p2 = value2;
[hmnSngo.2014-08-14]

ljso'doing.ITERATING

name::
* McsEngl.ljso'doing.ITERATING@cptIt,
* McsEngl.ljsobt'iterating@cptIt,

_DESCRIPTION:
// object iteration
Arrays are objects, so you can expect that the for-in loop works for objects too:
var o = {p1: 1, p2: 2};
for (var i in o) {
console.log(i + '=' + o[i]);
}
This produces:
p1=1
p2=2
[http://www.packtpub.com/article/using-prototype-property-in-javascript]

===
//array iterration
i = aNames.length;
while (i--) {
o[aNames[i]] = {};
}

ljso'name

name::
* McsEngl.ljso'name@cptIt,

_DESCRIPTION:
A jso may have or not a name.
> var o = {};
> var a = [1, {}];
[hmnSngo.2015-09-06]

BY ASSINMENT

_CODE.LJS:
var childObject = myObject;
===
// SAME entities
> var o={s:"s"}
undefined
> var o2=o
undefined
> o2
Object {s: "s"}
> o2===o
true
[hmnSngo.2014-06-10]

ljso'type

name::
* McsEngl.ljso'type@cptIt,

_DESCRIPTION:
In epistemology, the 'type' of a CONCEPT is its GENERIC-concept.
In js 'type-of-object' is confused between its consturctor (= the function that creates instances of objects) and is prototype (= the object that inherits its attributes to the new object).
In java the 'consructor' and the 'prototype' of js are the same.
In relation to 'type' in epistemology, the TYPE IN JAVASCRIPT is its prototype because this entity inherits its attributes to new objects.
[hmnSngo.2014-06-29]
===
What 'value' is the 'object'.
[hmnSngo.2013-10-30]
===
The type of an object is "object":
typeof {} // "object"
[http://docs.jquery.com/Types]

_CODE.LJS:
> toString.call([1,2])
"[object Array]"
> toString.call("string")
"[object String]"
> variable instanceof Array
true|false

ljso'implementation

name::
* McsEngl.ljso'implementation@cptIt,

_DESCRIPTION:
all Objects are implemented as hash tables.
[http://phrogz.net/js/classes/ExtendingJavaScriptObjectsAndClasses.html]
===
associative array (hash table)
[http://www.mojavelinux.com/articles/javascript_hashes.html]

ljso'member (property)

name::
* McsEngl.ljso'member (property)@cptIt,
* McsEngl.ljsproperty@cptIt,
* McsEngl.ljsomember@cptIt,
* McsEngl.ljs'member-of-object@cptIt,
* McsEngl.ljso'member@cptIt, [YUI]
* McsEngl.ljsobt'member@cptIt,
* McsEngl.ljsobt'property@cptIt,
* McsEngl.ljsobt'item@cptIt,
* McsEngl.ljs'ovariable@cptIt, {2013-10-30}
* McsEngl.ljs'property@cptIt,
* McsEngl.ljs'property-of-object@cptIt,
* McsEngl.ljs'variable-of-object@cptIt, {2013-10-30}
* McsEngl.ljsoproperty@cptIt, {2014-07-01}
* McsEngl.ljsobjmember@cptIt, {2014-03-09}
* McsEngl.ljs'omember@cptIt, {2013-10-25}

=== _NOTES: I prefer 'member' than 'property' because with the name 'property' MANY call the non-method-members.
[hmnSngo.2013-10-21]

<p id="idLjsObject-prototypembr"><a class="clsPreview" href="#idLjsombr">Member</a>:
<br/><a class="clsPreview" href="#idLjscod">Code</a> (Chrome.50):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<br/>(Firefox.46):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<br/>(Edge.20):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<br/>(Safari.5.1.7):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<a class="clsHide" href="#idLjsObject-prototypembr"></a></p>

_GENERIC:
* js-variable#ql:lcpjs'variable@cptIt#
* member-of-object-in-ool#linkL#

_DESCRIPTION:
4.3.26 property
association between a name and a value that is a part of an object
NOTE Depending upon the form of the property the value may be represented either directly as a data value (a primitive value, an object, or a function object) or indirectly by a pair of accessor functions.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.26H3]
===
A property is a variable stored under an object. All variables created on a web-page authomatically become properties of the window object.
[http://net.tutsplus.com/tutorials/javascript-ajax/javascript-and-the-dom-series-lesson-1/]
===
Properties are containers that hold other objects, primitive values, or functions.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2P2]
===
Usually saying that “an object has some property” we mean an association between a property name and its value. But as we know from the ES3 analysis, a property structure is more complex than just a string name. It also has set of attributes — those which we already discussed in ES3, e.g. {ReadOnly}, {DontEnum} and other. So from this viewpoint a property is as an object itself.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/]
===
JavaScript is designed on a simple object-based paradigm. An object is a collection of properties, and a property is an association between a name and a value. A value of property can be a function, which is then known as the object's method. In addition to objects that are predefined in the browser, you can define your own objects.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects]
===
Classical objects are hard. The only way to add a new member to a hard object is to create a new class. In JavaScript, objects are soft. A new member can be added to a soft object by simple assignment.
[http://javascript.crockford.com/inheritance.html]

_ADDRESS.WPG:
* http://robertnyman.com/2008/10/14/javascript-how-to-get-private-privileged-public-and-static-members-properties-and-methods//

_SPECIFIC:
* method (function)
* method.no

Property enumerability and ownership - built-in methods of detection, retrieval, and iteration
Functionality  Own object  Own object and its prototype chain  Prototype chain only
Detection  
Enumerable  Nonenumerable  Enumerable and Nonenumerable
propertyIsEnumerable  hasOwnProperty and not propertyIsEnumerable  hasOwnProperty  Not available without extra code  Not available without extra code
Retrieval  
Enumerable  Nonenumerable  Enumerable and Nonenumerable
Object.keys  getOwnPropertyNames filtered to include properties when not passing propertyIsEnumerable  getOwnPropertyNames  Not available without extra code  Not available without extra code
Iteration  
Enumerable  Nonenumerable  Enumerable and Nonenumerable
Iterate over Object.keys  Iterate over getOwnPropertyNames filtered to include properties when not passing propertyIsEnumerable  Iterate over getOwnPropertyNames  
Enumerable  Nonenumerable  Enumerable and Nonenumerable
for..in  Not available without extra code  Not available without extra code  Not available without extra code
[https://developer.mozilla.org/en-US/docs/Enumerability_and_ownership_of_properties]

ljsombr'access-modifier

name::
* McsEngl.ljsombr'access-modifier@cptIt,
* McsEngl.ljs'access-modifier@cptIt,

_DESCRIPTION:
It should be noted that there isn't really an explicitly true sense of "privacy" inside JavaScript because unlike some traditional languages, it doesn't have access modifiers. Variables can't technically be declared as being public nor private and so we use function scope to simulate this concept. Within the Module pattern, variables or methods declared are only available inside the module itself thanks to closure. Variables or methods defined within the returning object however are available to everyone.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript]

ljsombr'attribute

name::
* McsEngl.ljsombr'attribute@cptIt,

_DESCRIPTION:
An ECMAScript object is a collection of properties each with zero or more attributes that determine how each property can be used—for example, when the Writable attribute for a property is set to false, any attempt by executed ECMAScript code to change the value of the property fails.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2P2]

ljsombr'binding#ql:jsthis#

name::
* McsEngl.ljsombr'binding@cptIt,

ljsombr'configuration

name::
* McsEngl.ljsombr'configuration@cptIt,
* McsEngl.ljs'property'configurable@cptIt,

_DESCRIPTION: Configurable,
attribute (in ES3 — reversed state of {DontDelete}) in false state prevents attempts to delete the property, change the property to be an accessor property, or change its attributes (other than [[Value]]).
...
Notice, if [[Configurable]] attribute has been set once to false, it cannot be turned back to true. As we just said, we cannot change even other attributes, e.g. [[Enumerable]] in such case.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/]

ljsombr'descriptor

name::
* McsEngl.ljsombr'descriptor@cptIt,

_DESCRIPTION:
The set of property’s attributes and their values is called in ES5 as a property descriptor.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/#property-descriptor-and-property-identifier-types]

ljsombr'doing

name::
* McsEngl.ljsombr'doing@cptIt,

_DESCRIPTION:
New API methods

For working with properties and their attributes ES5 standardized several new API methods, which we’ll discuss shortly in detail:

// better prototypal inheritance
Object.create(parentProto, properties);

// getting the prototype
Object.getPrototypeOf(o);

// define properties with specific attributes
Object.defineProperty(o, propertyName, descriptor);
Object.defineProperties(o, properties);

// analyze properties
Object.getOwnPropertyDescriptor(o, propertyName);

// static (or "frozen") objects
Object.freeze(o);
Object.isFrozen(o);

// non-extensible objects
Object.preventExtensions(o);
Object.isExtensible(o);

// "sealed": non-extensible
// and non-configurable objects
Object.seal(o);
Object.isSealed(o);

// lists of properties
Object.keys(o);
Object.getOwnPropertyNames(o);
But let us give one after another.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/#new-api-methods]

ljsombr'doing.ACCESSING

name::
* McsEngl.ljsombr'doing.ACCESSING@cptIt,
* McsEngl.ljsobt'member'retrieving@cptIt,

_DESCRIPTION:
* https://developer.mozilla.org/en-US/docs/Enumerability_and_ownership_of_properties,
===
We use subscript notation to add, replace, or retrieve elements in the hashtable.
myHashtable["name"] = "Carl Hollywood";
There is also a dot notation which is a little more convenient.
myHashtable.city = "Anytown";
The dot notation can be used when the subscript is a string constant in the form of a legal identifier. Because of an error in the language definition, reserved words cannot be used in the dot notation, but they can be used in the subscript notation.
[http://javascript.crockford.com/survey.html]

jsomember'dot-notation

name::
* McsEngl.jsomember'dot_notation@cptIt,
* McsEngl.ljs'Dot-notation@cptIt,
* McsEngl.ljs'Subscript-notation@cptIt,

_DESCRIPTION:
Dot Notation
In JavaScript, objects can be referenced using dot notation, starting with the highest-level object (i.e, window). Objects can be referred to by name or id or by their position on the page. For example, if there is a form on the page named "loginform", using dot notation you could refer to the form as follows:

Syntax
window.document.loginform
Assuming that loginform is the first form on the page, you could also refer to this way:

Syntax
window.document.forms[0]
A document can have multiple form elements as children. The number in the square brackets ([]) indicates the specific form in question. In programming speak, every document object contains an array of forms. The length of the array could be zero (meaning there are no forms on the page) or greater. In JavaScript, arrays are zero-based, meaning that the first form on the page is referenced with the number zero (0) as shown in the syntax example above.
[http://www.learn-javascript-tutorial.com/JavaScriptBasics.cfm#HTMLDom]
===
Dot Notation
You can write and read properties of an object using the dot notation:

y.name // "Pete"
y.age // 15
x.name = y.name + " Pan" // "Pete Pan"
x.age = y.age + 1 // 16
[http://docs.jquery.com/Types]

_Keyword:
Because of an error in the language definition, reserved words cannot be used in the dot notation, but they can be used in the subscript notation.
[http://javascript.crockford.com/survey.html]

_CODE.LJS:
>>> var a= {xx:'nk'}; a.xx;
"nk"
>>> var a= {xx:'nk'}; a['xx'];
"nk"

jsomember'array-notation

name::
* McsEngl.jsomember'array_notation@cptIt,
* McsEngl.ljs'array-notation@cptIt,
* McsEngl.ljs'bracket-notation@cptIt,
* McsEngl.ljs'square-bracket-notation@cptIt,
* McsEngl.ljs'subscript-notation@cptIt,

_DESCRIPTION:
> var o1 = {p1:"prop1",p2:"prop2"}
undefined
> o1['p1'] // you need '..'
"prop1"
===
Array Notation
Or you write and read properties using the array notation, which allows you to dynamically choose the property:

var operations = {
increase: "++",
decrease: "--"
}
var operation = "increase";
operations[operation] // "++";
operations["multiply"] = "*"; // "*"
[http://docs.jquery.com/Types]
===
Square Bracket Notation

Objects can also be referenced using square bracket notation as shown below.

Syntax
window['document']['loginform']

// and

window['document']['forms[0]']
Dot notation and square bracket notation are completely interchangeable. Dot notation is much more common; however, as we will see later in the course, there are times when it is more convenient to use square bracket notation.
[http://www.learn-javascript-tutorial.com/JavaScriptBasics.cfm#HTMLDom]

ljsombr'doing.DELETING

name::
* McsEngl.ljsombr'doing.DELETING@cptIt,
* McsEngl.ljsdelete@cptIt,
* McsEngl.ljs'delete@cptIt,
* McsEngl.ljs'delete-keyword@cptIt,
* McsEngl.ljs'deleting-member-of-object@cptIt,
* McsEngl.ljs'omember'deleting@cptIt,
* McsEngl.ljs'operator.delete@cptIt,
* McsEngl.ljs'delete@cptIt,
* McsEngl.ljs'delete-sentence@cptIt,
* McsEngl.ljs'delete-operator@cptIt,
* McsEngl.ljsdelete@cptIt,

_DESCRIPTION:
"variables declared implicitly" are properties of the global object, so delete works on them like it works on any property. Variables declared with var are indestructible.
[http://stackoverflow.com/a/6685537]
> o={}
Object {}
> delete o
true
> var o={}
undefined
> delete o
false

_CODE.LJS:
>var myobj = new Object;
myobj.a = 5;
myobj.b = 12;

>myobj
Object {a: 5, b: 12}

>delete myobj.a
true

>myobj
Object {b: 12}

ljsombr'doing.detecting

name::
* McsEngl.ljsombr'doing.detecting@cptIt,

_DESCRIPTION:
* https://developer.mozilla.org/en-US/docs/Enumerability_and_ownership_of_properties,

ljsombr'doing.CREATING

name::
* McsEngl.ljsombr'doing.CREATING@cptIt,

_WITH_THIS_VARIABLE:
This technique is usually used to initialize public instance variables. The constructor's this variable is used to add members to the object.

function Container(param) {
this.member = param;
}
So, if we construct a new object

var myContainer = new Container('abc');
then myContainer.member contains 'abc'.
[http://javascript.crockford.com/private.html]

_In_the_prototype:
This technique is usually used to add public methods. When a member is sought and it isn't found in the object itself, then it is taken from the object's constructor's prototype member. The prototype mechanism is used for inheritance. It also conserves memory. To add a method to all objects made by a constructor, add a function to the constructor's prototype:

Container.prototype.stamp = function (string) {
return this.member + string;
}
So, we can invoke the method

myContainer.stamp('def')
which produces 'abcdef'.
[http://javascript.crockford.com/private.html]

_ADDING:
Unlike class-based object languages, properties can be added to objects dynamically by assigning values to them. That is, constructors are not required to name or assign values to all or any of the constructed object’s properties. In the above diagram, one could add a new shared property for cf1, cf2, cf3, cf4, and cf5 by assigning a new value to the property in CFp.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2.1P3]

Private and privileged members can only be made when an object is constructed. Public members can be added at any time.
[http://javascript.crockford.com/private.html]

ljsombr'doing.iterating

name::
* McsEngl.ljsombr'doing.iterating@cptIt,

_DESCRIPTION:
* https://developer.mozilla.org/en-US/docs/Enumerability_and_ownership_of_properties,

ljsombr'enumeration

name::
* McsEngl.ljsombr'enumeration@cptIt,
* McsEngl.ljs'property'enumerable@cptIt,

_DESCRIPTION: Enumerable,
attribute (which stands for reversed state of {DontEnum} in ES3) determines in true state that a property is enumerated by a for-in enumeration.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/]

ljsombr'extensible

name::
* McsEngl.ljsombr'extensible@cptIt,

_DESCRIPTION:
For example, objects in ES5 can be sealed, frozen or just non-extensible, i.e. static. With all three states an internal [[Extensible]] property is related. It can be managed using special meta-methods:

var foo = {bar: 10};

console.log(Object.isExtensible(foo)); // true

Object.preventExtensions(foo);
console.log(Object.isExtensible(foo)); // false

foo.baz = 20; // error in "strict" mode
console.log(foo.baz); // undefined
Note, that [[Extensible]] internal property once setting to false cannot be turned back to true.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/]

ljsombr'name

name::
* McsEngl.ljsombr'name@cptIt,
* McsEngl.ljsproperty'name@cptIt,
* McsEngl.ljs'property'key@cptIt,

_DESCRIPTION:
The names of properties, in contrast to jsvariables, can be numbers and strings.
[hmnSngo.2014-04-24]

_CODE.LJS:
// bracket-notation needs string
> var o={}
undefined
> o.id
undefined
> o[id]
Uncaught ReferenceError: id is not defined
===
> var o={}
undefined
> o.id="id"
"id"
> o.id
"id"
> o[id]
Uncaught ReferenceError: id is not defined
> o['id']
"id"
===
> var o = {}
undefined
> o[id] = 'id'
Uncaught ReferenceError: id is not defined
> o['id'] = 'id'
"id"
> var s = 'id'
undefined
> o[s]
"id"
> o.s
undefined
[hmnSngo.2015-04-14]
===
obj.for = "Simon"; // Syntax error, because 'for' is a reserved word
obj["for"] = "Simon"; // works fine
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Objects]
===
//find the-name programatically:
oRange['set' + (bStart ? 'Start' : 'End')](oNodeCntnr, offset);

ljsombr'name.es6

name::
* McsEngl.ljsombr'name.es6@cptIt,

1. Object [key] setting syntax
One annoyance JavaScript developers have had for ages is not being able to set a variable key's value within an object literal declaration -- you had to add the key/value after original declaration:

// *Very* reduced example
let myKey = 'key3';
let obj = {
key1: 'One',
key2: 'Two'
};
obj[myKey] = 'Three';
At best this pattern is inconvenient and at worst it's confusing and ugly. ES6 provides developers a way out of this mess:

let myKey = 'variableKey';
let obj = {
key1: 'One',
key2: 'Two',
[myKey]: 'Three' /* yay! */
};
Wrapping the variable key in [] allows developers to get everything done within one statement!
[https://davidwalsh.name/es6-features]

ljsombr'inheritance

name::
* McsEngl.ljsombr'inheritance@cptIt,
* McsEngl.ljs'inheritance@cptIt,
* McsEngl.ljs'ownership-of-member@cptIt,

_DESCRIPTION:
Ownership of properties is determined by whether the property belongs to the object directly and not to its prototype chain.
[https://developer.mozilla.org/en-US/docs/Enumerability_and_ownership_of_properties]
===
In a class-based object-oriented language, in general, state is carried by instances, methods are carried by classes, and inheritance is only of structure and behaviour. In ECMAScript, the state and methods are carried by objects, and structure, behaviour, and state are all inherited.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2.1P3]
===
JavaScript prototypes and function objects provide object-oriented features customary to object-oriented programming language. What is confusing is that JavaScript does not intrinsically support class inheritance and clumsily supports it through prototype inheritance. Part 2 of this series introduces a framework that simplifies JavaScript class inheritance and demonstrates writing a class hierarchy of JavaScript object types.
[http://www.codeproject.com/Articles/5608/Writing-Object-Oriented-JavaScript-Part-1]
===
What is confusing is that JavaScript does not intrinsically support class inheritance and clumsily supports it through prototype inheritance.
[http://www.codeproject.com/KB/aspnet/JsOOP1.aspx]
===
* Object.prototype is the real root of JavaScript inheritance.
[http://www.3site.eu/doc//]
===
(2) when it is constructed, an object may be assigned a prototype (also an object), which will be used to find any slot (method / property) that cannot be found on the first object.
Only (2) allows you to change the behaviour of a supertype, and have changes reflected in all instances of subtypes.
[http://duncanpierce.org/node/185]

_ADDRESS.WPG:
* http://ejohn.org/blog/simple-javascript-inheritance//
* http://www.crockford.com/javascript/inheritance.html,
* http://javascript.crockford.com/prototypal.html,
* http://www.sitepoint.com/javascript-inheritance//
* http://www.bolinfest.com/javascript/inheritance.php,
* http://duncanpierce.org/node/185, 9 October 2007 - 9:12am — Duncan Pierce

ljb'inheritance'relation_to_mixin

name::
* McsEngl.ljb'inheritance'relation_to_mixin@cptIt,

_DESCRIPTION:
Prototypical inheritance is simple. It has a single advantage over mixins.
That is that it's a live link. if you change the prototype everything that inherits it is changed.
[http://programmers.stackexchange.com/a/123355]

ljb'inheritance.Classical

name::
* McsEngl.ljb'inheritance.Classical@cptIt,
* McsEngl.ljs'classical-inheritance-simulating-technique@cptIt,

_ADDRESS.WPG:
* http://michaux.ca/articles/class-based-inheritance-in-javascript,
* http://www.kevlindev.com/tutorials/javascript/inheritance/index.htm,
* http://ejohn.org/blog/simple-javascript-inheritance//

_CODE.LJS:
function extend(subclass, superclass) {
function Dummy(){}
Dummy.prototype = superclass.prototype;
subclass.prototype = new Dummy();
subclass.prototype.constructor = subclass;
subclass.superclass = superclass;
subclass.superproto = superclass.prototype;
}
[http://michaux.ca/articles/class-based-inheritance-in-javascript]

ljb'inheritance.Prototypal

name::
* McsEngl.ljb'inheritance.Prototypal@cptIt,

_ADDRESS.WPG:
* http://www.3site.eu/doc//

_DESCRIPTION:
My journey was circuitous because JavaScript itself is conflicted about its prototypal nature. In a prototypal system, objects inherit from objects. JavaScript, however, lacks an operator that performs that operation. Instead it has a new operator, such that

new f()

produces a new object that inherits from

f.prototype

This indirection was intended to make the language seem more familiar to classically trained programmers, but failed to do that, as we can see from the very low opinion Java programmers have of JavaScript. JavaScript's constructor pattern did not appeal to the classical crowd. It also obscured JavaScript's true prototypal nature. As a result, there are very few programmers who know how to use the language effectively.
[http://javascript.crockford.com/prototypal.html]

===
/*adding a custom property to the custom object "circle"*/
//First, create the custom object "circle"
function circle(){
}
var smallcircle=new circle()
smallcircle.pi=3.14159
A custom property added this way only exists for that instance of the object. If I were to spit out another instance of circle(), called "bigcircle", for example, bigcircle.pi would by default return "undefined" until I go over the process again of first defining bigcircle.pi, as with smallcircle.
...
circle.prototype.pi=3.14159
Having done the above, all instances of circle() now has the pi property prebuilt into them.
...
// create the object method
function alertmessage(){
alert(this.pi)
}
circle.prototype.alertpi=alertmessage
Now, all instances of the circle object contain a alertmessage() method!
[http://www.javascriptkit.com/javatutors/proto.shtml]

_CODE.LJS:
function circle(){
}
var smallcircle=new circle()
smallcircle.pi; //undefined

circle.prototype.pi=3.14159
smallcircle.pi; //3.14

===
function a() {
this.t1 = 1;
this.sayMyName = function() {
alert('a');
}
}

b.prototype = new a();
function b() {
this.t2 = 2;

}

var obj = new b();
obj.sayMyName(); // this would say a
obj.t2; // this would say 2

ljsombr'relation-to-variable

name::
* McsEngl.ljsombr'relation-to-variable@cptIt,

_DESCRIPTION:
A JavaScript object has properties associated with it. A property of an object can be explained as a variable that is attached to the object. Object properties are basically the same as ordinary JavaScript variables, except for the attachment to objects. The properties of an object define the characteristics of the object.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects]

ljsombr'value

name::
* McsEngl.ljsombr'value@cptIt,
* McsEngl.ljs'property'value@cptIt,

_DESCRIPTION:
Depending upon the form of the property the value may be represented either
- directly as a data value (a primitive value, an object, or a function object) or
- indirectly by a pair of accessor functions.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.26Div1]

ljsombr'writability

name::
* McsEngl.ljsombr'writability@cptIt,
* McsEngl.ljs'property'writable@cptIt,

SPECIFIC

name::
* McsEngl.ljs'property.SPECIFIC@cptIt,

_SPECIFIC:
Summary
private variables are declared with the 'var' keyword inside the object, and can only be accessed by private functions and privileged methods.
private functions are declared inline inside the object's constructor (or alternatively may be defined via var functionName=function(){...}) and may only be called by privileged methods (including the object's constructor).
privileged methods are declared with this.methodName=function(){...} and may invoked by code external to the object.
public properties are declared with this.variableName and may be read/written from outside the object.
public methods are defined by Classname.prototype.methodName = function(){...} and may be called from outside the object.
prototype properties are defined by Classname.prototype.propertyName = someValue
static properties are defined by Classname.propertyName = someValue
[http://phrogz.net/JS/classes/OOPinJS.html]

ljsombr.SPECIFIC-DIVISION.access

name::
* McsEngl.ljsombr.SPECIFIC-DIVISION.access@cptIt,

_SPECIFIC:
* public##
* publicNo##

ljsombr.SPECIFIC-DIVISION.function (doing)

name::
* McsEngl.ljsombr.SPECIFIC-DIVISION.function (doing)@cptIt,

_SPECIFIC:
* method#ql:lcpjs'property.method#
* methodNo#ql:lcpjs'property.method.no#

ljsombr.SPECIFIC-DIVISION.name

name::
* McsEngl.ljsombr.SPECIFIC-DIVISION.name@cptIt,

_SPECIFIC:
* named (internalNo##
* namedNo (internal)##

ljsombr.SPECIFIC-DIVISION.inheritance

name::
* McsEngl.ljsombr.SPECIFIC-DIVISION.inheritance@cptIt,

_SPECIFIC:
* inherited_from##
* inherited_fromNo##
===
* inherited_to##
* inherited_toNo##

ljsombr.SPECIFIC-DIVISION.program-access

name::
* McsEngl.ljsombr.SPECIFIC-DIVISION.program-access@cptIt,

_DESCRIPTION:
There are named properties, which available for ECMAScript program and internal properties, which available directly only on implementation level (however, it is possible to manage some of them in ECMAScript program via special methods).
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/]

ljsombr.access.PRIVILEGED

name::
* McsEngl.ljsombr.access.PRIVILEGED@cptIt,
* McsEngl.ljs'privileged-member@cptIt,

_DESCRIPTION:
Privileged
function Constructor(...) {
this.membername = function (...) {...};
}
[http://javascript.crockford.com/private.html]
===
A privileged method is able to access the private variables and methods, and is itself accessible to the public methods and the outside. It is possible to delete or replace a privileged method, but it is not possible to alter it, or to force it to give up its secrets.

Privileged methods are assigned with this within the constructor.

function Container(param) {

function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}

this.member = param;
var secret = 3;
var that = this;

this.service = function () {
if (dec()) {
return that.member;
} else {
return null;
}
};
}
service is a privileged method. Calling myContainer.service() will return 'abc' the first three times it is called. After that, it will return null. service calls the private dec method which accesses the private secret variable. service is available to other objects and methods, but it does not allow direct access to the private members.
[http://javascript.crockford.com/private.html]

ljsombr.access.PUBLIC

name::
* McsEngl.ljsombr.access.PUBLIC@cptIt,
* McsEngl.ljs'property.PUBLIC@cptIt,
* McsEngl.ljs'public-member@cptIt,
* McsEngl.ljs'public-property@cptIt,

_DESCRIPTION:
The properties of a) constructor's-prototype and b) constructor's-defined-with-this, are inherited to consturctor-objects. Crockford calls them 'public'.
[hmnSngo.2013-11-13]
===
The members of an object are all public members.
..
Public
function Constructor(...) {
this.membername = value;
}
Constructor.prototype.membername = value;
[http://javascript.crockford.com/private.html]

_CODE.LJS:
> var oCar = {sName:"car",fcnSay: function(){console.log(sName)}}
undefined
> Object.getOwnPropertyNames(oCar).sort()
["fcnSay", "sName"]

jsomember.public.RETURN

name::
* McsEngl.jsomember.public.RETURN@cptIt,

_CODE.LJS:
2. Assign the return value of an anonymous function to your namespace object:

YAHOO.myProject.myModule = function () {

 return {
   myPublicProperty: "I'm accessible as YAHOO.myProject.myModule.myPublicProperty.",
   myPublicMethod: function () {
     YAHOO.log("I'm accessible as YAHOO.myProject.myModule.myPublicMethod.");
   }
 };

}(); // the parens here cause the anonymous function to execute and return
Note the very last line with the closing curly brace and then the parentheses () — this notation causes the anonymous function to execute immediately, returning the object containing myPublicProperty and myPublicMethod. As soon as the anonymous function returns, that returned object is addressable as YAHOO.myProject.myModule.
[http://www.yuiblog.com/blog/2007/06/12/module-pattern/]

ljsombr.access.PUBLIC.NO

name::
* McsEngl.ljsombr.access.PUBLIC.NO@cptIt,
* McsEngl.ljsoproperty.private@cptIt,
* McsEngl.ljs'property.private@cptIt,
* McsEngl.ljs'private-member@cptIt,
* McsEngl.ljs'private-property@cptIt,

_DESCRIPTION:
Private property is a property which is accessed ONLY internally, not from another position in the code as ojt.property.
[hmnSngo.2014-09-13]
===
Private
function Constructor(...) {
var that = this;
var membername = value;
function membername(...) {...}
}

Note: The function statement
function membername(...) {...}
is shorthand for
var membername = function membername(...) {...};
[http://javascript.crockford.com/private.html]
===
Private
Private members are made by the constructor. Ordinary vars and parameters of the constructor becomes the private members.

function Container(param) {
this.member = param;
var secret = 3;
var that = this;
}
This constructor makes three private instance variables: param, secret, and that. They are attached to the object, but they are not accessible to the outside, nor are they accessible to the object's own public methods. They are accessible to private methods. Private methods are inner functions of the constructor.

function Container(param) {

function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}

this.member = param;
var secret = 3;
var that = this;
}
The private method dec examines the secret instance variable. If it is greater than zero, it decrements secret and returns true. Otherwise it returns false. It can be used to make this object limited to three uses.

By convention, we make a private that variable. This is used to make the object available to the private methods. This is a workaround for an error in the ECMAScript Language Specification which causes this to be set incorrectly for inner functions.

Private methods cannot be called by public methods. To make private methods useful, we need to introduce a privileged method.
[http://javascript.crockford.com/private.html]

_CODE.LJS:
function MyClass () { // constructor function
var privateVariable = "foo";
this.publicVariable = "bar";
this.privilegedMethod = function () {
alert(privateVariable);
};
}
MyClass.staticProperty = "baz";
> Object.getOwnPropertyNames(MyClass).sort()
["arguments", "caller", "length", "name", "prototype", "staticProperty"] //not privateVariable

jsomember.private.IN_FUNCTION

name::
* McsEngl.jsomember.private.IN_FUNCTION@cptIt,

_CODE.LJS:
> function f (){var n1 = 1}
undefined
> Object.getOwnPropertyNames(f).sort()
["arguments", "caller", "length", "name", "prototype"]

jsomember.private.IN_OBJECT

name::
* McsEngl.jsomember.private.IN_OBJECT@cptIt,

_CODE.LJS:
var oX = function() {
 var private_methodNo;
 function private_method() {
 }

 return {
   public_methodNo: 'string',
   public_method: function() {
   },
 };
}();

ljsombr.ALL

name::
* McsEngl.ljsombr.ALL@cptIt,
* McsEngl.ljs'member.all@cptIt,

_CODE:
* lcpJs'getAllPropertyNames:
* lcpJs'getPropertyAll:
* lcpJs'getVariableAll:
* lcpJs'getMemberAll:
function getPropertyAll( obj ) {
var props = [];
do {
Object.getOwnPropertyNames( obj ).forEach(function ( prop ) {
if ( props.indexOf( prop ) === -1 ) {
props.push( prop );
}
});
} while ( obj = Object.getPrototypeOf( obj ) );
return props;
}
[http://stackoverflow.com/a/8024294]
===
* Enumerable:  for..in
* Nonenumerable:  Not available without extra code
[https://developer.mozilla.org/en-US/docs/Enumerability_and_ownership_of_properties]

ljsombr.BUILT-IN

name::
* McsEngl.ljsombr.BUILT-IN@cptIt,
* McsEngl.ljs'builtin-property-of-object@cptIt,

_CODE.LJS:
> var o = {}
undefined
> Object.getOwnPropertyNames(o).sort()
[]
===
> var f = function(){}
undefined
> Object.getOwnPropertyNames(f).sort()
["arguments", "caller", "length", "name", "prototype"]
===
> var a = []
undefined
> Object.getOwnPropertyNames(a).sort()
["length"]
===
> var n = 3
undefined
> Object.getOwnPropertyNames(n).sort()
TypeError: Object.getOwnPropertyNames called on non-object

_SPECIFIC:
* constructor#linkL#

ljsombr.constructor

name::
* McsEngl.ljsombr.constructor@cptIt,
* McsEngl.ljs'object-constructor@cptIt, {2014-12-09}
* McsEngl.ljs'constructor-property-of-object@cptIt,
* McsEngl.ljsobt'constructor@cptIt,
* McsEngl.object-constructor-of-js-object@cptIt,

_DESCRIPTION:
An object has a build-in property named constructor. It is meant to reference the function which made the object, but it fails to do it sometimes.
Example
Let’s create a simple constructor and see how new objects have the right constructor value:
function Rabbit() { }
var rabbit = new Rabbit()
alert( rabbit.constructor == Rabbit ) // true
[http://javascript.info/tutorial/constructor]

_CODE.LJS:
> document.constructor
function HTMLDocument() { [native code] }
===
>>> Object.prototype.constructor
Object()
===
> Object.constructor
function Function() { [native code] }

ljsombr.ENUMERABLE

name::
* McsEngl.ljsombr.ENUMERABLE@cptIt,
* McsEngl.ljso'member.enumerable@cptIt,
* McsEngl.ljs'enumerable-member@cptIt,
* McsEngl.ljs'enumerable-property@cptIt,
* McsEngl.ljs'ovariable.enumerable@cptIt,

_DESCRIPTION:
Enumerable properties are those which can be iterated by a for..in loop.
[https://developer.mozilla.org/en-US/docs/Enumerability_and_ownership_of_properties]

_CODE:
> var o={p1:1,p2:2}
undefined
> for(var p in o){
console.log(p);
}
p1
p2
===
for...in loops
This method traverses all enumerable properties of an object and its prototype chain
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects]
===
function getMemberEnumerable( obj ) {
var props = [];
for(var p in obj){
props.push(p);
}
return props;
}

jsomember.enumerable.INHERITED#ql:js'member.inherited.enumerable#

name::
* McsEngl.jsomember.enumerable.INHERITED@cptIt,

jsomember.enumerable.OWN#ql:js'member.own.enumerable#

name::
* McsEngl.jsomember.enumerable.OWN@cptIt,

ljsombr.ENUMERABLE.NO

name::
* McsEngl.ljsombr.ENUMERABLE.NO@cptIt,
* McsEngl.ljs'ovariable.enumerableNo@cptIt,
* McsEngl.ljs'nonenumerable-member@cptIt,
* McsEngl.ljs'nonenumerable-property@cptIt,
* McsEngl.ljs'non-enumerable-member@cptIt,
* McsEngl.ljs'non-enumerable-property@cptIt,

jsomember.enumerableNo.INHERITED#ql:js'member.inheritedno.enumerable#

name::
* McsEngl.jsomember.enumerableNo.INHERITED@cptIt,

jsomember.enumerableNo.OWN#ql:js'member.inheritedno.enumerableno#

name::
* McsEngl.jsomember.enumerableNo.OWN@cptIt,

ljsombr.INHERITED-FROM (own.no)

name::
* McsEngl.ljsombr.INHERITED-FROM (own.no)@cptIt,
* McsEngl.ljsoproperty.inherited@cptIt,
* McsEngl.ljs'inherited-member@cptIt,
* McsEngl.ljs'inherited-property@cptIt,
* McsEngl.ljs'member.inherited@cptIt,
* McsEngl.ljs'member.ownNo@cptIt,
* McsEngl.ljsobt'member.own.no@cptIt,
* McsEngl.ljs'own.no-member@cptIt,
* McsEngl.ljs'prototype-property@cptIt,
* McsEngl.ljs'shared-from-property@cptIt,

_DESCRIPTION:
4.3.31 inherited property
property of an object that is not an own property but is a property (either own or inherited) of the object’s prototype
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.31H3]
===
Also you should know that a property can be either own, i.e. contained directly by an object, or inherited, i.e. contained by one of the objects in the prototype chain.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/]

_CODE:
===
function getMemberInherited( obj ) {
var oFirst = obj;
var props = [];
var props2 = [];
do {
Object.getOwnPropertyNames( obj ).forEach(function ( prop ) {
if ( props.indexOf( prop ) === -1 ) {
props.push( prop );
}
});
} while ( obj = Object.getPrototypeOf( obj ) );

for(var i=0; i< props.length; i++){
if(!oFirst.hasOwnProperty(props[i])){
props2.push(props[i]);
}
}
return props2;
}
===
> Object.getOwnPropertyNames(Math.__proto__).sort()

jsomember.inheritedform'call-generic-method

name::
* McsEngl.jsomember.inheritedform'call-generic-method@cptIt,
* McsEngl.call-super-method-in-javascript@cptIt,
* McsEngl.invoke-overridden-method@cptIt,
* McsEngl.invoking-super-methods-in-javascript@cptIt,

_ADDRESS.WPG:
* http://blog.salsify.com/engineering/super-methods-in-javascript,
* http://joshgertzen.com/object-oriented-super-class-method-calling-with-javascript//

_CODE.LJS:
//call 'super' of object
> var o={}
undefined
> o.name="gen"
"gen"
> var o2 = Object.create(o)
undefined
> o2.name="spec"
"spec"
> Object.getPrototypeOf(o2).name
"gen"

jsomember.inheritedfrom.PROTOTYPE

name::
* McsEngl.jsomember.inheritedfrom.PROTOTYPE@cptIt,

_CODE.LJS:
> function f(){}
undefined
> f.prototype.n=1
1
> f.prototype.s="string"
"string"
> Object.getOwnPropertyNames(new f)
[]
> Object.getOwnPropertyNames((new f).__proto__)
["constructor", "n", "s"]
> Object.getOwnPropertyNames((new f).__proto__.__proto__)
["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "__defineGetter__", "__lookupGetter__", "__defineSetter__", "__lookupSetter__", "__proto__"]
> Object.getOwnPropertyNames((new f).__proto__.__proto__.__proto__)
TypeError: Object.getOwnPropertyNames called on non-object

jsomember.inheritedfrom.CONSTRUCTOR (this)

name::
* McsEngl.jsomember.inheritedfrom.CONSTRUCTOR (this)@cptIt,

_CODE.LJS:
> function f (){this.n1 = 1}
undefined
> Object.getOwnPropertyNames(new f()).sort()
["n1"]

jsomember.inheritedfrom.ENUMERABLE

name::
* McsEngl.jsomember.inheritedfrom.ENUMERABLE@cptIt,

_CODE.LJS:
//text own properties & inherited properties
var textPropertiesIncludeInherited = [];
for(var p in text){
 textPropertiesIncludeInherited.push(p);
}
console.log(textPropertiesIncludeInherited.sort());

//text inherited properties only
var textPropertiesOnlyInherited = [];
for(var p in text){
 if(!text.hasOwnProperty(p)){
   textPropertiesOnlyInherited.push(p);
 }
}
console.log(textPropertiesOnlyInherited.sort());

jsomember.inheritedfrom.ENUMERABLE.NO

name::
* McsEngl.jsomember.inheritedfrom.ENUMERABLE.NO@cptIt,

ljsombr.INHERITED-FROM.NO (own)

name::
* McsEngl.ljsombr.INHERITED-FROM.NO (own)@cptIt,
* McsEngl.ljsproperty.direct@cptIt,
* McsEngl.ljsproperty.inheritedNo@cptIt,
* McsEngl.ljsproperty.own@cptIt,
* McsEngl.ljs'direct-property@cptIt,
* McsEngl.ljs'member.inheritedNo@cptIt,
* McsEngl.ljs'member.own@cptIt,
* McsEngl.ljsobt'member.OWN@cptIt,
* McsEngl.ljs'own-member@cptIt,
* McsEngl.ljs'own-property@cptIt,
* McsEngl.ljs'property.own@cptIt,

_DESCRIPTION:
Properties of the object itself take precedence over properties of prototypes.
[http://book.mixu.net/node/ch6.html]

_CODE.LJS:
For getting array of own properties there are two meta-methods: Object.keys, which returns only enumerable properties, and Object.getOwnPropertyNames, which in turn returns both: enumerable and non-enumerable properties:

var foo = {bar: 10, baz: 20};

Object.defineProperty(foo, "x", {
value: 30,
enumerable: false
});

console.log(Object.keys(foo)); // ["bar", "baz"]
console.log(Object.getOwnPropertyNames(foo)); // ["bar", "baz", "x"]
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/]
===
Object.getOwnPropertyNames(o)#ql:js'getownpropertynames#
This method returns an array containing all own properties names (enumerable or not) of an object o.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects]
===
hasOwnProperty()#ql:js'hasownproperty#

_DESCRIPTION:
Before attempting to detect properties, it’s important to understand from where they originate. There are two basic types of properties in JavaScript: those that exist on the object (also known as “own” properties) and those that are inherited through the prototype chain (often called “prototype” properties). Consider the following:

var person = {
name: "Nicholas"
};

alert(person.name); //"Nicholas"
alert(person.toString()); //"[object Object]"
In this code, the object person has only one own property, which is name. You can still access other methods on the object such as toString(), but these are inherited through the prototype chain. Object literals inherit from the Object type, so all of the basic methods of Object are accessible on the instance.

The big difference between own properties and prototype properties is the difference between unique and shared values. Own properties belong to that single object instance and can’t be affected by other instances of the same type; prototype properties belong to the prototype of the object, and since the prototype can be shared amongst multiple instances, these properties are also shared amongst multiple instances.
[http://www.nczonline.net/blog/2010/07/27/determining-if-an-object-property-exists/]

ljsombr.inheritedNo.ENUMERABLE

name::
* McsEngl.ljsombr.inheritedNo.ENUMERABLE@cptIt,
* McsEngl.ljs'member.own.ENUMERABLE@cptIt,

_CODE.LJS:
//obj own-enumerable properties
> Object.keys(obj).sort()
===
propertyIsEnumerable
===
Object.keys(o)
This method returns an array with all the own (not in the prototype chain) enumerable properties names ("keys") of an object o.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects]
===
Object.keys(o)
This method returns an array with all the own (not in the prototype chain) enumerable properties names ("keys") of an object o.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects]

ljsombr.inheritedNo.ENUMERABLE.NO

name::
* McsEngl.ljsombr.inheritedNo.ENUMERABLE.NO@cptIt,
* McsEngl.ljs'member.inheritedNo.enumerableNo@cptIt,
* McsEngl.ljs'member.own.ENUMERABLE.NO@cptIt,

_CODE.LJS:
not propertyIsEnumerable
===
For getting array of own properties there are two meta-methods: Object.keys, which returns only enumerable properties, and Object.getOwnPropertyNames, which in turn returns both: enumerable and non-enumerable properties:

var foo = {bar: 10, baz: 20};

Object.defineProperty(foo, "x", {
value: 30,
enumerable: false
});

console.log(Object.keys(foo)); // ["bar", "baz"]
console.log(Object.getOwnPropertyNames(foo)); // ["bar", "baz", "x"]
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/]

ljsombr.INHERITED-TO

name::
* McsEngl.ljsombr.INHERITED-TO@cptIt,
* McsEngl.ljso'property.inherited-to@cptIt,

_DESCRIPTION:
* Properties of an objectX which are inherited to specifics of objectX.
The prototype 'inherits' its properties to its instances.
[hmnSngo.2014-08-15]

ljsombr.INHERITED-TO.NO

name::
* McsEngl.ljsombr.INHERITED-TO.NO@cptIt,

ljsombr.METHOD

name::
* McsEngl.ljsombr.METHOD@cptIt,
* McsEngl.ljs'method@cptIt,
* McsEngl.ljs'method-property@cptIt,
* McsEngl.ljs'mtd@cptIt,

_DESCRIPTION:
It is a member with value a function#ql:js'function.method#.
[hmnSngo.2013-10-28]

_ADDRESS.WPG:
* this vs prototype: http://stackoverflow.com/a/9772864,

_CHAINING_METHODS:
newB.firstMethod('x').secondMethod('y').thirdMethod(1,15,'z');
What we need to do with all these methods that do not currently return anything is to add one extra line of code to the end of each of the methods.
return this;
[http://javascript.about.com/od/objectorientedjavascript/a/oop20.htm]

ljsombr.METHOD.NO

name::
* McsEngl.ljsombr.METHOD.NO@cptIt,
* McsEngl.ljs'field@cptIt, [from java]
* McsEngl.ljsobt'property@cptIt,
* McsEngl.ljsobt'variable@cptIt,
* McsEngl.ljs'property-of-object@cptIt,
* McsEngl.ljs'variable-of-object@cptIt,
* McsEngl.ljs'pty@cptIt, {2013-10-13}
* McsEngl.ljs'pt@cptIt, {2013-07-15}

_DESCRIPTION:
ECMAScript is object-based: basic language and host facilities are provided by objects, and an ECMAScript program is a cluster of communicating objects. An ECMAScript object is a collection of properties each with zero or more attributes that determine how each property can be used—for example, when the Writable attribute for a property is set to false, any attempt by executed ECMAScript code to change the value of the property fails. Properties are containers that hold other objects, primitive values, or functions. A primitive value is a member of one of the following built-in types: Undefined, Null, Boolean, Number, and String; an object is a member of the remaining built-in type Object; and a function is a callable object. A function that is associated with an object via a property is a method.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2P2]
===
Note that in the ECMAScript binding, the word "property" is used in the same sense as the IDL term "attribute."
[http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/DOM3-Core.html#glossary-role-glossary]
===
* property is the data-code#ql:js'data# associated with an object.
[hmnSngo.2011-10-16]
===
Properties are the values associated with an object.
[http://www.w3schools.com/js/js_obj_intro.asp]
===
* A JavaScript object has properties associated with it. You access the properties of an object with a simple notation:
objectName.propertyName
[Netscape]
===
* Properties are the adjectives of JavaScript. They describe qualities of objects and, in some cases are writable (can be changed dynamically).
[http://www.learn-javascript-tutorial.com/]

* Οι ιδιότητες (properties) περιγράφουν ένα αντικείμενο με τρόπο ανάλογο με εκείνον που ένα επίθετο προσδιορίζει το ουσιαστικό (λχ κόκκινο αυτοκίνητο).
[Λιακέας, Η γλώσσα JavaScript. 2002, 30]

_Read_Write:
JavaScript supports Object concept very well. You can create an object using the object literal as follows:

var emp = {
name: "Zara",
age: 10
};
You can write and read properties of an object using the dot notation as follows:

// Getting object properties
emp.name // ==> Zara
emp.age // ==> 10

// Setting object properties
emp.name = "Daisy" // <== Daisy
emp.age = 20 // <== 20
[http://www.tutorialspoint.com/jquery/jquery-basics.htm]

_ADDITION:
You can add properties to an object by simply giving it a value. Assume that the personObj already exists - you can give it properties named firstname, lastname, age, and eyecolor as follows:

personObj.firstname="John";
personObj.lastname="Doe";
personObj.age=30;
personObj.eyecolor="blue";

document.write(personObj.firstname);
The code above will generate the following output:
John
[http://www.w3schools.com/js/js_objects.asp]

_SPECIFIC:
Document Object Properties

Property  Description  W3C
cookie  Returns all name/value pairs of cookies in the document  Yes
documentMode  Returns the mode used by the browser to render the document  No
domain  Returns the domain name of the server that loaded the document  Yes
lastModified  Returns the date and time the document was last modified  No
readyState  Returns the (loading) status of the document  No
referrer  Returns the URL of the document that loaded the current document  Yes
title  Sets or returns the title of the document  Yes
URL  Returns the full URL of the document  Yes
[http://www.w3schools.com/jsref/dom_obj_document.asp]

SPECIFIC

_DESCRIPTION:
An Object is a collection of properties. Each property is either a named data property, a named accessor property, or an internal property:

A named data property associates a name with an ECMAScript language value and a set of Boolean attributes.

A named accessor property associates a name with one or two accessor functions, and a set of Boolean attributes. The accessor functions are used to store or retrieve an ECMAScript language value that is associated with the property.

An internal property has no name and is not directly accessible via ECMAScript language operators. Internal properties exist purely for specification purposes.

There are two kinds of access for named (non-internal) properties: get and put, corresponding to retrieval and assignment, respectively.
[file:///D:/File1a/WebsiteSngm/standard/techInfo/ecma.262.51.2011.html#idSec8.6P1]

ljsombr.NAMED

name::
* McsEngl.ljsombr.NAMED@cptIt,
* McsEngl.ljs'internalNo-property@cptIt,
* McsEngl.ljs'named-property@cptIt,

_DESCRIPTION:
An Object is a collection of properties. Each property is either a named data property, a named accessor property, or an internal property:

A named data property associates a name with an ECMAScript language value and a set of Boolean attributes.

A named accessor property associates a name with one or two accessor functions, and a set of Boolean attributes. The accessor functions are used to store or retrieve an ECMAScript language value that is associated with the property.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.6P1]

_CHARACTERISTIC:
Thus, common for both (data and accessor) named property types in ECMA-262-5 are two attributes:
Enumerable,
attribute (which stands for reversed state of {DontEnum} in ES3) determines in true state that a property is enumerated by a for-in enumeration.
Configurable,
attribute (in ES3 — reversed state of {DontDelete}) in false state prevents attempts to delete the property, change the property to be an accessor property, or change its attributes (other than [[Value]]).
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/#property-attributes]

_SPECIFIC:
* data##
* accessor##

jsomember.named.ACCESSOR

name::
* McsEngl.jsomember.named.ACCESSOR@cptIt,
* McsEngl.ljs'accessor-property@cptIt,
* McsEngl.ljs'property.accessor@cptIt,
* McsEngl.ljs'named-accessor-property@cptIt,

_DESCRIPTION:
A named accessor property associates a name (also — only a string) with one or two accessor functions: a getter and a setter.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/#named-accessor-property]

_CHARACTERISTIC:
And the complete attributes map for a named accessor property with default values is:

var defaultAccessorPropertyAttributes = {
[[Get]]: undefined,
[[Set]]: undefined,
[[Enumerable]]: false,
[[Configurable]]: false
};
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/#named-accessor-property]

jsomemberAccessor'creating

name::
* McsEngl.jsomemberAccessor'creating@cptIt,

_DESCRIPTION:
An accessor property can be defined either using already mentioned above meta-method Object.defineProperty:

var foo = {};

Object.defineProperty(foo, "bar", {

get: function getBar() {
return 20;
},

set: function setBar(value) {
// setting implementation
}

});

foo.bar = 10; // calls foo.bar.[[Set]](10)

// independently always 20
console.log(foo.bar); // calls foo.bar.[[Get]]()
Or also in the declarative view using object initialiser:

var foo = {

get bar () {
return 20;
},

set bar (value) {
console.log(value);
}

};

foo.bar = 100;
console.log(foo.bar); // 20
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/#named-accessor-property]

ljsombr.named.DATA

name::
* McsEngl.ljsombr.named.DATA@cptIt,
* McsEngl.ljs'data-property@cptIt,
* McsEngl.ljs'property.data@cptIt,
* McsEngl.ljs'named-data-property@cptIt,

_DESCRIPTION:
Such property has a name (which is always a string) and a direct associated with it value.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/#named-data-property]

_CHARACTERISTIC:
The complete attributes map for a named data property with default values is:

var defaultDataPropertyAttributes = {
[[Value]]: undefined,
[[Writable]]: false,
[[Enumerable]]: false,
[[Configurable]]: false
};
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/#named-data-property]

ljsombr.NAMED.NO (internal)

name::
* McsEngl.ljsombr.NAMED.NO (internal)@cptIt,
* McsEngl.ljs'internal-property@cptIt,
* McsEngl.ljs'namedNo-property@cptIt,
* McsEngl.ljs'property.internal@cptIt,

_DESCRIPTION:
An internal property has no name and is not directly accessible via ECMAScript language operators. Internal properties exist purely for specification purposes.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.6P1Ul1]
===
ES6 devides them to internal-method and internal-slot.
[http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object-internal-methods-and-internal-slots]

SPECIFIC

_SPECIFIC:
* BoundArguments-internal-property#linkL#
* BoundThis-internal-property#linkL#
* Call-internal-property#linkL#
* CanPut-internal-property#linkL#
* Class-internal-property#linkL#
* Code-internal-property#linkL#
* Construct-internal-property#linkL#
* DefaultValue-internal-property#linkL#
* DefineOwnProperty-internal-property#linkL#
* Delete-internal-property#linkL#
* Extensible-internal-property#linkL#
* FormalParameters-internal-property#linkL#
* Get-internal-property#linkL#
* GetOwnProperty-internal-property#linkL#
* GetProperty-internal-property#linkL#
* HasInstance-internal-property#linkL#
* HasProperty-internal-property#linkL#
* Match-internal-property#linkL#
* ParameterMap-internal-property#linkL#
* PrimitiveValue-internal-property#linkL#
* Prototype-internal-property#linkL#
* Put-internal-property#linkL#
* Scope-internal-property#linkL#
* TargetFunction-internal-property#linkL#

jsomember.internal.ALL

name::
* McsEngl.jsomember.internal.ALL@cptIt,

_SPECIFIC:
* CanPut##
* Class##
* DefaultValue##
* DefineOwnProperty##
* Delete##
* Extensible##
* Get##
* GetOwnProperty##
* GetProperty##
* HasProperty##
* Prototype##
* Put##
===
Table 8 — Internal Properties Common to All Objects
Internal Property  Value Type Domain  Description

[[lcpJs'property'internal.Prototype]]  Object or Null  The prototype of this object.

[[lcpJs'property'internal.Class]]  String  A String value indicating a specification defined classification of objects.
===
The value of the [[Class]] internal property is defined by this specification for every kind of built-in object. The value of the [[Class]] internal property of a host object may be any String value except one of "Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object", "RegExp", and "String". The value of a [[Class]] internal property is used internally to distinguish different kinds of objects. Note that this specification does not provide any means for a program to access that value except through Object.prototype.toString (see 15.2.4.2).
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.6.2P9]

[[lcpJs'property'internal.Extensible]]  Boolean  If true, own properties may be added to the object.

[[lcpJs'property'internal.Get]]  SpecOp(propertyName) ? any  Returns the value of the named property.

[[lcpJs'property'internal.GetOwnProperty]]  
SpecOp (propertyName) ?
Undefined or Property Descriptor
Returns the Property Descriptor of the named own property of this object, or undefined if absent.

[[lcpJs'property'internal.GetProperty]]  
SpecOp (propertyName) ?
Undefined or Property Descriptor
Returns the fully populated Property Descriptor of the named property of this object, or undefined if absent.

[[lcpJs'property'internal.Put]]  SpecOp (propertyName, any, Boolean)  Sets the specified named property to the value of the second parameter. The flag controls failure handling.

[[lcpJs'property'internal.CanPut]]  SpecOp (propertyName) ? Boolean  Returns a Boolean value indicating whether a [[Put]] operation with PropertyName can be performed.

[[lcpJs'property'internal.HasProperty]]  SpecOp (propertyName) ? Boolean  Returns a Boolean value indicating whether the object already has a property with the given name.

[[lcpJs'property'internal.Delete]]  SpecOp (propertyName, Boolean) ? Boolean  Removes the specified named own property from the object. The flag controls failure handling.

[[lcpJs'property'internal.DefaultValue]]  SpecOp (Hint) ? primitive  Hint is a String. Returns a default value for the object.

[[lcpJs'property'internal.DefineOwnProperty]]  SpecOp (propertyName, PropertyDescriptor, Boolean) ? Boolean  Creates or alters the named own property to have the state described by a Property Descriptor. The flag controls failure handling.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.6.2Figure1]

jsomember.internal.SOME

name::
* McsEngl.jsomember.internal.SOME@cptIt,

_SPECIFIC:
* BoundArguments##
* BoundThis##
* Call##
* Code##
* Construct##
* FormalParameters##
* HasInstance##
* Match##
* ParameterMap##
* PrimitiveValue##
* Scope##
* TargetFunction##
===
Table 9 — Internal Properties Only Defined for Some Objects
Internal Property  Value Type Domain  Description

[[lcpJs'property'internal.PrimitiveValue]]  primitive  Internal state information associated with this object. Of the standard built-in ECMAScript objects, only Boolean, Date, Number, and String objects implement [[PrimitiveValue]].

[[lcpJs'property'internal.Construct]]  SpecOp(a List of any) ? Object  Creates an object. Invoked via the new operator. The arguments to the SpecOp are the arguments passed to the new operator. Objects that implement this internal method are called constructors.

[[lcpJs'property'internal.Call]]  SpecOp(any, a List of any) ? any or Reference  Executes code associated with the object. Invoked via a function call expression. The arguments to the SpecOp are this object and a list containing the arguments passed to the function call expression. Objects that implement this internal method are callable. Only callable objects that are host objects may return Reference values.

[[lcpJs'property'internal.HasInstance]]  SpecOp(any) ? Boolean  Returns a Boolean value indicating whether the argument is likely an Object that was constructed by this object. Of the standard built-in ECMAScript objects, only Function objects implement [[HasInstance]].

[[lcpJs'property'internal.Scope]]  Lexical Environment  A lexical environment that defines the environment in which a Function object is executed. Of the standard built-in ECMAScript objects, only Function objects implement [[Scope]].

[[lcpJs'property'internal.FormalParameters]]  List of Strings  A possibly empty List containing the identifier Strings of a Function’s FormalParameterList. Of the standard built-in ECMAScript objects, only Function objects implement [[FormalParameterList]].

[[lcpJs'property'internal.Code]]  ECMAScript code  The ECMAScript code of a function. Of the standard built-in ECMAScript objects, only Function objects implement [[Code]].

[[lcpJs'property'internal.TargetFunction]]  Object  The target function of a function object created using the standard built-in Function.prototype.bind method. Only ECMAScript objects created using Function.prototype.bind have a [[TargetFunction]] internal property.

[[lcpJs'property'internal.BoundThis]]  any  The pre-bound this value of a function Object created using the standard built-in Function.prototype.bind method. Only ECMAScript objects created using Function.prototype.bind have a [[BoundThis]] internal property.

[[lcpJs'property'internal.BoundArguments]]  List of any  The pre-bound argument values of a function Object created using the standard built-in Function.prototype.bind method. Only ECMAScript objects created using Function.prototype.bind have a [[BoundArguments]] internal property.

[[lcpJs'property'internal.Match]]  SpecOp(String, index) ? MatchResult  Tests for a regular expression match and returns a MatchResult value (see 15.10.2.1). Of the standard built-in ECMAScript objects, only RegExp objects implement [[Match]].

[[lcpJs'property'internal.ParameterMap]]  Object  Provides a mapping between the properties of an arguments object (see 10.6) and the formal parameters of the associated function. Only ECMAScript objects that are arguments objects have a [[ParameterMap]] internal property.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.6.2Figure2]

ljsombr.READ-ONLY

name::
* McsEngl.ljsombr.READ-ONLY@cptIt,
* McsEngl.ljs'read-only-property@cptIt,

ljso'member-inheritance

name::
* McsEngl.ljso'member-inheritance@cptIt,
* McsEngl.ljso'inheritance@cptIt,

_ADDRESS.WPG:
* https://developer.mozilla.org/en/docs/Web/JavaScript/Inheritance_and_the_prototype_chain,

_DESCRIPTION:
An instance-object (= obt created with 'new fconstructor') inherits
- the properties of the constructor's prototype AND
- the properties of the constructor prefixed with 'this'.
[hmnSngo.2014-06-19]
===
In a class-based object-oriented language, in general, state is carried by instances, methods are carried by classes, and inheritance is only of structure and behaviour. In ECMAScript, the state and methods are carried by objects, and structure, behaviour, and state are all inherited.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2.1P3]

_CODE.LJS:
//make an object1(oSpecific) SPECIFIC of object2(oGeneric), set the attributes of object2 AND attributes of object1
function fDextend(oSpecific, oGeneric) {
var fDtostring = Object.prototype.toString,
sObjtype = toString.call({}); //"[object Object]"
for (var property in oGeneric) {
//if a property is an object recursively add its properties
if (oGeneric[property] && sObjtype == fDtostring.call(oGeneric[property])) {
oSpecific[property] = oSpecific[property] || {};
fDextend(oSpecific[property], oGeneric[property]);
} else {
oSpecific[property] = oGeneric[property];
}
}
return oSpecific;
}
> var o1={s1:"s1",s2:"s2"}
undefined
var o2={s3:"s3",s4:"s4"}
undefined
> fDextend(o1,o2)
Object {s1: "s1", s2: "s2", s3: "s3", s4: "s4"}
> o2
Object {s3: "s3", s4: "s4"}
> o1
Object {s1: "s1", s2: "s2", s3: "s3", s4: "s4"}
[http://addyosmani.com/blog/essential-js-namespacing/]

ljso'prototype-object

name::
* McsEngl.ljso'prototype-object@cptIt,
* McsEngl.ljsprototype@cptIt,
* McsEngl.ljso'prototype@cptIt,
* McsEngl.ljsobt'prototype@cptIt,
* McsEngl.ljs'prototype-object@cptIt,

_DESCRIPTION:
Each object has an internal link to another object called its prototype.
That prototype object has a prototype of its own, and so on until an object is reached with null as its prototype.
null, by definition, has no prototype, and acts as the final link in this prototype chain.
[https://developer.mozilla.org/en/docs/Web/JavaScript/Inheritance_and_the_prototype_chain]
===
The prototype-of-objectX is its constructor's 'prototype' OR the Object.prototype IF objectX is a literal one.
[hmnSngo.2014-07-27]
===
Every object created by a constructor has an implicit reference (called the object’s prototype) to the value of its constructor’s “prototype” property. Furthermore, a prototype may have a non-null implicit reference to its prototype, and so on; this is called the prototype chain.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2.1P2]
==
The prototype_object of an objectX always is denoted as '__proto__'.
This prototype_object is the same with objectX's constructor's 'prototype'.
> ({}).__proto__ === Object.prototype
true
> (new Object).__proto__ === Object.prototype
true
[hmnSngo.2014-07-23]
===
- litteral-object: obj.__proto__
- constructor-object: Constructor.prototype
[hmnSngo.2014-03-19]
===
- litteral-object: obj.__proto__
- constructor-object: obj.prototype
[hmnSngo.2013-11-14]
===
NOTE The value of a constructor’s “prototype” property is a prototype object that is used to implement inheritance and shared properties.
4.3.5 prototype
object that provides shared properties for other objects
NOTE When a constructor creates an object, that object implicitly references the constructor’s “prototype” property for the purpose of resolving property references. The constructor’s “prototype” property can be referenced by the program expression constructor.prototype, and properties added to an object’s prototype are shared, through inheritance, by all objects sharing the prototype. Alternatively, a new object may be created with an explicitly specified prototype by using the Object.create built-in function.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.4Div1]
===
JavaScript is a bit confusing for developers experienced in class-based languages (like Java or C++), as it is dynamic and does not provide a class implementation (although the keyword class is a reserved keyword and cannot be used as a variable name).
When it comes to inheritance, JavaScript only has one construct: objects. Each object has an internal link to another object called its prototype. That prototype object has a prototype of its own, and so on until an object is reached with null as its prototype. null, by definition, has no prototype, and acts as the final link in this prototype chain.
While this is often considered to be one of JavaScript's weaknesses, the prototypal inheritance model is in fact more powerful than the classic model. It is, for example, fairly trivial to build a classic model on top of a prototypal model, while the other way around is a far more difficult task.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain]
===
The object, referenced by __proto__ is called a prototype. So, animal is a prototype of rabbit.
...
__proto__ in the spec
If you’ll be reading the specification, what we call __proto__ here is named [[Prototype]] there. And yes, double square brackets are important, because there’s another property named prototype.
[http://javascript.info/tutorial/inheritance]
===
The prototype object of JavaScript, introduced starting in JavaScript 1.1, is a prebuilt object that simplifies the process of adding custom properties/ methods to all instances of an object.
[http://www.javascriptkit.com/javatutors/proto.shtml]
===
There is an important thing to take note at this point in the tutorial. While you are free to use the prototype object on any custom objects, this is NOT the case with prebuilt ones (such as image, string etc). JavaScript only allows you to "prototype" prebuilt objects that are created with the new keyword, such as the following:
The image object
The string object
The date object
The Array object
[http://www.javascriptkit.com/javatutors/proto2.shtml]

_DESCRIPTION:
It is the object from which current-object inherites members.
[hmnSngo.2013-10-26]
===
Every object created by a constructor has an implicit reference (called the object’s prototype) to the value of its constructor’s “prototype” property. Furthermore, a prototype may have a non-null implicit reference to its prototype, and so on; this is called the prototype chain. When a reference is made to a property in an object, that reference is to the property of that name in the first object in the prototype chain that contains a property of that name. In other words, first the object mentioned directly is examined for such a property; if that object contains the named property, that is the property to which the reference refers; if that object does not contain the named property, the prototype for that object is examined next; and so on.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2.1P2]

_CODE.LJS:
//CREATE prototope
//because we can NOT use (spec) __proto__ to denote the-prototype of an-object
//we create an empty object with a given prototype.
var o = Object.create(o2);
===
//FIND PROTOTYPE:
1) o.constructor.prototype
2) Object.getPrototypeOf(o)
3) toString.call(o)
4) o.__proto__
===
//the-prototype of an-object is NOT its constructor, is the-prototype of constructor:
> var o = new f()
> f.isPrototypeOf(o)
false
> f.prototype.isPrototypeOf(o)
true
===
Object.getOwnPropertyNames({}.__proto__)
["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "__defineGetter__", "__lookupGetter__", "__defineSetter__", "__lookupSetter__", "__proto__"]
Object.getOwnPropertyNames((new Object()).__proto__)
["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "__defineGetter__", "__lookupGetter__", "__defineSetter__", "__lookupSetter__", "__proto__"]
===
> Object.getOwnPropertyNames(Object.getPrototypeOf(oCar)).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames(oCar.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
function circle(){
}
var circleBig=new circle()
circle.prototype.pi=3.14;
alert (circleBig.pi) //3.14 alerted
===

function circle(){
}

circle.prototype.pi=3.14;

var circleSmall=new circle()
var circleBig=new circle()
circleBig.pi //=>3.14

function alertmessage(){
alert(this.pi)
}

circle.prototype.alertpi=alertmessage;
circleBig.alertpi() //=>3.14
circleSmall.alertpi() //=>3.14
[http://www.javascriptkit.com/javatutors/proto3.shtml]

ljso'prototype'methodNo

name::
* McsEngl.ljso'prototype'methodNo@cptIt,

_DESCRIPTION:
IF we change a prototypes property from an instance THEN all instances can see this change.
[hmnSngo.2014-04-21]
===
Prototypes should not have properties that are not functions, because prototype properties that are not primitives (such as arrays and objects) will not behave as one would expect, since they will use the instance that is looked up from the prototype. Example for Dimitry Sosnikov's site:

var Foo = function (name) { this.name = name; };
Foo.prototype.data = [1, 2, 3]; // setting a non-primitive property
Foo.prototype.showData = function () { console.log(this.name, this.data); };

var foo1 = new Foo("foo1");
var foo2 = new Foo("foo2");

// both instances use the same default value of data
foo1.showData(); // "foo1", [1, 2, 3]
foo2.showData(); // "foo2", [1, 2, 3]

// however, if we change the data from one instance
foo1.data.push(4);

// it mirrors on the second instance
foo1.showData(); // "foo1", [1, 2, 3, 4]
foo2.showData(); // "foo2", [1, 2, 3, 4]
LOG "foo1" [1,2,3]
LOG "foo2" [1,2,3]
LOG "foo1" [1,2,3,4]
LOG "foo2" [1,2,3,4]

Hence prototypes should only define methods, not data.

If you set the variable in the constructor, then you will get the behavior you expect:

function Foo(name) {
this.name = name;
this.data = [1, 2, 3]; // setting a non-primitive property
};
Foo.prototype.showData = function () { console.log(this.name, this.data); };
var foo1 = new Foo("foo1");
var foo2 = new Foo("foo2");
foo1.data.push(4);
foo1.showData(); // "foo1", [1, 2, 3, 4]
foo2.showData(); // "foo2", [1, 2, 3]
[http://book.mixu.net/node/single.html]

ljso'prototype-chain

name::
* McsEngl.ljso'prototype-chain@cptIt,
* McsEngl.ljs'inheritance@cptIt,
* McsEngl.ljsinheritance@cptIt,
* McsEngl.ljs'prototype-chain@cptIt,

_ADDRESS.WPG:
* http://joshgertzen.com/object-oriented-super-class-method-calling-with-javascript//

_DESCRIPTION:
Each object has an internal link to another object called its prototype.
That prototype object has a prototype of its own, and so on until an object is reached with null as its prototype.
null, by definition, has no prototype, and acts as the final link in this prototype chain.
While this is often considered to be one of JavaScript's weaknesses, the prototypal inheritance model is in fact more powerful than the classic model.
It is, for example, fairly trivial to build a classic model on top of a prototypal model, while the other way around is a far more difficult task.
[https://developer.mozilla.org/en/docs/Web/JavaScript/Inheritance_and_the_prototype_chain]
===
Every object created by a constructor has an implicit reference (called the object’s prototype) to the value of its constructor’s “prototype” property. Furthermore, a prototype may have a non-null implicit reference to its prototype, and so on; this is called the prototype chain. When a reference is made to a property in an object, that reference is to the property of that name in the first object in the prototype chain that contains a property of that name. In other words, first the object mentioned directly is examined for such a property; if that object contains the named property, that is the property to which the reference refers; if that object does not contain the named property, the prototype for that object is examined next; and so on.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2.1P2]
===
Properties of an object are looked up from two places:
the object itself (Obj.foo), and
if the property does not exist, on the prototype of the object (Obj.prototype.foo).
Since this lookup is performed recursively (e.g. Obj.foo, Obj.prototype.foo, Obj.prototype.prototype.foo), each object can be said to have a prototype chain.
[http://book.mixu.net/node/ch6.html]

_CODE.LJS:
var o = {a: 1};

// The newly created object o has Object.prototype as its [[Prototype]]
// o has no own property named 'hasOwnProperty'
// hasOwnProperty is an own property of Object.prototype.
// So o inherits hasOwnProperty from Object.prototype
// Object.prototype has null as its prototype.
// o ---> Object.prototype ---> null

var a = ["yo", "whadup", "?"];

// Arrays inherit from Array.prototype
// (which has methods like indexOf, forEach, etc.)
// The prototype chain looks like:
// a ---> Array.prototype ---> Object.prototype ---> null

function f(){
return 2;
}

// Functions inherit from Function.prototype
// (which has methods like call, bind, etc.)
// f ---> Function.prototype ---> Object.prototype ---> null
[https://developer.mozilla.org/en/docs/Web/JavaScript/Inheritance_and_the_prototype_chain]

===
Simple Inheritance without Super Calls:
// Ahead-Of-Time JavaScript Class Definition and Inheritance
// Yikes, that's kind of ugly.
function BaseClass() {
//BaseClass constructor code goes here
}

BaseClass.prototype.getName = function() {
return "BaseClass";
}

function SubClass() {
//SubClass constructor code goes here
}

//Inherit the methods of BaseClass
SubClass.prototype = new BaseClass();

//Override the parent's getName method
SubClass.prototype.getName = function() {
return "SubClass";
}

//Alerts "SubClass"
alert(new SubClass().getName());

And this approach, but you should avoid it:
// Run-Time JavaScript Class Definition and Inheritance
// Looks more traditional, but JS enclosures can lead to
// SEVERE memory leaks in Internet Explorer.
function BaseClass() {
this.getName = function() {
return "BaseClass";
};

//BaseClass constructor code goes here
}

function SubClass() {
//Override the parent's getName method at
//object instance creation time
this.getName = function() {
return "SubClass";
}

//SubClass constructor code goes here
}

//Inherit the methods of BaseClass
SubClass.prototype = new BaseClass();

//Alerts "SubClass"
alert(new SubClass().getName());
Like I mention in the comments the first approach is somewhat unsightly, but it’s preferred over the second approach due to memory, performance and other issues. Its only been included here so that I could point out that you should not use it! So focusing on the first example, which outlines the standard prototypical approach, the question is: How can a method of SubClass call a method of its BaseClass? Well, here’s one approach that a lot of people try and take.
[http://joshgertzen.com/object-oriented-super-class-method-calling-with-javascript//]

_CODE.LJS:
// CALLING SUPER METHOD:
function BaseClass() { }
BaseClass.prototype.getName = function() {
return "BaseClass(" + this.getId() + ")";
}

BaseClass.prototype.getId = function() {
return 1;
}

function SubClass() {}
SubClass.prototype = new BaseClass();
SubClass.prototype.getName = function() {
//Call the getName() method of the super class
//Hmm... is an explicit reference really a super call?
return "SubClass(" + this.getId() + ") extends " +
BaseClass.prototype.getName();
}

SubClass.prototype.getId = function() {
return 2;
}

//Alerts "SubClass(2) extends BaseClass(1)";
//Is this the proper output?
alert(new SubClass().getName());

//NOT CALLING SUPER METHOD:
function BaseClass() { }
BaseClass.prototype.getName = function() {
return "BaseClass(" + this.getId() + ")";
}

BaseClass.prototype.getId = function() {
return 1;
}

function SubClass() {}
SubClass.prototype = new BaseClass();
SubClass.prototype.getName = function() {
//A little 'apply' magic and polymorphism works!
//But ugh, explicit references!
return "SubClass(" + this.getId() + ") extends " +
BaseClass.prototype.getName.call(this);
}

SubClass.prototype.getId = function() {
return 2;
}

//Alerts "SubClass(2) extends BaseClass(2)";
//Hey, we got the proper output!
alert(new SubClass().getName());

ljso'relation-to-jsfunction#ql:jsf'relation-to-jsobject#

name::
* McsEngl.ljso'relation-to-jsfunction@cptIt,

ljso'relation-to-jsstring#ql:jss'relation-to-jsobject#

name::
* McsEngl.ljso'relation-to-jsstring@cptIt,

ljso'scope

name::
* McsEngl.ljso'scope@cptIt,
* McsEngl.ljso'scope@cptIt,
* McsEngl.ljsobt'scope@cptIt,

_DESCRIPTION:
Unfortunately js does NOT support block-scope, then sibling properties of objects can not see each other.
A workaround is to wrap the object in a selfexecuting function which returns the object.
[hmnSngo.2014-06-22]
===
a FUNCTION property can see siblings.
[hmnSngo.2014-06-26]

_CODE.LJS:
Properties of an object can NOT see sibling ones.
> var o={s:"string", s2:s+" another"}
ReferenceError: s is not defined
> var o={s:"string", s2:o.s+" another"}
TypeError: Cannot read property 's' of undefined
[hmnSngo.2014-06-15]
===
//a FUNCTION property can see siblins
> var o={s:"stg",f:function(){console.log(o.s)}}
undefined
> o.f()
stg
> var o={s:"stg", s2:o.s}
TypeError: Cannot read property 's' of undefined
> var o={s:"stg", obj:{str:o.s}}
TypeError: Cannot read property 's' of undefined
===
> var o = (function(){
var b=true;
var o = {n:1,s:"string",b2:b}
return o;
})()
undefined
> o
Object {n: 1, s: "string", b2: true}
===
var o = (function() {
var x,y,z;
var o = {};
return o;
})()

ljso'support

name::
* McsEngl.ljso'support@cptIt,
* McsEngl.ljso'browser-compatibility@cptIt,

_DESCRIPTION:
Which browser supports this object.
[hmnSngo.2014-12-03]

ljso'usage

name::
* McsEngl.ljso'usage@cptIt,

_DESCRIPTION:
Objects are good for storing named values, but V8 does not allow you to specify an order for the properties (so adding properties in a particular order to an object does not guarantee that the properties will be iterated in that order). Objects can also be useful for values which need to be looked up quickly, since you can simply check for whether a property is defined without needing to iterate through the properties:
var obj = { has_thing: true, id: 123 };
if(obj.has_thing) {
 console.log('true', obj.id);
}

LOG "true" 123
[http://book.mixu.net/node/single.html]

SPECIFIC

name::
* McsEngl.ljso.specific@cptIt,
* McsEngl.ljsobt.specific@cptIt,
* McsEngl.ljsobject.specific@cptIt,

_SPECIFIC: Alphabetically:
===
* array object#ql:js'array#
* boolean object
* builtin-object,
* custom-object,
* date object
* function-object#ql:js'function#
* global properties and functions
* immutable-object,
* instance-object,
* instanceNo-object,
* math object
* number object
* string object
* RegExp object
* mutable-object,
===
In JavaScript, almost everything is an object. All primitive types except null and undefined are treated as objects. They can be assigned properties (assigned properties of some types are not persistent), and they have all characteristics of objects.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects]

_SPECIFIC_DIVISION.change:
* immutable-object,
* mutable-object,

_SPECIFIC_DIVISION.Programer:
* builtin-object#ql:js'object.built_in#,
* custom-object,

JavaScript Objects Reference
* Array object
* Boolean object
* Date object
* Math object
* Number object
* String object
* RegExp object
* Global properties and functions
[http://www.w3schools.com/jsref/default.asp] 2010-09-23

ljso.SPECIFIC-DIVISION.dialect

name::
* McsEngl.ljso.SPECIFIC-DIVISION.dialect@cptIt,

_SPECIFIC:
* ljb-object##
* ljn-object##

ljso.SPECIFIC-DIVISION.constructor

name::
* McsEngl.ljso.SPECIFIC-DIVISION.constructor@cptIt,

_SPECIFIC:
* constructor-object##
*

ljso.SPECIFIC-DIVISION.host

name::
* McsEngl.ljso.SPECIFIC-DIVISION.host@cptIt,

_SPECIFIC:
* host-object
* native-object
===
4.3.8 host object
object supplied by the host environment to complete the execution environment of ECMAScript
NOTE Any object that is not native is a host object.

ljso.arguments

name::
* McsEngl.ljso.arguments@cptIt,

_DESCRIPTION:
When control enters an execution context for function code, an arguments object is created unless (as specified in 10.5) the identifier arguments occurs as an Identifier in the function’s FormalParameterList or occurs as the Identifier of a VariableDeclaration or FunctionDeclaration contained in the function code.
The arguments object is created by calling the abstract operation CreateArgumentsObject with arguments func the function object whose code is to be evaluated, names a List containing the function’s formal parameter names, args the actual arguments passed to the [[Call]] internal method, env the variable environment for the function code, and strict a Boolean that indicates whether or not the function code is strict code.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec10.6]

ljso.ARRAY-LIKE

_CREATED: {2016-01-07}

name::
* McsEngl.ljso.ARRAY-LIKE@cptIt,
* McsEngl.jsarray-like-object@cptIt,
* McsEngl.Array-like-object@cptIt,
* McsEngl.ljs'array-like-object@cptIt,

* McsEngl.jsak@cptIt,
* McsEngl.alo@cptIt,

_ARRAY_LIKE_OBJECT:
Setting a 'length' member in an object, you make it 'array_like' ie you can access its members as o[2].
[hmnSngo.2015-02-18]
===
An array-like object
- has: indexed access to elements and the property length that tells us how many elements the object has.
- does not have: array methods such as push, forEach and indexOf.
Two examples of array-like objects is the result of the DOM method document.getElementsByClassName() (many DOM methods return array-like objects) and the special variable arguments [1]. You can determine the number of arguments via
arguments.length
And you can access a single argument, e.g. read the first argument:
arguments[0]
Array methods, however, have to be borrowed. You can do that, because most of those methods are generic.
[http://www.2ality.com/2013/05/quirk-array-like-objects.html]
===
Any object with the 'length' property.
[http://stackoverflow.com/questions/11886578/creating-array-like-objects-in-javascript]

_ADDRESS.WPG:
* http://www.2ality.com/2013/05/quirk-array-like-objects.html,
* http://stackoverflow.com/questions/11886578/creating-array-like-objects-in-javascript,

_CODE.LJS:
> var al={0:1,1:2, nLength:2}
undefined
> al.nLength
2
> al[0]
1
> al[1]
2
> al.nLength=5
5
> al[3]
undefined
> al
Object {0: 1, 1: 2, nLength: 5}
> Array.prototype.slice.call(al)
[]
===
> var al={0:1,1:2, length:3}
undefined
> Array.prototype.slice.call(al)
[1, 2, undefined Χ 1]

_CODE.LJS:
//create arrays from array-like
> Array.prototype.slice.call({0:'a',1:'b',2:'c',length:3})
["a", "b", "c"]
> Array.prototype.slice.call({0:'a',1:'b',2:'c'})
[]
> Array.prototype.slice.call({a:1,b:2,c:3,length:3})
[undefined Χ 3]
===
//creates an array FROM a NodeList (array-like)
[].slice.call(document.querySelectorAll('#idTocTree li > a'))
[http://stackoverflow.com/a/18129752]

ljso.BROWSER#ql:jsalgo.browser-manging#

name::
* McsEngl.ljso.BROWSER@cptIt,

ljso.BUILTIN

name::
* McsEngl.ljso.BUILTIN@cptIt,
* McsEngl.ljs'Built-In-Object@cptIt,
* McsEngl.ljs'native-object@cptIt,
* McsEngl.ljsobt.native@cptIt,
* McsEngl.ljsobt.intrinsic@cptIt,
* McsEngl.ljsobt.prebuilt@cptIt,
* McsEngl.ljs'prebuilt-object@cptIt,
* McsEngl.ljs'pre-built-object@cptIt,
* McsEngl.ljs'standard-object@cptIt,

_DESCRIPTION:
An object created by the language.

_SPECIFIC:
ECMAScript defines a collection of built-in objects that round out the definition of ECMAScript entities. These built-in objects include
- the global#ql:js'object.global# object,
- the Object#ql:js'object.object# object,
- the Function#ql:js'function# object,
- the Array#ql:js'object.array# object,
- the String#ql:js'object.string# object,
- the Boolean#ql:js'object.boolean# object,
- the Number#ql:js'object.number# object,
- the Math#ql:js'object.math# object,
- the Date#ql:js'object.date# object,
- the RegExp#ql:js'object.regexp# object,
- the JSON#ql:js'object.json# object, and
- the Error#ql:js'object.error# objects Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError and URIError.
[http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf]
===
JavaScript provides intrinsic (or "built-in") objects. They are the Array, Boolean, Date, Error, Function, Global, JSON, Math, Number, Object, RegExp, and String objects. The intrinsic objects have associated methods, functions, properties, and constants that are described in detail in the language reference.
[http://msdn.microsoft.com/en-us/library/4zx5dkc9(v=vs.94).aspx]

relation-to-custom-objects

_DESCRIPTION:
The only difference between the built in objects and those that you define for yourself is that any methods that you define must be coded in JavaScript while those methods that are predefined with the JavaScript built in objects will have their processing hard coded into the browser and will therefore be able to be run directly rather than having to be interpreted into computer executable code the way JavaScript code is. For that reason the built in methods will always run at least as fast and usually much faster than methods that you create in JavaScript.
[http://javascript.about.com/od/objectorientedjavascript/a/oop5.htm]

ljso.BUILTIN.NO

name::
* McsEngl.ljso.BUILTIN.NO@cptIt,
* McsEngl.ljsobt.custom@cptIt,
* McsEngl.ljs'user-defined-object@cptIt,

_DESCRIPTION:
An object created by a programmer.

_CODE.LJS:
//create the custom object "circle"
function circle(){
}
var smallcircle=new circle()

_MEMBER:
> var oObject = new Object()
undefined
> getMemberInherited(oObject).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames(oObject).sort()
[]

ljso.console

name::
* McsEngl.ljso.console@cptIt,
* McsEngl.ljbconsole@cptIt,
* McsEngl.ljs'console@cptIt,
* McsEngl.ljs'console-object@cptIt,

_GENERIC:
> typeof console
"object"

_DESCRIPTION:
The console object provides access to the browser's debugging console. The specifics of how it works vary from browser to browser, but there is a de facto set of features that are typically provided.
[https://developer.mozilla.org/en-US/docs/Web/API/console]
===
Regarding alerts, you can't use alert in extensions. You should rather use console.log("message here") and see the result in the javascript console. Right click browser action-> inspect popup if your code runs in a browser action.. If running on the background page, go to chrome://extensions, enable developer mode, and click on the background page link to inspect it.

ljbconsole'member

name::
* McsEngl.ljbconsole'member@cptIt,

_SPECIFIC:
// {2016-06-21 Chrome.51}
> Object.getOwnPropertyNames(console).sort()
[]
> Object.getOwnPropertyNames(console.__proto__).sort()
["constructor", "memory"]
> Object.getOwnPropertyNames(console.__proto__.__proto__).sort()
["assert", "clear", "constructor", "count", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "markTimeline", "profile", "profileEnd", "table", "time", "timeEnd", "timeStamp", "timeline", "timelineEnd", "trace", "warn"]
> Object.getOwnPropertyNames(console.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> getMemberAll(console).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "_commandLineAPI", "assert", "clear", "constructor", "count", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "hasOwnProperty", "info", "isPrototypeOf", "log", "markTimeline", "memory", "profile", "profileEnd", "propertyIsEnumerable", "table", "time", "timeEnd", "timeStamp", "toLocaleString", "toString", "trace", "valueOf", "warn"]
===
> Object.getOwnPropertyNames(console).sort()
["_commandLineAPI", "memory"]
> Object.getOwnPropertyNames(console.__proto__).sort()
["assert", "clear", "constructor", "count", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "markTimeline", "profile", "profileEnd", "table", "time", "timeEnd", "timeStamp", "trace", "warn"]

ljbconsole.log

name::
* McsEngl.ljbconsole.log@cptIt,

_DESCRIPTION:
In the above example I typed "console.log('Hello World')" into the shell and hit enter. Node will then execute that code and we can see our logged message. It also prints "undefined" because it displays the return value of each command and console.log doesn't return anything.
[http://blog.modulus.io/absolute-beginners-guide-to-nodejs]

ljbconsole.table

name::
* McsEngl.ljbconsole.table@cptIt,

_DESCRIPTION:
Outputs the-members of an-object in table format.
The-table can-be-sorted by any column.
[https://www.youtube.com/watch?v=jBniPznAhD8]

ljso.EXTENSIBLE

name::
* McsEngl.ljso.EXTENSIBLE@cptIt,
* McsEngl.ljs'extensible-object@cptIt,

ljso.GLOBAL

name::
* McsEngl.ljso.GLOBAL@cptIt,
* McsEngl.ljs'Global-object@cptIt,

_GENERIC:
* js-prebuilt-object#ql:js'object.prebuilt#

_DESCRIPTION:
Global object is the object which is created before entering any execution context; this object exists in the single copy, its properties are accessible from any place of the program, the life cycle of the global object ends with program end.
At creation the global object is initialized with such properties as Math, String, Date, parseInt etc., and also by additional objects among which can be the reference to the global object itself — for example, in BOM, window property of the global object refers to global object (however, not in all implementations):
global = {
Math: <...>,
String: <...>
...
...
window: global
};
[http://dmitrysoshnikov.com/ecmascript/chapter-2-variable-object/]
===
var a=0; ...creates a variable on the variable object for the global execution context, which is the global object, which on browsers is aliased as window (and is a DOM window object rather than just a generic object as it would be on non-browser implementations). The symbol window is, itself, actually a property of the global (window) object that it uses to point to itself.
[http://stackoverflow.com/a/4862268]
===
The Global Object is the keeper of all of the functions and variables which were not defined inside of other functions and objects. Surprisingly, the Global Object does not have an explicit name in the language. Sometimes the this variable points at it, but often not. In the web browsers, window and self are members of the Global Object which point to the Global Object, thus giving an indirect way of addressing it.

If a variable is accessed, but is not found in the current scope, it is looked for in the Global Object. If it is not found there, an error will result.

The ECMAScript specification does not talk about the possibility of multiple Global Objects, or contexts, but browsers support this. Each window has its own Global Object.
[http://javascript.crockford.com/survey.html]
===
Global object is the object which is created before entering any execution context; this object exists in the single copy, its properties are accessible from any place of the program, the life cycle of the global object ends with program end.
[http://dmitrysoshnikov.com/ecmascript/chapter-2-variable-object/#variable-object-in-global-context]
===
Any variables used in a function which are not explicitly defined as var are assumed to belong to an outer scope, possibly to the Global Object.
[http://javascript.crockford.com/survey.html]
===
the global object (which is the window object in web browsers).
[http://learn.jquery.com/javascript-101/this-keyword/]

_CODE:
> var va = 'a'
undefined
> va
"a"
> this.va
"a"
> window.va
"a"

_ADDRESS.WPG:
* http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec15.1,
* http://www.coursesweb.net/javascript/global-object,
* http://jonathanfine.wordpress.com/2009/07/17/explicit-use-of-javascripts-global-object//

ljb'window-object#ql:ljbmwo-cpt#

name::
* McsEngl.ljb'window-object@cptIt,

ljso.HOST (nativeNo)

_CREATED: {2014-02-15}

name::
* McsEngl.ljso.HOST (nativeNo)@cptIt,
* McsEngl.ljs'host-object@cptIt,
* McsEngl.ljs'non-native-object@cptIt,

_DESCRIPTION:
4.3.8 host object
object supplied by the host environment to complete the execution environment of ECMAScript
NOTE Any object that is not native is a host object.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.8]

ljso.HOST.NO (native)

_CREATED: {2014-02-15}

name::
* McsEngl.ljso.HOST.NO (native)@cptIt,
* McsEngl.ljs'hostNo-object@cptIt,
* McsEngl.ljs'native-object@cptIt,

_DESCRIPTION:
NOTE Any object that is not native is a host object.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.8]
===
4.3.6 native object
object in an ECMAScript implementation whose semantics are fully defined by this specification rather than by the host environment
NOTE Standard native objects are defined in this specification. Some native objects are built-in; others may be constructed during the course of execution of an ECMAScript program.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.6]

ljso.INDIVIDUAL

_CREATED: {2013-11-24}

name::
* McsEngl.ljso.INDIVIDUAL@cptIt,
* McsEngl.ljsobt.atomic@cptIt,

_DESCRIPTION:
Individual-object is an object with NO-SPECIFICS, with no other object to have its characteristics. With the name 'instance' js names the objects created with the 'new' operator from a function.
[hmnSngo.2013-11-24]

ljso.INDIVIDUAL.NO

_CREATED: {2013-11-24}

name::
* McsEngl.ljso.INDIVIDUAL.NO@cptIt,
* McsEngl.ljsobt.atomicNo@cptIt,

_DESCRIPTION:
Non-individual-object is an object with SPECIFICS, with other object that have its characteristics.
[hmnSngo.2013-11-24]

ljso.individualNo.CLASS#ql:ljs'class#

name::
* McsEngl.ljso.individualNo.CLASS@cptIt,

ljso.individualNo.CONSTRUCTOR-FUNCTION#ql:js'function.constructor#

name::
* McsEngl.ljso.individualNo.CONSTRUCTOR-FUNCTION@cptIt,

ljso.INHERITED-FROM

name::
* McsEngl.ljso.INHERITED-FROM@cptIt,
* McsEngl.ljsobt.specific@cptIt,

_DESCRIPTION:
A specific-object can be an individual or a generic one.
[hmnSngo.2013-11-24]
===
var person2 = Object.create(person);
var person3 = Object.create(person);

alert(person2.name); //"Nicholas"
alert(person3.name); //"Nicholas"

person.name = "Adam";

alert(person2.name); //"Adam"
alert(person3.name); //"Adam"
This example uses the Object.create() method from ECMAScript 5 to create two objects, person2 and person3, that inherit from person. The prototype for both person2 and person3 is person, and so name is actually a prototype property that is accessible through person2 and person3. This is why displaying the values of name on both objects results in the same value: they are both sharing the prototype property name. That means when person.name is changed directly, the change is accessible from the instances.
[http://www.nczonline.net/blog/2010/07/27/determining-if-an-object-property-exists/]

_CODE.LJS:
> var o={p1:1,p2:2}
undefined
> var o1 =Object.create(o)
undefined
> var o2 =Object.create(o)
undefined
> Object.getOwnPropertyNames(o)
["p1", "p2"]
> Object.getOwnPropertyNames(o1)
[]
> Object.getOwnPropertyNames(o2)
[]
> Object.getOwnPropertyNames(o2.__proto__)
["p1", "p2"]
> Object.getOwnPropertyNames(o1.__proto__)
["p1", "p2"]

ljso.FIRST-CLASS

name::
* McsEngl.ljso.FIRST-CLASS@cptIt,

_DESCRIPTION:
In JavaScript, functions are first-class objects, because they can have properties and methods just like any other object.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions]

ljso.FROM-CONSTRUCTOR-function

name::
* McsEngl.ljso.FROM-CONSTRUCTOR-function@cptIt,
* McsEngl.ljso.constructible@cptIt, [https://developer.mozilla.org/el/docs/Web/JavaScript/Reference/Classes#Sub_classing_with_extends]
* McsEngl.ljsconstructor-object@cptIt,
* McsEngl.ljsinstance-object@cptIt,
* McsEngl.ljs'constructor-object@cptIt,
* McsEngl.ljso.constructor@cptIt,
* McsEngl.ljsobt.constructor@cptIt,
* McsEngl.ljsobt.instance@cptIt,
* McsEngl.ljsobt.instance.CONSTRUCTOR-OBJECT@cptIt,
* McsEngl.ljs'instance-object@cptIt,
* McsEngl.ljs'oconstructor@cptIt,

_DESCRIPTION:
If you want to create multiple instances of similar objects, you should use plain old constructor functions (remember to put shared properties in the prototype!).
[http://stackoverflow.com/a/623624]
===
'Instance' here is NOT the same with 'instance-concept' (= no specifics). Instance here means can NOT create other objects.
A literal-object can not create another one with 'new' operator. A literal can become the 'prototype' of another and then it is becoming a 'generic-concept'.
[hmnSngo.2013-11-15]
===
An instance object is what is returned when instantiating a JavaScript constructor function, using the JavaScript “new” keyword.
...
Both Object Literals and Instance Objects have their place and purpose in JavaScript. The power of Object Literals is in their lightweight syntax, ease of use, and facility with which theh alow you to create name-spaced code. The power of Instance Objects is that becase they are derived from a function, they provide private scope when they are created, and expressions cab be executed on instantiation.
[http://blog.kevinchisholm.com/javascript/difference-between-object-literal-and-instance-object/]
===
The parentheses aren't required when the constructor doesn't require arguments,
[http://www.java2s.com/Tutorial/JavaScript/0500__Object-Oriented/DeclarationandInstantiation.htm]

_SPECIFIC:
* created with "new"
* literal: var o1={};
* by assignment: var o2=o1;

_CODE.LJS:
> var oCar = {}
undefined
> var oCarOperl = {}
undefined
> oCarOperl.__proto__= oCar
Object {}
> oCarOperl instanceof oCar
TypeError: Expecting a function in instanceof check, but got#<Object>

===
* //First, create the custom object "circle"
function circle(){
}
var smallcircle=new circle()
[http://www.javascriptkit.com/javatutors/proto.shtml]

===
var circle= function(){
this.csPpi= 3.14;
this.csPradius= 2;
this.csMalert= function(){alert ("circle")}
};

var c2= new circle();
c2.csPradius; //=>2

var c3= new circle();
c3.csPradius; //=>2
[hmnSngo.2012-02-29]

===
var o = {p1:"prop1", p2:"prop2"};

var o2 = o;
o2.p2; //=> "prop2"
[hmnSngo.2012-02-29]

_SPECIFIC:
* constructor-object#linkL#
* literal-object#ql:js'object.literal#

_DESCRIPTION:
It is an object created with a construction-function and the 'new' operator.
[hmnSngo.2013-10-28]

_CODE:
> function Mammal(){}
undefined
> var mammal = new Mammal()
undefined

_PROPERTY:
> Object.getOwnPropertyNames(tinymce.PluginManager.__proto__).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]
> Object.getOwnPropertyNames(tinymce.AddOnManager.prototype).sort()
["add", "addComponents", "createUrl", "dependencies", "get", "load", "requireLangPack"]

ljsoc'property

name::
* McsEngl.ljsoc'property@cptIt,

_DESCRIPTION:
Inherites the properties of the 'constructor's-prototype', they call 'public-method' the functions.
AND
the properties of the constructor defined with this.name, they call privilige-methods and public-variables, they call 'own'.
[hmnSngo.2013-11-13]
===
> Object.getOwnPropertyNames(myInstance).sort()
["privilegedMethod", "publicVariable"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(myInstance)).sort()
["constructor", "protovar", "publicMethod"]

_CODE.LJS:
> function f(){}
undefined
> Object.getOwnPropertyNames(new f()).sort()
[]
> Object.getOwnPropertyNames(new f().__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames(f.prototype).sort()
["constructor"]
> Object.getOwnPropertyNames(new f().__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> function f(){this.s="string"}
undefined
> Object.getOwnPropertyNames(f)
["length", "name", "arguments", "caller", "prototype"]
> var o=new f()
undefined
> Object.getOwnPropertyNames(o)
["s"]

ljsoc'prototype-of-constructor

name::
* McsEngl.ljsoc'prototype-of-constructor@cptIt,

_CODE:
> function Mammal(){}
undefined
> var mammal = new Mammal()
undefined
> mammal.__proto__ === Mammal.prototype
true
> Object.getOwnPropertyNames(Object.getPrototypeOf(mammal)).sort()
["breath", "constructor"]
> Object.getOwnPropertyNames(Mammal.prototype).sort()
["breath", "constructor"]
> Object.getOwnPropertyNames(mammal.__proto__).sort()
["breath", "constructor"]

SPECIFIC

_CODE.LJS:
> function f(){}
undefined
> var o = new f()
undefined
> o instanceof f
true
===
function blueprint(var1, var2){
this.property1 = var1;
this.property2 = var2;
}

var object1 = new blueprint(value1,value2);

ljsoc.ANONYMOUS

name::
* McsEngl.ljsoc.ANONYMOUS@cptIt,

_CODE.LJS:
var obj = new (function() {
this.prop = function() {
alert('This just ran.');
}

// init code goes here:
this.prop();
});
[http://stackoverflow.com/a/623624]

ljsoc.INPUT

name::
* McsEngl.ljsoc.INPUT@cptIt,

_CODE.LJS:
//IF we want the new object to have specific INPUT information,
//We use a constructor.
function fObt(sInput) {
this.sProp = sInput;
}
var obt = new fObt("input string"); //has sProp with value "input string".

ljsoc.RETURN

name::
* McsEngl.ljsoc.RETURN@cptIt,

_CODE.LJS:
function fObt() {
return {
s = "string",
n = 3
}
}
var obt = new fObt(); //has s, n members.

ljsoc.PROTOTYPE

name::
* McsEngl.ljsoc.PROTOTYPE@cptIt,

_CODE.LJS:
function fObt() {
}
fObt.prototype = {
s = "string",
n = 3
}
var obt = new fObt(); //has s, n members.

ljsoc.THIS

name::
* McsEngl.ljsoc.THIS@cptIt,

_CODE.LJS:
> function f(){this.n=2}; var oF=new f();
undefined
> Object.getOwnPropertyNames(oF).sort()
["n"]
> Object.getOwnPropertyNames(oF.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames(oF.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
function fObt() {
this.sProp = "string";
}
var obt = new fObt(); //has sProp.

ljso.FROM-CONSTRUCTOR.NO

name::
* McsEngl.ljso.FROM-CONSTRUCTOR.NO@cptIt,

_SPECIFIC:
* literal##
* Object.create##

An-object which uses its members:
var oInterdep = (function() {
 var o = {};
 function f(){}
 return {
   o: o,
   f: f,
 };
})();
===
var oInterdep = (function() {
 var oInterdep = {
   o: {},
   f: function(){oInterdep.o},
 }:
 return oInterdep;
})();

ljso.from-constructorNo.LITERAL

name::
* McsEngl.ljso.from-constructorNo.LITERAL@cptIt,
* McsEngl.ljso.plain@cptIt,
* McsEngl.ljso.POJO@cptIt,

* McsEngl.ljso.literal@cptIt,
* McsEngl.ljs'literal-notation-of-object@cptIt,
* McsEngl.ljs'literal-object@cptIt,
* McsEngl.ljsobt.literal@cptIt,
* McsEngl.ljsobject-literal@cptIt,
* McsEngl.ljsobt'literal-notation@cptIt,
* McsEngl.ljs'oliteral@cptIt, {2013-10-30}
* McsEngl.plain-old-javascript-object@cptIt,

_DESCRIPTION:
A literal-object is an object created with the {p1: 'property1-value', p2:'property2-value'} notation.
[hmnSngo.2014-04-21]

_GENERIC:
* Object.prototype#ql:object.prototype@cptIt#

_CODE.LJS:
> var oL = {n:2};
undefined
> Object.getOwnPropertyNames(oL).sort()
["n"]
> Object.getOwnPropertyNames(oL.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===

> var o2={n:2}
undefined
> o2
Object {n: 2}
> o2 instanceof Object
true
> o2.__proto__ === Object.prototype
true
===
var myObject = {
sayHello : function() {
console.log('hello');
},
myName : 'Rebecca'
};

myObject.sayHello(); // logs 'hello'
console.log(myObject.myName); // logs 'Rebecca'
===
// equivalent to
// var object = new Object();
// object.a = 1;
// object.b = 2;
// object.c = 3;
var object = {a: 1, b: 2, c: 3};
[http://dmitrysoshnikov.com/ecmascript/chapter-7-2-oop-ecmascript-implementation/]
===
10.2. Best Practices: Avoid Anonymous Functions

Anonymous functions are often used when binding event handlers.
However, anonymous functions are difficult to debug, maintain, test, or reuse.
It’s better to use object literals:

//BAD
$(document).ready(function() {
$('.status .delete').click(function(e) {
//Do something
});

$('.status').dblclick(function(e) {
//Do the same thing
});
});

//GOOD
var bindingObject = {
onReady : function() {
$('.status .delete').click(bindingObject.deleteTweet);
$('.status').dblclick(bindingObject.deleteTweet);
},
deleteTweet : function(e) {
//Do something
}
};

$(document).ready(bindingObject.onReady);
[http://marakana.com/bookshelf/jquery_tutorial/advanced_concepts.html]

===
myObject = {
numA:5,
numB:8,
add:function () {
answer = this.numA + this.numB;
return answer;
}
};
===
Everything in JavaScript is an object, though some are more objective (haha). The easiest way to create an object is the object literal:
var x = {};
var y = {
name: "Pete",
age: 15
};
[http://docs.jquery.com/Types]

jsol'creating

name::
* McsEngl.jsol'creating@cptIt,

INSTANCE-OBJECT is an object created from a function and has the properties of function.prototype.
> var o ={p1:1}
undefined
> var o2=Object.create(o)
undefined
> o2
Object {p1: 1}
> o2 instanceof o
TypeError: Expecting a function in instanceof check, but got#<Object>
> o2 instanceof Object
true
[hmnSngo.2014-06-10]

Building objects

name::
* McsEngl.Building objects@cptIt,

The first approach is to create an empty object and progressively add its properties and methods.

Code Sample: ObjectOrientedJS/Demos/building-objects.html

---- Code Omitted ----

var GUITAR = { };
GUITAR.color = 'black';
GUITAR.strings = ['E', 'A', 'D', 'G', 'B', 'e'];
GUITAR.tune = function (newStrings) {
this.strings = newStrings;
};
GUITAR.play = function (chord) {
alert('Playing chord: ' + chord);
};
GUITAR.print = function (price, currency) {
alert('This guitar is ' +
this.color +
', it has ' + this.strings.length + ' strings' +
' and it costs ' + price + currency);
};
//using the object
GUITAR.play('Dm7');
GUITAR.tune( ['D', 'A', 'D', 'G', 'B', 'e' ] );
debugWrite('this guitar is: ' + GUITAR.color);
GUITAR.print(850, 'USD');

---- Code Omitted ----

The above methodology isn't too hard to understand but it is certainly more work than we are used to in more popular programming languages. What we did here is quite simple. We just created the object and appended each property and method as desired.
[http://www.learn-javascript-tutorial.com/ObjectOrientedJS.cfm#simple-obj]

Declaring objects

name::
* McsEngl.Declaring objects@cptIt,

JavaScript also has a literal notation for objects. The previous example could have been rewritten in literal notation as follows.

Code Sample: ObjectOrientedJS/Demos/declaring-objects.html

---- Code Omitted ----

var GUITAR = {
color: 'black',

strings: ['E', 'A', 'D', 'G', 'B', 'e'],

tune: function (newStrings) {
this.strings = newStrings;
},

play: function (chord) {
alert('Playing chord: ' + chord);
},
print: function (price, currency) {
alert('This guitar is ' +
this.color +
', it has ' + this.strings.length + ' strings' +
' and it costs ' + price + currency);
}
};

//using the object
GUITAR.play('Dm7');
GUITAR.tune( ['D', 'A', 'D', 'G', 'B', 'e' ] );
debugWrite('this guitar is: ' + GUITAR.color);
GUITAR.print(850, 'USD');

---- Code Omitted ----

The syntax is easy to understand. It is a comma-delimited list of name: value pairs. Note that the method declaration is easy to be confused with a regular function declaration. Just remember that a function can be used as a value and that's what is happening here. You can also think of the methods as properties that contain a function as their values, if that helps you understand the notation.
[http://www.learn-javascript-tutorial.com/ObjectOrientedJS.cfm#simple-obj]

jsol'property

name::
* McsEngl.jsol'property@cptIt,

_CODE.LJS:
> var o={}
undefined
> Object.getOwnPropertyNames(o).sort()
[]
> Object.getOwnPropertyNames(Object.getPrototypeOf(o)).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

jsol'property'name

name::
* McsEngl.jsol'property'name@cptIt,
* McsEngl.ljs'oliteral'key@cptIt,
* McsEngl.ljs'oliteral'name@cptIt,

_DESCRIPTION:
Names inside the object may be either strings or identifiers that are followed by a colon.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript]

jsol'property'value

name::
* McsEngl.jsol'property'value@cptIt,

SPECIFIC

_SPECIFIC:
> var ol={}
undefined
> Object.getOwnPropertyNames(ol).sort()
[]
> Object.getOwnPropertyNames(Object.getPrototypeOf(ol)).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(Object.getPrototypeOf(ol))).sort()
TypeError: Object.getOwnPropertyNames called on non-object
> Object.getOwnPropertyNames(ol.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

jsol'property.constructor

name::
* McsEngl.jsol'property.constructor@cptIt,

_CODE.LJS:
> var oLrl = {p1: 1, p2:2}
undefined
> oLrl.constructor
function Object() { [native code] }
> Object.getPrototypeOf(oLrl)
Object {}
> oLrl.prototype
undefined
> Object.getOwnPropertyNames(oLrl.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

jsol'property.proto

name::
* McsEngl.jsol'property.proto@cptIt,
* McsEngl.ljs'oliteral'prototype@cptIt,

_CODE.LJS:
> var oLrl = {p1: 1, p2:2}
undefined
> Object.getOwnPropertyNames(oLrl).sort()
["p1", "p2"]
> Object.getOwnPropertyNames(oLrl.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getPrototypeOf(oLrl)
Object {}
> Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames({}.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

ljso.from-constructorNo.Object.create#ql:jscreate-of-object#

name::
* McsEngl.ljso.from-constructorNo.Object.create@cptIt,

ljso.JSON#ql:js'JSON-object#

name::
* McsEngl.ljso.JSON@cptIt,

ljso.SINGLETON

name::
* McsEngl.ljso.SINGLETON@cptIt,
* McsEngl.ljsobt.singleton@cptIt,
* McsEngl.ljs'singleton-object@cptIt,

_DESCRIPTION:
In OOP the singleton is basically a class which restricts it's instantiation to one object. This is useful for when only a single object is needed to maintain a certain functionality or global state available throughout a complex system.

In JavaScript the singleton serves first and foremost as a namespace provider to isolate implementation code from the global namespace and providing a single point of access for functionalities.

The JavaScript Singleton can take several different forms each providing different possibilities and limitations. Below are examples of the two most commonly used singleton structures.

In it's simplest form the JavaScript is simply an object literal grouping together related methods and properties:

var mySingleton = {
 property1:"bleh",
 method1:function(){
   alert('mop');
 }
}
[http://www.hardcode.nl/subcategory_1/article_526-singleton-examples-in-javascript.htm]
===
Singleton

The singleton pattern is what you use when you want to ensure that only one instance of an object is ever created. In classical object-oriented programming languages, the concepts behind creating a singleton was a bit tricky to wrap your mind around because it involved a class that has both static and non-static properties and methods. I’m talking about JavaScript here though, so with JavaScript being a dynamic language without true classes, the JavaScript version of a singleton is excessively simple.

Why do you need the singleton?
Before I get into implementation details, I should discuss why the singleton pattern is useful for your applications. The ability to ensure you have only one instance of an object can actually come in quite handy. In server-side languages, you might use a singleton for handling a connection to a database because it's just a waste of resources to create more than one database connection for each request. Similarly, in front-end JavaScript, you might want to have an object that handles all AJAX requests be a singleton. A simple rule could be: if it has the exact same functionality every time you create a new instance, then make it a singleton.

This isn't the only reason to make a singleton, though. At least in JavaScript, the singleton allows you to namespace objects and functions to keep them organized and keep them from cluttering the global namespace, which as you probably know is a horrible idea, especially if you use third party code. Using the singleton for name-spacing is also referred to as the module design pattern.

Show me the singleton
To create a singleton, all you really need to do is create an object literal.

var Singleton = {
prop: 1,
another_prop: 'value',
method: function() {…},
another_method: function() {…}
};
You can also create singletons that have private properties and methods, but it's a little bit trickier as it involves using a closure and a self-invoking anonymous function. Inside a function, some local functions and/or variables are declared. You then create and return an object literal, which has some methods that refererence the variables and functions that you declared within the larger function's scope. That outer function is immediatly executed by placing () immediately after the function declaration and the resulting object literal is assigned to a variable. If this is confusing, then take a look over the following code and then I'll explain it some more afterward.

var Singleton = (function() {
var private_property = 0,
private_method = function () {
console.log('This is private');
}

return {
prop: 1,
another_prop: 'value',
method: function() {
private_method();
return private_property;
},
another_method: function() {…}
}
}());

The key is that when a variable is declared with var in front of it inside a function, that variable is only accessible inside the function and by functions that were declared within that function (the functions in the object literal for example). The return statement gives us back the object literal, which gets assigned to Singleton after the outer function executes itself.
[http://www.adobe.com/devnet/html5/articles/javascript-design-patterns-pt1-singleton-composite-facade.html]

ljso.URL

name::
* McsEngl.ljso.URL@cptIt,
* McsEngl.ljsURL-constructor@cptIt,
* McsEngl.ljsoURL@cptIt,
* McsEngl.ljsop.URL@cptIt,

jsoURL.MEMBER.CHROME:
//2015-11-21
> var o = new URL("http://synagonism.net")
undefined
> Object.getOwnPropertyNames(o).sort()
[]
===
> var o = new URL("http://synagonism.net")
undefined
> Object.getOwnPropertyNames(o).sort()
["hash", "host", "hostname", "href", "origin", "password", "pathname", "port", "protocol", "search", "username"]
> Object.getOwnPropertyNames(o.__proto__).sort()
["constructor", "toString"]

jsURL.prototype > Object.prototype

name::
* McsEngl.jsURL.prototype > Object.prototype@cptIt,

jsURL.prototype.CHROME:
> Object.getOwnPropertyNames(URL.prototype).sort()
["jsconstructor", "ljshash", "ljshost", "ljshostname", "ljshref", "ljsorigin", "ljspassword", "ljspathname", "ljsport", "ljsprotocol", "ljssearch", "ljstoString", "ljsusername"]

jsURL.prototype.FF:
> Object.getOwnPropertyNames(URL.prototype).sort()
["jsconstructor", "ljshash", "ljshost", "ljshostname", "ljshref", "ljsorigin", "ljspassword", "ljspathname", "ljsport", "ljsprotocol", "ljssearch", "ljssearchParams", "ljstoString", "ljsusername"]

jshash:
> var o = new URL("http://synagonism.net#idMeta")
undefined
> o.hash
"#idMeta"

jshost:
> o.host
"synagonism.net"

jshostname:
> o.hostname
"synagonism.net"

jshref:
> o.href
"http://synagonism.net/#idMeta"

jsorigin:
> o.origin
"http://synagonism.net"

jspathname:
> o.pathname
"/"

jsprotocol:
> o.protocol
"http:"

ljso.XML-DOM

name::
* McsEngl.ljso.XML-DOM@cptIt,
* McsEngl.ljs'XML-DOM@cptIt,

_DEFINITION:
Most browsers have a built-in XML parser to read and manipulate XML.
The parser converts XML into a JavaScript accessible object (the XML DOM).
[http://www.w3schools.com/dom/dom_parser.asp]
===
Programming Interface

The DOM models XML as a set of node objects. The nodes can be accessed with JavaScript or other programming languages. In this tutorial we use JavaScript.

The programming interface to the DOM is defined by a set standard properties and methods.

Properties are often referred to as something that is (i.e. nodename is "book").

Methods are often referred to as something that is done (i.e. delete "book").
[http://www.w3schools.com/dom/dom_methods.asp]

ljb'xmldom'PROPERTY

name::
* McsEngl.ljb'xmldom'PROPERTY@cptIt,

_DEFINITION:
Properties are often referred to as something that is (i.e. nodename is "book").
[http://www.w3schools.com/dom/dom_methods.asp]

_SPECIFIC:
These are some typical DOM properties:
- x.nodeName - the name of x
- x.nodeValue - the value of x
- x.parentNode - the parent node of x
- x.childNodes - the child nodes of x
- x.attributes - the attributes nodes of x
Note: In the list above, x is a node object.
[http://www.w3schools.com/dom/dom_methods.asp]

ljb'xmldom'METHOD

name::
* McsEngl.ljb'xmldom'METHOD@cptIt,

_DEFINITION:
Methods are often referred to as something that is done (i.e. delete "book").
[http://www.w3schools.com/dom/dom_methods.asp]

_SPECIFIC:
- x.getElementsByTagName(name) - get all elements with a specified tag name
- x.appendChild(node) - insert a child node to x
- x.removeChild(node) - remove a child node from x
Note: In the list above, x is a node object.
[http://www.w3schools.com/dom/dom_methods.asp]

ljb'XML-Parser

name::
* McsEngl.ljb'XML-Parser@cptIt,
* McsEngl.xml-parser-in-javascript@cptIt,

_DESCRIPTION:
All modern browsers have a built-in XML parser.
An XML parser converts an XML document into an XML DOM object - which can then be manipulated with a JavaScript.
[http://www.w3schools.com/xml/xml_parser.asp]

ljso.MOST-GENERIC

name::
* McsEngl.ljso.MOST-GENERIC@cptIt,

ljso.MOST-WHOLE

name::
* McsEngl.ljso.MOST-WHOLE@cptIt,

The global object is determined by the execution environment.
It is the window object in a web browser and the process object in a NodeJS script.
[http://rainsoft.io/gentle-explanation-of-this-in-javascript/]

ljsalgo'sut.STRING (s)

name::
* McsEngl.ljsalgo'sut.STRING (s)@cptIt,
* McsEngl.ljss@cptIt,

* McsEngl.ljss@cptIt, {2014-06-23}
* McsEngl.ljss@cptIt,
* McsEngl.ljsstg@cptIt, {2014-03-24}
* McsEngl.ljsstr@cptIt,
* McsEngl.ljsstring@cptIt, {2014-02-21}
* McsEngl.ljs'archetype-string@cptIt,
* McsEngl.ljs'string-archetype@cptIt,
* McsEngl.symbol.JavaScript@cptIt,
* McsEngl.ljs'codeS.unitM.STRING@cptIt,
* McsEngl.ljsstr@cptIt, {2014-03-09}

_DESCRIPTION:
String-archetype is a SEQUENCE OF SYMBOLS that js manipulates. String-archetype could be TEXT with meaning for a human, but has no meaning for the machine.
[hmnSngo.2014-02-14]

_GENERIC:
* js-named-semantic-unit#ql:js'named_semantic_unit#

_GENERIC:
> Object.getOwnPropertyNames("string").sort()
TypeError: Object.getOwnPropertyNames called on non-object
> typeof "string"
"string"

ljss'code

name::
* McsEngl.ljss'code@cptIt,
* McsEngl.ljs'code.string@cptIt,
* McsEngl.ljsstr-value@cptIt,
* McsEngl.ljs'value.STRING@cptIt,
* McsEngl.ljs's@cptIt,

_CODE.LJS:
> var s=new String("a string")
undefined
> typeof s
"object"
> s
String {0: "a", 1: " ", 2: "s", 3: "t", 4: "r", 5: "i", 6: "n", 7: "g", length: 8}
> s == "a string"
true
> s === "a string"
false

_CODE.LJS:
"string"
'string'
'\u00BB'
'This is a string.'
"Isn't this a string? Yes!"
'A'        // The character A
""        // An empty string
===
'\u00BB'      // »
'\xbb'      // "»"
'\251'      // "©"
===
\b  Backspace
\f  Form feed
\n  New line
\r  Carriage return
\t  Tab
\v  Vertical tab
\'  Apostrophe or single quote
\"  Double quote
\\  Backslash character

ljss'quote

name::
* McsEngl.ljss'quote@cptIt,
* McsEngl.ljss'double-vs-single-quotes@cptIt,
* McsEngl.ljss'single-vs-double-quotes@cptIt,

_DESCRIPTION:
An important point to note with all code conventions - Define it once and stick with it. IOW, don't use double quotes someplace and single quotes elsewhere. – Cerebrus May 2 '09 at 8:03
[http://stackoverflow.com/a/242833]
===
If you're dealing with JSON, it should be noted that strictly speaking, JSON strings must be double quoted. Sure, many libraries support single quotes as well, but I had great problems in one of my projects before realizing that single quoting a string is in fact not according to JSON standards.
[http://stackoverflow.com/a/4612914]
===
Double quotes will wear your shift key out faster :)
[http://stackoverflow.com/a/814387]
===
The only difference is demonstrated in the following:
'A string that\'s single quoted'
"a string that's double quoted"
So, it's only down to how much quote escaping you want to do. Obviously the same applies to double quotes in double quoted strings.
[http://stackoverflow.com/a/244842]

ljss'error

name::
* McsEngl.ljss'error@cptIt,

_CODE.LJS:
"Hello
World"
//Error: Line 2: Unexpected token ILLEGAL

ljss'member

name::
* McsEngl.ljss'member@cptIt,
* McsEngl.ljss.member@cptIt,

_PROPERTY:
> Object.getOwnPropertyNames("string").sort()
TypeError: Object.getOwnPropertyNames called on non-object
> Object.getOwnPropertyNames("string".__proto__).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "concat", "constructor", "fixed", "fontcolor", "fontsize", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "replace", "search", "slice", "small", "split", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]
> Object.getOwnPropertyNames("string".__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames("string".__proto__.__proto__.__proto__).sort()
TypeError: Object.getOwnPropertyNames called on non-object
===
> Object.getOwnPropertyNames(new String).sort()
["length"]
> Object.getOwnPropertyNames("string".constructor.prototype).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "concat", "constructor", "fixed", "fontcolor", "fontsize", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "replace", "search", "slice", "small", "split", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]
> "string".__proto__ === "string".constructor.prototype
true
> typeof "str"
"string"

ljss'method

name::
* McsEngl.ljss'method@cptIt,

_SPECIFIC:
Built-in Methods
A string in JavaScript has some built-in methods to manipulate the string, though the result is always a new string - or something else, eg. split returns an array.

"hello".charAt(0) // "h"
"hello".toUpperCase() // "HELLO"
"Hello".toLowerCase() // "hello"
"hello".replace(/e|o/g, "x") // "hxllx"
"1,2,3".split(",") // ["1", "2", "3"]
[http://docs.jquery.com/Types]

ljss.anchor-function

name::
* McsEngl.ljss.anchor-function@cptIt,
* McsEngl.ljsanchor@cptIt,

_CODE.LJS:
var txt = "Chapter 10";
txt.anchor("chap10");
==>
<a name="chap10">Chapter 10</a>

ljss.charAt-function

name::
* McsEngl.ljss.charAt-function@cptIt,
* McsEngl.ljscharAt@cptIt,

_CODE.LJS:
* jscharAt,
> "aaa".charAt(0)
"a"
> "\naa".charAt(0)
"
"
> "\naa".charAt(0) === "\n"
true

ljss.charCodeAt(number)-function

name::
* McsEngl.ljss.charCodeAt(number)-function@cptIt,
* McsEngl.ljscharCodeAt@cptIt,

_CODE.LJS:
> 'if'.charCodeAt(0)
105#ql:symbol.105#
> if ('if'.charCodeAt(0) === 105) {console.log(true)} else {console.log(false)}
true
> "\naa".charCodeAt(0)
10

ljss.length number

name::
* McsEngl.ljss.length number@cptIt,
* McsEngl.ljslength@cptIt,

_CODE.LJS:
Length Property
All strings have a length property.
"Hello".length // 5
"".length // 0
[http://docs.jquery.com/Types]

ljss.match-function

name::
* McsEngl.ljss.match-function@cptIt,
* McsEngl.ljsmatch@cptIt,

_CODE.LJS:
* jsmatch,
> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".match(/[A-E]/gi)
["A", "B", "C", "D", "E", "a", "b", "c", "d", "e"]

ljss.replace-function

name::
* McsEngl.ljss.replace-function@cptIt,

_CODE.LJS:
* jsreplace,
> 'string'.replace(/i/, 'o')
"strong"
> 'str\nng'.replace(/\n/, 'o')
"strong"
> 'string'.replace('n', 'o')
"striog"
===
> 'stringH2'.replace(/(\w*)H\d/, '$1');
"string"
//replaces with what is in (parenthesis)
===
> 'xxABC'.replace(/[A-Z]/g, function(a) {return '-' + a;});
"xx-A-B-C"
===
> "John Smith".replace(/(\w+)\s(\w+)/, "$2, $1");
"Smith, John".
===
> 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, function(match, p1, p2, p3, offset, string) { return [p1, p2, p3].join(' - '); });
"abc - 12345 -#$*%"
===
// p1, p2, ... are (the-GROUPS) inside regexp
> 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, function(match, p1, p2, p3, offset, string) { return [match, p1, p2, p3].join(' - '); });
"abc12345#$*% - abc - 12345 -#$*%"
===
> 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, function(match, p1, p2, p3, offset, string) { return [match, p1, p2, p3, offset, string].join(' - '); });
"abc12345#$*% - abc - 12345 -#$*% - 0 - abc12345#$*%"
===
> 'borderTop'.replace(/[A-Z]/, function(match) { return '-' + match.toLowerCase(); });
"border-top"
===
> "stringƃ".replace(/&(#x|#)?([\w]+);/g, function (all, numeric, value) {console.log(all),console.log(numeric),console.log(value)})
ƃ
#x
183
"stringundefined"
===
> "string&".replace(/&(#x|#)?([\w]+);/g, function (all, numeric, value) {console.log(all),console.log(numeric),console.log(value)})
&
undefined
amp
"stringundefined"
===
> 'abc12345#$*%'.replace(/\d*/, 'x')
"xabc12345#$*%"
> 'abc12345#$*%'.replace(/\d+/, 'x')
"abcx#$*%"
> 'abc12345#$*%'.replace(/\d/g, 'x')
"abcxxxxx#$*%"
> 'abc12345#$*%'.replace(/\d/, 'x')
"abcx2345#$*%"

ljss.trim-function

name::
* McsEngl.ljss.trim-function@cptIt,

_CODE.LJS:
* jstrim,
> " xxx ".trim()
"xxx"

ljss.slice-function

name::
* McsEngl.ljss.slice-function@cptIt,

_CODE.LJS:
* jsslice,
> "string".slice(1)
"tring"
> "string".slice(2)
"ring"
> 'string'.slice(1, -1);
"trin"

ljss.split-function

name::
* McsEngl.ljss.split-function@cptIt,

_DESCRIPTION:
str.split([separator[, limit]])

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split,

_CODE.LJS:
* jssplit,
> 'tinymce/dom/utils'.split(/[.\/]/)
["tinymce", "dom", "utils"]
===
> 'tinymce/dom/utils'.split(/[\/]/)
["tinymce", "dom", "utils"]
===
> 'tinymce/dom/utils'.split(/\//)
["tinymce", "dom", "utils"]
===
> 'a,b, c,'.split(/[ ,]/)
["a", "b", "", "c", ""]
===
> 'a,b, c'.split(',')
["a", "b", " c"]
===
> 'tinymce/dom/utils'.split("/")
["tinymce", "dom", "utils"]
===
> 'br-tl'.split('')
["b", "r", "-", "t", "l"]
===
var carter = new String("I learn JavaScript.");
var arlene = carter.split(" ");
alert( arlene.join("\n") );
===>
 I
 learn
 JavaScript.
[http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/splitMethod.htm]

ljss.substring-function

name::
* McsEngl.ljss.substring-function@cptIt,
* McsEngl.ljssubstring@cptIt,
* McsEngl.ljssubstr@cptIt,
* McsEngl.ljssubstring@cptIt,

_CODE.LJS:
'bold'.substring(0,1)    "b"
'bold'.substring(1)      "old"
===
var x = 'abcde';
console.log(x.substring(2));    //cde
console.log(x.substring(-2));    //abcde
console.log(x.substring(2, 4));  //cd
console.log(x.substring(4, 2));  //cd
console.log(x.substring(2, -1));  //ab
console.log(x);      //abcde
console.log(x.substring(x.indexOf('c'))); //cde

ljss'String-function

name::
* McsEngl.ljss'String-function@cptIt,
* McsEngl.ljsf.String@cptIt,
* McsEngl.ljsfString@cptIt,
* McsEngl.ljsstg-constructor@cptIt,
* McsEngl.ljs'fstring@cptIt,

_GENERIC:
* js-prebuilt-object#ql:js'object.prebuilt#,
===
> typeof String
"function"
===
> String
function String() { [native code] }

_ADDRESS.WPG:
* http://www.w3schools.com/jsref/jsref_obj_string.asp,

_DESCRIPTION:
String is a sequence of zero or more Unicode characters. There is no separate character type. A character is represented as a string of length 1. Literal strings are quoted using the ' or " characters. The quote characters can be used interchangeably, but they have to match.
'This is a string.'
"Isn't this a string? Yes!"
'A' // The character A
"" // An empty string
Escapement is done with the \ character, like in Java. Strings are immutable. Strings have a length member which is used to determine the number of characters in the string.
var s = "Hello World!";
s.length == 12
[http://javascript.crockford.com/survey.html]
===
Technically there's no difference, it's only matter of style and convention.
Douglas Crockford recommends using single quotes for internal strings and double quotes for external (by external we mean those to be displayed to user of application, like messages or alerts).
I personally follow that.
[http://stackoverflow.com/questions/242813/when-to-use-double-or-single-quotes-in-javascript]

ljsfString'member

name::
* McsEngl.ljsfString'member@cptIt,

_SPECIFIC:
Object.getOwnPropertyNames(String).sort()
["arguments", "caller", "fromCharCode", "length", "name", "prototype"]

ljsfString.fromCharCode(number)-function

name::
* McsEngl.ljsfString.fromCharCode(number)-function@cptIt,

_CODE.LJS:
* jsfromCharCode,
> String.fromCharCode(77)
"M"
===
js'fromCharCode:
* jsfromCharCode,
> String.fromCharCode(88)
"X"
> String.fromCharCode(121)
"y"
> String.fromCharCode(120)
"x"

ljss'String.prototype > Object.prototype#ql:jsObject.prototype#

name::
* McsEngl.ljss'String.prototype > Object.prototype@cptIt,
* McsEngl.ljsString.prototype@cptIt,

jsString.prototype.CHROME:
//2015-12-21
> Object.getOwnPropertyNames(String.prototype)
["jsanchor", "ljsbig", "ljsblink", "ljsbold", "ljscharAt", "ljscharCodeAt", "ljscodePointAt", "ljsconcat", "ljsconstructor", "ljsendsWith", "ljsfixed", "ljsfontcolor", "ljsfontsize", "ljsincludes", "ljsindexOf", "ljsitalics", "ljslastIndexOf", "ljslength", "ljslink", "ljslocaleCompare", "ljsmatch", "ljsnormalize", "ljsrepeat", "ljsreplace", "ljssearch", "ljsslice", "ljssmall", "ljssplit", "ljsstartsWith", "ljsstrike", "ljssub", "ljssubstr", "ljssubstring", "ljssup", "ljstoLocaleLowerCase", "ljstoLocaleUpperCase", "ljstoLowerCase", "ljstoString", "ljstoUpperCase", "ljstrim", "ljstrimLeft", "ljstrimRight", "ljsvalueOf"]

ljss'type

name::
* McsEngl.ljss'type@cptIt,

_CODE.LJS:
>>> typeof "some string"; // "string"
[http://docs.jquery.com/Types]

SPECIFIC

* ljss.specific, jss.specific,

ljss.EMPTY

name::
* McsEngl.ljss.EMPTY@cptIt,

_CODE.LJS:
var emptyString = '';

if (!emptyString) {
console.log('empty strings are treated as false');
}
[https://www.dartlang.org/docs/synonyms/]

ljss.HEXADECIMAL

name::
* McsEngl.ljss.HEXADECIMAL@cptIt,
* McsEngl.symbol.js.hexadecimal@cptIt,

_CODE.LJS:
> '\xA9'
"©"
> '\u00A9'
"©"

ljss.LITERAL

name::
* McsEngl.ljss.LITERAL@cptIt,
* McsEngl.ljsstr-datatype@cptIt,
* McsEngl.ljsstr-literal@cptIt,
====== lagoGreek:
* McsElln.αλφαριθμητικό-δεδομένο@cptIt,
* McsElln.συμβολοσειρά@cptIt554,

_GENERIC:
* string-object#ql:js'object.string#

_ADDRESS.WPG:
* http://www.w3schools.com/jsref/jsref_obj_string.asp,

_DESCRIPTION:
String is a sequence of zero or more Unicode characters. There is no separate character type. A character is represented as a string of length 1. Literal strings are quoted using the ' or " characters. The quote characters can be used interchangeably, but they have to match.
'This is a string.'
"Isn't this a string? Yes!"
'A' // The character A
"" // An empty string
Escapement is done with the \ character, like in Java. Strings are immutable. Strings have a length member which is used to determine the number of characters in the string.
var s = "Hello World!";
s.length == 12
[http://javascript.crockford.com/survey.html]

_Type:
>>> typeof "string"
"string"
>>> typeof ""
"string"
>>> typeof(typeof(x))
"string"

_PROPERTY:
>> CHROME:
> typeof "string"
"string"
> typeof new String("sting")
"object"
> Object.getOwnPropertyNames("string").sort()
TypeError: Object.getOwnPropertyNames called on non-object
> Object.getOwnPropertyNames("string".__proto__).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "concat", "constructor", "fixed", "fontcolor", "fontsize", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "replace", "search", "slice", "small", "split", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]
> Object.getOwnPropertyNames("string".__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames(String.prototype).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "concat", "constructor", "fixed", "fontcolor", "fontsize", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "replace", "search", "slice", "small", "split", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]
Object.getOwnPropertyNames(new String("string")).sort()
["0", "1", "2", "3", "4", "5", "length"]
> Object.getOwnPropertyNames(new String("string")).sort()
["0", "1", "2", "3", "4", "5", "length"]
> Object.getOwnPropertyNames(new String("string").__proto__).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "concat", "constructor", "fixed", "fontcolor", "fontsize", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "replace", "search", "slice", "small", "split", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]
> Object.getOwnPropertyNames(new String("string").__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

_SPECIFIC:
'text'
"text"
===
> "\u0022"
"""
> """
SyntaxError: Unexpected token ILLEGAL
===
> "text1\ntext2"
"text1
text2"
===
> "xxx\xxx"
SyntaxError: Unexpected token ILLEGAL
> "xxx\x23"
"xxx#"

ljss.literal'relation-to-object

name::
* McsEngl.ljss.literal'relation-to-object@cptIt,
* McsEngl.ljss'relation-to-jsobject@cptIt,
* McsEngl.ljss.object'relation-to-literal@cptIt,

_DESCRIPTION:
1) you can add PROPERTIES|MEMBERS to object but not to literal:
> var s="string"
undefined
> s.s2="s2strin"
"s2strin"
> s.s2
undefined
> var s= new String("string")
undefined
> s.s2=2
2
> s.s2
2

2) the type of literal is string, of the object, object:
> typeof "string"
"string"
> typeof new String("sting")
"object"

3) the literal has no properties, the object has:
> Object.getOwnPropertyNames("string").sort()
TypeError: Object.getOwnPropertyNames called on non-object
> Object.getOwnPropertyNames(new String("string")).sort()
["0", "1", "2", "3", "4", "5", "length"]

4) the literal even though it is not an object, has prototype, the same with the object, the String.prototype:
> Object.getOwnPropertyNames("string".__proto__).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "concat", "constructor", "fixed", "fontcolor", "fontsize", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "replace", "search", "slice", "small", "split", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]
> Object.getOwnPropertyNames((new String("string")).__proto__).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "concat", "constructor", "fixed", "fontcolor", "fontsize", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "replace", "search", "slice", "small", "split", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]

ljss.OCTAL

name::
* McsEngl.ljss.OCTAL@cptIt,
* McsEngl.symbol.js.octal@cptIt,

_CODE.LJS:
> '\251'
"©"

ljss.SPECIAL-character

name::
* McsEngl.ljss.SPECIAL-character@cptIt,

Table 2.1 JavaScript special characters
Character  Meaning
\b  Backspace
\f  Form feed
\n  New line
\r  Carriage return
\t  Tab
\v  Vertical tab
\'  Apostrophe or single quote
\"  Double quote
\\  Backslash character
\XXX  The character with the Latin-1 encoding specified by up to three octal digits XXX between 0 and 377. For example, \251 is the octal sequence for the copyright symbol.
\xXX  The character with the Latin-1 encoding specified by the two hexadecimal digits XX between 00 and FF. For example, \xA9 is the hexadecimal sequence for the copyright symbol.
\uXXXX  The Unicode character specified by the four hexadecimal digits XXXX. For example, \u00A9 is the Unicode sequence for the copyright symbol. See Unicode escape sequences.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals]

ljsalgo'sut.API

name::
* McsEngl.ljsalgo'sut.API@cptIt,
* McsEngl.ljs'api@cptIt,
* McsEngl.ljsapi@cptIt,

ljsalgo'sut.API.NATIVE

name::
* McsEngl.ljsalgo'sut.API.NATIVE@cptIt,

ljs'Promise-function

name::
* McsEngl.ljs'Promise-function@cptIt,
* McsEngl.ljs'Promise@cptIt,
* McsEngl.ljsPromise@cptIt,
* McsEngl.promise-ljs@cptIt,

_ADDRESS.WPG:
* http://www.applandeo.com/en/avoid-callbacks-nodejs-bluebird-promises//
* https://www.promisejs.org//
* https://www.twilio.com/blog/2016/10/guide-to-javascript-promises.html,
* faq: https://gist.github.com/joepie91/4c3a10629a4263a522e3bc4839a28c83, {2016-08-26}
* http://www.html5rocks.com/en/tutorials/es6/promises//

_API:
> Object.getOwnPropertyNames(Promise).sort().join(', ')
"all, length, name, prototype, race, reject, resolve"
> Object.getOwnPropertyNames(Promise.prototype).sort().join(', ')
"catch, constructor, then"
> Object.getOwnPropertyNames(Promise.prototype.__proto__).sort().join(', ')
"__defineGetter__, __defineSetter__, __lookupGetter__, __lookupSetter__, __proto__, constructor, hasOwnProperty, isPrototypeOf, propertyIsEnumerable, toLocaleString, toString, valueOf"

ljsalgo.SPECIFIC

name::
* McsEngl.ljsalgo.SPECIFIC@cptIt,

* ljsdoc.specific,
* ljsalgo.specific,

_SPECIFIC:
* library,
* program,

ljsaglo.AUDIO

name::
* McsEngl.ljsaglo.AUDIO@cptIt,

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/
* http://marcgg.com/blog/2016/11/01/javascript-audio//

ljsalgo.ARRAY-MANAGING

name::
* McsEngl.ljsalgo.ARRAY-MANAGING@cptIt,

ljsalgo.array.REMOVE-DULPICATES

name::
* McsEngl.ljsalgo.array.REMOVE-DULPICATES@cptIt,

_CODE.LJS:
< Array.from(new Set([4,1,2,1,3,2]))
> [4, 1, 2, 3]
===
function uniq_fast(a) {
var seen = {};
var out = [];
var len = a.length;
var j = 0;
for(var i = 0; i < len; i++) {
var item = a[i];
if(seen[item] !== 1) {
seen[item] = 1;
out[j++] = item;
}
}
return out;
}
[https://stackoverflow.com/a/9229821]

ljsalgo.array.SORT

name::
* McsEngl.ljsalgo.array.SORT@cptIt,

_CODE.LJS:
[7,1,5,3].sort()
> [1, 3, 5, 7]

ljsalgo.AST

name::
* McsEngl.ljsalgo.AST@cptIt,

_ADDRESS.WPG:
*

npmpkg.babel-types-object

name::
* McsEngl.npmpkg.babel-types-object@cptIt,
* McsEngl.ljnm.babel-types@cptIt,

_DESCRIPTION:
Babel Types is a Lodash-esque utility library for AST nodes
This module contains methods for building ASTs manually and for checking the types of AST nodes.
[https://www.npmjs.com/package/babel-types]

_API:
> Object.getOwnPropertyNames(ljnmdl).sort()
ALIAS_KEYS, AnyTypeAnnotation, ArrayExpression, ArrayPattern, ArrayTypeAnnotation, ArrowFunctionExpression, AssignmentExpression, AssignmentPattern, AwaitExpression, BINARY_OPERATORS, BINARY_TYPES, BLOCKPARENT_TYPES, BLOCK_SCOPED_SYMBOL, BLOCK_TYPES, BOOLEAN_BINARY_OPERATORS, BOOLEAN_NUMBER_BINARY_OPERATORS, BOOLEAN_UNARY_OPERATORS, BUILDER_KEYS, BinaryExpression, BindExpression, BlockStatement, BooleanLiteral, BooleanLiteralTypeAnnotation, BooleanTypeAnnotation, BreakStatement, CLASS_TYPES, COMMENT_KEYS, COMPARISON_BINARY_OPERATORS, COMPLETIONSTATEMENT_TYPES, CONDITIONAL_TYPES, CallExpression, CatchClause, ClassBody, ClassDeclaration, ClassExpression, ClassImplements, ClassMethod, ClassProperty, ConditionalExpression, ContinueStatement, DECLARATION_TYPES, DEPRECATED_KEYS, DebuggerStatement, DeclareClass, DeclareFunction, DeclareInterface, DeclareModule, DeclareModuleExports, DeclareTypeAlias, DeclareVariable, Decorator, Directive, DirectiveLiteral, DoExpression, DoWhileStatement, EQUALITY_BINARY_OPERATORS, EXPORTDECLARATION_TYPES, EXPRESSIONWRAPPER_TYPES, EXPRESSION_TYPES, EmptyStatement, EmptyTypeAnnotation, ExistentialTypeParam, ExportAllDeclaration, ExportDefaultDeclaration, ExportDefaultSpecifier, ExportNamedDeclaration, ExportNamespaceSpecifier, ExportSpecifier, ExpressionStatement, FLATTENABLE_KEYS, FLIPPED_ALIAS_KEYS, FLOWBASEANNOTATION_TYPES, FLOWDECLARATION_TYPES, FLOW_TYPES, FORXSTATEMENT_TYPES, FOR_INIT_KEYS, FOR_TYPES, FUNCTIONPARENT_TYPES, FUNCTION_TYPES, File, ForAwaitStatement, ForInStatement, ForOfStatement, ForStatement, FunctionDeclaration, FunctionExpression, FunctionTypeAnnotation, FunctionTypeParam, GenericTypeAnnotation, IMMUTABLE_TYPES, INHERIT_KEYS, Identifier, IfStatement, ImportDeclaration, ImportDefaultSpecifier, ImportNamespaceSpecifier, ImportSpecifier, InterfaceDeclaration, InterfaceExtends, IntersectionTypeAnnotation, JSXAttribute, JSXClosingElement, JSXElement, JSXEmptyExpression, JSXExpressionContainer, JSXIdentifier, JSXMemberExpression, JSXNamespacedName, JSXOpeningElement, JSXSpreadAttribute, JSXText, JSX_TYPES, LITERAL_TYPES, LOGICAL_OPERATORS, LOOP_TYPES, LVAL_TYPES, LabeledStatement, LogicalExpression, METHOD_TYPES, MODULEDECLARATION_TYPES, MODULESPECIFIER_TYPES, MemberExpression, MetaProperty, MixedTypeAnnotation, NODE_FIELDS, NOT_LOCAL_BINDING, NUMBER_BINARY_OPERATORS, NUMBER_UNARY_OPERATORS, NewExpression, Noop, NullLiteral, NullLiteralTypeAnnotation, NullableTypeAnnotation, NumberLiteral, NumberTypeAnnotation, NumericLiteral, NumericLiteralTypeAnnotation, OBJECTMEMBER_TYPES, ObjectExpression, ObjectMethod, ObjectPattern, ObjectProperty, ObjectTypeAnnotation, ObjectTypeCallProperty, ObjectTypeIndexer, ObjectTypeProperty, PATTERN_TYPES, PROPERTY_TYPES, PUREISH_TYPES, ParenthesizedExpression, Program, QualifiedTypeIdentifier, RegExpLiteral, RegexLiteral, RestElement, RestProperty, ReturnStatement, SCOPABLE_TYPES, STATEMENT_OR_BLOCK_KEYS, STATEMENT_TYPES, STRING_UNARY_OPERATORS, SequenceExpression, SpreadElement, SpreadProperty, StringLiteral, StringLiteralTypeAnnotation, StringTypeAnnotation, Super, SwitchCase, SwitchStatement, TERMINATORLESS_TYPES, TYPES, TaggedTemplateExpression, TemplateElement, TemplateLiteral, ThisExpression, ThisTypeAnnotation, ThrowStatement, TryStatement, TupleTypeAnnotation, TypeAlias, TypeAnnotation, TypeCastExpression, TypeParameter, TypeParameterDeclaration, TypeParameterInstantiation, TypeofTypeAnnotation, UNARYLIKE_TYPES, UNARY_OPERATORS, UPDATE_OPERATORS, USERWHITESPACABLE_TYPES, UnaryExpression, UnionTypeAnnotation, UpdateExpression, VISITOR_KEYS, VariableDeclaration, VariableDeclarator, VoidTypeAnnotation, WHILE_TYPES, WhileStatement, WithStatement, YieldExpression, __esModule, anyTypeAnnotation, appendToMemberExpression, arrayExpression, arrayPattern, arrayTypeAnnotation, arrowFunctionExpression, assertAnyTypeAnnotation, assertArrayExpression, assertArrayPattern, assertArrayTypeAnnotation, assertArrowFunctionExpression, assertAssignmentExpression, assertAssignmentPattern, assertAwaitExpression, assertBinary, assertBinaryExpression, assertBindExpression, assertBlock, assertBlockParent, assertBlockStatement, assertBooleanLiteral, assertBooleanLiteralTypeAnnotation, assertBooleanTypeAnnotation, assertBreakStatement, assertCallExpression, assertCatchClause, assertClass, assertClassBody, assertClassDeclaration, assertClassExpression, assertClassImplements, assertClassMethod, assertClassProperty, assertCompletionStatement, assertConditional, assertConditionalExpression, assertContinueStatement, assertDebuggerStatement, assertDeclaration, assertDeclareClass, assertDeclareFunction, assertDeclareInterface, assertDeclareModule, assertDeclareModuleExports, assertDeclareTypeAlias, assertDeclareVariable, assertDecorator, assertDirective, assertDirectiveLiteral, assertDoExpression, assertDoWhileStatement, assertEmptyStatement, assertEmptyTypeAnnotation, assertExistentialTypeParam, assertExportAllDeclaration, assertExportDeclaration, assertExportDefaultDeclaration, assertExportDefaultSpecifier, assertExportNamedDeclaration, assertExportNamespaceSpecifier, assertExportSpecifier, assertExpression, assertExpressionStatement, assertExpressionWrapper, assertFile, assertFlow, assertFlowBaseAnnotation, assertFlowDeclaration, assertFor, assertForAwaitStatement, assertForInStatement, assertForOfStatement, assertForStatement, assertForXStatement, assertFunction, assertFunctionDeclaration, assertFunctionExpression, assertFunctionParent, assertFunctionTypeAnnotation, assertFunctionTypeParam, assertGenericTypeAnnotation, assertIdentifier, assertIfStatement, assertImmutable, assertImportDeclaration, assertImportDefaultSpecifier, assertImportNamespaceSpecifier, assertImportSpecifier, assertInterfaceDeclaration, assertInterfaceExtends, assertIntersectionTypeAnnotation, assertJSX, assertJSXAttribute, assertJSXClosingElement, assertJSXElement, assertJSXEmptyExpression, assertJSXExpressionContainer, assertJSXIdentifier, assertJSXMemberExpression, assertJSXNamespacedName, assertJSXOpeningElement, assertJSXSpreadAttribute, assertJSXText, assertLVal, assertLabeledStatement, assertLiteral, assertLogicalExpression, assertLoop, assertMemberExpression, assertMetaProperty, assertMethod, assertMixedTypeAnnotation, assertModuleDeclaration, assertModuleSpecifier, assertNewExpression, assertNode, assertNoop, assertNullLiteral, assertNullLiteralTypeAnnotation, assertNullableTypeAnnotation, assertNumberLiteral, assertNumberTypeAnnotation, assertNumericLiteral, assertNumericLiteralTypeAnnotation, assertObjectExpression, assertObjectMember, assertObjectMethod, assertObjectPattern, assertObjectProperty, assertObjectTypeAnnotation, assertObjectTypeCallProperty, assertObjectTypeIndexer, assertObjectTypeProperty, assertParenthesizedExpression, assertPattern, assertProgram, assertProperty, assertPureish, assertQualifiedTypeIdentifier, assertRegExpLiteral, assertRegexLiteral, assertRestElement, assertRestProperty, assertReturnStatement, assertScopable, assertSequenceExpression, assertSpreadElement, assertSpreadProperty, assertStatement, assertStringLiteral, assertStringLiteralTypeAnnotation, assertStringTypeAnnotation, assertSuper, assertSwitchCase, assertSwitchStatement, assertTaggedTemplateExpression, assertTemplateElement, assertTemplateLiteral, assertTerminatorless, assertThisExpression, assertThisTypeAnnotation, assertThrowStatement, assertTryStatement, assertTupleTypeAnnotation, assertTypeAlias, assertTypeAnnotation, assertTypeCastExpression, assertTypeParameter, assertTypeParameterDeclaration, assertTypeParameterInstantiation, assertTypeofTypeAnnotation, assertUnaryExpression, assertUnaryLike, assertUnionTypeAnnotation, assertUpdateExpression, assertUserWhitespacable, assertVariableDeclaration, assertVariableDeclarator, assertVoidTypeAnnotation, assertWhile, assertWhileStatement, assertWithStatement, assertYieldExpression, assignmentExpression, assignmentPattern, awaitExpression, binaryExpression, bindExpression, blockStatement, booleanLiteral, booleanLiteralTypeAnnotation, booleanTypeAnnotation, breakStatement, buildMatchMemberExpression, callExpression, catchClause, classBody, classDeclaration, classExpression, classImplements, classMethod, classProperty, clone, cloneDeep, cloneWithoutLoc, conditionalExpression, continueStatement, createTypeAnnotationBasedOnTypeof, createUnionTypeAnnotation, debuggerStatement, declareClass, declareFunction, declareInterface, declareModule, declareModuleExports, declareTypeAlias, declareVariable, decorator, directive, directiveLiteral, doExpression, doWhileStatement, emptyStatement, emptyTypeAnnotation, ensureBlock, existentialTypeParam, exportAllDeclaration, exportDefaultDeclaration, exportDefaultSpecifier, exportNamedDeclaration, exportNamespaceSpecifier, exportSpecifier, expressionStatement, file, forAwaitStatement, forInStatement, forOfStatement, forStatement, functionDeclaration, functionExpression, functionTypeAnnotation, functionTypeParam, genericTypeAnnotation, getBindingIdentifiers, getOuterBindingIdentifiers, identifier, ifStatement, importDeclaration, importDefaultSpecifier, importNamespaceSpecifier, importSpecifier, inheritInnerComments, inheritLeadingComments, inheritTrailingComments, inherits, inheritsComments, interfaceDeclaration, interfaceExtends, intersectionTypeAnnotation, is, isAnyTypeAnnotation, isArrayExpression, isArrayPattern, isArrayTypeAnnotation, isArrowFunctionExpression, isAssignmentExpression, isAssignmentPattern, isAwaitExpression, isBinary, isBinaryExpression, isBindExpression, isBinding, isBlock, isBlockParent, isBlockScoped, isBlockStatement, isBooleanLiteral, isBooleanLiteralTypeAnnotation, isBooleanTypeAnnotation, isBreakStatement, isCallExpression, isCatchClause, isClass, isClassBody, isClassDeclaration, isClassExpression, isClassImplements, isClassMethod, isClassProperty, isCompletionStatement, isConditional, isConditionalExpression, isContinueStatement, isDebuggerStatement, isDeclaration, isDeclareClass, isDeclareFunction, isDeclareInterface, isDeclareModule, isDeclareModuleExports, isDeclareTypeAlias, isDeclareVariable, isDecorator, isDirective, isDirectiveLiteral, isDoExpression, isDoWhileStatement, isEmptyStatement, isEmptyTypeAnnotation, isExistentialTypeParam, isExportAllDeclaration, isExportDeclaration, isExportDefaultDeclaration, isExportDefaultSpecifier, isExportNamedDeclaration, isExportNamespaceSpecifier, isExportSpecifier, isExpression, isExpressionStatement, isExpressionWrapper, isFile, isFlow, isFlowBaseAnnotation, isFlowDeclaration, isFor, isForAwaitStatement, isForInStatement, isForOfStatement, isForStatement, isForXStatement, isFunction, isFunctionDeclaration, isFunctionExpression, isFunctionParent, isFunctionTypeAnnotation, isFunctionTypeParam, isGenericTypeAnnotation, isIdentifier, isIfStatement, isImmutable, isImportDeclaration, isImportDefaultSpecifier, isImportNamespaceSpecifier, isImportSpecifier, isInterfaceDeclaration, isInterfaceExtends, isIntersectionTypeAnnotation, isJSX, isJSXAttribute, isJSXClosingElement, isJSXElement, isJSXEmptyExpression, isJSXExpressionContainer, isJSXIdentifier, isJSXMemberExpression, isJSXNamespacedName, isJSXOpeningElement, isJSXSpreadAttribute, isJSXText, isLVal, isLabeledStatement, isLet, isLiteral, isLogicalExpression, isLoop, isMemberExpression, isMetaProperty, isMethod, isMixedTypeAnnotation, isModuleDeclaration, isModuleSpecifier, isNewExpression, isNode, isNodesEquivalent, isNoop, isNullLiteral, isNullLiteralTypeAnnotation, isNullableTypeAnnotation, isNumberLiteral, isNumberTypeAnnotation, isNumericLiteral, isNumericLiteralTypeAnnotation, isObjectExpression, isObjectMember, isObjectMethod, isObjectPattern, isObjectProperty, isObjectTypeAnnotation, isObjectTypeCallProperty, isObjectTypeIndexer, isObjectTypeProperty, isParenthesizedExpression, isPattern, isProgram, isProperty, isPureish, isQualifiedTypeIdentifier, isReferenced, isRegExpLiteral, isRegexLiteral, isRestElement, isRestProperty, isReturnStatement, isScopable, isScope, isSequenceExpression, isSpecifierDefault, isSpreadElement, isSpreadProperty, isStatement, isStringLiteral, isStringLiteralTypeAnnotation, isStringTypeAnnotation, isSuper, isSwitchCase, isSwitchStatement, isTaggedTemplateExpression, isTemplateElement, isTemplateLiteral, isTerminatorless, isThisExpression, isThisTypeAnnotation, isThrowStatement, isTryStatement, isTupleTypeAnnotation, isType, isTypeAlias, isTypeAnnotation, isTypeCastExpression, isTypeParameter, isTypeParameterDeclaration, isTypeParameterInstantiation, isTypeofTypeAnnotation, isUnaryExpression, isUnaryLike, isUnionTypeAnnotation, isUpdateExpression, isUserWhitespacable, isValidIdentifier, isVar, isVariableDeclaration, isVariableDeclarator, isVoidTypeAnnotation, isWhile, isWhileStatement, isWithStatement, isYieldExpression, jSXAttribute, jSXClosingElement, jSXElement, jSXEmptyExpression, jSXExpressionContainer, jSXIdentifier, jSXMemberExpression, jSXNamespacedName, jSXOpeningElement, jSXSpreadAttribute, jSXText, labeledStatement, logicalExpression, memberExpression, metaProperty, mixedTypeAnnotation, newExpression, noop, nullLiteral, nullLiteralTypeAnnotation, nullableTypeAnnotation, numberLiteral, numberTypeAnnotation, numericLiteral, numericLiteralTypeAnnotation, objectExpression, objectMethod, objectPattern, objectProperty, objectTypeAnnotation, objectTypeCallProperty, objectTypeIndexer, objectTypeProperty, parenthesizedExpression, prependToMemberExpression, program, qualifiedTypeIdentifier, react, regExpLiteral, regexLiteral, removeComments, removeProperties, removePropertiesDeep, removeTypeDuplicates, restElement, restProperty, returnStatement, sequenceExpression, shallowEqual, spreadElement, spreadProperty, stringLiteral, stringLiteralTypeAnnotation, stringTypeAnnotation, super, switchCase, switchStatement, taggedTemplateExpression, templateElement, templateLiteral, thisExpression, thisTypeAnnotation, throwStatement, toBindingIdentifierName, toBlock, toComputedKey, toExpression, toIdentifier, toKeyAlias, toSequenceExpression, toStatement, traverseFast, tryStatement, tupleTypeAnnotation, typeAlias, typeAnnotation, typeCastExpression, typeParameter, typeParameterDeclaration, typeParameterInstantiation, typeofTypeAnnotation, unaryExpression, unionTypeAnnotation, updateExpression, validate, valueToNode, variableDeclaration, variableDeclarator, voidTypeAnnotation, whileStatement, withStatement, yieldExpression

ljsalgo.ASYNCHRONOUS

name::
* McsEngl.ljsalgo.ASYNCHRONOUS@cptIt,

_ADDRESS.WPG:
* http://tutorials.pluralsight.com/front-end-javascript/introduction-to-asynchronous-javascript,

ljsalgo.BINARY-MANIPULATION

name::
* McsEngl.ljsalgo.BINARY-MANIPULATION@cptIt,

_ADDRESS.WPG:
* http://blog.gnclmorais.com/binary-in-javascript,
* http://www.thedotpost.com/2016/12/goncalo-morais-binary-in-javascript,

ljsalgo.DATABASE

name::
* McsEngl.ljsalgo.DATABASE@cptIt,

_DESCRIPTION:
* https://github.com/anywhichway/reasondb, A 100% native JavaScript automatically synchronizing object database: SQL like syntax, swapable persistence engines, asynchronous cursors, streaming analytics, 18 built-in plus in-line fat arrow predicates, predicate extensibility, indexed computed values, joins, nested matching, statistical sampling and more.

ljsalgo.FILE-READING

name::
* McsEngl.ljsalgo.FILE-READING@cptIt,

ljsalgo.SCRIPT-READING

name::
* McsEngl.ljsalgo.SCRIPT-READING@cptIt,

_CODE.LJB:
function addScript( src ) {
var s = document.createElement( 'script' );
s.setAttribute( 'src', src );
document.body.appendChild( s );
}
[https://stackoverflow.com/a/13122014]

ljsalgo.GIT

name::
* McsEngl.ljsalgo.GIT@cptIt,

npmpkg.git-url-parse-function

name::
* McsEngl.npmpkg.git-url-parse-function@cptIt,
* McsEngl.ljnm.git-url-parse@cptIt,
* McsEngl.npmpkg.git-url-parse@cptIt,

_DESCRIPTION:
git-url-parse
A high level git url parser for common git providers.
[https://www.npmjs.com/package/git-url-parse]

_MEMBER:
function
[ 'length', 'name', 'prototype', 'stringify' ]

npmpkg.remote-origin-url-function

name::
* McsEngl.npmpkg.remote-origin-url-function@cptIt,
* McsEngl.ljnm.remote-origin-url@cptIt,
* McsEngl.npmpkg.remote-origin-url@cptIt,

_DESCRIPTION:
remote-origin-url
Get the git remote origin URL from your local git repository. Remember! A remote origin must exist first!
[https://www.npmjs.com/package/remote-origin-url]

_MEMBER:
function
[ 'length', 'name', 'prototype', 'sync' ]

ljsalgo.JSON-managing

name::
* McsEngl.ljsalgo.JSON-managing@cptIt,
* McsEngl.JSON-managing-ljs@cptIt,

_ADDRESS.WPG:
* https://github.com/jsonata-js/jsonata, JSONata JSON query and transformation language
The primary purpose of this language is to extract values from JSON documents, with the additional capabilities to combine these values using a set of basic functions and operators, and also the ability to format the output into any arbitrary JSON structure.

json-schema-function

name::
* McsEngl.ljnm.json-schema@cptIt,
* McsEngl.mfJson-schema@cptIt,
* McsEngl.npmpkg.json-schema@cptIt,

_DESCRIPTION:
json-schema
JSON Schema validation and specifications
JSON Schema is a repository for the JSON Schema specification, reference schemas and a CommonJS implementation of JSON Schema (not the only JavaScript implementation of JSON Schema, JSV is another excellent JavaScript validator).
Code is licensed under the AFL or BSD license as part of the Persevere project which is administered under the Dojo foundation, and all contributions require a Dojo CLA.
[https://www.npmjs.com/package/json-schema]

_MEMBER:
function
[ 'Integer',
'_validate',
'arguments',
'caller',
'checkPropertyChange',
'length',
'mustBeValid',
'name',
'prototype',
'validate' ]

ljsalgo.LANGUAGE.COMPUTER-TOOL

name::
* McsEngl.ljsalgo.LANGUAGE.COMPUTER-TOOL@cptIt,

npmpkg.highlight.js

name::
* McsEngl.npmpkg.highlight.js@cptIt,
* McsEngl.ljnm.highlight.js@cptIt,
* McsEngl.npmpkg.highlight.js@cptIt,

_DESCRIPTION:
highlight.js
Syntax highlighting with language autodetection.

Highlight.js is a syntax highlighter written in JavaScript. It works in the browser as well as on the server. It works with pretty much any markup, doesn’t depend on any framework and has automatic language detection.
[https://www.npmjs.com/package/highlight.js]

npmpkg.unist-util-visit

name::
* McsEngl.npmpkg.unist-util-visit@cptIt,
* McsEngl.ljnm.unist-util-visit@cptIt,
* McsEngl.npmpkg.unist-util-visit@cptIt,

_DESCRIPTION:
unist-util-visit
Recursively walk over unist nodes
Unist node visitor. Useful with working with remark, retext, or rehype.
[https://www.npmjs.com/package/unist-util-visit]

ljsalgo.MARKDOWN-MANAGING

name::
* McsEngl.ljsalgo.MARKDOWN-MANAGING@cptIt,
* McsEngl.ljsalgo.markdown@cptIt,

npmpkg.remark-function

name::
* McsEngl.npmpkg.remark-function@cptIt,
* McsEngl.ljnm.remark@cptIt,
* McsEngl.npmpkg.remark@cptIt,
* McsEngl.remark-markdown-parser@cptIt,

* McsEngl.mfRemark@cptIt,

_DESCRIPTION:
remark
Markdown processor powered by plugins
The remark processor is a markdown processor powered by plug-ins.
Interface by unified;
mdast syntax tree;
Parses markdown to the tree with remark-parse;
Plug-ins transform the tree;
Compiles the tree to markdown using remark-stringify.
Don’t need the parser? Or the compiler? That’s OK.
[https://www.npmjs.com/package/remark]

_ADDRESS.WPG:
* http://remark.js.org//

_MEMBER:
remark
function
[ 'Compiler',
'Parser',
'_events',
'_eventsCount',
'_maxListeners',
'abstract',
'addListener',
'attachers',
'data',
'domain',
'emit',
'end',
'eventNames',
'getMaxListeners',
'length',
'listenerCount',
'listeners',
'name',
'on',
'once',
'parse',
'pipe',
'prependListener',
'prependOnceListener',
'process',
'prototype',
'readable',
'removeAllListeners',
'removeListener',
'run',
'setMaxListeners',
'stringify',
'use',
'writable',
'write' ]

mfRemark.parse-function

name::
* McsEngl.mfRemark.parse-function@cptIt,

mfRemark().parse("two"):
{ type: 'root',
children: [ { type: 'paragraph', children: [Object], position: [Object] } ],
position:
{ start: { line: 1, column: 1, offset: 0 },
end: { line: 1, column: 4, offset: 3 }
}
}

ljsalgo.MATH

name::
* McsEngl.ljsalgo.MATH@cptIt,
* McsEngl.ljsalgo.math@cptIt,

_CODE.LJS:
// division remainder
> 9%2
1
> 8%2
0

_ADDRESS.WPG:
* https://www.npmjs.com/package/english2number, Converts English words to numbers.

ljsalgo.STATISTICS

name::
* McsEngl.ljsalgo.STATISTICS@cptIt,

_ADDRESS.WPG:
* http://simplestatistics.org/docs//

ljsalgo.OCR

name::
* McsEngl.ljsalgo.OCR@cptIt,

_ADDRESS.WPG:
* http://tesseract.projectnaptha.com//

ljsalgo.PROJECT-MANAGEMENT

name::
* McsEngl.ljsalgo.PROJECT-MANAGEMENT@cptIt,

_ADDRESS.WPG:
* https://www.codementor.io/angularjs/tutorial/trello-clone-angular-node-mongo-express,

ljsalgo.SEARCHING

name::
* McsEngl.ljsalgo.SEARCHING@cptIt,
* McsEngl.ljsalgo.searching@cptIt,

_ADDRESS.WPG:
* Lightweight fuzzy-search, in JavaScript
- http://fusejs.io/
- https://github.com/krisk/fuse,

_ARRAY:
* includes#ql:ljsincludes_array_cpt#

ljsalgo.SPEECH-RECOGNITION

name::
* McsEngl.ljsalgo.SPEECH-RECOGNITION@cptIt,
* McsEngl.ljb'speech-recognition@cptIt,
* McsEngl.ljs'speech-recognition@cptIt,
* McsEngl.speech-recognition-ljs@cptIt,

_ADDRESS.WPG:
* https://www.talater.com/annyang//
* https://davidwalsh.name/speech-recognition,

ljsalgo.SPREADSHEET

name::
* McsEngl.ljsalgo.SPREADSHEET@cptIt,

_ADDRESS.WPG:
* https://github.com/mleibman/SlickGrid/tree/gh-pages,

ljsalgo.STRING-MANAGEMENT

name::
* McsEngl.ljsalgo.STRING-MANAGEMENT@cptIt,

_CODE.LJS:
//SUBSTRING_BETWEEN_QUOTES:
> s = 'id="abc"'
> s.substring(s.indexOf('"')+1,s.lastIndexOf('"'))
< "abc"

ljsalgo.TEXT-MASK

name::
* McsEngl.ljsalgo.TEXT-MASK@cptIt,

_ADDRESS.WPG:
* https://github.com/text-mask/text-mask: Input mask for React, Angular, Ember, & plain JavaScript https://text-mask.github.io/text-mask/

ljsalgo.TIMEOUT

name::
* McsEngl.ljsalgo.TIMEOUT@cptIt,
* McsEngl.ljstimeout@cptIt,

_CODE.LJS:
var sTmt;
sTmt = setTimeout(function(){
...
},459);
clearTimeout(sTmt);

ljsalgo.TREE-STRUCTURE

name::
* McsEngl.ljsalgo.TREE-STRUCTURE@cptIt,
* McsEngl.ljs'tree-structure@cptIt,

_ADDRESS.WPG:
* https://github.com/arqex/freezer, A tree data structure that emits events on updates, even if the modification is triggered by one of the leaves, making it easier to think in a reactive way.
* https://github.com/mquan/cortex, An immutable data store for managing deeply nested structure with React.

ljsalgo.CODE

_CREATED: {2016-11-20}

name::
* McsEngl.ljsalgo.CODE@cptIt,
* McsEngl.ljs'code@cptIt,
* McsEngl.ljscode@cptIt,

_DESCRIPTION:
ljscode is a-document containing an-algorithm written in ljs.
[hmnSngo.2016-11-20]

ljsalgo.LIBRARY

_CREATED: {2014-02-21}

name::
* McsEngl.ljsalgo.LIBRARY@cptIt,
* McsEngl.ljs'framework@cptIt,
* McsEngl.ljs'library@cptIt,
* McsEngl.ljslibrary@cptIt,
* McsEngl.ljs'code.collection@cptIt,
* McsEngl.ljs'code-collection@cptIt, {2014-02-21}
* McsEngl.ljs'code.api.LIBRARY@cptIt,
* McsEngl.ljs'collection-of-code@cptIt,
* McsEngl.ljs'library@cptIt,
* McsEngl.ljs'api.framework@cptIt,
* McsEngl.ljs'framework@cptIt,

ljslbr'installing

name::
* McsEngl.ljslbr'installing@cptIt,
* McsEngl.ljslbr'adding@cptIt,

ljslbr.POLYFILL

name::
* McsEngl.ljslbr.POLYFILL@cptIt,
* McsEngl.polyfill.ljs@cptIt,

_ADDRESS.WPG:
* https://philipwalton.com/articles/loading-polyfills-only-when-needed//

ljslbr.INFERNO (ljsifn)

name::
* McsEngl.ljslbr.INFERNO (ljsifn)@cptIt,

_DESCRIPTION:
Inferno is an isomorphic library for building high-performance user interfaces, which is crucial when targeting mobile devices. Unlike typical virtual DOM libraries like React, Mithril, Virtual-dom, Snabbdom and Om, Inferno uses techniques to separate static and dynamic content. This allows Inferno to only "diff" renders that have dynamic values.

In addition to this, we've carefully optimized the code to ensure there is as little overhead as possible. We believe that Inferno is currently one of the fastest virtual DOM implementation out there - as shown by some of our benchmarks. Inferno is all about performance, whilst keeping a robust API that replicates the best features from libraries such as React.

In principle, Inferno is compatible with the standard React API, allowing painless transition from React to Inferno. Furthermore, Inferno has a Babel plugin allowing JSX syntax to transpile to optimised Inferno virtual DOM.

Key Features
One of the fastest front-end frameworks for rendering UI in the DOM
Components have a similar API to React ES2015 components with inferno-component
Stateless components are fully supported and have more usability thanks to Inferno's hooks system
Isomorphic/universal for easy server-side rendering with inferno-server
[https://github.com/trueadm/inferno/]

ljslbr.REACT (ljsreact)

name::
* McsEngl.ljslbr.REACT (ljsreact)@cptIt,
* McsEngl.ljsreact@cptIt,
* McsEngl.react-ljs@cptIt,
* McsEngl.reactjs@cptIt,

* McsEngl.ljsreact@cptIt,
* McsEngl.react-library@cptIt,
* McsEngl.react.js@cptIt,
* McsEngl.ReactJS@cptIt,
* McsEngl.ljbrct@cptIt,
* McsEngl.ljnrct@cptIt,
* McsEngl.ljsrct@cptIt,

_ADDRESS.WPG:
* https://facebook.github.io/react//

_DESCRIPTION:
React is a JavaScript view library (similar to a template engine) that enables fast DOM updates via a 'virtual DOM'.
[http://andrewhfarmer.com/what-is-react/]
===
React is a JavaScript library created by a collaboration of Facebook and Instagram. Its aim is to allow developers to create fast user interfaces easily. React makes no assumptions about the rest of the technology stack used, thus it’s easy to try it out on a small feature in an existing project.
...
React isn’t a complete framework. It doesn’t offer all the components you’ll find in projects like Ember or AngularJS. In fact, many refer to React as just the V in MVC.
[http://developer.telerik.com/featured/introduction-to-the-react-javascript-framework/]
===
React (sometimes styled React.js or ReactJS) is an open-source JavaScript library providing a view for data rendered as HTML. React views are typically rendered using components that contain additional components specified as custom HTML tags. React promises programmers a model in which subcomponents cannot directly affect enclosing components ("data flows down"); efficient updating of the HTML document when data changes; and a clean separation between components on a modern single-page application.
It is maintained by Facebook, Instagram and a community of individual developers and corporations.[2][3][4] According to JavaScript analytics service Libscore, React is currently being used on the websites of Netflix, Imgur, Bleacher Report, Feedly, Airbnb, SeatGeek, HelloSign, and others.[5]
As of March 2016, React and React Native are Facebook's top two open-source projects by number of stars on GitHub,[6] and React is the 6th most starred project of all time on GitHub.[7]
[https://en.wikipedia.org/wiki/React_(JavaScript_library)]
===
I've been doing web development since 2000, and in that time I've seen eras marked by libraries and frameworks come and go. The Ajax era began around the same time as the jQuery era began, the Backbone era began several years later, and the React era really began about two years ago. Each of these eras brought with it a new realization about the way we can build dynamic web interfaces based on the tools available. jQuery made it clear that browser abstractions and CSS querying were important to developers, Backbone introduced the concept of client-side architecture to many, and React enables the creation of UI components instead of templates.
There are plenty of blog posts, talks, and videos touting how React works and why it's good for web development. There's been a lot of discussion around the virtual DOM, embedding HTML into JavaScript with JSX, organizing the UI into components. These are all interesting technical pieces of React, however, I don't believe the technical aspects alone account for its popularity. After researching a bit more, I realized why React is so powerful: it fundamentally changes an equation we've all been working with for years, and an idea can be much more powerful than the technology implementing it.
The economics of dynamic web interfaces
Ever since the Document Object Model (DOM) was introduced and widely adopted in web browsers, web developers have been met with the same advice: the DOM is slow. Avoid DOM updates. Repaint and reflow will get you. In short, there was a tangible cost to dynamically updating a web page, and that cost is broken down into:

Performance - making changes to the DOM is slow due to repaint and reflow
Efficiency - you can end up creating memory leaks by losing track of node references
Complexity - make sure you're detaching and reattaching event handlers in the correct spots
When you stop and look at it this way, the cost of updating the DOM is high enough that the value you get from that cost needs to be sufficiently high to justify the cost. Or, you can try to lower the cost such that the value doesn't have to be as high to justify it. So we developed a whole series of approaches to try and lower that cost:

Make only small changes. Large changes are slow, so if you can stick to small changes, it will be less slow.
For big changes, detach the DOM node from the document, make your changes, and then reattach the DOM node. This will avoid repaint and reflow.
Use event delegation to listen for events at a high level so you won't accidentally remove a node that has an important event handler.
Each of these approaches chips away at the cost of updating the DOM but doesn't do anything to fundamentally change the equation. In this world, you would never dream of issuing a command to re-render the entire page multiple times as it would undoubtedly cause a poor user experience. And that's exactly what React changes.

React changes the equation
As you're undoubtedly aware, React solves a lot of these problems. It manages your event handlers for you, ensuring they're attached and detached at the correct time and on the correct nodes; it creates and destroys DOM structures efficiently; it uses virtual DOM diffing to determine which parts of a component have changed and only updates those parts. All of these technical solutions change the old equation: DOM updates are now fast.

(Yes, there is some debate[1] as to whether React is as fast as people claim or not. That's really not important for this discussion, as it's the idea of DOM updates being fast that is important).

Changing the equation has a ripple effect through how we develop web applications. This occurred to me first when looking at React Router[2]. The basic premise of React Router is that when the URL changes, it's intercepted by the History API's[3] state mechanism, and then the entire view is re-rendered. Before React, you would never think of dynamically re-rendering an entire page at one time, it would be too slow. The complexity of ensuring that the page worked correctly was high, and while some would do it, it would undoubtedly be the source of bugs. So we'd just stick to re-rendering smaller portions of the page.

But with React, you don't think twice about re-rendering the entire page because, in all likelihood, you won't be re-rendering everything. You'll just be re-rendering the pieces that need change. The cost of each render remains relatively consistent and is based only on the parts of the page that have changed, so there's little difference between manually re-rendering just the part of the page that has changed and re-rendering the entire page. Those are effectively the same operations.

React has, ironically, allowed us to once again think about writing web applications as a series of pages rather than a monolithic blob of JavaScript code. It's no wonder that developers have become so engaged with React and React Router: it's the same mental model as traditional server-only applications. A page is rendered, some changes are requested, then a page is rendered with those changes. The only difference is that this can all happen client-side.

Conclusion
I'm still learning about React, and while the technical details are interesting, the way it has changed the dynamic web interface equation is really impressive to me. I ended up asking myself questions like, "what would you build if there was no cost to client-side rendering?" My mind took off in multiple directions at the same time and I came to realize just how game-changing React is. The most powerful thing any tool can do is fundamentally change the economics of the situation that it works in, and React has done that for client-side development.

References
React + Performance = ? (aerotwist.com)
React Router (github.com)
History API (developer.mozilla.org)
[blog@nczonline.net 2016-01-26]

ljsreact'Adding

name::
* McsEngl.ljsreact'Adding@cptIt,

_DESCRIPTION:
To get started, you have two methods. The first is to use the Facebook CDN so that you don’t have to download any files. Of course this method has the drawback that you must be online. The second method is to head over to the React website and download the React starter kit.
[http://developer.telerik.com/featured/introduction-to-the-react-javascript-framework/]
===
<script src="https://unpkg.com/react@15.3.1/dist/react.js"></script>
<script src="https://unpkg.com/react-dom@15.3.1/dist/react-dom.js"></script>
===
//latest
<script src="https://unpkg.com/react/dist/react.js"></script>
<script src="https://unpkg.com/react-dom/dist/react-dom.js"></script>
===
<script src="https://fb.me/react-15.2.0.js"></script>
<script src="https://fb.me/react-dom-15.2.0.js"></script>

ljsreact'API (rctapi)

name::
* McsEngl.ljsreact'API (rctapi)@cptIt,

rctapi.React-object (react.js)

name::
* McsEngl.rctapi.React-object (react.js)@cptIt,

_MEMBER:
// Object.getOwnPropertyNames(React).sort()
["Children", "Component", "DOM", "PropTypes", "PureComponent", "__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED", "__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED", "__spread", "cloneElement", "createClass", "createElement", "createFactory", "createMixin", "isValidElement", "version"]

React.createElement-function

name::
* McsEngl.React.createElement-function@cptIt,
* McsEngl.React.createElement@cptIt,

_DESCRIPTION:
Fundamentally, JSX just provides syntactic sugar for the React.createElement(component, props, ...children) function. The JSX code:

<MyButton color="blue" shadowSize={2}>
Click Me
</MyButton>
compiles into:

React.createElement(
MyButton,
{color: 'blue', shadowSize: 2},
'Click Me'
)
[https://facebook.github.io/react/docs/jsx-in-depth.html]

rctapi.ReactDOM-object (react-dom.js)

name::
* McsEngl.rctapi.ReactDOM-object (react-dom.js)@cptIt,

_MEMBER:
// Object.getOwnPropertyNames(ReactDOM).sort()
["findDOMNode", "render", "unmountComponentAtNode", "unstable_batchedUpdates", "unstable_renderSubtreeIntoContainer", "version"]

ReactDOM.render-function

name::
* McsEngl.ReactDOM.render-function@cptIt,
* McsEngl.ReactDOM.render@cptIt,

ljsreact'Component (rctcmp)

name::
* McsEngl.ljsreact'Component (rctcmp)@cptIt,

_DESCRIPTION:
Components are the building blocks of React. If you’re coming from an Angular background, components are very similar to Directives. If you’re coming from a different background, they’re essentially widgets or modules. You can think of a component as a collection of HTML, CSS, JS, and some internal data specific to that component. I like to think of React components as the Kolaches of the web. They have everything you need, wrapped in a delicious composable bundle. These components are defined either in pure JavaScript or they can be defined in what the React team calls “JSX”. If you decide to use JSX (which you most likely will, it’s pretty standard — and it’s what we’ll use for this tutorial), you’ll need some compile stage to convert your JSX to JavaScript, we’ll get to this later.
[https://tylermcginnis.com/reactjs-tutorial-a-comprehensive-guide-to-building-apps-with-react/]

rctcmp'Creating

name::
* McsEngl.rctcmp'Creating@cptIt,

_CODE.REACT:
var CmpHello = React.createClass({
render: function(){
return (
<div>
Hello World!
</div>
)
}
});

ReactDOM.render(<CmpHello />, document.getElementById('app'));
[https://tylermcginnis.com/reactjs-tutorial-a-comprehensive-guide-to-building-apps-with-react/]

ljsreact'JSX

name::
* McsEngl.ljsreact'JSX@cptIt,
* McsEngl.JSX@cptIt,

_DESCRIPTION:
Fundamentally, JSX just provides syntactic sugar for the React.createElement(component, props, ...children) function. The JSX code:

<MyButton color="blue" shadowSize={2}>
Click Me
</MyButton>
compiles into:

React.createElement(
MyButton,
{color: 'blue', shadowSize: 2},
'Click Me'
)
[https://facebook.github.io/react/docs/jsx-in-depth.html]
===
JSX — Allows us to write HTML like syntax which gets transformed to lightweight JavaScript objects.
[https://tylermcginnis.com/reactjs-tutorial-a-comprehensive-guide-to-building-apps-with-react/]
===
JSX is a JavaScript syntax extension that looks similar to XML and that you mix with normal JavaScript code. Its use is optional but, as I said, most developers using React have employed it. It comes in handy because it’s a concise syntax for defining tree structures with attributes. Being based on XML, it has the benefit of balanced open and closing tags. This can help make large trees easier to read than function calls or object literals. If you want to learn more about this syntax, you can read the article JSX in Depth.
[http://developer.telerik.com/featured/introduction-to-the-react-javascript-framework/]

jsx'Resource

name::
* McsEngl.jsx'Resource@cptIt,

_ADDRESS.WPG:
* https://facebook.github.io/react/docs/jsx-in-depth.html,
* babel compiler: https://babeljs.io/repl/#?babili=false&evaluate=false&lineWrap=false&presets=es2015%2Creact%2Cstage-0&code=,

ljsreact'Relation-to-WebComponents

name::
* McsEngl.ljsreact'Relation-to-WebComponents@cptIt,
* McsEngl.relation-webComponents-to-react@cptIt,

_DESCRIPTION:
Web Components
Trying to compare and contrast React with WebComponents inevitably results in specious conclusions, because the two libraries are built to solve different problems.
WebComponents provide strong encapsulation for reusable components, while React provides a declarative library that keeps the DOM in sync with your data.
The two goals are complementary; engineers can mix-and-match the technologies.
As a developer, you are free to use React in your WebComponents, or to use WebComponents in React, or both.
[https://facebook.github.io/react/docs/webcomponents.html]

ljsreact'Resource

name::
* McsEngl.ljsreact'Resource@cptIt,

_ADDRESS.WPG:
* examples: https://gist.github.com/danawoodman/9cfddb1a0c934a35f31a,
* http://developer.telerik.com/featured/introduction-to-the-react-javascript-framework//
* https://scotch.io/tutorials/reactjs-components-learning-the-basics,
* https://www.sitepoint.com/how-react-makes-your-d3-better//
* https://www.safaribooksonline.com/library/view/react-up/9781491931813/ch01.html,
* http://reactkungfu.com/react-by-example//
=== BOOK
* http://www.reactenlightenment.com//
=== TOOL:
* A Flux-like State Management Library for React by your friends at Tictail http://tic.tl/introducing-tide
https://github.com/tictail/tide,
=== TUTORIAL:
* http://andrewhfarmer.com/getting-started-tutorials//
* https://facebook.github.io/react/tutorial/tutorial.html,
* http://jamesknelson.com/learn-raw-react-no-jsx-flux-es6-webpack//

ljsreact'Server-side-rendering

name::
* McsEngl.ljsreact'Server-side-rendering@cptIt,

_DESCRIPTION:
Another crucial feature of this project is that the objects you create with React, the views, can also be rendered on the server using Node.js. Unlike React Native, you don’t have to use a different library. You employ the same file on the client as well as the server. This is an important performance improvement. In fact, you can first render a static version of the pages using the server, which is faster and also SEO-friendly, and then enable user interactions and UI updates by using React on the client-side.
[http://developer.telerik.com/featured/introduction-to-the-react-javascript-framework/]

ljsreact'Virtual-DOM (rctvdm)

name::
* McsEngl.ljsreact'Virtual-DOM (rctvdm)@cptIt,

_DESCRIPTION:
a “virtual DOM” or a JavaScript representation of the actual DOM.
[https://tylermcginnis.com/reactjs-tutorial-a-comprehensive-guide-to-building-apps-with-react/]
===
One of most important and widely discussed concepts of React is the virtual DOM.
The virtual DOM is a tree based on JavaScript objects created with React that mimics a DOM tree.
Every time you want to change something in the DOM, React employs a diff algorithm that only re-renders the DOM nodes that have changed.
This algorithm is used for efficient re-rendering because DOM operations are typically slow, at least compared to executing JavaScript statements.
In this way, React can be very fast, which is especially important considering that the CPU of mobile devices are far less powerful than desktop devices.
[http://developer.telerik.com/featured/introduction-to-the-react-javascript-framework/]

ljsreact.EVOLUTING

name::
* McsEngl.ljsreact.EVOLUTING@cptIt,

_ADDRESS.WPG:
* https://github.com/facebook/react/releases,

react.15-4-2.2017-01-06:
React
Fixed build issues with the Brunch bundler. (@gaearon in#8686)
Improved error messages for invalid element types. (@spicyj in#8612)
Removed a warning about getInitialState when this.state is set. (@bvaughn in#8594)
Removed some dead code. (@diegomura in#8050, @dfrownfelter in#8597)
React DOM
Fixed a decimal point issue on uncontrolled number inputs. (@nhunzaker in#7750)
Fixed rendering of textarea placeholder in IE11. (@aweary in#8020)
Worked around a script engine bug in IE9. (@eoin in#8018)
React Addons
Fixed build issues in RequireJS and SystemJS environments. (@gaearon in#8686)
Added missing package dependencies. (@kweiberth in#8467)

react.15-1-0.2016-05-21:

ljslbr.uRequire

name::
* McsEngl.ljslbr.uRequire@cptIt,
* McsEngl.uRequire@cptIt,

_DESCRIPTION:
* Write modular Javascript code once, run everywhere : UMD based module translation for both Browser (AMD / RequireJS) & Nodejs / commonjs.
[https://github.com/anodynos/urequire]

_ADDRESS.WPG:
* http://urequire.org//
* https://github.com/anodynos/urequire,
* https://twitter.com/urequire//

_HUMAN:
* agelos.pikoulas@gmail.com,

ljsalgo.USER-INTERFACE

name::
* McsEngl.ljsalgo.USER-INTERFACE@cptIt,
* McsEngl.ljsui@cptIt,

_WHOLE:
* webpage-userinterface#ql:lwpuic#

_ADDRESS.WPG:
* https://github.com/trueadm/inferno//

ljsalgo.CHART

name::
* McsEngl.ljsalgo.CHART@cptIt,

_ADDRESS.WPG:
* http://www.highcharts.com//
* http://nikolay.rocks/2016-09-09-responsive-charts,

ljsalgo.SLIDER

name::
* McsEngl.ljsalgo.SLIDER@cptIt,

_ADDRESS.WPG:
* Touch enabled minimalistic slider written in vanilla JavaScript. http://meandmax.github.io/lory/ https://github.com/meandmax/lory,

ljs'Organization

name::
* McsEngl.ljs'Organization@cptIt,

ljsogn.JS-Foundation

name::
* McsEngl.ljsogn.JS-Foundation@cptIt,
* McsEngl.JS-Foundation@cptIt,

_DESCRIPTION:
Developers rely on a growing portfolio of open source technologies to create, test and deploy critical applications. By creating a center of gravity for the open source JavaScript ecosystem, the JS Foundation’s mission is to drive broad adoption and ongoing development of key JavaScript solutions and related technologies. The JS Foundation will also work to facilitate collaboration within the JavaScript development community to ensure those projects maintain the quality and diverse contribution bases that provide for long-term sustainability.
[https://js.foundation/about/]

_TIME:
=== {2016-10-17} The Linux Foundation Unites JavaScript Community for Open Web Development
Welcomes JS Foundation and introduces Mentorship Program
LONDON (OSCON EU) and SAN FRANCISCO – October 17, 2016 – The Linux Foundation, the nonprofit advancing professional open source management for mass collaboration, today is announcing that JS Foundation is now a Linux Foundation Project. The JS Foundation is committed to help JavaScript application and server-side projects cultivate best practices and policies that promote high quality standards and broad, diverse contributions for long-term sustainability. Today the JS Foundation touts a new open, technical governance structure and also announces a Mentorship Program to help encourage a culture of collaboration and sustainability throughout the JavaScript community. Initial projects being welcomed into the mentorship program include: Appium, Interledger.js, JerryScript, Mocha, Moment.js, Node-RED and webpack.
[https://js.foundation/announcements/2016/10/17/Linux-Foundation-Unites-JavaScript-Community-Open-Web-Development/]

ljs'Tool

name::
* McsEngl.ljs'Tool@cptIt,
* McsEngl.ljstool@cptIt,
* McsEngl.ljs'building-tool@cptIt,
* McsEngl.ljs'tool@cptIt,
* McsEngl.ljstool@cptIt,

_DESCRIPTION:
The Short Answer
It is easy to decide which tools you need:
Small projects can get away with just an ES6 compiler
Single Page Apps need a module bundler too
Once your app is in production, use a task runner to automate anything else

And here are the packages which fulfil these requirements:
For compiling and polyfilling ES6, use Babel
For bundling your JavaScript files and dependencies into static assets, use Webpack
If your have other tasks like renaming files to avoid caching or publishing to the web, automate them with Gulp
[http://jamesknelson.com/which-build-system-should-i-use-for-my-javascript-app/]

ljstool'Resource

name::
* McsEngl.ljstool'Resource@cptIt,

_ADDRESS.WPG:
* https://dev.to/corgibytes/setting-up-a-minimal-yet-useful-javascript-dev-environment/

SPECIFIC

_SPECIFIC:
* build-tool,
* code-analysis-tool,
* debugger-tool,
* editor-tool,
* interpreter-(runtime)-tool,
* package-manager,
* testing-tool,
===
* ljb-tool,
* ljn-tool,

ljstool.ANALYZER

name::
* McsEngl.ljstool.ANALYZER@cptIt,
* McsEngl.ljstool.analyzer@cptIt,
* McsEngl.ljstool.linting@cptIt,

* McsEngl.analyzer-ljs@cptIt,
* McsEngl.ljstool.analyzer@cptIt,

_SPECIFIC:
* eslint##
* tern: https://github.com/ternjs/tern/

ljb'ESLint

name::
* McsEngl.ljb'ESLint@cptIt,
* McsEngl.ljsESLint@cptIt,
* McsEngl.ESLint-program@cptIt,

_DESCRIPTION:
besides finding potential bugs, linters can also help enforce code style.
[https://twitter.com/slicknet/status/940034826710671361]
===
ESLint is a JavaScript linting tool built on top of Esprima. The goal of the project is to create a linting tool where all rules are pluggable. This is achieved by having one rule per file and allowing each rules to inspect the AST at the points it wants.
[https://www.nczonline.net/blog/2013/07/16/introducing-eslint/]

_ADDRESS.WPG:
* http://eslint.org//

eslint'eslintrc

name::
* McsEngl.eslint'eslintrc@cptIt,

_CODE.ESLINT:
// Severity should be one of the following: 0 = off, 1 = warn, 2 = error (you passed 'false').
{
"root": true,
"parser": "espree",
"rules": {
"space-in-parens": 2,
"space-before-blocks": 2,
"keyword-spacing": 2,
"space-unary-ops": 2,
"space-before-function-paren": [2, {"anonymous": "always", "named": "never"}],
"no-use-before-define": [2, "nofunc"],
"camelcase": 2,
"semi": 2,
"comma-style": 2,
"no-lonely-if": 2,
"max-len": [2, 120],
"no-else-return": 2,
"no-trailing-spaces": 2,
"new-cap": 2,
"no-empty": 2,
"consistent-return": 0,
"no-new": 2,
"key-spacing": 2,
"no-multi-spaces": 2,
"valid-jsdoc": 2,
"brace-style": 2,
"no-throw-literal": 2,
"no-self-compare": 2,
"no-void": 2,
"no-unused-vars": 2,
"wrap-iife": 2,
"no-eq-null": 2,
"quotes": [2, "single"],
"indent": [2, 2],
"curly": 2,
"no-shadow": 0,
"no-undef": 2
},
"extends": "eslint:recommended",
"env": {
"node": true,
"es6": true,
"browser": true
}
}

eslintrule.new_cap:
68:36 error A constructor name should not start with a lowercase letter new-cap
"new-cap": 2,

eslint'Relation-to-JSHint

name::
* McsEngl.eslint'Relation-to-JSHint@cptIt,

_DESCRIPTION:
How ESLint differs from JSHint

Despite similar goals, ESLint and JSHint have some very specific differences. First and foremost, JSHint uses a progressive parser, finding errors along the way. ESLint uses Esprima, so the parsing is done first and then the rules are applied. That means JSHint will print out warnings up to and including a syntax error where ESLint will show only the syntax error. This makes JSHint much better for use in editors.

ESLint is much better suited for use in build systems and as a general command line utility. It works great for pre-commit hooks.

ESLint is a two-pass utility. The first pass is done by Esprima to parse the JavaScript and the second pass is a traversal of the AST to apply certain rules. JSHint is a single-pass utility, meaning that it will generally be faster.

ESLint is strictly a Node.js utility. JSHint runs on most JavaScript runtimes, including Rhino.
[https://www.nczonline.net/blog/2013/07/16/introducing-eslint/]

ljstool.jshint

name::
* McsEngl.ljstool.jshint@cptIt,
* McsEngl.ljnm.jshint@cptIt,
* McsEngl.JSHint@cptIt,
* McsEngl.ljn'jshint-module@cptIt,

_DESCRIPTION:
JSHint, A Static Code Analysis Tool for JavaScript

JSHint is a community-driven tool to detect errors and potential problems in JavaScript code and to enforce your team's coding conventions. We made JSHint very flexible so you can easily adjust it to your particular coding guidelines and the environment you expect your code to execute in.

Our goal is to help JavaScript developers write complex programs without worrying about typos and language gotchas.

We believe that static code analysis programs—as well as other code quality tools—are important and beneficial to the JavaScript community and, thus, should not alienate their users.

For general usage and hacking information, visit our website: http://jshint.com/.
[https://npmjs.org/package/jshint]

_DESCRIPTION:
JSHint is a community-driven tool to detect errors and potential problems in JavaScript code and to enforce your team's coding conventions.
It is very flexible so you can easily adjust it to your particular coding guidelines and the environment you expect your code to execute in.
[http://www.jshint.com/about/]

Inline configuration
In addition to using configuration files you can configure JSHint from within your files using special comments. These comments start either with jshint or global and are followed by a comma-separated list of values. For example, the following snippet will enable warnings about undefined and unused variables and tell JSHint about a global variable named MY_GLOBAL.

/* jshint undef: true, unused: true */
/* global MY_GLOBAL */
You can use both multi- and single-line comments to configure JSHint. These comments are function scoped meaning that if you put them inside a function they will affect only this function's code.
[http://www.jshint.com/docs/]

jshint'error

name::
* McsEngl.jshint'error@cptIt,

jshint'A_constructor_name_should_start_with_an_uppercase_letter:
newcap:false //to suppress

jshint'Don't_make_functions_within_a_loop:
/*jshint loopfunc: true */

jshint'Expected_an_assignment or function call and instead saw an expression:
-W030 //suppress

jshint'is_better_written_in_dot_notation:
-W069 //suppress

jshint'Possible_strict_violation:
/*jshint validthis:true */ to supress.

/*jshint maxlen:255 */

ljb'JSLint

name::
* McsEngl.ljb'JSLint@cptIt,
* McsEngl.conceptIt554.9,
* McsEngl.JSLint@cptIt554.9,

_ADDRESS.WPG:
* http://www.jslint.com//

_DESCRIPTION:
JSLint is a JavaScript program that looks for problems in JavaScript programs. It is a code quality tool.
[http://www.jslint.com/lint.html]
===
Checking code with JSLint

Many of the coding conventions that we just discussed can be verified by a tool called JSLint.

JSLint will analyze your JavaScript code and warn you of any unadvisable practices present in the code. It has quite a few options for you to ignore some of the rules if desired.

_jslint --indent 2 --sloppy true --continue true

_OPTION:
Description  option  Meaning
* bitwise: Tolerate bitwise operators:  true if bitwise operators should be allowed. (more)

* browser: Assume a browser:  true if the standard browser globals should be predefined: window, document, ...

* closure: Tolerate Google Closure idioms:  true if Google Closure annotations should be allowed.

* continue: Tolerate continue:  true if the continue statement should be allowed.

* couch: Assume CouchDB:  true if emit should be predefined.

* debug: Tolerate debugger statements:  true if debugger statements should be allowed. Set this option to false before going into production.

* devel: Assume console, alert, ...:  true if browser globals that are useful in development should be predefined. (more)

* eqeq: Tolerate == and !=:
true if the == and != operators should be tolerated. (more)

* es5: Tolerate ES5 syntax:  true if ES5 syntax should be allowed. It is likely that programs using this option will produce syntax errors on ES3 systems.

* evil: Tolerate eval:  true if eval should be allowed. (more)

* forin: Tolerate unfiltered for in:  true if unfiltered for in statements should be allowed. (more)

* indent: Strict white space indentation:  The number of spaces used for indentation (default is 4).

* maxerr: Maximum number of errors:  The maximum number of warnings reported. (default is 50)

* maxlen: Maximum line length:  The maximum number of characters in a line.

* newcap: Tolerate uncapitalized constructors:  true if Initial Caps with constructor functions is optional. (more)

* node: Assume Node.js:  true if Node.js globals should be predefined. (more)

* nomen: Tolerate dangling _ in identifiers:  true if names should not be checked for initial or trailing underbars.

* passfail: Stop on first error:  true if the scan should stop on first error.

* plusplus: Tolerate ++ and --:  true if ++ and -- should be allowed. (more)

* predef: Predefined ( , separated):  An array of strings, the names of predefined global variables, or an object whose keys are global variable names, and whose values are booleans that determine if each variable is assignable (also see global). predef is used with the option object, but not with the /*jslint*/ directive. You can also use the var statement to declare global variables in a script file.

* regexp: Tolerate . and [^...]. in /RegExp/:  true if . and [^...] should be allowed in RegExp literals. They match more material than might be expected, allowing attackers to confuse applications. These forms should not be used when validating in secure applications.

* rhino: Assume Rhino:  true if the Rhino environment globals should be predefined. (more)

* sloppy: Tolerate missing 'use strict' pragma:
 true if the ES5 'use strict'; pragma is not required. Do not use this pragma unless you know what you are doing.

* stupid: Tolerate stupidity:  true if blocking ('...Sync') methods can be used.

* sub: Tolerate inefficient subscripting:  true if subscript notation may be used for expressions better expressed in dot notation.

* todo: Tolerate TODO comments:  true if comments starting with TODO should be allowed.

* undef: Tolerate misordered definitions:  true if variables and functions need not be declared before used. This is not available in strict mode.

* unparam: Tolerate unused parameters:  true if warnings should not be given for unused parameters.

* vars: Tolerate many var statements per function:  true if multiple var statement per function should be allowed. (more)

* white: Tolerate messy white space:  true if strict whitespace rules should be ignored.

* windows: Assume Windows:  true if the Windows globals should be predefined. (more)
[http://www.jslint.com/lint.html]

ljblint'error

name::
* McsEngl.ljblint'error@cptIt,

_ADDRESS.WPG:
* http://jslinterrors.com//

jslint'error.Move_the_invocation_into_the_parens that contain the function:
from: (function(){})();
to: (function(){}());
it is a matter of convention!!!
[http://jslinterrors.com/move-the-invocation-into-the-parens-that-contain-the-function]

jslint'error.was_used_before_it_was_defined:
* http://jslinterrors.com/a-was-used-before-it-was-defined//
/*global chrome*/
/*global $, jQuery*/
$ was used before it was defined
===
/*jslint browser: true */
var elem = document.createElement("div");

/*jslint regexp: true*/
if (sPopup.replace(/<[^>]*>?/g, '').length > 1400) {
sPopup = sPopup.substring(0, 900);
sPopup = sPopup + ' ... ... ... ';
}
/*jslint regexp: false*/

ljblint'Programming-language

name::
* McsEngl.ljblint'Programming-language@cptIt,

Implementation
JSLint uses a Pratt Parser (Top Down Operator Precedence). It is written in JavaScript. The full source code is available: https://github.com/douglascrockford/JSLint.
[http://www.jslint.com/lint.html]

ljstool.Standard

name::
* McsEngl.ljstool.Standard@cptIt,

_DESCRIPTION:
JavaScript Standard Style Guide http://standardjs.com
[https://github.com/feross/standard]

ljstool.API-DOC-GENERATOR

name::
* McsEngl.ljstool.API-DOC-GENERATOR@cptIt,
* McsEngl.api-doc-generator-ljs@cptIt,
* McsEngl.javascript-api-doc-generator@cptIt,
* McsEngl.ljstool.api-doc-generatorcpt@cptIt,

_SPECIFIC:
* JSDoc##

_DESCRIPTION:
API documentation is different from normal documentation because API documentation is generated directly from the source code by reading the comments written in the source code.
[http://www.fusioncharts.com/blog/2013/12/jsdoc-vs-yuidoc-vs-doxx-vs-docco-choosing-a-javascript-documentation-generator/]

_ADDRESS.WPG:
* http://www.fusioncharts.com/blog/2013/12/jsdoc-vs-yuidoc-vs-doxx-vs-docco-choosing-a-javascript-documentation-generator/,

_SPECIFIC:
* https://wiki.appcelerator.org/display/tis/ScriptDoc+(SDOC)+2.0+Specification,
* http://jashkenas.github.io/docco//
* https://github.com/jsdoc3/jsdoc
* http://www.naturaldocs.org/ (perl)
* http://dojotoolkit.org/reference-guide/1.8/util/doctools/generate.html## (php)
* https://github.com/senchalabs/jsduck,

ljstool.documentation.js (docjs)

name::
* McsEngl.ljstool.documentation.js (docjs)@cptIt,
* McsEngl.docjs@cptIt,
* McsEngl.documentation.js@cptIt,
* McsEngl.docjs@cptIt,

_DESCRIPTION:
A documentation generation system that's beautiful by default, flexible across formats and styles, and powerful enough to support JSDoc's advanced syntax.
[https://github.com/documentationjs/documentation]
===
OUTPUT HTML + Markdown + JSON
documentation.js has pluggable output formats: you can get raw documentation as JSON, beautiful, customizable HTML, or Markdown that fits perfectly into an API.md or README.md file in a Github repository

Demos: self-documentation as HTML, Markdown, JSON
In production: Mapbox GL JS API

UNIVERSAL JavaScript + ES6 Syntax + CommonJS + C/C++
documentation.js aims to cover all flavors of modern JavaScript: everything from client-side libraries to native node.js modules with logic in C++.

INTEGRATED CLI + Node.js + Gulp + Grunt
documentation.js works in your workflow, whether you just want a command-line utility that generates documentation from your code, you use Gulp to publish websites, or you're building a new system and want low-level JavaScript methods.
[http://documentation.js.org//]

docjs'Generic

name::
* McsEngl.docjs'Generic@cptIt,

_GENERIC:
* nodejs-program##

docjs'Synopsis

name::
* McsEngl.docjs'Synopsis@cptIt,

_DESCRIPTION:
Usage: documentation <command> [options]

Commands:
serve [input..] generate, update, and display HTML documentation
build [input..] build documentation
lint [input..] check for common style and uniformity mistakes
readme [input..] inject documentation into your README.md

Options:
--lint check output for common style and uniformity mistakes
[boolean]
-t, --theme specify a theme: this must be a valid theme module
-p, --private generate documentation tagged as private [boolean]
--version Show version number [boolean]
--name project name. by default, inferred from package.json
--project-version project version. by default, inferred from package.json
--shallow shallow mode turns off dependency resolution, only
processing the specified files (or the main script
specified in package.json) [boolean] [default: false]
--polyglot polyglot mode turns off dependency resolution and enables
multi-language support. use this to document c++ [boolean]
-g, --github infer links to github in documentation [boolean]
-o, --output output location. omit for stdout, otherwise is a filename
for single-file outputs and a directory name for multi-file
outputs like html [default: "stdout"]
-c, --config configuration file. an array defining explicit sort order
-h, --help Show help [boolean]
-f, --format [choices: "json", "md", "html"] [default: "json"]
[https://github.com/documentationjs/documentation]
===
> node bin/documentation build index.js -f html --access=public -o docs/NODE_API

docjs'API

name::
* McsEngl.docjs'API@cptIt,

docjs'Comment-output-of-parser

name::
* McsEngl.docjs'Comment-output-of-parser@cptIt,

/** @name foo */
[ { description: '',
tags: [ [Object] ],
loc: SourceLocation { start: [Object], end: [Object] },
context: { loc: [Object], file: undefined, sortKey: 'undefined 00000001' },
errors: [],
name: 'foo' } ]

/** @param {object} foo */
[ { description: '',
tags: [ [Object] ],
loc: SourceLocation { start: [Object], end: [Object] },
context: { loc: [Object], file: undefined, sortKey: 'undefined 00000001' },
errors: [],
params: [ [Object] ] } ]


{
description: { type: 'root', children: [ [Object] ], position: { start: [Object], end: [Object] } },
tags: [],
loc: SourceLocation { start: Position { line: 2, column: 4 }, end: Position { line: 2, column: 15 } },
context: {
 loc: SourceLocation { start: [Object], end: [Object] },
 file: undefined,
 sortKey: 'undefined 00000003',
 code: '{\r\n /** Test */\r\n function _name() {}\r\n }' },
errors: []
}

docjs'documentation-shema object

name::
* McsEngl.docjs'documentation-shema object@cptIt,
* McsEngl.ljnm.documentation-schema@cptIt,
* McsEngl.npmpkg.documentation-schema@cptIt,

_DESCRIPTION:
documentation-schema
An abstract schema for JSDoc
api-json
api-json is a documentation data standard. It can be generated by documentation engines like documentationjs or written by hand.

api-json enables a two stage documentation process:

documentation extraction or authorship
output formatting
Maximum example
{
"name": "sort",
"kind": "function",
"description": "Create a stream.Transform that sorts its input of comments\nby the name tag, if any, and otherwise by filename.",
"memberof": "module",
"scope": "static",
"context": {
"loc": {
"start": {
"line": 9,
"column": 0
},
"end": {
"line": 23,
"column": 2
}
},
"file": "/Users/tmcw/src/documentation/streams/sort.js",
"code": "var sort = require('sort-stream');\n\n/**\n * Create a stream.Transform that sorts its input of comments\n * by the name tag, if any, and otherwise by filename.\n * @name sort\n * @return {stream.Transform} a transform stream\n */\nmodule.exports = function () {\n\n function getSortKey(comment) {\n for (var i = 0; i < comment.tags.length; i++) {\n if (comment.tags[i].title === 'name') {\n return comment.tags[i].name;\n }\n }\n return comment.context.file;\n }\n\n return sort(function (a, b) {\n return getSortKey(a).localeCompare(getSortKey(b));\n });\n};"
},
"returns": [
{
"title": "returns",
"description": "a transform stream",
"type": {
"type": "NameExpression",
"name": "stream.Transform"
}
}
]
}
[https://www.npmjs.com/package/documentation-schema]

_MEMBER:
object
[ 'comments', 'jsonSchema' ]

docjs'Evaluation

name::
* McsEngl.docjs'Evaluation@cptIt,

Why use documentation instead of JSDoc?

documentation aims to modernize and simplify the process of generating JavaScript documentation.

Beatiful defaults for HTML & Markdown output
Supports CommonJS require() syntax so that node modules can be documented by giving their main file
Heavily documented internally: all public and private functions in documentation are documented. JSDoc is not well documented internally.
Robust ES6 support
No Rhino cruft
Uses JSON literal objects for data representation instead of the abandoned and untagged TaffyDB project.
Uses high-quality node modules for syntax parsing, argument parsing, and other tasks: separates concerns so that we can focus on a robust solution
Customization points like plugins & templates are heavily documented and made to be flexible
[https://github.com/documentationjs/documentation/blob/master/docs/FAQ.md#why-use-documentation-instead-of-jsdoc]

docjs'Installation

name::
* McsEngl.docjs'Installation@cptIt,

_DESCRIPTION:
$ npm install -g documentation
===
$ git clone https://github.com/documentationjs/documentation.git
git@github.com:documentationjs/documentation.git
> npm install

docjs'Resource

name::
* McsEngl.docjs'Resource@cptIt,

_ADDRESS.WPG:
* http://documentation.js.org//
* https://github.com/documentationjs/documentation/
* https://github.com/documentationjs/gulp-documentation/
* https://github.com/eslint/doctrine/ the-parser used.

docjs'Syntax

name::
* McsEngl.docjs'Syntax@cptIt,

_DESCRIPTION:
documentation uses the JSDoc syntax and provides an alternative to the jsdoc application.
[https://github.com/documentationjs/documentation/blob/master/docs/FAQ.md#how-does-documentation-differ-from-jsdoc]

docjs'Tool

name::
* McsEngl.docjs'Tool@cptIt,

_DESCRIPTION:
// build docs
> node bin/documentation build index.js -f html -o docs/API
// npm run doc
// > documentation build index.js -f md --access=public > docs/NODE_API.md
===
// analysis
// npm run lint
"lint": "eslint bin lib index.js test",
===

docjs'Testing

name::
* McsEngl.docjs'Testing@cptIt,

uses tap program.

test\format_type.js:
27 tests ok

test\linker.js:
4 tests ok

dirTest\lib\parse.test.js
comment-tags

ljstool.hitp-apidoc#ql:pgmhitpapidocjs#

name::
* McsEngl.ljstool.hitp-apidoc@cptIt,

ljstool.JSDoc

name::
* McsEngl.ljstool.JSDoc@cptIt,
* McsEngl.jsdoc-api-doc-generator@cptIt,
* McsEngl.JSDoc@cptIt,

_DESCRIPTION:
An API documentation generator for JavaScript. http://usejsdoc.org
[https://github.com/jsdoc3/jsdoc]

_INSTALLATION:
> git clone https://github.com/jsdoc3/jsdoc.git

_ADDRESS.WPG:
* https://github.com/jsdoc3/jsdoc/
* http://usejsdoc.org//
* https://github.com/mlucool/gulp-jsdoc3/

jsdoc'Parser

name::
* McsEngl.jsdoc'Parser@cptIt,

_SPECIFIC:
Standalone JSDoc Parsers
https://github.com/75lb/jsdoc-parse
https://github.com/jonschlinkert/parse-comments
[https://github.com/documentationjs/documentation/wiki/See-also#standalone-jsdoc-parsers]
===
JSDoc Parse APIs
https://github.com/eslint/doctrine - this is what documentation.js uses
https://github.com/hegemonic/catharsis - what jsdoc uses
https://github.com/wkeese/js-doc-parse
https://github.com/jonschlinkert/parse-comments
https://github.com/Kuniwak/jsdoctypeparser - used by jscs-jsdoc
[https://github.com/documentationjs/documentation/wiki/See-also#jsdoc-parse-apis]

jsdocparser.doctrine (dcnpsr)

name::
* McsEngl.jsdocparser.doctrine (dcnpsr)@cptIt,
* McsEngl.dcnpsr@cptIt,
* McsEngl.doctrine-jsdoc-parser@cptIt,
* McsEngl.ljnm.doctrine@cptIt,
* McsEngl.npmpkg.doctrine@cptIt,

_DESCRIPTION:
Doctrine is a JSDoc parser that parses documentation comments from JavaScript (you need to pass in the comment, not a whole JavaScript file).
[https://www.npmjs.com/package/doctrine]

dcnpsr'Output

name::
* McsEngl.dcnpsr'Output@cptIt,

/**
Test description.
@param {string} arg1 - Argument1.
@return {string} Returned string.
*/
{
"description": "Test description.",
"tags": [
{
"title": "param",
"description": "Argument1.",
"type": {
"type": "NameExpression",
"name": "string"
},
"name": "arg1"
},
{
"title": "return",
"description": "Returned string.",
"type": {
"type": "NameExpression",
"name": "string"
}
}
]
}

dcnpsr'Member

name::
* McsEngl.dcnpsr'Member@cptIt,

object
[ 'Error',
'Syntax',
'parse',
'parseParamType',
'parseType',
'type',
'unwrapComment',
'version' ]

doctring.Syntax:
object
[ 'AllLiteral',
'ArrayType',
'BooleanLiteralType',
'FieldType',
'FunctionType',
'NameExpression',
'NonNullableType',
'NullLiteral',
'NullableLiteral',
'NullableType',
'NumericLiteralType',
'OptionalType',
'ParameterType',
'RecordType',
'RestType',
'StringLiteralType',
'TypeApplication',
'UndefinedLiteral',
'UnionType',
'VoidLiteral' ]

dcnpsr'Resource

name::
* McsEngl.dcnpsr'Resource@cptIt,

_ADDRESS.WPG:
* http://eslint.org/doctrine/demo//

jsdoc'Syntax

_CREATED: {2011-08-31}

name::
* McsEngl.jsdoc'Syntax@cptIt,
* McsEngl.conceptIt554.7,
* McsEngl.jsdoc-syntax@cptIt,
* McsEngl.jsdoc'syntax@cptIt,
* McsEngl.JSDoc-syntax@cptIt554.7,
* McsEngl.jsdocstx@cptIt,

_DESCRIPTION:
JSDoc is a syntax for adding inline API documentation to JavaScript source code. This is distinct from the various tools that parse and manipulate code that follows the JSDoc syntax.

The JSDoc syntax is similar to the Javadoc syntax, used for documenting Java code, but is specialized to work with JavaScript's more dynamic syntax and therefore unique, as it is not completely compatible with Javadoc. However, like Javadoc, JSDoc allows the programmer to create doclets and tags which can then be translated into published output, like HTML or RTF.
[http://en.wikipedia.org/wiki/JSDoc]

jsdoc'Tag.BLOCK

name::
* McsEngl.jsdoc'Tag.BLOCK@cptIt,
* McsEngl.jsdoc'block-tag@cptIt,
* McsEngl.jsdoctag@cptIt,

_DESCRIPTION:
Block tags, which are at the top level of a JSDoc comment.
Block tags always begin with an at sign (@). Each block tag must be followed by a line break, with the exception of the last block tag in a JSDoc comment.[http://usejsdoc.org/about-block-inline-tags.html]

_SPECIFIC:
@jsdocstx.abstract (synonyms: @jsdocstx.virtual)
This member must be implemented (or overridden) by the inheritor.
@jsdocstx.access
Specify the access level of this member (private, public, or protected).
@jsdocstx.alias
Treat a member as if it had a different name.
@jsdocstx.augments (synonyms: @jsdocstx.extends)
Indicate that a symbol inherits from, ands adds to, a parent symbol.
@jsdocstx.author
Identify the author of an item.
@jsdocstx.borrows
This object uses something from another object.

@jsdocstx.callback
Document a callback function.
@jsdocstx.class (synonyms: @jsdocstx.constructor)
This function is intended to be called with the "new" keyword.
@jsdocstx.classdesc
Use the following text to describe the entire class.
@jsdocstx.constant (synonyms: @jsdocstx.const)
Document an object as a constant.
@jsdocstx.constructs
This function member will be the constructor for the previous class.
@jsdocstx.copyright
Document some copyright information.

@jsdocstx.default (synonyms: @jsdocstx.defaultvalue)
Document the default value.
@jsdocstx.deprecated
Document that this is no longer the preferred way.
@jsdocstx.description (synonyms: @jsdocstx.desc)
Describe a symbol.
@jsdocstx.enum
Document a collection of related properties.
@jsdocstx.event
Document an event.
@jsdocstx.example
Provide an example of how to use a documented item.
@jsdocstx.exports
Identify the member that is exported by a JavaScript module.
@jsdocstx.external (synonyms: @jsdocstx.host)
Identifies an external class, namespace, or module.

@jsdocstx.file (synonyms: @jsdocstx.fileoverview, @jsdocstx.overview)
Describe a file.
@jsdocstx.fires (synonyms: @jsdocstx.emits)
Describe the events this method may fire.
@jsdocstx.function (synonyms: @jsdocstx.func, @jsdocstx.method)
Describe a function or method.

@jsdocstx.global
Document a global object.
@jsdocstx.ignore
Omit a symbol from the documentation.
@jsdocstx.implements
This symbol implements an interface.
@jsdocstx.inheritdoc
Indicate that a symbol should inherit its parent's documentation.
@jsdocstx.inner
Document an inner object.
@jsdocstx.instance
Document an instance member.
@jsdocstx.interface
This symbol is an interface that others can implement.
@jsdocstx.kind
What kind of symbol is this?
@jsdocstx.lends
Document properties on an object literal as if they belonged to a symbol with a given name.
@jsdocstx.license
Identify the license that applies to this code.
@jsdocstx.listens
List the events that a symbol listens for.
@jsdocstx.member (synonyms: @jsdocstx.var)
Document a member.
@jsdocstx.memberof
This symbol belongs to a parent symbol.
@jsdocstx.mixes
This object mixes in all the members from another object.
@jsdocstx.mixin
Document a mixin object.
@jsdocstx.module
Document a JavaScript module.
@jsdocstx.name
Document the name of an object.
@jsdocstx.namespace
Document a namespace object.
@jsdocstx.override
Indicate that a symbol overrides its parent.

@jsdocstx.param (synonyms: @jsdocstx.arg, @jsdocstx.argument)
Document the parameter to a function.
- // optional parameter
- @param {object} [oOptionsIn] - Options passed through to walker function.
- @param {object?} oOptionsIn - Options passed through to walker function.
- result: oOptionsIn (object?) Options passed through to walker function.

@jsdocstx.private
This symbol is meant to be private.
@jsdocstx.property (synonyms: @jsdocstx.prop)
Document a property of an object.
@jsdocstx.protected
This symbol is meant to be protected.
@jsdocstx.public
This symbol is meant to be public.
@jsdocstx.readonly
This symbol is meant to be read-only.
@jsdocstx.requires
This file requires a JavaScript module.
@jsdocstx.returns (synonyms: @jsdocstx.return)
Document the return value of a function.
@jsdocstx.see
Refer to some other documentation for more information.
@jsdocstx.since
When was this feature added?
@jsdocstx.static
Document a static member.
@jsdocstx.summary
A shorter version of the full description.
@jsdocstx.this
What does the 'this' keyword refer to here?
@jsdocstx.throws (synonyms: @jsdocstx.exception)
Describe what errors could be thrown.
@jsdocstx.todo
Document tasks to be completed.
@jsdocstx.tutorial
Insert a link to an included tutorial file.
@jsdocstx.type
Document the type of an object.
@jsdocstx.typedef
Document a custom type.
@jsdocstx.variation
Distinguish different objects with the same name.
@jsdocstx.version
Documents the version number of an item.
Inline Tags

{@jsdocstx.link} (synonyms: {@jsdocstx.linkcode}, {@jsdocstx.linkplain})
Link to another item in the documentation.
{@jsdocstx.tutorial}
Link to a tutorial.
[http://usejsdoc.org/]

jsdoc'Tag.INLINE

name::
* McsEngl.jsdoc'Tag.INLINE@cptIt,
* McsEngl.jsdoc'inline-tag@cptIt,

_DESCRIPTION:
Inline tags, which are within the text of a block tag or a description.
Inline tags also begin with an at sign. However, inline tags and their text must be enclosed in curly braces ({ and }). The { denotes the start of the inline tag, and the } denotes the end of the inline tag. If your tag's text includes a closing curly brace (}), you must escape it with a leading backslash (\). You do not need to use a line break after inline tags.
... Use {@link Shoe#setSize} to set the shoe size.
[http://usejsdoc.org/about-block-inline-tags.html]
===
//hml-link on mdast
array of [mdast](https://www.npmjs.com/package/mdast) syntax trees

jsdoc.JsDoc-Toolkit

name::
* McsEngl.jsdoc.JsDoc-Toolkit@cptIt,
* McsEngl.JsDoc-Toolkit@cptIt,

_DESCRIPTION:
The first version of JSDoc.
===
JsDoc Toolkit is an application, written in JavaScript, for automatically generating template-formatted, multi-page HTML (or XML, JSON, or any other text-based) documentation from commented JavaScript source code.

Based on the JSDoc.pm project, this was renamed "Jsdoc Toolkit" during development as it grew into more than a simple version upgrade.

NOTICE: As of 27 June 2010 the JsDoc Toolkit Version 2 project is no longer accepting any new Feature Request tickets. Any Feature Request tickets submitted after that date will be deleted without comment.

Subscribe to the Users List for announcements regarding what features will be included in the upcoming release of JSDoc 3.
[http://code.google.com/p/jsdoc-toolkit//]

ljstool.YUIDoc

name::
* McsEngl.ljstool.YUIDoc@cptIt,
* McsEngl.yuidoc@cptIt,
* McsEngl.yuidocjs@cptIt,
* McsEngl.YUIDoc@cptIt,

_DESCRIPTION:
YUIDoc is a Node.js application that generates API documentation from comments in source, using a syntax similar to tools like Javadoc and Doxygen. YUIDoc provides:
- Live previews. YUIDoc includes a standalone doc server, making it trivial to preview your docs as you write.
- Modern markup. YUIDoc's generated documentation is an attractive, functional web application with real URLs and graceful fallbacks for spiders and other agents that can't run JavaScript.
- Wide language support. YUIDoc was originally designed for the YUI project , but it is not tied to any particular library or programming language. You can use it with any language that supports /* */ comment blocks.
[http://yui.github.io/yuidoc//]
===
IMPORTANT: YUIDoc only parses YUIDoc comment blocks, not source code. This keeps YUIDoc relatively simple and language agnostic. However, it also means you must declare everything to YUIDoc explicitly. A code snippet will not display as a "method" or "class" until you describe it as such. A corollary is that YUIDoc will never generate empty, "stub" doc entries for API members that lack comment blocks.
[http://yui.github.io/yuidoc/syntax/index.html]

yuidoc'Synopsis

name::
* McsEngl.yuidoc'Synopsis@cptIt,

_DESCRIPTION:
> node node_modules\yuidoc\lib\cli (path)
===
YUI Doc generates API documentation from a modified JavaDoc syntax.

Current version (0.10.0)

Usage: yuidoc <options> <input path>

Common Options:
-c, --config, --configfile <filename> A JSON config file to provide configuration data.
You can also create a yuidoc.json file and place it
anywhere under your source tree and YUI Doc will find it
and use it.
-e, --extension <comma sep list of file extensions> The list of file extensions to parse
for api documentation. (defaults to .js)
-x, --exclude <comma sep list of directories> Directories to exclude from parsing
(defaults to '.DS_Store,.svn,CVS,.git,build_rollup_tmp,build_tmp')
-v, --version Show the current YUIDoc version
--project-version Set the doc version for the template
-N, --no-color Turn off terminal colors (for automation)
-C, --no-code Turn off code generation (don't include source files in output)
-n, --norecurse Do not recurse directories (default is to recurse)
--no-sort Do not alphabetical sorting of attributes, events, methods, and properties
-S, --selleck Look for Selleck component data and attach to API meta data
-V, --view Dump the Handlebars.js view data instead of writing template files
-p, --parse-only Only parse the API docs and create the JSON data, do not render templates
-o, --outdir <directory path> Path to put the generated files (defaults to ./out)
-t, --themedir <directory path> Path to a custom theme directory containing Handlebars templates
-H, --helpers <comma separated list of paths to files> Require these file and add Handlebars helpers. See docs for more information
--charset CHARSET Use this as the default charset for all file operations. Defaults to 'utf8'
-h, --help Show this help
-q, --quiet Supress logging output
-T, --theme <simple|default> Choose one of the built in themes (default is default)
--syntaxtype <js|coffee> Choose comment syntax type (default is js)
--server <port> Fire up the YUIDoc server for faster API doc developement. Pass optional port to listen on. (default is 3000)
--lint Lint your docs, will print parser warnings and exit code 1 if there are any

<input path> Supply a list of paths (shell globbing is handy here)
[http://yui.github.io/yuidoc/args/index.html]

yuidoc'Syntax

name::
* McsEngl.yuidoc'Syntax@cptIt,

yuidocstx.type:
type  
/**
* @type String
*/
/**
* @type HTMLElement|Node|String
*/  
Specifies the type of a property or attribute. You can specify a single type, a list of legal types separated by vertical bars, or if you are lazy, "any" or "mixed".
[]

ljstool.BUNDLER

name::
* McsEngl.ljstool.BUNDLER@cptIt,
* McsEngl.bundler-ljs@cptIt,
* McsEngl.module-bundler-ljs@cptIt,

_DESCRIPTION:
Single Page Apps need a module bundler too
[http://jamesknelson.com/which-build-system-should-i-use-for-my-javascript-app/]

_SPECIFIC:
* browserify##
* webpack##

ljstool.browserify

name::
* McsEngl.ljstool.browserify@cptIt,
* McsEngl.ljnm.browserify@cptIt,
* McsEngl.browserify@cptIt,

_GENERIC:
* bundler_npmpkg#ql:bundler_npmpkg_cpt#

_ADDRESS.WPG:
* http://browserify.org//
* https://github.com/substack/browserify-handbook,

_DESCRIPTION:
Introduction to browserify
There’s all this wonderful code on npm, the node.js package manager.
What if we could use that code in the browser?
Hey, we can. Use browserify.
With browserify, we can use some core node modules and many of the thousands of modules on npm in our browser-side code.
We can also write our browser-side javascript in the node.js style by using require.

Install browserify:
npm install -g browserify
We use the -g option to install browserify globally on your machine, allowing you to use it on the command line.

Brief example:
// require the core node events module
var EventEmitter = require('events').EventEmitter;

//create a new event emitter
var emitter = new EventEmitter;

// set up a listener for the event
emitter.on('pizza', function(message){
console.log(message);
});

// emit an event
emitter.emit('pizza', 'pizza is extremely yummy');
Put the above code in a file named index.js.

Now, to be able to run this code in the browser, enter this command in the terminal:

browserify index.js > bundle.js
The bundle.js file now has your event emitter code along with any dependencies on core node modules and shims to make them work in the browser.

You can include bundle.js in your html now like any other javascript file.

Example:

<!DOCTYPE html>
<html>
<head>
<title>node / browserify example</title>
</head>
<body>

<script src="./bundle.js"></script>
</body>
</html>
That’s it! Now you can use node modules and require in the browser!

Live reload development environment
If you’re in the middle of writing code, you’ll find running browserify in the terminal to regenerate bundle.js, then refreshing the browser to be time-consuming and annoying.

Enter beefy!

beefy is a command-line tool for automatically generating and serving your browserify bundles as you develop. Each time you save your javascript file beefy will regenerate bundle.js and refresh the browser automatically.

Install beefy:

npm install -g beefy
Now, run this:

beefy index.js:bundle.js --live
The --live option enables the live reload functionality of beefy.

This will by default serve your index.html file at http://localhost:9966. Open Chrome, enter that url, then open the javascript console by using the keyboard shortcut command+option+j.

You’ll see pizza is extremely yummy in the javascript console!
[http://superbigtree.tumblr.com/post/54873453939/introduction-to-browserify]

babelify

name::
* McsEngl.ljnm.babelify@cptIt,
* McsEngl.npmpkg.babelify@cptIt,
* McsEngl.babelify@cptIt,

_DESCRIPTION:
babelify
Babel browserify transform
As of Babel 6.0.0 there are no plugins included by default. For babelify to be useful, you must also include some presets and/or plugins.

Installation
$ npm install --save-dev babelify
Usage
CLI
$ browserify script.js -o bundle.js -t [ babelify --presets [ es2015 react ] ]
Node
var fs = require("fs");
var browserify = require("browserify");
browserify("./script.js")
.transform("babelify", {presets: ["es2015", "react"]})
.bundle()
.pipe(fs.createWriteStream("bundle.js"));
NOTE: Presets and plugins need to be installed as separate modules. For the above examples to work, you'd need to also install babel-preset-es2015 and babel-preset-react:

$ npm install --save-dev babel-preset-es2015 babel-preset-react
[https://www.npmjs.com/package/babelify]

ljstool.webpack (ljswpk)

name::
* McsEngl.ljstool.webpack (ljswpk)@cptIt,
* McsEngl.webpack@cptIt,
* McsEngl.ljswpk@cptIt,
* McsEngl.webpack-bundler@cptIt,

ljswpk'Configuration-file

name::
* McsEngl.ljswpk'Configuration-file@cptIt,

Moving to a configuration file.
As your project grows and your configuration becomes more complex, it becomes unwieldy to configure webpack from the command line. Let’s create a configuration file instead.

1. Create webpack.config.js:
module.exports = {
entry: './src/app.js',
output: {
path: './bin',
filename: 'app.bundle.js'
}
};
A webpack configuration file is a CommonJS-style module. So you can run any kind of code here, as long as a configuration object is exported out of this module.

2. With the configuration file in place, you can now simply run webpack like this:
webpack
webpack will read the configuration file, build the bundle, and save it as bin/app.bundle.js. If you examine webpack’s output you’ll see that it included both source files.

3. Run bin/app.bundle.js and you’ll get your list of cats again.
node bin/app.bundle.js
["dave", "henry", "martha"]
You can also require() modules installed via npm with no extra configuration.
[http://webpack.github.io/docs/usage.html#moving-to-a-configuration-file]

ljswpk'Loader

name::
* McsEngl.ljswpk'Loader@cptIt,

_DESCRIPTION:
Loaders are transformations that are applied on a resource file of your app. They are functions (running in node.js) that take the source of a resource file as the parameter and return the new source.
For example, you can use loaders to tell webpack to load CoffeeScript or JSX.
[http://webpack.github.io/docs/using-loaders.html]
===
Loaders are special modules webpack uses to ‘load’ other modules (written in another language) into JavaScript (that webpack understands).
[http://webpack.github.io/docs/usage.html#using-loaders]

ljswpk'Resource

name::
* McsEngl.ljswpk'Resource@cptIt,

_ADDRESS.WPG:
* http://jamesknelson.com/webpack-made-simple-build-es6-less-with-autorefresh-in-26-lines//

ljstool.DEBUGGER

name::
* McsEngl.ljstool.DEBUGGER@cptIt,

_ADDRESS.WPG:
* https://github.com/devtools-html/debugger.html,

ljstool.FILE-WATCHING

name::
* McsEngl.ljstool.FILE-WATCHING@cptIt,
* McsEngl.ljstool.file-watching@cptIt,

ljstool.chokidar-cli

name::
* McsEngl.ljstool.chokidar-cli@cptIt,
* McsEngl.ljstool.chokidar-cli@cptIt,

_DESCRIPTION:
Fast cross-platform cli utility to watch file system changes https://www.npmjs.com/package/chokidar-cli
[https://github.com/kimmobrunfeldt/chokidar-cli]

ljstool.MINIFIER

name::
* McsEngl.ljstool.MINIFIER@cptIt,
* McsEngl.ljstool.minifier@cptIt,

ljstool.JSMin

name::
* McsEngl.ljstool.JSMin@cptIt,

SOURCE:
* http://www.crockford.com/javascript/jsmin.html

JSMin
JSMin is one of the most popular tools to minify JavaScript code. On its web site you will find several versions written in different programming languages. That includes a version written in JavaScript itself, which we can try online at http://fmarcia.info/jsmin/test.html.

If you prefer, you can download the .exe version of JSMin and run it from the command line like this.

Syntax
jsmin.exe < myLibrary.js > myLibrary-minified.js

ljstool.uglify-js

name::
* McsEngl.ljstool.uglify-js@cptIt,
* McsEngl.ljnm.uglify-js@cptIt,
* McsEngl.ljn'uglify-js-module@cptIt,
* McsEngl.UglifyJS@cptIt,
* McsEngl.ljstool.uglifyJS-minifier@cptIt,

_DESCRIPTION:
UglifyJS 2
UglifyJS is a JavaScript parser, minifier, compressor or beautifier toolkit.
This page documents the command line utility. For API and internals documentation see my website. There's also an in-browser online demo (for Firefox, Chrome and probably Safari).
[https://npmjs.org/package/uglify-js]

_DESCRIPTION:
UglifyJS is a JavaScript parser, minifier, compressor or beautifier toolkit.
[https://github.com/mishoo/UglifyJS2]

_ADDRESS.WPG:
* https://www.npmjs.com/package/uglifyjs,
* https://github.com/mishoo/UglifyJS2,
* http://lisperator.net/uglifyjs/parser, online demo.
* http://marijnhaverbeke.nl//uglifyjs,
UglifyJS JavaScript minification version 2.2.1
* https://github.com/mishoo/UglifyJS,

ljstool.MODULE-LOADER

name::
* McsEngl.ljstool.MODULE-LOADER@cptIt,
* McsEngl.ljstool.module-loader@cptIt,

ljstool.systemJS

name::
* McsEngl.ljstool.systemJS@cptIt,
* McsEngl.SystemJS@cptIt,

_DESCRIPTION:
Dynamic ES module loader
[https://github.com/systemjs/systemjs]

ljstool.PACKAGE-MANAGER

name::
* McsEngl.ljstool.PACKAGE-MANAGER@cptIt,

_ADDRESS.WPG:
* https://github.com/yarnpkg/yarn,
* https://nolanlawson.com/2017/01/09/how-to-write-a-javascript-package-for-both-node-and-the-browser//
* https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers//

_SPECIFIC:
* jspm,
* npm,
* yarn,

ljstool.jspm

name::
* McsEngl.ljstool.jspm@cptIt,
* McsEngl.jspm@cptIt,
* McsEngl.ljstool.jspm@cptIt,

_DESCRIPTION:
jspm is a package manager for the SystemJS universal module loader, built on top of the dynamic ES6 module loader
[http://jspm.io/]
===
Registry and format agnostic JavaScript package manager
[https://www.npmjs.com/package/jspm]

_ADDRESS.WPG:
* http://jspm.io//
* http://jspm.io/docs/getting-started.html,
* https://www.npmjs.com/package/jspm,

ljstool.PARSER

name::
* McsEngl.ljstool.PARSER@cptIt,
* McsEngl.ljstool.parser@cptIt,

_ADDRESS.WPG:
* espree: https://github.com/eslint/espree/
* esprima: https://github.com/ariya/esprima,
http://esprima.org/doc/index.html,
* acorn: http://marijnhaverbeke.nl/acorn//
===
* https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Parser_API/

ljsparser.ACORN (written js)

name::
* McsEngl.ljsparser.ACORN (written js)@cptIt,
* McsEngl.acorn@cptIt,
* McsEngl.prAcorn@cptIt,

_ADDRESS.WPG:
* http://marijnhaverbeke.nl/acorn//
* https://github.com/marijnh/acorn,

_DESCRIPTION:
A tiny, fast JavaScript parser, written completely in JavaScript.
...
Command line interface

The bin/acorn utility can be used to parse a file from the command line. It accepts as arguments its input file and the following options:

--ecma3|--ecma5: Sets the ECMAScript version to parse. Default is version 5.

--strictSemicolons: Prevents the parser from doing automatic semicolon insertion. Statements that do not end in semicolons will generate an error.

--locations: Attaches a "loc" object to each node with "start" and "end" subobjects, each of which contains the one-based line and zero-based column numbers in {line, column} form.

--compact: No whitespace is used in the AST output.

--silent: Do not output the AST, just return the exit status.

--help: Print the usage information and quit.

The utility spits out the syntax tree as JSON data.
[https://github.com/marijnh/acorn]

prAcorn.executing

name::
* McsEngl.prAcorn.executing@cptIt,

> node bin\acorn --help

ljsparser.Babylon

name::
* McsEngl.ljsparser.Babylon@cptIt,
* McsEngl.babylon-ljs-parser@cptIt,
* McsEngl.ljnm.babylon@cptIt,
* McsEngl.ljsparser.babylon@cptIt,
* McsEngl.npmpkg.babylon@cptIt,

_DESCRIPTION:
Babylon is a JavaScript parser used in Babel.
The latest ECMAScript version enabled by default (ES2017).
Comment attachment.
Support for JSX and Flow.
Support for experimental language proposals (accepting PRs for anything at least stage-0).
[https://github.com/babel/babylon]

Ast

_ADDRESS.WPG:
* https://github.com/babel/babylon/blob/master/ast/spec.md,

ljsparser.ESPRIMA

name::
* McsEngl.ljsparser.ESPRIMA@cptIt,
* McsEngl.ljsparser.esprima@cptIt,
* McsEngl.esprima-ljsparser@cptIt,

_ADDRESS.WPG:
* http://esprima.org//
* https://github.com/ariya/esprima,
* http://esprima.org/doc/index.html,
* http://ariya.ofilabs.com/2012/07/behind-esprima.html,

_DESCRIPTION:
Esprima is a high performance, standard-compliant ECMAScript parser written in ECMAScript (also popularly known as JavaScript).
Features
Full support for ECMAScript 5.1 (ECMA-262)
Sensible syntax tree format, compatible with Mozilla Parser AST
Optional tracking of syntax node location (index-based and line-column)
Heavily tested (> 700 tests with full code coverage)
Partial support for ECMAScript 6
Esprima serves as an important building block for some JavaScript language tools, from code instrumentation to editor autocompletion.
[http://esprima.org/]

esprima'code'function

name::
* McsEngl.esprima'code'function@cptIt,

_FUNCTION:
* finish: function () {
* finishArrayExpression: function (elements) {
* finishArrowFunctionExpression: function (params, defaults, body, expression) {
* finishAssignmentExpression: function (operator, left, right) {
* finishBinaryExpression: function (operator, left, right) {
* finishBlockStatement: function (body) {
* finishBreakStatement: function (label) {
* finishCallExpression: function (callee, args) {
* finishCatchClause: function (param, body) {
* finishConditionalExpression: function (test, consequent, alternate) {
* finishContinueStatement: function (label) {
* finishDebuggerStatement: function () {
* finishDoWhileStatement: function (body, test) {
* finishEmptyStatement: function () {
* finishExpressionStatement: function (expression) {
* finishForInStatement: function (left, right, body) {
* finishForStatement: function (init, test, update, body) {
* finishFunctionDeclaration: function (id, params, defaults, body) {
* finishFunctionExpression: function (id, params, defaults, body) {
* finishIdentifier: function (name) {
* finishIfStatement: function (test, consequent, alternate) {
* finishLabeledStatement: function (label, body) {
* finishLiteral: function (token) {
* finishMemberExpression: function (accessor, object, property) {
* finishNewExpression: function (callee, args) {
* finishObjectExpression: function (properties) {
* finishPostfixExpression: function (operator, argument) {
* finishProgram: function (body) {
* finishProperty: function (kind, key, value) {
* finishReturnStatement: function (argument) {
* finishSequenceExpression: function (expressions) {
* finishSwitchCase: function (test, consequent) {
* finishSwitchStatement: function (discriminant, cases) {
* finishThisExpression: function () {
* finishThrowStatement: function (argument) {
* finishTryStatement: function (block, guardedHandlers, handlers, finalizer) {
* finishUnaryExpression: function (operator, argument) {
* finishVariableDeclaration: function (declarations, kind) {
* finishVariableDeclarator: function (id, init) {
* finishWhileStatement: function (test, body) {
* finishWithStatement: function (object, body) {
* function (whole, index) {
* function Node() {
* function Position() {
* function SourceLocation() {
* function WrappingNode(startToken) {
* function WrappingSourceLocation(startToken) {
* function addComment(type, value, start, end, loc) {
* function advance() {
* function advanceSlash() {
* function assert(condition, message) {
* function binaryPrecedence(token, allowIn) {
* function collectRegex() {
* function collectToken() {
* function consumeSemicolon() {
* function expect(value) {
* function expectKeyword(keyword) {
* function filterTokenLocation() {
* function getEscapedIdentifier() {
* function getIdentifier() {
* function isDecimalDigit(ch) {
* function isFutureReservedWord(id) {
* function isHexDigit(ch) {
* function isIdentifierName(token) {
* function isIdentifierPart(ch) {
* function isIdentifierStart(ch) {
* function isKeyword(id) {
* function isLeftHandSide(expr) {
* function isLineTerminator(ch) {
* function isOctalDigit(ch) {
* function isRestrictedWord(id) {
* function isStrictModeReservedWord(id) {
* function isWhiteSpace(ch) {
* function lex() {
* function match(value) {
* function matchAssign() {
* function matchKeyword(keyword) {
* function parse(code, options) {
* function parseArguments() {
* function parseArrayInitialiser() {
* function parseArrowFunctionExpression(options, node) {
* function parseAssignmentExpression() {
* function parseBinaryExpression() {
* function parseBlock() {
* function parseBreakStatement(node) {
* function parseCatchClause() {
* function parseComputedMember() {
* function parseConciseBody() {
* function parseConditionalExpression() {
* function parseConstLetDeclaration(kind) {
* function parseContinueStatement(node) {
* function parseDebuggerStatement(node) {
* function parseDoWhileStatement(node) {
* function parseEmptyStatement() {
* function parseExpression() {
* function parseExpressionStatement(node) {
* function parseForStatement(node) {
* function parseForVariableDeclaration() {
* function parseFunctionDeclaration() {
* function parseFunctionExpression() {
* function parseFunctionSourceElements() {
* function parseGroupExpression() {
* function parseIfStatement(node) {
* function parseLeftHandSideExpression() {
* function parseLeftHandSideExpressionAllowCall() {
* function parseNewExpression() {
* function parseNonComputedMember() {
* function parseNonComputedProperty() {
* function parseObjectInitialiser() {
* function parseObjectProperty() {
* function parseObjectPropertyKey() {
* function parseParam(options) {
* function parseParams(firstRestricted) {
* function parsePostfixExpression() {
* function parsePrimaryExpression() {
* function parseProgram() {
* function parsePropertyFunction(param, first) {
* function parseReturnStatement(node) {
* function parseSourceElement() {
* function parseSourceElements() {
* function parseStatement() {
* function parseStatementList() {
* function parseSwitchCase() {
* function parseSwitchStatement(node) {
* function parseThrowStatement(node) {
* function parseTryStatement(node) {
* function parseUnaryExpression() {
* function parseVariableDeclaration(kind) {
* function parseVariableDeclarationList(kind) {
* function parseVariableIdentifier() {
* function parseVariableStatement(node) {
* function parseWhileStatement(node) {
* function parseWithStatement(node) {
* function peek() {
* function peekLineTerminator() {
* function reinterpretAsCoverFormalsList(expressions) {
* function scanHexEscape(prefix) {
* function scanHexLiteral(start) {
* function scanIdentifier() {
* function scanNumericLiteral() {
* function scanOctalLiteral(start) {
* function scanPunctuator() {
* function scanRegExp() {
* function scanRegExpBody() {
* function scanRegExpFlags() {
* function scanStringLiteral() {
* function scanUnicodeCodePointEscape() {
* function skipComment() {
* function skipMultiLineComment() {
* function skipSingleLineComment(offset) {
* function testRegExp(pattern, flags) {
* function throwError(token, messageFormat) {
* function throwErrorTolerant() {
* function throwUnexpected(token) {
* function tokenize(code, options) {
* function validateParam(options, param, name) {

function esprima'getEscapedIdentifier() {
var ch, id;

ch = source.charCodeAt(index++);
id = String.fromCharCode(ch);

// '\u' (U+005C, U+0075) denotes an escaped character.
if (ch === 0x5C) {
if (source.charCodeAt(index) !== 0x75) {
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
}
++index;
ch = scanHexEscape('u');
if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) {
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
}
id = ch;
}

while (index < length) {
ch = source.charCodeAt(index);
if (!isIdentifierPart(ch)) {
break;
}
++index;
id += String.fromCharCode(ch);

// '\u' (U+005C, U+0075) denotes an escaped character.
if (ch === 0x5C) {
id = id.substr(0, id.length - 1);
if (source.charCodeAt(index) !== 0x75) {
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
}
++index;
ch = scanHexEscape('u');
if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) {
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
}
id += ch;
}
}

return id;
}

esprima'executing

name::
* McsEngl.esprima'executing@cptIt,

> node bin/esparse test.js

with Node.js

name::
* McsEngl.with Node.js@cptIt,

With Node.js

Esprima is available as a Node.js package, install it using npm:

npm install esprima
Load the module with require and use it:

var esprima = require('esprima');
console.log(JSON.stringify(esprima.parse('var answer = 42'), null, 4));
[http://esprima.org/doc/index.html]

esprima'output

name::
* McsEngl.esprima'output@cptIt,

_DESCRIPTION:
The output of the parser is expected to be compatible with Mozilla SpiderMonkey Parser API.
[https://developer.mozilla.org/en/SpiderMonkey/Parser_API]
...
The output of the parser is the syntax tree formatted in JSON,
[http://esprima.org/doc/index.html]

esprima'tokenizer

name::
* McsEngl.esprima'tokenizer@cptIt,

_DESCRIPTION:
Since version 1.1, it is also possible to only tokenize the code:
> esprima.tokenize(code, options);
The output of the tokenizer is an array with every element in the array representing a token. The token has two properties, type and value. the possible token types are Boolean, Identifier, Keyword, Null, Numeric, Punctuator, String, or RegularExpression.
[http://esprima.org/doc/index.html]

escodegen (AST -> JS)#ql:escodegen@cptIt#

name::
* McsEngl.escodegen (AST -> JS)@cptIt,

ljstool.RUNTIME

name::
* McsEngl.ljstool.RUNTIME@cptIt,

ljstool.babel

name::
* McsEngl.ljstool.babel@cptIt,
* McsEngl.babel-ljs-compiler@cptIt,
* McsEngl.ljstool.babel@cptIt,

_DESCRIPTION:
Babel is a JavaScript compiler.
Use next generation JavaScript, today.
[https://babeljs.io//]

npmpkg.babel-package

name::
* McsEngl.npmpkg.babel-package@cptIt,
* McsEngl.ljnm.babel-package@cptIt,
* McsEngl.npmpkg.babel-package@cptIt,

_SPECIFIC:
babel-cli  README: add --save-dev [skip ci]  8 days ago
babel-code-frame  Add `forceColor` option to `babel-code-frame` (#4913)  6 days ago
babel-core  update package documentation (#4948) [skip ci]  21 hours ago
babel-generator  README: add --save-dev [skip ci]  8 days ago
babel-helper-bindify-decorators  v6.18.0  a month ago
babel-helper-builder-binary-assignment-operator-visitor  v6.18.0  a month ago
babel-helper-builder-conditional-assignment-operator-visitor  v6.18.0  a month ago
babel-helper-builder-react-jsx  v6.18.0  a month ago
babel-helper-call-delegate  v6.18.0  a month ago
babel-helper-define-map  v6.18.0  a month ago
babel-helper-explode-assignable-expression  v6.18.0  a month ago
babel-helper-explode-class  v6.18.0  a month ago
babel-helper-fixtures  Remove shouldIgnore check (#4907)  8 days ago
babel-helper-function-name  v6.18.0  a month ago
babel-helper-get-function-arity  v6.18.0  a month ago
babel-helper-hoist-variables  v6.18.0  a month ago
babel-helper-optimise-call-expression  v6.18.0  a month ago
babel-helper-plugin-test-runner  v6.18.0  a month ago
babel-helper-regex  v6.18.0  a month ago
babel-helper-remap-async-to-generator  v6.18.0  a month ago
babel-helper-replace-supers  v6.18.0  a month ago
babel-helper-transform-fixture-test-runner  Fix bug + Generate test fixtures if no expected.js (#4858)  20 days ago
babel-helpers  README: add --save-dev [skip ci]  8 days ago
babel-messages  README: add --save-dev [skip ci]  8 days ago
babel-plugin-check-es2015-constants  README: remove dollar in sh snippets [skip ci]  8 days ago
babel-plugin-external-helpers  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-async-functions  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-async-generators  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-class-constructor-call  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-class-properties  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-decorators  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-do-expressions  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-dynamic-import  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-exponentiation-operator  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-export-extensions  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-flow  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-function-bind  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-function-sent  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-jsx  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-object-rest-spread  README: add --save-dev [skip ci]  8 days ago
babel-plugin-syntax-trailing-function-commas  Add `test` to `babel-plugin-syntax-trailing-function-commas` `.npmign…  4 days ago
babel-plugin-transform-async-functions  README: add --save-dev [skip ci]  8 days ago
babel-plugin-transform-async-generator-functions  Update async READMEs from babel.github.io [skip ci] (#4919)  7 days ago
babel-plugin-transform-async-to-generator  Update async READMEs from babel.github.io [skip ci] (#4919)  7 days ago
babel-plugin-transform-async-to-module-method  Update async READMEs from babel.github.io [skip ci] (#4919)  7 days ago
babel-plugin-transform-class-constructor-call  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-class-properties  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-decorators  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-do-expressions  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-es2015-arrow-functions  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-block-scoped-functions  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-block-scoping  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-classes  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-es2015-computed-properties  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-destructuring  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-duplicate-keys  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-es2015-for-of  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-function-name  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-instanceof  README: add --save-dev [skip ci]  8 days ago
babel-plugin-transform-es2015-literals  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-modules-amd  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-modules-commonjs  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-modules-systemjs  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-modules-umd  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-object-super  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-parameters  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-es2015-shorthand-properties  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-spread  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-sticky-regex  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-template-literals  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es2015-typeof-symbol  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-es2015-unicode-regex  Update transform-es2015 READMEs from babel.github.io [skip ci] (#4926)  6 days ago
babel-plugin-transform-es3-member-expression-literals  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-es3-property-literals  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-es5-property-mutators  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-eval  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-exponentiation-operator  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-export-extensions  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-flow-comments  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-flow-strip-types  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-function-bind  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-jscript  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-object-assign  Update transform-object-assign's README from babel.github.io [skip ci] (  6 days ago
babel-plugin-transform-object-rest-spread  Fix for object-rest with parameters destructuring nested rest (#4883)  6 days ago
babel-plugin-transform-object-set-prototype-of-to-assign  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-proto-to-assign  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-react-constant-elements  Fix some React transform README issues [skip ci] (#4917)  7 days ago
babel-plugin-transform-react-display-name  Add example to transform-react-display-name docs (#4939)  4 days ago
babel-plugin-transform-react-inline-elements  Fix some React transform README issues [skip ci] (#4917)  7 days ago
babel-plugin-transform-react-jsx-compat  Fix some React transform README issues [skip ci] (#4917)  7 days ago
babel-plugin-transform-react-jsx-self  Add example to transform-react-display-name docs (#4939)  4 days ago
babel-plugin-transform-react-jsx-source  Add example to transform-react-display-name docs (#4939)  4 days ago
babel-plugin-transform-react-jsx  Fix some React transform README issues [skip ci] (#4917)  7 days ago
babel-plugin-transform-regenerator  Update async READMEs from babel.github.io [skip ci] (#4919)  7 days ago
babel-plugin-transform-runtime  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-transform-strict-mode  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-plugin-undeclared-variables-check  Update plugins READMEs from babel.github.io [skip ci] (#4931)  5 days ago
babel-polyfill  v6.16.0  2 months ago
babel-preset-es2015  update readmes [skip ci]  8 days ago
babel-preset-es2016  README: remove dollar in sh snippets [skip ci]  8 days ago
babel-preset-es2017  README: remove dollar in sh snippets [skip ci]  8 days ago
babel-preset-latest  update readmes [skip ci]  8 days ago
babel-preset-react  README: remove dollar in sh snippets [skip ci]  8 days ago
babel-preset-stage-0  README: remove dollar in sh snippets [skip ci]  8 days ago
babel-preset-stage-1  README: remove dollar in sh snippets [skip ci]  8 days ago
babel-preset-stage-2  README: remove dollar in sh snippets [skip ci]  8 days ago
babel-preset-stage-3  README: remove dollar in sh snippets [skip ci]  8 days ago
babel-register  Update README.md (#4937) [skip ci]  2 days ago
babel-runtime  v6.18.0 for babel-runtime [skip ci]  a month ago
babel-template  README: add --save-dev [skip ci]  8 days ago
babel-traverse  Fix eslint (#4897)  11 days ago
babel-types  README: remove dollar in sh snippets [skip ci]  8 days ago
babel  v6.5.2  10 months ago
[https://github.com/babel/babel/tree/master/packages]

npmpkg.babel-core

name::
* McsEngl.npmpkg.babel-core@cptIt,
* McsEngl.ljnm.babel-core@cptIt,
* McsEngl.npmpkg.babel-core@cptIt,

_DESCRIPTION:
[https://github.com/babel/babel/tree/master/packages/babel-core]

npmpkg.babylon#ql:ljnm.babylon#

name::
* McsEngl.npmpkg.babylon@cptIt,
* McsEngl.ljnm.babel-types@cptIt,
* McsEngl.npmpkg.babel-types@cptIt,

npmpkg.babel-traverse

name::
* McsEngl.npmpkg.babel-traverse@cptIt,
* McsEngl.ljnm.babel-traverse@cptIt,
* McsEngl.npmpkg.babel-traverse@cptIt,

_DESCRIPTION:
[https://github.com/babel/babel/tree/master/packages/babel-traverse]

npmpkg.babel-generator

name::
* McsEngl.npmpkg.babel-generator@cptIt,
* McsEngl.ljnm.babel-generator@cptIt,
* McsEngl.npmpkg.babel-generator@cptIt,

_DESCRIPTION:
Turns an AST into code.
[https://github.com/babel/babel/tree/master/packages/babel-generator]

npmpkg.babel-types object

name::
* McsEngl.npmpkg.babel-types object@cptIt,
* McsEngl.ljnm.babel-types@cptIt,
* McsEngl.npmpkg.babel-types@cptIt,

_DESCRIPTION:
This module contains methods for building ASTs manually and for checking the types of AST nodes.
[https://github.com/babel/babel/tree/master/packages/babel-types]

_MEMBER:
object
[ 'ALIAS_KEYS', 'AnyTypeAnnotation', 'ArrayExpression', 'ArrayPattern', 'ArrayTypeAnnotation', 'ArrowFunctionExpression', 'AssignmentExpression', 'AssignmentPattern', 'AwaitExpression', 'BINARY_OPERATORS', 'BINARY_TYPES', 'BLOCKPARENT_TYPES', 'BLOCK_SCOPED_SYMBOL', 'BLOCK_TYPES', 'BOOLEAN_BINARY_OPERATORS', 'BOOLEAN_NUMBER_BINARY_OPERATORS', 'BOOLEAN_UNARY_OPERATORS', 'BUILDER_KEYS', 'BinaryExpression', 'BindExpression', 'BlockStatement', 'BooleanLiteral', 'BooleanLiteralTypeAnnotation', 'BooleanTypeAnnotation', 'BreakStatement', 'CLASS_TYPES', 'COMMENT_KEYS', 'COMPARISON_BINARY_OPERATORS', 'COMPLETIONSTATEMENT_TYPES', 'CONDITIONAL_TYPES', 'CallExpression', 'CatchClause', 'ClassBody', 'ClassDeclaration', 'ClassExpression', 'ClassImplements', 'ClassMethod', 'ClassProperty', 'ConditionalExpression', 'ContinueStatement', 'DECLARATION_TYPES', 'DEPRECATED_KEYS', 'DebuggerStatement', 'DeclareClass', 'DeclareFunction', 'DeclareInterface', 'DeclareModule', 'DeclareModuleExports', 'DeclareTypeAlias', 'DeclareVariable', 'Decorator', 'Directive', 'DirectiveLiteral', 'DoExpression', 'DoWhileStatement', 'EQUALITY_BINARY_OPERATORS', 'EXPORTDECLARATION_TYPES', 'EXPRESSIONWRAPPER_TYPES', 'EXPRESSION_TYPES', 'EmptyStatement', 'EmptyTypeAnnotation', 'ExistentialTypeParam', 'ExportAllDeclaration', 'ExportDefaultDeclaration', 'ExportDefaultSpecifier', 'ExportNamedDeclaration', 'ExportNamespaceSpecifier', 'ExportSpecifier', 'ExpressionStatement', 'FLATTENABLE_KEYS', 'FLIPPED_ALIAS_KEYS', 'FLOWBASEANNOTATION_TYPES', 'FLOWDECLARATION_TYPES', 'FLOW_TYPES', 'FORXSTATEMENT_TYPES', 'FOR_INIT_KEYS', 'FOR_TYPES', 'FUNCTIONPARENT_TYPES', 'FUNCTION_TYPES', 'File', 'ForAwaitStatement', 'ForInStatement', 'ForOfStatement', 'ForStatement', 'FunctionDeclaration', 'FunctionExpression', 'FunctionTypeAnnotation', 'FunctionTypeParam', 'GenericTypeAnnotation', 'IMMUTABLE_TYPES', 'INHERIT_KEYS', 'Identifier', 'IfStatement', 'ImportDeclaration', 'ImportDefaultSpecifier', 'ImportNamespaceSpecifier', 'ImportSpecifier', 'InterfaceDeclaration', 'InterfaceExtends', 'IntersectionTypeAnnotation',
... 642 more items ]

ljstool.STYLESHEET

name::
* McsEngl.ljstool.STYLESHEET@cptIt,

npmpkg.less

name::
* McsEngl.npmpkg.less@cptIt,
* McsEngl.ljnm.less@cptIt,
* McsEngl.ljn'less-module@cptIt,

_DESCRIPTION:
less.js
The dynamic stylesheet language.

http://lesscss.org

about

This is the JavaScript, and now official, stable version of LESS.

For more information on the language and usage visit lesscss.org. More information also available in our wiki
[https://npmjs.org/package/less]

ljstool.TASK-RUNNER

name::
* McsEngl.ljstool.TASK-RUNNER@cptIt,
* McsEngl.ljs'builder@cptIt,
* McsEngl.ljs'task-runner@cptIt,
* McsEngl.ljsbuilder@cptIt,
* McsEngl.ljstask-runner@cptIt,
* McsEngl.ljs'task-manager@cptIt,
* McsEngl.ljstskr@cptIt,

_DESCRIPTION:
Task runners are tools for defining and running tasks. What do I mean by tasks? Simple: anything you might manually do from the command line.
[http://jamesknelson.com/which-build-system-should-i-use-for-my-javascript-app/]

_ADDRESS.WPG:
* https://medium.com/@preslavrachev/gulp-vs-grunt-why-one-why-the-other-f5d3b398edc4,

_SPECIFIC:
* Grunt,
* Gulp,
* Makefile,
* npm-scripts##
* runjs##

_SPECIFIC:
JS-based task runners:
* grunt##
* gulp##
* jake##
* npm##

ljstool.Grunt

name::
* McsEngl.ljstool.Grunt@cptIt,
* McsEngl.grunt@cptIt,
* McsEngl.gruntjs@cptIt,

_GENERIC:
* JS-based-task-runner#ql:lcpjs'task_runner#

_DESCRIPTION:
Why use a task runner?
In one word: automation. The less work you have to do when performing repetitive tasks like minification, compilation, unit testing, linting, etc, the easier your job becomes. After you've configured it, a task runner can do most of that mundane work for you—and your team—with basically zero effort.
Why use Grunt?
The Grunt ecosystem is huge and it's growing every day. With literally hundreds of plugins to choose from, you can use Grunt to automate just about anything with a minimum of effort. If someone hasn't already built what you need, authoring and publishing your own Grunt plugin to npm is a breeze.
Available Grunt plugins
Many of the tasks you need are already available as Grunt Plugins, and new plugins are published every day. While the plugin listing is more complete, here's a few you may have heard of.
[http://gruntjs.com/]

grunt'plugin

name::
* McsEngl.grunt'plugin@cptIt,

grunt'plugin.AUTOPREFIXER

name::
* McsEngl.grunt'plugin.AUTOPREFIXER@cptIt,
* McsEngl.autoprefixer@cptIt,

_ADDRESS.WPG:
* https://github.com/ai/autoprefixer,

Autoprefixer parses CSS files and adds vendor prefixes to CSS rules using the Can I Use database to determine which prefixes are needed.
All you have to do is add it to your asset building tool (Grunt, for instance) and you can totally forget about CSS vendor prefixes. Just write regular CSS according to the latest W3C specifications without any prefixes.
[http://css-tricks.com/autoprefixer/]

ljstool.Gulp

name::
* McsEngl.ljstool.Gulp@cptIt,
* McsEngl.gulp@cptIt,
* McsEngl.gulpjs@cptIt,

_DESCRIPTION:
Step aside Grunt, there's a new task runner in town. Gulp is an intuitive, code-over-configuration, streaming build system. It's fast.
[https://markgoodyear.com/2014/01/getting-started-with-gulp/]
===
Gulp is a streaming build system, by using node’s streams file manipulation is all done in memory, and a file isn’t written until you tell it to do so.
[https://scotch.io/tutorials/automate-your-tasks-easily-with-gulp-js]

_GENERIC:
* JS-based-task-runner#ql:ljb'task_runner#

_ADDRESS.WPG:
* http://gulpjs.com//

gulpjs'API (glpapi)

name::
* McsEngl.gulpjs'API (glpapi)@cptIt,

_DESCRIPTION:
The gulp api is incredibly light containing 4 top level functions. They are
gulp.task
gulp.src
gulp.dest
gulp.watch
[https://scotch.io/tutorials/automate-your-tasks-easily-with-gulp-js]

glpapi.gulp.dest()

name::
* McsEngl.glpapi.gulp.dest()@cptIt,

_DESCRIPTION:
gulp.dest points to the output folder we want to write files to.
gulp.task('copyHtml', function() {
// copy any html files in source/ to public/
gulp.src('source/*.html').pipe(gulp.dest('public'));
});
[https://scotch.io/tutorials/automate-your-tasks-easily-with-gulp-js]
===
The gulp.dest API is where we set the destination path. A task can have multiple destinations, one to output the expanded version and one to output the minifed version.
[https://markgoodyear.com/2014/01/getting-started-with-gulp/]

glpapi.gulp.src()

name::
* McsEngl.glpapi.gulp.src()@cptIt,

_DESCRIPTION:
gulp.src points to the files we want to use. It’s parameters are globs and an optional options object. It uses .pipe for chaining it’s output into other plugins.
gulp.task('copyHtml', function() {
// copy any html files in source/ to public/
gulp.src('source/*.html').pipe(gulp.dest('public'));
});
[https://scotch.io/tutorials/automate-your-tasks-easily-with-gulp-js]
===
The gulp.src() function takes a glob (i.e. a string matching one or more files) or an array of globs and returns a stream that can be piped to plugins.
Gulp uses node-glob to get the files from the glob or globs you specify. It’s easiest to explain using examples:
js/app.js
Matches the exact file
js/*.js
Matches all files ending in .js in the js directory only
js/**/*.js
Matches all files ending in .js in the js directory and all child directories
!js/app.js
Excludes js/app.js from the match, which is useful if you want to match all files in a directory except for a particular file
*.+(js|css)
Matches all files in the root directory ending in .js or .css
[https://www.smashingmagazine.com/2014/06/building-with-gulp/]

glpapi.gulp.task()

name::
* McsEngl.glpapi.gulp.task()@cptIt,
* McsEngl.gulp.task@cptIt,
* McsEngl.gulp'task@cptIt,
* McsEngl.gulp-task@cptIt,
* McsEngl.glptsk@cptIt,

_DESCRIPTION:
gulp.task defines your tasks. Its arguments are name, deps and fn.
Where name is a string, deps is an array of task names, and fn is the function that performs your task. Deps is optional so gulp.task in it’s two forms are:
gulp.task('mytask', function() {
//do stuff
});
gulp.task('dependenttask', ['mytask'], function() {
//do stuff after 'mytask' is done.
});
[https://scotch.io/tutorials/automate-your-tasks-easily-with-gulp-js]
===
gulp.task('styles', function() { ... });
This is the gulp.task API which is used to create tasks. The above can run from Terminal with $ gulp styles.
[https://markgoodyear.com/2014/01/getting-started-with-gulp/]

_CODE.gulp:
gulp.task('task-name', function () {
return gulp.src('source-files') // Get source files with gulp.src
.pipe(aGulpPlugin()) // Sends it through a gulp plugin
.pipe(gulp.dest('destination')) // Outputs the file in the destination folder
})
[https://css-tricks.com/gulp-for-beginners/]

glptsk.ANALYZER:
* gulp-csslint lazd, CSSLint plugin for gulp
* gulp-uncss beneb, Remove unused CSS selectors.

glptsk.API_DOC:
* https://github.com/documentationjs/gulp-documentation/
* https://github.com/mlucool/gulp-jsdoc3/

glptsk.CLEAN:
var del = require('del');
// Not all tasks need to use streams
// A gulpfile is just another node program and you can use any package available on npm
gulp.task('clean', function() {
// You can use multiple globbing patterns as you would with `gulp.src`
return del(['build']);
});

glptsk.MAPPING:
= glptsk.TRANSFORMING:
* gulp-markdown sindresorhus, Markdown to HTML

glptsk.MINIFY:
//PLUGINS
* gulp-clean-css scniro, Minify css with clean-css.
* gulp-cssnano beneb, Minify CSS with cssnano.
===
var gulp = require('gulp'),
uglify = require('gulp-uglify');

gulp.task('minify', function () {
gulp.src('js/app.js')
.pipe(uglify())
.pipe(gulp.dest('build'))
});

glptsk.TESTING:
* gulp-mocha sindresorhus, Run Mocha tests
* gulp-istanbul sboudrias, Istanbul unit test coverage plugin for gulp.
* gulp-jasmine jbblanchet, Run Jasmine tests

glpapi.gulp.watch()

name::
* McsEngl.glpapi.gulp.watch()@cptIt,

_DESCRIPTION:
gulp.watch like gulp.task has two main forms. Both of which return an EventEmitter that emits change events. The first of which takes a glob, an optional options object, and an array of tasks as it’s parameters.


gulp.watch('source/javascript/**/*.js', ['jshint']);
Simply put, when any of the files matched by the glob change, run the tasks. In the above code block, when any files in the source/javascript subfolders that have an extension of .js change, then the task jshint will be run against those files.

The second form takes the glob, an optional options object, and an optional callback that will run when a change is picked up.

You can compare this to grunt, which requires a secondary package to have the watch feature. Gulp has it built right in.
[https://scotch.io/tutorials/automate-your-tasks-easily-with-gulp-js]

gulpjs'gulpfile.js

name::
* McsEngl.gulpjs'gulpfile.js@cptIt,
* McsEngl.gulpfile@cptIt,
* McsEngl.gulpfile.js@cptIt,

_DESCRIPTION:
A gulpfile is just another node program and you can use any package available on npm
[https://github.com/gulpjs/gulp]
===
you’ll need a gulpfile.js in your project root that contains your tasks.
[https://scotch.io/tutorials/automate-your-tasks-easily-with-gulp-js]

_CODE.gulpfile.js:
var gulp = require('gulp');

gulp.task('default', function() {
console.log('gulp-task');
});

gulpjs'Plugin (glppgn)

name::
* McsEngl.gulpjs'Plugin (glppgn)@cptIt,

_ADDRESS.WPG:
* http://gulpjs.com/plugins//
* https://github.com/gulpjs/gulp/blob/master/docs/writing-a-plugin/README.md,
* https://github.com/gulpjs/gulp/blob/master/docs/writing-a-plugin/guidelines.md,

glppgn'installing

name::
* McsEngl.glppgn'installing@cptIt,

_CODE.npm:
$ npm install gulp-ruby-sass gulp-autoprefixer gulp-cssnano gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache del --save-dev

SPECIFIC

_SPECIFIC:
3018 results for ‘gulpplugin’ in npmjs {2016-11-10}
===
* gulp-changed sindresorhus, Only pass through changed files
* gulp-clean-css scniro, Minify css with clean-css.
* gulp-concat##
* gulp-cssnano beneb, Minify CSS with cssnano.
* gulp-eslint##
* gulp-if, robrich, Conditionally run a task,
* gulp-imagemin, sindresorhus, Minify PNG, JPEG, GIF and SVG images
* gulp-material-docs: https://www.npmjs.com/package/gulp-material-docs,
* gulp-refresh leo, Automatically reloads your browser if files change
* gulp-rename##
* gulp-saas##
* gulp-search##
* gulp-ttf2woff2: https://www.npmjs.com/package/gulp-ttf2woff2,
* gulp-uglify##
* gulp-watch, ult_combo, Watch, that actually is an endless stream

glppgn.gulp-concat

name::
* McsEngl.glppgn.gulp-concat@cptIt,

_ADDRESS.WPG:
* https://github.com/contra/gulp-concat,

glppgn.gulp-eslint

name::
* McsEngl.glppgn.gulp-eslint@cptIt,

_ADDRESS.WPG:
* https://www.npmjs.com/package/gulp-eslint,

glppgn.gulp-rename

name::
* McsEngl.glppgn.gulp-rename@cptIt,

_ADDRESS.WPG:
* https://www.npmjs.com/package/gulp-rename,

glppgn.gulp-saas

name::
* McsEngl.glppgn.gulp-saas@cptIt,

_ADDRESS.WPG:
* https://www.npmjs.com/package/gulp-sass,

glppgn.gulp-search

name::
* McsEngl.glppgn.gulp-search@cptIt,

_DESCRIPTION:
gulp-search
A string search plugin for gulp
Usage
First, install gulp-search as a development dependency:

npm install --save-dev gulp-search
Then, add it to your gulpfile.js:

Regex search
var search = require('gulp-search');

gulp.task('templates', function(){
gulp.src([...])
.pipe(search(/foo(.{3})/g, function(item) {return item;}, {
 path: '',
 filename: 'a.json'
}))
.pipe(gulp.dest('...'));
});
[https://www.npmjs.com/package/gulp-search/]

glppgn.gulp-uglify

name::
* McsEngl.glppgn.gulp-uglify@cptIt,


[https://www.npmjs.com/package/gulp-uglify]

_ADDRESS.WPG:
* https://www.npmjs.com/package/gulp-uglify,

gulpjs'Task

name::
* McsEngl.gulpjs'Task@cptIt,

glptsk.SFTP:
* https://github.com/teambition/gulp-ssh,
* https://github.com/morris/vinyl-ftp,

gulpjs'Resource

name::
* McsEngl.gulpjs'Resource@cptIt,

_ADDRESS.WPG:
* https://blueprintinteractive.com/blog/how-sync-local-and-server-development-gulp,
* https://github.com/gulpjs/gulp/blob/master/docs/README.md,
* https://github.com/gulpjs/gulp/tree/master/docs/recipes,
* https://css-tricks.com/gulp-for-beginners//
* http://callmenick.com/post/an-introduction-to-gulp/

gulpjs'Usage

name::
* McsEngl.gulpjs'Usage@cptIt,

_DESCRIPTION:
1. Install gulp globally:
If you have previously installed a version of gulp globally, please run npm rm --global gulp to make sure your old version doesn't collide with gulp-cli.
$ npm install --global gulp-cli

2. Initialize your project directory:
$ npm init

3. Install gulp in your project devDependencies:
$ npm install --save-dev gulp

4. Create a gulpfile.js at the root of your project:
var gulp = require('gulp');

gulp.task('default', function() {
// place code for your default task here
});

5. Run gulp:
$ gulp
The default task will run and do nothing.

To run individual tasks, use gulp <task> <othertask>.
[https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md]

ljstool.jake

name::
* McsEngl.ljstool.jake@cptIt,
* McsEngl.jake@cptIt,
* McsEngl.ljn'jake-module@cptIt,

_GENERIC:
* JS-based-task-runner#ql:lcpjs'task_runner#

_ADDRESS.WPG:
* https://github.com/mde/jake,
* http://howtonode.org/intro-to-jake,

_DESCRIPTION:
JavaScript build tool, similar to Make or Rake. Built to work with Node.js.
Jake is a simple JavaScript build program with capabilities similar to the
regular make or rake command.
Jake has the following features:
* Jakefiles are in standard JavaScript syntax
* Tasks with prerequisites
* Namespaces for tasks
* Async task execution
[https://github.com/mde/jake]

_GENERIC:
* build tool#ql:build_tool@cptIt#

jake'namespace

name::
* McsEngl.jake'namespace@cptIt,

_DESCRIPTION:
Use namespace to create a namespace of tasks to perform. Call it with two arguments:

namespace(name, namespaceTasks);
Where is name is the name of the namespace, and namespaceTasks is a function with calls inside it to task or desc definining all the tasks for that namespace.

Here's an example:

desc('This is the default task.');
task('default', function () {
console.log('This is the default task.');
});

namespace('foo', function () {
desc('This the foo:bar task');
task('bar', function () {
console.log('doing foo:bar task');
});

desc('This the foo:baz task');
task('baz', ['default', 'foo:bar'], function () {
console.log('doing foo:baz task');
});

});
In this example, the foo:baz task depends on the the default and foo:bar tasks.
[https://github.com/mde/jake]

jake'task

name::
* McsEngl.jake'task@cptIt,

_DESCRIPTION:
In your Jakefile, call task to define tasks. Call it with three arguments (and one more optional argument):
task(name, dependencies, handler, [async]);
Where name is the string name of the task, dependencies is an array of the dependencies, and handler is a function to run for the task.
[http://howtonode.org/intro-to-jake]

jake'task.DIRECTORY

name::
* McsEngl.jake'task.DIRECTORY@cptIt,
* McsEngl.jake'directory@cptIt,

_DESCRIPTION:
Create a directory-task by calling directory.

Directory-tasks create a directory for use with for file-tasks. Jake checks for the existence of the directory, and only creates it if needed.

desc('This creates the bar directory for use with the foo-minified.js file-task.');
directory('bar');

This task will create the directory when used as a prerequisite for a file-task, or when run from the command-line.
[https://github.com/mde/jake]

jake'task.FILE

name::
* McsEngl.jake'task.FILE@cptIt,
* McsEngl.jake'file@cptIt,

_DESCRIPTION:
File-tasks
Create a file-task by calling file.

File-tasks create a file from one or more other files. With a file-task, Jake checks both that the file exists, and also that it is not older than the files specified by any prerequisite tasks. File-tasks are particularly useful for compiling something from a tree of source files.

desc('This builds a minified JS file for production.');
file('foo-minified.js', ['bar', 'foo-bar.js', 'foo-baz.js'], function () {
// Code to concat and minify goes here
});
[https://github.com/mde/jake]

jake'usage

name::
* McsEngl.jake'usage@cptIt,

Basic usage
jake [options ...] [env variables ...] target

Options

-V/v
--version Display the Jake version.

-h
--help Display help message.

-f *FILE*
--jakefile *FILE* Use FILE as the Jakefile.

-C *DIRECTORY*
--directory *DIRECTORY* Change to DIRECTORY before running tasks.

-q
--quiet Do not log messages to standard output.

-J *JAKELIBDIR*
--jakelibdir *JAKELIBDIR* Auto-import any .jake files in JAKELIBDIR.
(default is 'jakelib')

-B
--always-make Unconditionally make all targets.

-t
--trace Enable full backtrace.

-T/ls
--tasks Display the tasks (matching optional PATTERN)
with descriptions, then exit.
[https://github.com/mde/jake#basic-usage]

ljstool.npm-scripts (npmspt)

name::
* McsEngl.ljstool.npm-scripts (npmspt)@cptIt,
* McsEngl.npm-scripts@cptIt,
* McsEngl.npmspt@cptIt,

_DESCRIPTION:
> npm run watch:test
Built-in feature into npm package manager. Content of each task is held in package.json under “scripts” section. Each task can be called by npm run [task-name] command.
Example of npm scripts usage:
"scripts": {
"clean": "rimraf dist/*",
"prebuild": "npm run clean -s",
"build": "npm run build:scripts -s && npm run build:styles -s && npm run build:markup -s",
"build:scripts": "browserify -d assets/scripts/main.js -p [minifyify --compressPath . --map main.js.map --output dist/main.js.map] | hashmark -n dist/main.js -s -l 8 -m assets.json 'dist/{name}{hash}{ext}'",
"build:styles": "stylus assets/styles/main.styl -m -o dist/ && hashmark -s -l 8 -m assets.json dist/main.css 'dist/{name}{hash}{ext}'",
"build:markup": "jade assets/markup/index.jade --obj assets.json -o dist",
"test": "karma start --singleRun",
"watch": "parallelshell 'npm run watch:test -s' 'npm run watch:build -s'",
"watch:test": "karma start",
"watch:build": "nodemon -q -w assets/ --ext '.' --exec 'npm run build'",
"open:prod": "opener http://example.com",
"open:stage": "opener http://staging.example.internal",
"open:dev": "opener http://localhost:9090",
"deploy:prod": "s3-cli sync ./dist/ s3://example-com/prod-site/",
"deploy:stage": "s3-cli sync ./dist/ s3://example-com/stage-site/",
"serve": "http-server -p 9090 dist/",
"live-reload": "live-reload --port 9091 dist/",
"dev": "npm run open:dev -s & parallelshell 'npm run live-reload -s' 'npm run serve -s' 'npm run watch -s'"
}
[https://hackernoon.com/simple-build-tools-npm-scripts-vs-makefile-vs-runjs-31e578278162]

npmspt'Relation-to-gulp-grunt

name::
* McsEngl.npmspt'Relation-to-gulp-grunt@cptIt,

_DESCRIPTION:
Over time, I’ve noticed three core issues with task runners like Gulp and Grunt:
Dependence on plugin authors
Frustrating debugging
Disjointed documentation
...
Gulp has ~2,100 plugins. Grunt has ~5,400. npm offers over 227,000 packages, growing at a rate of 400+ daily.
[https://medium.freecodecamp.com/why-i-left-gulp-and-grunt-for-npm-scripts-3d6853dd22b8]

npmspt'Resource

name::
* McsEngl.npmspt'Resource@cptIt,

_ADDRESS.WPG:
* https://medium.freecodecamp.com/why-i-left-gulp-and-grunt-for-npm-scripts-3d6853dd22b8#.c4ru7w56t,

ljstool.runjs

name::
* McsEngl.ljstool.runjs@cptIt,
* McsEngl.runjs@cptIt,

_DESCRIPTION:
Minimalistic building tool
...
Why runjs ?
We have Grunt, Gulp, npm scripts, Makefile. Why another building tool ?

Gulp or Grunt files seem overly complex for what they do and the plugin ecosystem adds a layer of complexity towards the simple command line tools underneath. The documentation is not always up to date and the plugin does not always use the latest version of the tool. After a while customizing the process even with simple things, reconfiguring it becomes time consuming.

Npm scripts are simple but they get out of hand pretty quickly if we need more complex process which make them quite hard to read.

Makefiles are simple, better for more complex processes but they depend on bash scripting. Within runfile you can use command line calls as well as JavaScript code and npm libraries which makes that approach much more flexible. Additionally each task and command call is reported in the console.
[https://github.com/pawelgalazka/runjs]

ljstool.TESTING

name::
* McsEngl.ljstool.TESTING@cptIt,
* McsEngl.ljstool.testing@cptIt,
* McsEngl.ljs'testing@cptIt,

_GENERIC:
* lcptool.testing#ql:lcptool#

ljstst'Assertion-library

name::
* McsEngl.ljstst'Assertion-library@cptIt,
* McsEngl.assertion-library-ljs@cptIt,

_SPECIFIC:
* behavior-driven-development (BDD)
* test-driven-development-assertion (TDD)

Expect.js

name::
* McsEngl.Expect.js@cptIt,
* McsEngl.expectjs-assertion-library@cptIt,

_DESCRIPTION:
c-style assert() for nodejs, reporting the expression string as the error message
[https://github.com/tj/better-assert]

Chai

name::
* McsEngl.Chai-assertion-library@cptIt,
* McsEngl.Chai-expectation-library@cptIt,
* McsEngl.chaijs@cptIt,

_DESCRIPTION:
Chai is a BDD / TDD assertion library for node and the browser that can be delightfully paired with any javascript testing framework.
[http://chaijs.com//]

chai.expect

name::
* McsEngl.chai.expect@cptIt,

_CODE.chaijs:
var expect = chai.expect;
var should = chai.should();

Expect.js

name::
* McsEngl.Expect.js@cptIt,
* McsEngl.expectjs-assertion-library@cptIt,

_DESCRIPTION:
Minimalistic BDD-style assertions for Node.JS and the browser.
[https://github.com/Automattic/expect.js]

Node-assert#ql:ljn'assert-module#
Should.js

name::
* McsEngl.Should.js@cptIt,
* McsEngl.Shouldjs-assertion-library@cptIt,

_DESCRIPTION:
BDD style assertions for node.js -- test framework agnostic http://shouldjs.github.io
[https://github.com/shouldjs/should.js]

Unexpected.js

name::
* McsEngl.Unexpected.js@cptIt,
* McsEngl.unexpectedjs-assertion-library@cptIt,

_DESCRIPTION:
Features
Extensible
Fast
Provides really nice error messages
Helps you if you misspells assertions
Compatible with all test frameworks.
Node.JS ready (require('unexpected'))
Supports asynchronous assertions using promises
Single global with no prototype extensions or shims.
Cross-browser: works on Chrome, Firefox, Safari, Opera, IE7+, (IE7-IE8 with es5-shim)
[http://unexpected.js.org//]

Unit.js

name::
* McsEngl.Unit.js@cptIt,

_DESCRIPTION:
Unit.js is an assertion library for Javascript, running on Node.js and the browser. It works with any test runner and unit testing framework like Mocha, Jasmine, Karma, protractor (E2E test framework for Angular apps), QUnit, ... and more.

Unit.js supports dependency injection and is extensible via a plugins system easy to use.
[http://unitjs.com/]

lsjtst'Coverage-library

name::
* McsEngl.lsjtst'Coverage-library@cptIt,
* McsEngl.code-coverage-ljs-tool@cptIt,
* McsEngl.ljstool.coverage@cptIt,

_DESCRIPTION:
Code coverage is metric used to see how well your code is tested. If a piece of software has 100% test coverage it means that every line is executed at least once in the tests. One of the most popular way to generate coverage in JavaScript is using a library called Istanbul. It will output information about the code coverage to the command line as well as generating a comprehensive HTML report.
[https://onsen.io/blog/mocha-chaijs-unit-test-coverage-es6/]

lsjtool.Istanbul

name::
* McsEngl.lsjtool.Istanbul@cptIt,
* McsEngl.istanbul-ljs-coverage-tool@cptIt,

_DESCRIPTION:
istanbul: A Javascript code coverage tool written in JS
Yet another code coverage tool for Javascript, with the following features:
All-javascript instrumentation library that tracks statement, branch, and function coverage and reverse-engineers line coverage with 100% fidelity.
Module loader hooks to instrument code on the fly
Command line tools to run node unit tests "with coverage turned on" and no cooperation whatsoever from the test runner
HTML and LCOV reporting.
Ability to use as middleware when serving JS files that need to be tested on the browser.
Can be used on the command line as well as a library
Based on the awesome esprima parser and the equally awesome escodegen code generator
Well-tested on node 0.4.x, 0.6.x, 0.8.x and the browser (instrumentation library only)
[https://gotwarlost.github.io/istanbul//]

ljstst'Naming-files

name::
* McsEngl.ljstst'Naming-files@cptIt,

_DESCRIPTION:
'name.test.js' where 'name.js' is the-file we test.
This way by writing *.test.js we test all the-test-files and exclude helper files in the-same-directory.
[hmnSngo.2016-11-25]

SPECIFIC

_ADDRESS.WPG:
* http://facebook.github.io/jest//

ljstool.UNIT-TESTING

name::
* McsEngl.ljstool.UNIT-TESTING@cptIt,

ljstool.Ava

name::
* McsEngl.ljstool.Ava@cptIt,
* McsEngl.ljstool.ava@cptIt,
* McsEngl.ava-test-tool@cptIt,

_DESCRIPTION:
Futuristic JavaScript test runner
[https://github.com/avajs/ava]

ljstool.Jasmine (jmnttl)

name::
* McsEngl.ljstool.Jasmine (jmnttl)@cptIt,
* McsEngl.ljstool.jasmine@cptIt,
* McsEngl.jasmine-test-tool@cptIt,
* McsEngl.jmnttl@cptIt,

_DESCRIPTION:
Jasmine is a behavior-driven development framework for testing JavaScript code.
It does not depend on any other JavaScript frameworks.
It does not require a DOM.
And it has a clean, obvious syntax so that you can easily write tests.
[https://jasmine.github.io/]

_ADDRESS.WPG:
* https://www.teaching-materials.org/jasmine/#/,

jmnttl'spec

name::
* McsEngl.jmnttl'spec@cptIt,

_DESCRIPTION:
A spec is short for "specification".
This is a building block in Jasmine that describes a certain behavior precisely
[https://www.teaching-materials.org/jasmine/#/19]

jmnttl'suite

name::
* McsEngl.jmnttl'suite@cptIt,

_DESCRIPTION:
A suite is a grouping of specs
[https://www.teaching-materials.org/jasmine/#/19]

_CODE:
// Suites start with the keyword "describe"
describe("A suite", function(){

// Specs start with the keyword "it"
it("contains spec with an expectation", function(){

// expect() statements have matchers like toBe()
expect(true).toBe(true);

});
});
[https://www.teaching-materials.org/jasmine/#/21]

jmnttl'Matcher-function

name::
* McsEngl.jmnttl'Matcher-function@cptIt,

_DESCRIPTION:
There are special functions called matchers that will compare an actual value with an expected value.

You can also add a .not() to your matcher:
expect(true).not.toBe(false);

Here are some other matchers that are built-in:
.toBeDefined();
.toEqual(); // strict equality
.toMatch(); // for regular expressions
.toContain(); // find an item in an array
[https://www.teaching-materials.org/jasmine/#/22]

ljstool.Jest

name::
* McsEngl.ljstool.Jest@cptIt,
* McsEngl.ljstool.jest@cptIt,
* McsEngl.jest-test-tool@cptIt,

_DESCRIPTION:
Painless JavaScript Testing
Jest is a JavaScript testing framework, used by Facebook to test all JavaScript code including React applications.
[http://facebook.github.io/jest//]

_ADDRESS.WPG:
* http://facebook.github.io/jest//

jest-codemods

_DESCRIPTION:
jest-codemods
Codemods that simplify migrating JavaScript test files from Mocha, Tape and AVA to Jest.

Codemods are small programs that help you automate changes to your codebase. Think of them as search and replace on steroids. They are executed by the Facebook jscodeshift tool.

This tool is made for trying out Jest on your existing test files. We strive to make the migration as smooth as possible, but some manual intervention and tweaks to your tests are to be expected.
[https://github.com/skovhus/jest-codemods]

ljstool.Karma

name::
* McsEngl.ljstool.Karma@cptIt,
* McsEngl.ljnm.karam@cptIt,
* McsEngl.npmpkg.karma@cptIt,

_DESCRIPTION:
Karma runs on Node.js and is available as an NPM package.
[https://karma-runner.github.io/1.0/intro/installation.html]
===
The main goal for Karma is to bring a productive testing environment to developers. The environment being one where they don't have to set up loads of configurations, but rather a place where developers can just write the code and get instant feedback from their tests. Because getting quick feedback is what makes you productive and creative.
Test on Real Devices
Test your code on real browsers and real devices such as phones, tablets or on a headless PhantomJS instance.
Remote Control
Control the whole workflow from the command line or your IDE - just save a file and Karma will run all the tests.
Testing Framework Agnostic
Describe your tests with Jasmine, Mocha, QUnit, or write a simple adapter for any framework you like.
Open Source
Developed for and maintained by the open source community at GitHub.
Easy Debugging
Easy debugging directly from your IDE via WebStorm or Google Chrome.
Continuous Integration
Simple integration with Jenkins, Travis or Semaphore.
[https://karma-runner.github.io/1.0/index.html]

ljstool.Mocha (mochajs)

name::
* McsEngl.ljstool.Mocha (mochajs)@cptIt,
* McsEngl.ljstool.mocha@cptIt,
* McsEngl.mochajs@cptIt,

* McsEngl.mochajs@cptIt,
* McsEngl.MochaJS@cptIt,

_ADDRESS.WPG:
* https://mochajs.org//

mochajs'Synopsis-on-Browser

name::
* McsEngl.mochajs'Synopsis-on-Browser@cptIt,

//dirTest/testrunner.html:
<!DOCTYPE html>
<html>
<head>
<title>Mocha Tests</title>
<link rel="stylesheet" href="node_modules/mocha/mocha.css">
</head>
<body>
<div id="mocha"></div>
<script src="node_modules/mocha/mocha.js"></script>
<script src="node_modules/chai/chai.js"></script>
<script>mocha.setup('bdd')</script>

<!-- load code you want to test here -->

<!-- load your test files here -->
<script src="dirTest/testArray.js"></script>

<script>
mocha.run();
</script>
</body>
</html>

//dirTest/testArray.js:
var assert = chai.assert;

describe('Array', function() {
it('should start empty', function() {
var arr = [];

assert.equal(arr.length, 1, 'Array length was not 0');
});
});

mochajs'Synopsis-on-Node

name::
* McsEngl.mochajs'Synopsis-on-Node@cptIt,

Set up a test script in package.json:
"scripts": {
"test": "mocha"
}
Then run tests with:
$ npm test
[https://mochajs.org/]

in the terminal:
$ ./node_modules/mocha/bin/mocha
> node node_modules/mocha/bin/mocha //osWin
[https://mochajs.org/]

mochajs'API

name::
* McsEngl.mochajs'API@cptIt,

_MEMBER.mochajs:
> Object.getOwnPropertyNames(mocha).sort()
["_reporter", "_ui", "files", "options", "run", "setup", "suite", "throwError", "ui"]
===
> Object.getOwnPropertyNames(mocha.__proto__).sort()
["_growl", "addFile", "allowUncaught", "asyncOnly", "bail", "checkLeaks", "constructor", "delay", "enableTimeouts", "fgrep", "fullTrace", "globals", "grep", "growl", "ignoreLeaks", "invert", "loadFiles", "noHighlighting", "reporter", "retries", "run", "slow", "timeout", "ui", "useColors", "useInlineDiffs"]
===
> Object.getOwnPropertyNames(mocha.__proto__.__proto__).sort()
[Object.prototype]

we can overwrite the default expect and should assertion like this:
var expect = chai.expect;
var should = chai.should();
[http://callmenick.com/post/basic-front-end-testing-with-mocha-chai]

mochajs.files array

name::
* McsEngl.mochajs.files array@cptIt,

mochajs.options object

name::
* McsEngl.mochajs.options object@cptIt,

mochajs.run-function

name::
* McsEngl.mochajs.run-function@cptIt,

mochajs.setup-function

name::
* McsEngl.mochajs.setup-function@cptIt,

// sets bdd interface
mocha.setup('bdd');

mochajs.suite oSuite

name::
* McsEngl.mochajs.suite oSuite@cptIt,

mochajs.throwError-function

name::
* McsEngl.mochajs.throwError-function@cptIt,

mochajs.ui-function

name::
* McsEngl.mochajs.ui-function@cptIt,

mochajs'Assertion

name::
* McsEngl.mochajs'Assertion@cptIt,

_DESCRIPTION:
Mocha allows you to use any assertion library you wish. In the above example, we’re using Node.js’ built-in assert module–but generally, if it throws an Error, it will work! This means you can use libraries such as:
should.js - BDD style shown throughout these docs
expect.js - expect() style assertions
chai - expect(), assert() and should-style assertions
better-assert - C-style self-documenting assert()
unexpected - “the extensible BDD assertion toolkit”
[https://mochajs.org/#assertions]
===
Unlike other JavaScript testing frameworks like Jasmine and QUnit, Mocha does not come with an assertion library. Instead, Mocha allows you to choose your own. Popular assertion libraries used with Mocha include should.js, expect.js, Chai, and Node’s built in assert module. In this post, we are going to use Chai.
[https://www.codementor.io/nodejs/tutorial/unit-testing-nodejs-tdd-mocha-sinon]

mochajs'Installing

name::
* McsEngl.mochajs'Installing@cptIt,

_DESCRIPTION:
Install with npm globally:

$ npm install --global mocha
or as a development dependency for your project:

$ npm install --save-dev mocha
To install Mocha v3.0.0 or newer with npm, you will need npm v1.4.0 or newer. Additionally, to run Mocha, you will need Node.js v0.10 or newer.

Mocha can also be installed via Bower (bower install mocha), and is available at cdnjs.
[https://mochajs.org/#installation]

mochajs'Resource

name::
* McsEngl.mochajs'Resource@cptIt,

_ADDRESS.WPG:
* https://www.sitepoint.com/unit-test-javascript-mocha-chai//
* https://nicolas.perriault.net/code/2013/testing-frontend-javascript-code-using-mocha-chai-and-sinon//
* https://github.com/dwyl/learn-mocha,
* https://github.com/dwyl/learn-tdd,

mochajs'Test (mchtst)

name::
* McsEngl.mochajs'Test (mchtst)@cptIt,

mchtst.LJB

name::
* McsEngl.mchtst.LJB@cptIt,

_CODE.MOCHAJS:
// classNameTest.js

var chai = require('chai');
var assert = chai.assert;

var className = require('../js/className.js');
var addClass = className.addClass;

// The rest of the file remains the same

describe('addClass', function() {
...
});
[https://www.sitepoint.com/unit-test-javascript-mocha-chai/]

===
var assert = chai.assert;

describe('Array', function() {
it('should start empty', function() {
var arr = [];

assert.equal(arr.length, 1, 'Array length was not 0');
});
});

mchtst.LJN

name::
* McsEngl.mchtst.LJN@cptIt,

CODE.MOCHAJS:
var assert = require('assert');
describe('Array', function() {
describe('#indexOf()', function() {
it('should return -1 when the value is not present', function() {
assert.equal(-1, [1,2,3].indexOf(4));
});
});
});

mchtst.ARRAY-TEST

name::
* McsEngl.mchtst.ARRAY-TEST@cptIt,

//a.indexOf:
var assert = require('assert#ql:ljn'assert_module#');
describe('Array', function() {
describe('#indexOf()', function() {
it('should return -1 when the value is not present', function() {
assert.equal(-1, [1,2,3].indexOf(4));
});
});
});

mchtst.FUNCTION-TEST

name::
* McsEngl.mchtst.FUNCTION-TEST@cptIt,

//OUTPUT:
it("should greet passed target", function() {
var greetings = (new Cow("Kate")).greets("Baby");
expect(greetings).to.equal("Kate greets Baby");
});

//OUTPUT.BOOLEAN:
it('Should always return a boolean', function() {
expect(isEven(2)).to.be.a('boolean');
});

//THROW-ERROR:
it("should throw if no target is passed in", function() {
expect(function() {
(new Cow()).greets();
}).to.throw(Error);
});

mchtst.OBJECT-TEST

name::
* McsEngl.mchtst.OBJECT-TEST@cptIt,

mchtst.object.STRING-MEMBER

name::
* McsEngl.mchtst.object.STRING-MEMBER@cptIt,

_CODE.MOCHAJS:
it("should have a default name", function() {
var oCow = new Cow();
expect(oCow.name).to.equal("Anon cow");
});
===
it("should set cow's name if provided", function() {
var oCow = new Cow("Kate");
expect(oCow.name).to.equal("Kate");
});

ljstool.Nightwatch

name::
* McsEngl.ljstool.Nightwatch@cptIt,

_ADDRESS.WPG:
* https://github.com/dwyl/learn-nightwatch,

ljstool.Tap-object (tapjs)

name::
* McsEngl.ljstool.Tap-object (tapjs)@cptIt,
* McsEngl.ljnm.tap@cptIt,
* McsEngl.moTap@cptIt,
* McsEngl.npmpkg.tap@cptIt,
* McsEngl.pgmTap@cptIt,
* McsEngl.tapjs@cptIt,
* McsEngl.Test-Anything-Protocol-for-Node@cptIt,

* McsEngl.tapjs@cptIt,

_DESCRIPTION:

_ADDRESS.WPG:
* http://www.node-tap.org//
* https://www.npmjs.com/package/tap/
* https://github.com/tapjs/node-tap/

_MEMBER:
[ 'Test',
'_addMoment',
'_afterEach',
'_autoend',
'_bail',
'_bailedOut',
'_beforeEach',
'_calledAt',
'_count',
'_currentChild',
'_deferred',
'_deferredEnd',
'_end',
'_endEmitted',
'_ended',
'_ending',
'_events',
'_eventsCount',
'_explicitEnded',
'_extraFromError',
'_fail',
'_fails',
'_finishEnd',
'_lineBuf',
'_maxListeners',
'_maybeAutoend',
'_maybeTimeout',
'_multiEndThrew',
'_mustDeferEnd',
'_name',
'_ok',
'_onTimeout',
'_parent',
'_parseTestArgs',
'_pass',
'_passes',
'_plan',
'_printedVersion',
'_processQueue',
'_queue',
'_queueFail',
'_ranAfterEach',
'_read',
'_readableState',
'_runAfterEach',
'_runBeforeEach',
'_runChild',
'_shouldAutoend',
'_skip',
'_skips',
'_startTime',
'_timeout',
'_timer',
'_todo',
'_todos',
'_tryResumeEnd',
'addAssert',
'addListener',
'afterEach',
'assert',
'assertAt',
'assertNot',
'assertStack',
'assert_not',
'assertnot',
'autoend',
'bailout',
'beforeEach',
'comment',
'contains',
'current',
'deepEqual',
'deepEquals',
'deepInequal',
'deepIs',
'deepNot',
'deep_equal',
'deep_equals',
'deep_inequal',
'deep_is',
'deep_not',
'deepequal',
'deepequals',
'deepinequal',
'deepis',
'deepnot',
'dissimilar',
'doesNotEqual',
'doesNotHave',
'doesNotThrow',
'does_not_equal',
'does_not_have',
'does_not_throw',
'doesnotequal',
'doesnothave',
'doesnotthrow',
'domain',
'done',
'emit',
'end',
... 238 more items ]

tapjs'Synopsis

name::
* McsEngl.tapjs'Synopsis@cptIt,

_DESCRIPTION:
tap [options] <files>
//if npm install tap -g
===
> npm test
> npm t
package.json:
{
"name": "my-awesome-module",
"version": "1.2.3",
"devDependencies": {
"tap": "^5.0.0"
},
"scripts": {
"test": "tap test/*.js"
}
}
===
> $ npm t -- --cov
// report coverage
====
> node test.js
You can always run a tap test program directly to see what it is doing. This is especially handy in debugging test failures
[http://www.node-tap.org/basics/]

tapjs'Installation

name::
* McsEngl.tapjs'Installation@cptIt,

_CODE.SHELL:
> npm install tap --save-dev

tapjs'Relation-to-tape

name::
* McsEngl.tapjs'Relation-to-tape@cptIt,

_ADDRESS.WPG:
* https://remysharp.com/2016/02/08/testing-tape-vs-tap, There's a couple of benefits to my workflow in using tap for the tests.

tapjs'Resource

name::
* McsEngl.tapjs'Resource@cptIt,

_ADDRESS.WPG:
* https://github.com/tapjs/node-tap/
* http://www.node-tap.org//

tapjs'API'Test-function

name::
* McsEngl.tapjs'API'Test-function@cptIt,

_DESCRIPTION:
tap.Test

The Test class is the main thing you’ll be touching when you use this module.

The most common way to instantiate a Test object by calling the test method on the root or any other Test object. The callback passed to test(name, fn) will receive a child Test object as its argument.

A Test object is a Readable Stream. Child tests automatically send their data to their parent, and the root require('tap') object pipes to stdout by default. However, you can instantiate a Test object and then pipe it wherever you like. The only limit is your imagination.

Whenever you see t.<whatever> in this documentation, it refers to a Test object.
[http://www.node-tap.org/api/]

_CODE.TAPJS:
var fTapTest = require('tap').test,
fTapTest('test: github', function (t) {
t.equal(value1, valu2, 'description if failed'),
t.deepEqual()
t.end()
})

tapjs'API'Assertion-method

name::
* McsEngl.tapjs'API'Assertion-method@cptIt,
* McsEngl.tapjs'assertion-method@cptIt,

_DESCRIPTION:
The Test object has a collection of assertion methods, many of which are given several synonyms for compatibility with other test runners and the vagaries of human expectations and spelling. When a synonym is multi-word in camelCase the corresponding lower case and snake_case versions are also created as synonyms.

All assertion methods take optional message and extra arguments as the last two params. The message is the name of the test. The extra argument can contain any arbitrary data about the test, but the following fields are “special”.

todo Set to boolean true or a String to mark this as pending
skip Set to boolean true or a String to mark this as skipped
diagnostic Set to boolean true to show a yaml diagnostic block even if the test point passes. (Failing asserts always show yaml diagnostics.)
at Generated by the framework. The location where the assertion was called. Do not set this field unless you know what you are doing.
stack Generated by the framework. The stack trace to the point where the assertion was called. Do not set this field unless you know what you are doing.
[]http://www.node-tap.org/asserts/

tapjs.deepEqual()

tapjs.equal(found, wanted, message, extra)
Verify that the object found is exactly the same (that is, ===) to the object that is wanted.
Synonyms: t.equals, t.isEqual, t.is, t.strictEqual, t.strictEquals, t.strictIs, t.isStrict, t.isStrictly
[http://www.node-tap.org/asserts/]

tapjs.error(obj, message, extra)

If the object is an error, then the assertion fails.

Note: if an error is encountered unexpectedly, it’s often better to simply throw it. The Test object will handle this as a failure.

Synonyms: t.ifErr, t.ifError

tapjs.match(found, pattern, message, extra)

Verify that the found object matches the pattern provided.

If pattern is a regular expression, and found is a string, then verify that the string matches the pattern.

If the pattern is a string, and found is a string, then verify that the pattern occurs within the string somewhere.

If pattern is an object, then verify that all of the (enumerable) fields in the pattern match the corresponding fields in the object using this same algorithm. For example, the pattern {x:/a[sdf]{3}/} would successfully match {x:'asdf',y:'z'}.

This is useful when you want to verify that an object has a certain set of required fields, but additional fields are ok.

See tmatch for the full details on how this works.

Synonyms: t.has, t.hasFields, t.matches, t.similar, t.like, t.isLike, t.includes, t.include, t.contains

tapjs.ok(obj, message, extra)
Verifies that the object is truthy.
Synonyms: t.true, t.assert
[http://www.node-tap.org/asserts/#tokobj-message-extra]
===
> t.ok(false)
< not ok expect truthy value
===
> t.ok("string"); //truthy

tapjs.notOk(obj, message, extra)

Verifies that the object is not truthy.

Synonyms: t.false, t.assertNot
[http://www.node-tap.org/asserts/#tnotokobj-message-extra]

tapjs.same(found, wanted, message, extra)

Verify that the found object is deeply equivalent to the wanted object. Use non-strict equality for scalars (ie, ==).

Synonyms: t.equivalent, t.looseEqual, t.looseEquals, t.deepEqual, t.deepEquals, t.isLoose, t.looseIs

tapjs.type(object, type, message, extra)

Verify that the object is of the type provided.

Type can be a string that matches the typeof value of the object, or the string name of any constructor in the object’s prototype chain, or a constructor function in the object’s prototype chain.

For example, all the following will pass:

t.type(new Date(), 'object')
t.type(new Date(), 'Date')
t.type(new Date(), Date)
Synonyms: t.isa, t.isA

ljstool.Tape (tapejs)

name::
* McsEngl.ljstool.Tape (tapejs)@cptIt,
* McsEngl.tapejs@cptIt,

_DESCRIPTION:
Tape is a JavaScript testing framework that works in both Node.js and Browsers. It lets you write simple tests that are easy to read/maintain. The output of Tape tests is a "TAP Stream" which can be read by other programs/packages e.g. to display statistics of your tests.
[https://github.com/dwyl/learn-tape#what]

tapejs'Synopsis

name::
* McsEngl.tapejs'Synopsis@cptIt,

> node test-file.js

tapejs'Resource

name::
* McsEngl.tapejs'Resource@cptIt,

_ADDRESS.WPG:
* https://github.com/dwyl/learn-tape,

tapejs'Test

name::
* McsEngl.tapejs'Test@cptIt,

_DESCRIPTION:
we use this naming convention /test/{test-name}.test.js for test files in our projects so that we can keep other "helper" files in the /test directory and still be able to run all the test files in the /test directory using a pattern: node_modules./.bin/tape ./test/*.test.js
[https://github.com/dwyl/learn-tape#run-the-test]

ljstool.zora

name::
* McsEngl.ljstool.zora@cptIt,

_DESCRIPTION:
A less than 200 lines of code javascript test harness for nodejs and the browser
[https://github.com/lorenzofox3/zora]

ljstool.TRANSLATOR

name::
* McsEngl.ljstool.TRANSLATOR@cptIt,
* McsEngl.ljs'translator-tool@cptIt,
* McsEngl.ljstool.translator@cptIt,

ljstool.Closure-compiler

name::
* McsEngl.ljstool.Closure-compiler@cptIt,
* McsEngl.closure-compiler@cptIt,

_ADDRESS.WPG:
* http://closure-compiler.appspot.com/home,
* https://developers.google.com/closure/compiler//

_DESCRIPTION:
Closure Compiler[edit]
The Closure Compiler is a tool for making JavaScript download and run faster. It optimizes JavaScript. It does not compile from JavaScript to machine code, but rather compiles from JavaScript to better JavaScript (for machine, not human). It parses JavaScript, analyzes it, removes dead code and rewrites and minimizes what's left. It also checks syntax, variable references, and types, and warns about common JavaScript pitfalls. The compiler is provided in three ways:
Command-line:
This Java application can be invoked from the command line, and passed the list of JS files to be compiled.
Interactive-way:
Closure Compiler service website provides a form for user to input a URL pointing a JavaScript source or input a JavaScript source in a textbox and the website will response with the optimized JavaScript on right side for user to copy.
HTTP POST API:
Closure Compiler server website is waiting HTTP POST with severals HTTP POST parameters, see complete list. One is js_code or code_url which contains the string of JavaScript to be optimized. In return to the HTTP POST, the optimized JavaScript code will be the response content of application/x-www-form-urlencoded.
[http://en.wikipedia.org/wiki/Google_Closure_Tools#Closure_Compiler]

ljstool.COMPILER

name::
* McsEngl.ljstool.COMPILER@cptIt,
* McsEngl.ljs'compiler@cptIt,
* McsEngl.ljstool.compiler@cptIt,

_ADDRESS.WPG:
*

ljstool.Emscripten (llvm to ljs)

name::
* McsEngl.ljstool.Emscripten (llvm to ljs)@cptIt,
* McsEngl.emscripten@cptIt,

_DESCRIPTION:
Emscripten is an LLVM-based project that compiles C and C++ into highly-optimizable JavaScript in asm.js format. This lets you run C and C++ on the web at near-native speed, without plugins.
[http://kripken.github.io/emscripten-site/]
===
Emscripten is an LLVM to JavaScript compiler. It takes LLVM bytecode (which can be generated from C/C++ using Clang, or any other language that can be converted into LLVM bytecode) and compiles that into JavaScript, which can be run on the web (or anywhere else JavaScript can run).
Using Emscripten, you can
Compile C and C++ code into JavaScript and run that on the web
Run code in languages like Python as well, by compiling CPython from C to JavaScript and interpreting code in that on the web
[https://github.com/kripken/emscripten/wiki]
===
Back in January we wrote a piece about Windows 95 running on a Nintendo 3Ds, but today we’ve just discovered you can now run Windows 95 straight from a web browser. This amazing feat of technology is thanks to Andrea Faulds, a 19 year old developer from Scotland. Using no downloads, no special software, or no plugins, Andrea managed to get Windows 95 running in a web browser using emscriptem, a emulator that converts C++ code to JavaScript in real time.
[http://www.winbeta.org/news/19-year-old-scottish-developer-gets-windows-95-running-web-browser]

ljstool.PRECOMPILER

name::
* McsEngl.ljstool.PRECOMPILER@cptIt,

ljstool.Babel

name::
* McsEngl.ljstool.Babel@cptIt,
* McsEngl.babeljs@cptIt,

_DESCRIPTION:
Babel is a JavaScript compiler.
Use next generation JavaScript, today.
[http://babeljs.io/]
===
Babel isn’t full of surprises – it just transforms ES6 to ES5 as you’d expect. But the wonderful thing about Babel is that it also allows you to add your own transforms – and the community has created a lot of them. In particular, Babel has transforms for ES7 features like async/await and decorators. It also transforms your React JSX.
[http://jamesknelson.com/which-build-system-should-i-use-for-my-javascript-app/]

_GENERIC:
* ljs-compiler#ql:ljstool.compiler_cpt#

ljstool.jscodeshift

name::
* McsEngl.ljstool.jscodeshift@cptIt,

_DESCRIPTION:
jscodeshift is a toolkit for running codemods over multiple JS files. It provides:

A runner, which executes the provided transform for each file passed to it. It also outputs a summary of how many files have (not) been transformed.
A wrapper around recast, providing a different API. Recast is an AST-to-AST transform tool and also tries to preserve the style of original code as much as possible.
[https://github.com/facebook/jscodeshift]

ljstool.LEBAB

name::
* McsEngl.ljstool.LEBAB@cptIt,

* https://github.com/lebab/lebab, Turn your ES5 code into readable ES6 (sugar-syntax). It does the opposite of what Babel does. https://lebab.io/

ljstool.recast

name::
* McsEngl.ljstool.recast@cptIt,

_DESCRIPTION:
JavaScript syntax tree transformer, nondestructive pretty-printer, and automatic source map generator
[https://github.com/benjamn/recast]

ljstool.JS-WRITTEN

name::
* McsEngl.ljstool.JS-WRITTEN@cptIt,
* McsEngl.js-based-tool@cptIt,

_SPECIFIC:
* gulp-task-runner#ql:gulpjs_cpt#

ljs'User-interface

name::
* McsEngl.ljs'User-interface@cptIt,
* McsEngl.ljs'user-interface@cptIt,
* McsEngl.ljsui@cptIt,

_SPECIFIC:
* ljb-ui#ql:ljb'user_interface#
* ljn-ui##

SPECIFIC

name::
* McsEngl.ljs.specific@cptIt,

_SPECIFIC:
* browser-JavaScript##
* desktop-javascript##
* Node-JavaScript##

ljs.Browser-javascript (ljb) {1995}

_CREATED: {2002-04-24}

name::
* McsEngl.ljs.Browser-javascript (ljb) {1995}@cptIt,
* McsEngl.conceptIt554.11,
* McsEngl.ljb@cptIt,
* McsEngl.ljs.BROWSER@cptIt,
* McsEngl.client-side-js@cptIt,
* McsEngl.csjs@cptIt554,
* McsEngl.ljs.client-side@cptIt,
* McsEngl.ljs.csjs@cptIt,
* McsEngl.ljb@cptIt,
* McsEngl.ljsCs@cptIt, {2013-06-25}

_DESCRIPTION:
Client-side JavaScript (CSJS) is JavaScript that runs on the client-side. While JavaScript was originally created to run this way, the term was coined because the language is no longer limited to just client-side, since server-side JavaScript (SSJS) is now available.
[http://en.wikipedia.org/wiki/Client-side_JavaScript]

ljb'GENERIC

_GENERIC:
* interpreted-pgmlng#
* scripting-language#cptItsoft512#

ljb'ENVIRONMENT#cptCore756#

name::
* McsEngl.ljb'ENVIRONMENT@cptIt,

ljb'relation-to-java

name::
* McsEngl.ljb'relation-to-java@cptIt,
* McsEngl.ljs'and'java@cptIt,
* McsEngl.ljs'java@cptIt554i,
* McsEngl.java'js@cptIt554i,

_DESCRIPTION:
Java    JavaScript
Strongly-typed  Loosely-typed
Static    Dynamic
Classical    Prototypal
Classes    Functions
Constructors  Functions
Methods    Functions
[http://www.crockford.com/javascript/inheritance.html]
===
JavaScript and Java[edit]
A common misconception is that JavaScript is similar or closely related to Java. It is true that both have a C-like syntax (the C language being their most immediate common ancestor language). They also are both typically sandboxed (when used inside a browser), and JavaScript was designed with Java's syntax and standard library in mind. In particular, all Java keywords were reserved in original JavaScript, JavaScript's standard library follows Java's naming conventions, and JavaScript's Math and Date objects are based on classes from Java 1.0,[18] but the similarities end there.
The differences between the two languages are more prominent than their similarities. Java has static typing, while JavaScript's typing is dynamic (meaning a variable can hold an object of any type and cannot be restricted). Java is loaded from compiled bytecode, while JavaScript is loaded as human-readable source code. Java's objects are class-based, while JavaScript's are prototype-based. Finally, Java does not support functional programming, while Javascript does, as it contains many features based on the Scheme language.
[http://en.wikipedia.org/wiki/JavaScript] 2013-10-19

===
Another Java?
Contrary to some beliefs, JavaScript is not merely a decaffeinated version of Java for beginners and novices. The LiveScript/JavaScript animal is quite separate from direct Java applets and applications since it provides the functionality for a different niche in the market. It is, primarily, a solution for Client-side APIs in Netscape Navigator 2.0.
The discussion of the use of Client-side Application Programming Interfaces (APIs) in the world of the Web, once Server-side APIs had caught a hold, is still ongoing. The push toward moving the application processing from an already weighted server to the local user's interface came with the improvements in end-user desktop technology, both in hardware and software. With the increase from 486-based to Pentium-based and 68000-based to PowerPC-based PCs, the ever dropping price of secondary storage and memory, the technical demands of the average user are also increasing.
JavaScript provides this Client-side API to take care of the nuisances of static Web text. Netscape is also working on creating a server-side system with JavaScript, possibly with a link to the Common Gateway Interface (CGI) for backward compatibility. It is currently available on all the Netscape 2.0 beta version browsers and runs on all the different platforms.

Formerly known as Java-lite or Mocha internally, JavaScript takes away some of the tedium involved in writing heavy-duty Java applets to do simple calculations or browser control functions. The most obvious difference between the two is that JavaScripts are immediately interpreted by the browser from the source code, whereas Java applets need to be precompiled into a class before actual use. For the lay person this means that the scripts may run slower; each line is interpreted separately, usually one keyword and parameter combination at a time, rather than having faster compiled and code that can be immediately executed by the Java runtime environment within the browser.

Another important difference, although not directly stated, is that you do not have the large set of class libraries that you can use with Java. This limits the scripts to simple calculations and event processing. For example, you cannot start a separate network connection within JavaScript and download a new class over the network into your hierarchy to build upon your basic browser's ability dynamically over the network; this is something you can do with Java, on the other hand.
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]
===
When JavaScript was first introduced, I dismissed it as being not worth my attention. Much later, I took another look at it and discovered that hidden in the browser was an excellent programming language. My initial attitudes were based on the initial positioning of JavaScript by Sun and Netscape. They made many misstatements about JavaScript in order to avoid positioning JavaScript as a competitor to Java. Those misstatements continue to echo in the scores of badly written JavaScript books aimed at the dummies and amateurs market.
[http://javascript.crockford.com/survey.html]

ljb'relation-to-other-languages

name::
* McsEngl.ljb'relation-to-other-languages@cptIt,
* McsEngl.ljs'and'other-languages@cptIt,

_DESCRIPTION:
JavaScript is not Java. They are two very different languages. JavaScript is not a subset of Java. It is not interpreted Java. (Java is interpreted Java!) JavaScript shares C-family syntax with Java, but at a deeper level it shows greater similarity to the languages Scheme and Self. It is a small language, but it is also a suprisingly powerful and expressive language.You should take a look at it. You will find that it is not a toy language, but a full programming language with many distinctive properties.
[http://javascript.crockford.com/survey.html]

ljb'relation-to-PHP

name::
* McsEngl.ljb'relation-to-PHP@cptIt,
* McsEngl.ljs-and-PHP@cptIt,
* McsEngl.ljs'relation-to-php@cptIt,
* McsEngl.php-and-js@cptIt,
* McsEngl.php'relation-to-js@cptIt,

_ADDRESS.WPG:
* http://www.lullabot.com/articles/learning-javascript-php-comparison,

ljb'relation-to-scheme

name::
* McsEngl.ljb'relation-to-scheme@cptIt,
* McsEngl.ljs'and'scheme@cptIt,

_DESCRIPTION:
JavaScript has much in common with Scheme. It is a dynamic language. It has a flexible datatype (arrays) that can easily simulate s-expressions. And most importantly, functions are lambdas.
[http://javascript.crockford.com/little.html]

ljb'ATTRIBUTE

name::
* McsEngl.ljb'ATTRIBUTE@cptIt,
* McsEngl.ljs'characteristic@cptIt,

_DESCRIPTION:
Despite its popularity, few know that JavaScript is a very nice dynamic object-oriented general-purpose programming language.
[http://javascript.crockford.com/javascript.html]
===
Typing discipline  dynamic, weak, duck
===
Influenced by  Self, C, Scheme, Perl, Python, Java
===
Influenced  JScript, JScript .NET, Objective-J, TIScript

ljb'missing-attribute

name::
* McsEngl.ljb'missing-attribute@cptIt,

_SPECIFIC:
* module system##
===
So, what is holding JavaScript back from world domination?
JavaScript has no module system. To compose JavaScript scripts, they must be either managed in HTML, concatenated, injected, or manually fetched and evaluated. There is no native facility for scope isolation or dependency management.
JavaScript has no standard library. It has a browser API, dates, and math, but no file system API, much less an IO stream API or primordial types for binary data.
JavaScript has no standard interfaces for things like Web servers or databases.
JavaScript has no package management system that manages dependencies and automatically installs them, except JSAN (not to be confused with JSON), which falls short for scope isolation.
[http://arstechnica.com/business/2009/12/commonjs-effort-sets-javascript-on-path-for-world-domination/]

ljb'Bad-part

name::
* McsEngl.ljb'Bad-part@cptIt,

typeof(null) = object, wrong!

ljb'binary-data-manipulation

name::
* McsEngl.ljb'binary-data-manipulation@cptIt,

_DESCRIPTION:
Natively, js is not very good at handling binary data.
[http://nodetuts.com/pdf/handson-nodejs-sample.pdf 39/147]

ljb'Case-Characteristic

name::
* McsEngl.ljb'Case-Characteristic@cptIt,

_DESCRIPTION:
JavaScript is case sensitive.
[http://www.learn-javascript-tutorial.com/JavaScriptBasics.cfm#HTMLDom]
===
CASE-SENSITIVE:
Η ΤΣ(JavaScritp) είναι γλώσσα που κάνει διάκριση ανάμεσα στα πεζά και τα κεφαλαία γράμματα ... να λάβετε παράλληλα υπόψη ότι τη HTML δεν είναι "case sensitive" ...
[Λιακέας, Η γλώσσα JavaScript. 2002, 25]

ljb'Closures

name::
* McsEngl.ljb'Closures@cptIt,

Closures

This pattern of public, private, and privileged members is possible because JavaScript has closures. What this means is that an inner function always has access to the vars and parameters of its outer function, even after the outer function has returned. This is an extremely powerful property of the language. There is no book currently available on JavaScript programming that shows how to exploit it. Most don't even mention it.

Private and privileged members can only be made when an object is constructed. Public members can be added at any time.
[http://javascript.crockford.com/private.html]

ljb'Dynamic

name::
* McsEngl.ljb'Dynamic@cptIt,

ljb'Expressive

name::
* McsEngl.ljb'Expressive@cptIt,

_DESCRIPTION:
It is a small language, but it is also a suprisingly powerful and expressive language.
[http://javascript.crockford.com/survey.html]
===
enourmous expressive power.
[http://www.youtube.com/watch?v=RO1Wnu-xKoY&feature=bf_next&list=PL7664379246A246CB&lf=plpp_video]

ljb'Functional-language

name::
* McsEngl.ljb'Functional-language@cptIt,

ljb'Interpreted-language

name::
* McsEngl.ljb'Interpreted-language@cptIt,

JavaScript being an interpreted language with a runtime execution engine, it needs a host environment to instantiate the engine and forward the JavaScript code to it. The browser is one of many hosts for JavaScript. Other hosts are Adobe Flash plugins (via ActionScript), desktop widgets (like Yahoo! Widgets, MS Gadgets, OS X Dashboard Widgets), Firefox browser add-ons, and even some kinds of electronic equipment.
[http://www.learn-javascript-tutorial.com/QuickRecap.cfm#dom-is-not-javascript]

ljb'Misstatement

name::
* McsEngl.ljb'Misstatement@cptIt,

When JavaScript was first introduced, I dismissed it as being not worth my attention. Much later, I took another look at it and discovered that hidden in the browser was an excellent programming language. My initial attitudes were based on the initial positioning of JavaScript by Sun and Netscape. They made many misstatements about JavaScript in order to avoid positioning JavaScript as a competitor to Java. Those misstatements continue to echo in the scores of badly written JavaScript books aimed at the dummies and amateurs market.
[http://javascript.crockford.com/survey.html]

ljb'modularity

name::
* McsEngl.ljb'modularity@cptIt,

_ADDRESS.WPG:
* http://addyosmani.com/writing-modular-js//

_DESCRIPTION:
In this article, we're going to look at three formats for writing modular JavaScript: AMD, CommonJS and proposals for the next version of JavaScript, Harmony.
[http://addyosmani.com/writing-modular-js/]

ljb'OBJECT-ORIENTED

name::
* McsEngl.ljb'OBJECT-ORIENTED@cptIt,

Is JavaScript object-oriented? It has objects which can contain data and methods that act upon that data. Objects can contain other objects. It does not have classes, but it does have constructors which do what classes do, including acting as containers for class variables and methods. It does not have class-oriented inheritance, but it does have prototype-oriented inheritance.
...
Some argue that JavaScript is not truly object oriented because it does not provide inheritance. But it turns out that JavaScript supports not only classical inheritance, but other code reuse patterns as well.
[http://javascript.crockford.com/javascript.html]

ljb'Powerful

name::
* McsEngl.ljb'Powerful@cptIt,

_DESCRIPTION:
It is a small language, but it is also a suprisingly powerful and expressive language.
[http://javascript.crockford.com/survey.html]

ljb'Safe

name::
* McsEngl.ljb'Safe@cptIt,

JavaScript, the programming language of the web browser, is not a secure language.
[http://www.adsafe.org/]

ljb'Small

name::
* McsEngl.ljb'Small@cptIt,

_DESCRIPTION:
It is a small language, but it is also a suprisingly powerful and expressive language.
[http://javascript.crockford.com/survey.html]

ljb'Syntax

name::
* McsEngl.ljb'Syntax@cptIt,

_DESCRIPTION:
ECMAScript syntax intentionally resembles Java syntax. ECMAScript syntax is relaxed to enable it to serve as an easy-to-use scripting language. For example, a variable is not required to have its type declared nor are types associated with properties, and defined functions are not required to have their declarations appear textually before calls to them.
[http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf, p3]
===
syntactically it is obviously a member of the C family
[http://javascript.crockford.com/tdop/tdop.html]

ljb'Block

name::
* McsEngl.ljb'Block@cptIt,

_DEFINITION:
JavaScript Blocks
JavaScript statements can be grouped together in blocks.
Blocks start with a left curly bracket {, and ends with a right curly bracket }.
The purpose of a block is to make the sequence of statements execute together.
[http://www.w3schools.com/js/js_statements.asp]

_DESCRIPTION:
Required Blocks

JSLint expects that if, while, do and for statements will be made with blocks {that is, with statements enclosed in braces}.

JavaScript allows an if to be written like this:

if (condition)
statement;
That form is known to contribute to mistakes in projects where many programmers are working on the same code. That is why JSLint expects the use of a block:

if (condition) {
statements;
}
Experience shows that this form is more resilient.
[http://www.jslint.com/lint.html]

_SCOPE:
Named variables are defined with the var statement. When used inside of a function, var defines variables with function-scope. The vars are not accessible from outside of the function. There is no other granularity of scope in JavaScript. In particular, there is no block-scope.
[http://javascript.crockford.com/survey.html]

ljb'constant

name::
* McsEngl.ljb'constant@cptIt,

_DESCRIPTION:
Global variables should be in all caps. (JavaScript does not have macros or constants, so there isn't much point in using all caps to signify features that JavaScript doesn't have.)
[http://javascript.crockford.com/code.html]
===
You can create a read-only, named constant with the const keyword. The syntax of a constant identifier is the same as for a variable identifier: it must start with a letter, underscore or dollar sign and can contain alphabetic, numeric, or underscore characters.

const prefix = '212';
A constant cannot change value through assignment or be re-declared while the script is running.

The scope rules for constants are the same as those for variables, except that the const keyword is always required, even for global constants. If the keyword is omitted, the identifier is assumed to represent a variable.

You cannot declare a constant with the same name as a function or variable in the same scope. For example:

// THIS WILL CAUSE AN ERROR
function f() {};
const f = 5;

// THIS WILL CAUSE AN ERROR ALSO
function f() {
const g = 5;
var g;

//statements
}
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FValues%2C_variables%2C_and_literals#Constants]

ljb'Macro

name::
* McsEngl.ljb'Macro@cptIt,

Global variables should be in all caps. (JavaScript does not have macros or constants, so there isn't much point in using all caps to signify features that JavaScript doesn't have.)
[http://javascript.crockford.com/code.html]

ljb'this

name::
* McsEngl.ljb'this@cptIt,
* McsEngl.lbjthis@cptIt,
* McsEngl.ljs'binding@cptIt,
* McsEngl.ljsthis@cptIt,

_ADDRESS.WPG:
* http://rainsoft.io/gentle-explanation-of-this-in-javascript//
* The this keyword: http://www.quirksmode.org/js/this.html,
* http://alistapart.com/article/getoutbindingsituations,

_DESCRIPTION:
this is the global object in a function invocation
...
this is undefined in a function invocation in strict mode
...
this is the object that owns the method in a method invocation
...
this is the first argument of .call() or .apply() in an indirect invocation
...
this is the first argument of .bind() when invoking a bound function
...
this is the enclosing context where the arrow function is defined
[http://rainsoft.io/gentle-explanation-of-this-in-javascript/]
===
In object-oriented programming languages, the this keyword is used to refer to the current instance of the object...
In Javascript - which is a prototype-based language - the this keyword is not fixed to a particular value. Instead, the value of this is determined by how the function is called
[http://book.mixu.net/node/single.html]
===
by default
> this === window
true
===
If you’re calling a method on no particular object, you’re usually calling it on the current object. The same goes when you’re passing a method around for later invocation: it will retain its current object. In short, for most OOP languages, binding is implicit. This is true in Java, C#, Ruby, Delphi, and C++, to name but a few.
...
In JavaScript, binding is always explicit, and can easily be lost, so a method using this will not refer to the proper object in all situations, unless you force it to. Overall, binding in JavaScript is not a difficult concept, but it is far too often ignored or glossed over by JavaScripters, which leads to confusion.
...
To recap:
* Any member access must be qualified with the object it pertains to, even when it is this.
* Any sort of function reference (assigning as a value, passing as an argument) loses the function’s original binding.
* JavaScript provides two equivalent ways of explicitly specifying a function’s binding when calling it: apply and call.
* Creating a “bound method reference” requires an anonymous wrapper function, and a calling cost. In specific situations, leveraging closures may be a better alternative.
[http://alistapart.com/article/getoutbindingsituations]
===
In JavaScript, the this keyword is dynamically scoped to mean the object that the current function is attached to. If you pass a function as a callback or attach it to a different object, the original value of this will be lost. If you're not familiar with this behavior, this Digital Web article gives a good overview of the quirks.
[http://coffeescript.org/#fat-arrow]
===
A function can be a member of an object. When a function is a member of an object, it is called a method. There is a special variable, called this that is set to the object when a method of the object is called.
For example, in the expression foo.bar(), the this variable is set to the object foo as a sort of extra argument for the function bar. The function bar can then refer to this to access the object of interest.
In a deeper expression like do.re.mi.fa(), the this variable is set to the object do.re.mi, not to the object do. In a simple function call, this is set to the Global Object (aka window), which is not very useful. The correct behavior should have been to preserve the current value of this, particularly when calling inner functions.
[http://javascript.crockford.com/survey.html]
===
Κατά τους ορισμούς αντικειμένων ή συναρτήσεων, ή μέσα σε χειριστές συμβάντων, συχνά χρειάζεται να αναφερθούμε στο τρέχον αντικείμενο. Σε αυτή την περίπτωση χρησιμοποιούμε τη λέξη this. Το this σημαίνει το "τρέχον αντικείμενο".
[Λιακέας, Η γλώσσα JavaScript. 2002, 162]
===
By a similar nature, you can use 'this' to represent the current object. By default, 'this' will be the window object.
If you are writing the script as part of a HTML event handler, 'this' will be the element that detected the event. For example, this can be used to alert the value of the text input:
function myFunction(x) { window.alert(x.value); } ... <input type="text" onkeypress="myFunction(this)">

Using this same function from a script running in the global scope, the word 'this' refers to the window object. The window object does not have a value property, so the function would alert 'undefined'.

However, if the onkeypress method is activated manually, the word 'this' once again refers to the input, so the function will alert the value of the input:
document.forms[0].elements[0].onkeypress();
[http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific]
===
In JavaScript the this keyword always refers to the “owner” of a function. In the case of event handlers it is very useful if this refers to the HTML element the event is handled by, so that you have easy access to it.
Unfortunately the this keyword, though very powerful, is hard to use if you don’t know exactly how it works.
[http://www.quirksmode.org/js/events_advanced.html]
===
JavaScript famous keyword this always refers to the current context. Within a function this context can change, depending on how the function is called:

$(document).ready(function() {
// this refers to window.document
});

$("div").click(function() {
// this refers to a div DOM element
});
[http://www.tutorialspoint.com/jquery/jquery-basics.htm]

_ADDRESS.WPG:
* http://bonsaiden.github.com/JavaScript-Garden/#function.this,

_CODE.LJS:
//IN an object-factory: this denotes the returned object
> var ftr=function(){
var n=1,s='s';
function f(){return this}
return{n:n,s:s,f:f};
}
undefined
> var o=ftr()
undefined
> o.n
1
> var o2=o.f()
undefined
> o2.n
1
> o2.f()
Object {n: 1, s: "s"}f: f()n: 1s: "s"__proto__: Object
> o.f()
Object {n: 1, s: "s"}f: f()n: 1s: "s"__proto__: Object
===
//INSIDE AN OBJECT:
//a) inside an object Y, refers to window object.
> var o ={s:"string",o:{s2:this.s}}
undefined
> o.o.s2
undefined
> this === window
true
===
var o ={s:"string",s2:this.s}
undefined
o.s2
undefined

//b) inside a function IN an-object, refers to object.
> var o ={s:"string",f:function(){console.log(this.s)}}
undefined
> o.f()
string
// this inside a function IN an object is the object:
> var o = {p1:1, f: function(){return this}}
undefined
> o.p1
1
> o.f()
Object {p1: 1, f: function}
===
> var o = {name:'nikkas',f: function(){console.log(this.name)}}
undefined
> o.f()
nikkas
===

===
The value of this inside of the event listener function passed to the addEventListener() method will be a reference to the node or object the event is attached too. In the code below I attach an event to a <div> and then using this inside of the event listener gain access to the <div> element the event is attached too.
<!DOCTYPE html>
<html lang="en">
<body>
<div>click me</div>

<script>
document.querySelector('div').addEventListener('click',function(){
// 'this' will be the element or node the event listener is attached too
console.log(this); //logs '<div>'
},false);
</script>
</body>
</html>
[http://domenlightenment.com/#11.7]

===
Two of those built-in properties of functions allow us to change the value of "this" when calling a function:

Function.apply(thisArg[, argsArray]): Calls the function, setting the value of this to thisArg and the arguments of the function the values of argsArray.
Function.call(thisArg[, arg1[, arg2[, ...]]]): Calls the function, setting the value of this to thisArg, and passing the arguments arg1, arg2 ... to the function.
Let's see some examples:

function f1() {
console.log(this);
}
var obj1 = { id: "Foo"};
f1.call(obj1);
var obj2 = { id: "Bar"};
f1.apply(obj2);
LOG {"id":"Foo"}
LOG {"id":"Bar"}
[http://book.mixu.net/node/single.html]
===
> var john = {
name: 'John',
greet: function(person) {
alert("Hi " + person + ", my name is " + name);
}
};john.greet("Mark");
< Hi Mark, my name is

> var john = {
name: 'John',
greet: function(person) {
alert("Hi " + person + ", my name is " + this.name);
}
};john.greet("Mark");
< Hi Mark, my name is John

> name = 'Ray'; // Or explictly: window.name = 'Ray';
var john = {
name: 'John',
greet: function(person) {
alert("Hi " + person + ", my name is " + name);
}
};john.greet("Mark");
< "Hi Mark, my name is Ray"

===
this in function1 AND this in function2 inside function1 are not ALWAYS the same.
I need an example.
[hmnSngo.2015-03-18]

jsthis'mistake

name::
* McsEngl.jsthis'mistake@cptIt,

Common Mistake#1: Incorrect references to this

I once heard a comedian say:

“I’m not really here, because what’s here, besides there, without the ‘t’?”
That joke in many ways characterizes the type of confusion that often exists for developers regarding JavaScript’s this keyword. I mean, is this really this, or is it something else entirely? Or is it undefined?

As JavaScript coding techniques and design patterns have become increasingly sophisticated over the years, there’s been a corresponding increase in the proliferation of self-referencing scopes within callbacks and closures, which are a fairly common source of “this/that confusion”.

Consider this example code snippet:

Game.prototype.restart = function () {
this.clearLocalStorage();
this.timer = setTimeout(function() {
this.clearBoard(); // what is "this"?
}, 0);
};
Executing the above code results in the following error:

Uncaught TypeError: undefined is not a function
Why?

It’s all about context. The reason you get the above error is because, when you invoke setTimeout(), you are actually invoking window.setTimeout(). As a result, the anonymous function being passed to setTimeout() is being defined in the context of the window object, which has no clearBoard() method.

A traditional, old-browser-compliant solution is to simply save your reference to this in a variable that can then be inherited by the closure; e.g.:

Game.prototype.restart = function () {
this.clearLocalStorage();
var self = this; // save reference to 'this', while it's still this!
this.timer = setTimeout(function(){
self.clearBoard(); // oh OK, I do know who 'self' is!
}, 0);
};
Alternatively, in newer browsers, you can use the bind() method to pass in the proper reference:

Game.prototype.restart = function () {
this.clearLocalStorage();
this.timer = setTimeout(this.reset.bind(this), 0); // bind to 'this'
};

Game.prototype.reset = function(){
this.clearBoard(); // ahhh, back in the context of the right 'this'!
};
[http://www.toptal.com/javascript/10-most-common-javascript-mistakes]

jsbinding'apply-method

name::
* McsEngl.jsbinding'apply-method@cptIt,

jsbinding'call-method

name::
* McsEngl.jsbinding'call-method@cptIt,

jsbinding'late-binding

name::
* McsEngl.jsbinding'late-binding@cptIt,

_DESCRIPTION:
Note, by the way, that the method does not actually need to belong to the object you’re binding it to: as long as it uses this in ways that are compatible with its binding (read: with members that exist in its bound object), we’re in the clear. Such flexibility is possible because JavaScript is a dynamic language that resolves member access at runtime—when the access happens—a feature sometimes referred to as “late binding.” You’ll also find late binding in just about every scripting language (e.g., Perl, Ruby, Python, PHP) and, incidentally, OLE Automation.
[http://alistapart.com/article/getoutbindingsituations#section6]

jsbinding'lexical-closure

name::
* McsEngl.jsbinding'lexical-closure@cptIt,

_DESCRIPTION:
Should you even bind?
Now that we’ve been through the details of binding, it’s only fair to stress that sometimes, binding is overkill. Specifically, there’s a code pattern in which binding can be replaced, with significant performance profit, by using the lexical closure. (If you’re not clear on a what a closure is, don’t panic.)

Here’s the pattern: some code within a method relies on an anonymous function passed by reference to work. That anonymous function needs to access the surrounding method’s this keyword. For instance, assuming for a minute we have the each iterator within arrays, consider the following code again:

// ...
processItems: function() {
this.items.each(function(item) {
// Process item…
this.markItemAsProcessed(item);
});
},
// ...
The issue here is that the anonymous function holding the actual processing code is passed as an argument to each, and therefore loses the current binding. When it attempts to call this.markItemAsProcessed, it crashes because window has no such method.

Many developers are quick to fix that with binding. Using Prototype, for instance, they would add the following tweak:

// ...
processItems: function() {
this.items.each(function(item) {
// Process item
this.markItemAsProcessed(item);
}.bind(this));
},
// ...
Notice the trailing call to bind. However, such code is not as good an idea as it may seem. We saw that achieving such a “bound reference” requires us to wrap the original method within an anonymous function, which means calling the bound method reference results in two method calls: our anonymous wrapper, and the original method. And if there’s one thing true of just about any language, it’s that method calls are costly.

In this situation, we have access to the original, desired this keyword in the same code location where we define and call the faulty function (the anonymous method we’re passing as an argument to each). We can simply save the proper this reference in a local variable, and use that inside our iteration function:

// ...
processItems: function() {
var that = this;
this.items.each(function(item) {
// Process item
that.markItemAsProcessed(item);
});
},
// ...
Look, Ma! No binding! This code uses a language feature called “lexical closure.” In short, closures let code at point A access identifiers declared in scopes surrounding A. Here, our anonymous function has access to variables in the surrounding function—our processItems method. Such a closure will be maintained by the JavaScript runtime no matter what, so there is no extra cost to using it. Even if there were, I’m fairly confident that it would be far less than the cost of an extra function call at every turn of the loop.

Be cautious about your bindings: sometimes closures provide a simpler, shorter, and better way. (Which is, I believe, precisely why jQuery decided to “force” its users to think about the best option for each situation by having them deal with binding manually.) While closures do have their own set of problems—ill-employed, they can result in memory leaks for certain browsers—the usage I recommend here is pretty safe.
[http://alistapart.com/article/getoutbindingsituations#section14]

jsbinding'loss

name::
* McsEngl.jsbinding'loss@cptIt,
* McsEngl.ljs'binding-loss@cptIt,

_DESCRIPTION:
var john = {
name: 'John',
greet: function(person) {
alert("Hi " + person + ", my name is " + this.name);
}
};var fx = john.greet;
fx("Mark");
// => "Hi Mark, my name is " (or "Hi Mark, my name »
is Ray" depending on where you're trying it)
Perhaps you’re not familiar with languages that treat functions as first-order values, in which case the line var fx = john.greet; may seem weird. This does not call the greet method, but creates a reference to it—an alias of sorts, if you will. Hence, calling fx ends up calling the greet method. However, we’re apparently in some trouble all of a sudden: we’re explicitly using the this keyword, yet it does not use John. What gives?

This is the single most important issue with JavaScript binding—something I’ll refer to as “binding loss.” It happens whenever you’re accessing a method through a reference instead of directly through its owner object. The method loses its implicit binding, and this stops referencing its owner object and goes back to its default value, which in this case is window (so if window had a name property by then, it would be used).

ljb'worker

name::
* McsEngl.ljb'worker@cptIt,
* McsEngl.ljs'web-worker@cptIt,

Computing with JavaScript Web Workers
* http://ejohn.org/blog/web-workers/

ljb'Archetype

name::
* McsEngl.ljb'Archetype@cptIt,

_DESCRIPTION:
Archetype is human-information that ljs process.
[hmnSngo.2016-05-10]
===
Archetype is algorithm (= info processing by machine) in natural-language.
[hmnSngo.2016-03-19]

ljb'Model (Algorithm)

name::
* McsEngl.ljb'Model (Algorithm)@cptIt,
* McsEngl.ljbalgo@cptIt, {2014-10-18}
* McsEngl.ljs'algo@cptIt,
* McsEngl.ljsalgorithm@cptIt, {2014-10-18}
* McsEngl.ljsarchoview@cptIt, {2014-06-01}
* McsEngl.ljsarchetype@cptIt,
* McsEngl.ljsarchetype.ALGORITHM@cptIt,
* McsEngl.ljsprocessing@cptIt, {2014-10-18}
* McsEngl.ljs'algorithm@cptIt,
* McsEngl.ljs'archetype-function@cptIt, {2014-02-14}
* McsEngl.ljs'archoview@cptIt,
* McsEngl.ljs'design-pattern@cptIt,
* McsEngl.ljs'domain.in@cptIt,
* McsEngl.ljs'domainIn'Algorithm@cptIt,
* McsEngl.ljs'pattern@cptIt,
* McsEngl.ljs'usage@cptIt,
* McsEngl.ljs'archetype@cptIt,
* McsEngl.ljsarcho@cptIt, {2014-07-29}
* McsEngl.ljs'archonode@cptIt,
* McsEngl.ljsnode@cptIt,
* McsEngl.ljs'ARCHETYPE@cptIt,
* McsEngl.ljsalgo@cptIt,

_DESCRIPTION:
Algorithm is the-mapping of the-archetype in ljs format for processing.
An-ljs-algorithm is representing in a-natural-language in a programer's head, but written in ljs-code can be understood by a-machine which represents it internally in binary-code and processed.
[hmnSngo.2016-05-10]

_GENERIC:
* lcp-archetype#ql:"lcp'archetype"#
* lcp-algo#ql:lcpalgo@cptIt#

_DESCRIPTION:
algorithm = a human-information processing SYSTEM (= process and info) by a COMPUTER.
[hmnSngo.2016-01-30]
===
algorithm = a human-information processing by a COMPUTER.
[hmnSngo.2014-11-01]
===
algorithm = a processing
[hmnSngo.2014-10-18]
===
archetype = algorithm
[hmnSngo.2014-03-19]
===
Alogorithm-archetype is any DOING on information by a computer.
[hmnSngo.2014-02-14]

_DESCRIPTION:
The-js-archetype is information-processing-by-the-computer (algo) expressed in a-human-language.
[hmnSngo.2014-11-01]
===
Semasio is the translation of algorithm as a whole-part structure of js-units.
[hmnSngo.2014-10-28]
===
Archetype and archonode is the same because any archetype is an archonode constructed from other archonodes.
[hmnSngo.2014-07-29]

_ADDRESS.WPG:
* http://addyosmani.com/resources/essentialjsdesignpatterns/book//
* http://www.jspatterns.com//

jsalgo'code

name::
* McsEngl.jsalgo'code@cptIt,
* McsEngl.ljs'code.PATTERN@cptIt,
* McsEngl.ljs'pattern'implementation@cptIt,
* McsEngl.ljs'code.PROCESSING@cptIt,
* McsEngl.ljs'dataNo@cptIt,
* McsEngl.ljs'code.EXAMPLE@cptIt,
* McsEngl.ljs'ex@cptIt,
* McsEngl.ljs'example@cptIt,
* McsEngl.ljs'processing-code@cptIt,

_GENERIC:
* js-code#ql:lcpjs'code#

_DESCRIPTION:
Processing-code INCLUDES and representation-code.
[hmnSngo.2014-02-09]

_SPECIFIC:
* js-function#ql:js'function#
* js--loop-statement#ql:js'loop_statement#
* js-operator#ql:js'operator#

_DESCRIPTION:
Each design pattern focuses on a particular object-oriented design problem or issue. It describes when it applies, whether or not it can be applied in view of other design constraints, and the consequences and trade-offs of its use. Since we must eventually implement our designs, a design pattern also provides sample ... code to illustrate an implementation.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#categoriesofdesignpatterns]

ljbalgo'doing.USAGE

name::
* McsEngl.ljbalgo'doing.USAGE@cptIt,
* McsEngl.ljs'usage@cptIt,

_DESCRIPTION:
JavaScript is used for many different kinds of applications today. Most often, JavaScript is mixed with HTML5 and CSS to build Web front ends. But JavaScript is also being used to build mobile applications, and it’s finding an important place on the back end in the form of Node.js servers. Fortunately, JavaScript development tools -- both editors and IDEs -- are rising to meet the new challenges.
[http://www.infoworld.com/article/2925050/javascript/review-7-javascript-ides-put-to-the-test.html?nsdr=true, By Martin Heller, May 27, 2015]

jsalgo'exception

name::
* McsEngl.jsalgo'exception@cptIt,

_DESCRIPTION:
If an algorithm is defined to “throw an exception”, execution of the algorithm is terminated and no result is returned. The calling algorithms are also terminated, until an algorithm step is reached that explicitly deals with the exception, using terminology such as “If an exception was thrown…”. Once such an algorithm step has been encountered the exception is no longer considered to have occurred.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec5.2P13]

jsalgo'step

name::
* McsEngl.jsalgo'step@cptIt,

_DESCRIPTION:
The specification often uses a numbered list to specify steps in an algorithm.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec5.2P1]

jsalgo'domainIn

name::
* McsEngl.jsalgo'domainIn@cptIt,
* McsEngl.ljs'domainIn@cptIt,

ljb'domainIn'PART

name::
* McsEngl.ljb'domainIn'PART@cptIt,

_DESCRIPTION:
When is Javascript used outside of the browser?

Javascript is commonly known by programmers as a language executed by browsers to validate forms, add extra functionality to webpages, etc.

Because of the fact that Javascript is run by browsers (which run on the client machine), it is often mistakenly referred to as a client side language. But, it’s important to remember that Javascript is just a language, and depending on what purpose the language is implemented for, it can be used to do other things than just run on a browser. Let’s explore some of those things.

Javascript on the Server Side – Node.js
Javascript can also be run by the server. Node.js is a perfect example of how Javascript can be run on the server side – not the client side.

Node.js is a combination of a runtime environment and a library that uses server side Javascript to build web based applications. Again, the key here is that it is server side Javascript, which means that Javascript is executed by the server – not the browser. Node.js also happens to use the V8 virtual machine, which is the Javascript virtual machine that is used in Google’s Chrome web browser.

Javascript in PDF files
Javascript can also be used to customize PDF files, and even to develop Adobe Acrobat applications

Javascript on the desktop
Javascript is also sometimes used to develop desktop widgets.

So, you can see that Javascript has many applications other than just being executed by browsers – something that’s good to know.
[http://www.programmerinterview.com/index.php/javascript/javascript-outside-the-browser/]

jsalgo'resource

name::
* McsEngl.jsalgo'resource@cptIt,

_ADDRESS.WPG:
* https://www.hscripts.com/scripts/JavaScript/index.php,

jsalgo'structure

name::
* McsEngl.jsalgo'structure@cptIt,
* McsEngl.ljb'syntax-tree@cptIt,

_STRUCTURE:
* statement
* unit
===
* array (arr)
* boolean (bln)
* collection
* collectionNo
* comment
* function (fcn)
* information
* named
* namedNo
* number (nbr)
* object (obj)
* regexp (rgx)
* string (str)
* time
* type

_SPECIFIC:
* algorithm##
* information##
* named-archetype##
* type-archetype##

ljbalgo'ROOT-TREE

name::
* McsEngl.ljbalgo'ROOT-TREE@cptIt,

ljbalgo'STATEMENT-STRUCTURE (scs)

name::
* McsEngl.ljbalgo'STATEMENT-STRUCTURE (scs)@cptIt,
* McsEngl.ljsstatement-structure@cptIt,
* McsEngl.ljssmt-structure@cptIt,

* McsEngl.lbjscs@cptIt,

_DESCRIPTION:
relation of statements.
[hmnSngo.2014-04-12]

ljbalgo'scs'code

name::
* McsEngl.ljbalgo'scs'code@cptIt,

ljbalgo'SENTECE (stc)

name::
* McsEngl.ljbalgo'SENTECE (stc)@cptIt,
* McsEngl.ljsstatement@cptIt,
* McsEngl.ljssmt@cptIt,

* McsEngl.ljbstc@cptIt,

_DESCRIPTION:
ONE verb plus its arguments.
[hmnSngo.2014-04-12]
===
verb is a relation or doing concept.
[hmnSngo.2014-07-28]

ljbstc'code

name::
* McsEngl.ljbstc'code@cptIt,
* McsEngl.ljs'command@cptIt,
* McsEngl.ljs'statement@cptIt,
* McsEngl.ljs'code.STATEMENT@cptIt,
* McsEngl.ljs'sentence@cptIt,

_GENERIC:
* atom-structure##
* unit-of-code#ql:"js'unit_of_code"#,

_WHOLE:
* js-program#ql:lcpjs'code.program#
* js-sentence-structure##
===
JavaScript code (or just JavaScript) is a sequence of JavaScript statements.
[http://www.w3schools.com/js/js_statements.asp]

_DESCRIPTION:
A sentence is code with ONE VERB and its arguments.
[hmnSngo.2014-02-12]
===
The result of evaluating a Statement is always a Completion value.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec12.SemanticsP2]
===
All the JavaScript code that you will write will, for the most part, be comprised of many separate statements. A statement can set a variable equal to a value. A statement can also be a function call, i.e. document.write(). Statements define what the script will do and how it will be done.
typical ending of a statement
In typical programming languages like C and PHP, the end of a statement is marked with a semicolon(;), but we have seen that the semicolon is optional in JavaScript. In JavaScript, the end of a statement is most often marked by pressing return and starting a new line.
[http://www.tizag.com/javascriptT/javascriptstatements.php]

ljbstc'verb

name::
* McsEngl.ljbstc'verb@cptIt,

ljbstc'verb-attribute

name::
* McsEngl.ljbstc'verb-attribute@cptIt,

SPECIFIC

name::
* McsEngl.lcpJs'statement.specific@cptIt,

_SPECIFIC:
* delete-sentence#ql:lcpjs'delete_sentence#

_SPECIFIC:
The set of named statements includes
- var,
- if,
- switch,
- for,
- while,
- do,
- break,
- continue,
- return,
- try,
- throw, and
- with.
Most of them work the same as in other C-like languages.
[http://javascript.crockford.com/survey.html]

In addition to standard statements like changing a variable's value, assigning a new value, or calling a function, there are groups of statements that are distinct in their purpose. We will provide a brief overview of each of these categories in this lesson and cover them in greater detail later in the tutorial. These distinct groups of statements include:
* Conditional Statements
* Loop Statements
* Object Manipulation Statements
* Comment Statements
* Exception Handling Statements
[http://www.tizag.com/javascriptT/javascriptstatements.php]

ljbstc.ASSIGNING

name::
* McsEngl.ljbstc.ASSIGNING@cptIt,
* McsEngl.ljs'assignment-statement@cptIt,

ljbstc.CONDITIONAL

name::
* McsEngl.ljbstc.CONDITIONAL@cptIt,
* McsEngl.ljs'conditional-statement@cptIt,

_DESCRIPTION:
Conditional statements are used to control your scripts so that different actions can be taken depending on the situation. You may want to display a special image on your home page during the holidays. This condition would depend on what day it was, and if it was a holiday, then a special holiday image would be displayed to your visitors. Without proper knowledge of the conditional statement, your scripts will not be as lively or dynamic as they could possibly be.
[http://www.tizag.com/javascriptT/javascriptstatements.php]

ljbstc.CONTROL

name::
* McsEngl.ljbstc.CONTROL@cptIt,
* McsEngl.ljs'control-statement@cptIt,
* McsEngl.ljs'control-structure@cptIt,

=== _NOTES: compound statement (for example inside an if control structure)
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Variables]

_DESCRIPTION:
Use blocks all the time in control structures
Control structures like if, while or for can take either a single statement or a block of statements inside curly braces.
We recommend that you always use a block, even if it has only one statement. The absence of the braces can hide bugs or make the code look different than its intent.

_SPECIFIC:
* for##
* if##
* while

ljbstc.break

name::
* McsEngl.ljbstc.break@cptIt,
* McsEngl.ljs'break-statement@cptIt,

_DESCRIPTION:
The break statement will break the loop and continue executing the code that follows after the loop (if any).

_CODE.LJS:
<html>
<body>
<script type="text/javascript">
var i=0;
for (i=0;i<=10;i++)
{
if (i==3)
{
break;
}
document.write("The number is " + i);
document.write("<br />");
}
</script>
<p>Explanation: The loop will break when i=3.</p>
</body>
</html>
=================
The number is 0
The number is 1
The number is 2

Explanation: The loop will break when i=3.
[http://www.w3schools.com/JS/js_break.asp]

ljbstc.continue

name::
* McsEngl.ljbstc.continue@cptIt,
* McsEngl.ljscontinue@cptIt,
* McsEngl.ljs'continue@cptIt,
* McsEngl.ljs'continue-keyword@cptIt,
* McsEngl.ljs'continue-statement@cptIt,

_DESCRIPTION:
Stops current repetition and begins with the next repetition.
[hmnSngo.2014-03-28]
===
Avoid use of the continue statement. It tends to obscure the control flow of the function.
[http://javascript.crockford.com/code.html]
===
The continue statement will break the current loop and continue with the next value.

_CODE.LJS:
<html>
<body>
<script type="text/javascript">
var i=0
for (i=0;i<=10;i++)
{
if (i==3)
{
continue;
}
document.write("The number is " + i);
document.write("<br />");
}
</script>
</body>
</html>
=====================
The number is 0
The number is 1
The number is 2
The number is 4
The number is 5
The number is 6
The number is 7
The number is 8
The number is 9
The number is 10

Explanation: The loop will break the current loop and continue with the next value when i=3.
[http://www.w3schools.com/JS/js_break.asp]

ljbstc.delete

name::
* McsEngl.ljbstc.delete@cptIt,

_CODE.LJS:
delete obj.attributeB; // remove a property of obj
alert(obj.attributeB); // undefined

delete obj; // remove the whole Object (rarely used)
alert(obj.attributeA); // throws an exception
[http://en.wikipedia.org/wiki/JavaScript_syntax]

ljbstc.EXCEPTION-HANDLING

name::
* McsEngl.ljbstc.EXCEPTION-HANDLING@cptIt,
* McsEngl.ljs'exception-handling-statement@cptIt,

_DESCRIPTION:
Sometimes when you are programming you do not know for sure if the file that you will be writing to, the input stream you are reading from, or the connection you have established will be usable for the code that you want to execute. There is a way to program safety mechanisms, so that your code handles common problems that may arise (maybe the input stream you are reading from suddenly disappears).
The try...catch statement tries to execute a piece of code and if it fails, the catch should handle the error gracefully. This is an advanced programming subject that is interesting, but not necessary for the majority of JavaScript programmers.
[http://www.tizag.com/javascriptT/javascriptstatements.php]

ljbstc.for

name::
* McsEngl.ljbstc.for@cptIt,
* McsEngl.ljsfor@cptIt,
* McsEngl.ljs'for@cptIt,
* McsEngl.ljs'for-keyword@cptIt,
* McsEngl.ljs'for-statement@cptIt,

_GENERIC:
* js--loop-statement#ql:js'loop_statement#

_DESCRIPTION:
format of the for statement

for (initialization; condition; update) {
statements;
}

for (variable in object) if (filter) {
statements;
}

ljs'for-condition

name::
* McsEngl.ljs'for-condition@cptIt,

_CODE.LJS:
var atts = document.querySelector('a').attributes;
for(var i=0; i< atts.length; i++){
 console.log(atts[i].nodeName +'='+ atts[i].nodeValue);
}
[http://domenlightenment.com/#3.5]
===
var i = 1;
for ( ; i < length; i += 2 ) {
...
}

ljs'for-in

name::
* McsEngl.ljs'for-in@cptIt,

_CODE.LJS:
for (var x in {s:1,t:2,u:3}){console.log(x)}
s
t
u
===
for (var s in [3,4,5]){console.log(s)}
0
1
2
===
There is an enumeration capability built into the for statement.
for (var n in myHashtable) {
if (myHashtable.hasOwnProperty(n)) {
document.writeln("<p>" + n + ": " + myHashtable[n] + "</p>");
}
}
The result will be
<p>name: Carl Hollywood</p>
<p>city: Anytown</p>

===
<html>
<body>
<script type="text/javascript">

var person={fname:"John",lname:"Doe",age:25};
var x;

for (x in person)
{
document.write(person[x]+"<br/>");
}

</script>
</body>
</html>
--->
John
Doe
25

ljb'for-of

name::
* McsEngl.ljb'for-of@cptIt,

_CODE.LJS:
var val;
var a = ["a", "b", "c"];
for (val of a) {
console.log(val);
}
Output:
a
b
c
[http://stackoverflow.com/questions/9329446/for-each-over-an-array-in-javascript]

ljbstc.FUNCTION-CALLING

name::
* McsEngl.ljbstc.FUNCTION-CALLING@cptIt,
* McsEngl.ljsfcn-call-statement@cptIt,

ljbstc.FUNCTION-DEFINING

name::
* McsEngl.ljbstc.FUNCTION-DEFINING@cptIt,

ljbstc.if

name::
* McsEngl.ljbstc.if@cptIt,
* McsEngl.ljs'if@cptIt,
* McsEngl.ljs'if-statement@cptIt,

format of the if statement

if (condition) {
statements;
} else if (condition) {
statements;
} else {
statements;
}

_CODE.LJS:
if(tocElDivCntnt.getElementsByTagName("header").length>0)

BE-CAREFULE:
if(tocElDivCntnt.getElementsByTagName("header"))
==> EVALUATES to true.
===

if (elm === elRoot) {
===

if(typeof page_name != 'undefined')

ljbstc.INSTANCE

name::
* McsEngl.ljbstc.INSTANCE@cptIt,

_DESCRIPTION:

ljbstc.INSTANCE.NO

name::
* McsEngl.ljbstc.INSTANCE.NO@cptIt,
* McsEngl.ljs'statement.generic@cptIt,

_SPECIFIC:
* control-sentence##
* var##
* with##

ljbstc.label

name::
* McsEngl.ljbstc.label@cptIt,
* McsEngl.ljs'label-statement@cptIt,
* McsEngl.ljs'statement'Label-prefix@cptIt,

_DESCRIPTION:
Statement labels are optional. Only these statements should be labeled: while, do, for, switch.
[http://javascript.crockford.com/code.html]
===
Statements can have a label prefix, which is an identifier followed with a colon.
[http://javascript.crockford.com/survey.html]

_DESCRIPTION:
label Statement
A label provides a statement with an identifier that lets you refer to it elsewhere in your program. For example, you can use a label to identify a loop, and then use the break or continue statements to indicate whether a program should interrupt the loop or continue its execution.

The syntax of the label statement looks like the following:

label :
statement

The value of label may be any JavaScript identifier that is not a reserved word. The statement that you identify with a label may be any statement.

Example. In this example, the label markLoop identifies a while loop.

markLoop:
while (theMark == true)
doSomething();
}
[http://www.webreference.com/javascript/reference/core/stmtsov.html]

_CODE.LJS:
start: while (node) {
   enter(node);
   if (node.firstChild) {
     node = node.firstChild;
     continue start;
   }
   while (node) {
     exit(node);
     if (node.nextSibling) {
       node = node.nextSibling;
       continue start;
     }
     if (node == root)
       node = null;
     else
       node = node.parentNode;
   }
 }

ljbstc.switch

name::
* McsEngl.ljbstc.switch@cptIt,
* McsEngl.cpt.ljsswitch@cptIt,
* McsEngl.cpt.ljs'switch-statement@cptIt,
===
====== lagoGreek:
* McsEngl.cpt.τσ'δομή-πολλαπλής-επιλογής@cptIt554,

switch (expression) {
case value1:
commands;
break;
case value2:
commands;
break;
default:
commands;
break;
}
===
If you don't add a break statement, execution will "fall through" to the next level. This is very rarely what you want — in fact it's worth specifically labelling deliberate fallthrough with a comment if you really meant it to aid debugging:

switch(a) {
case 1: // fallthrough
case 2:
eatit();
break;
default:
donothing();
}
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Control_structures]

ljbstc.var

name::
* McsEngl.ljbstc.var@cptIt,
* McsEngl.ljs'var-statement@cptIt,

_DESCRIPTION:
Named variables are defined with the var statement.
...
The var statement is a list of one or more variables names, separated by commas, with optional initialization expressions.
var a, b = window.document.body;
If the var statement appears outside of any function, it adds members to the Global Object. If it appears inside of a function, it defines local variables of the function.
[http://javascript.crockford.com/survey.html]

_CODE.LJS:
It is preferred that each variable be given its own line and comment. They should be listed in alphabetical order.
var currentEntry; // currently selected table entry
var level; // indentation level
var size; // size of table
[http://javascript.crockford.com/code.html]

_POSITION:
The var statements should be the first statements in the function body.
[http://javascript.crockford.com/code.html]

ljbstc.void

name::
* McsEngl.ljbstc.void@cptIt,
* McsEngl.ljs'void@cptIt,
* McsEngl.ljs'void-operator@cptIt,
* McsEngl.ljs'void-statement@cptIt,

_DESCRIPTION:
Summary
The void operator evaluates the given expression and then returns undefined.

Operator
Implemented in:  JavaScript 1.1
ECMA Version:  ECMA-262
Syntax
void expression
Uses
This operator allows inserting expressions that produce side effects into places where an expression that evaluates to undefined is desired.

The void operator is often used merely to obtain the undefined primitive value, usually using "void(0)" (which is equivalent to "void 0"). In these cases, the global variable undefined can be used instead (assuming it has not been assigned to a non-default value).

JavaScript URIs
When a browser follows a javascript: URI, it evaluates the code in the URI and then replaces the contents of the page with the returned value, unless the returned value is undefined. The void operator can be used to return undefined. For example:

<a href="javascript:void(0);">Click here to do nothing</a>
<a href="javascript:void(document.body.style.backgroundColor='green');">Click here for green background</a>
Note, however, that the javascript: pseudo protocol is discouraged over other alternatives, such as unobtrusive event handlers.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void]

ljbstc.with (vague)

name::
* McsEngl.ljbstc.with (vague)@cptIt,
* McsEngl.ljswith@cptIt,
* McsEngl.ljs'with-keyword@cptIt,
* McsEngl.ljs'with@cptIt,
* McsEngl.ljs'with-statement@cptIt,

_DESCRIPTION:
The with statement should not be used.
[http://javascript.crockford.com/code.html]
===
with Statement Considered Harmful
April 11, 2006 at 7:52 am by Douglas Crockford | In Development | 63 Comments
JavaScript’s with statement was intended to provide a shorthand for writing recurring accesses to objects. So instead of writing

ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing = true;
ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang = true;

You can write

with (ooo.eee.oo.ah_ah.ting.tang.walla.walla) {
bing = true;
bang = true;
}

That looks a lot nicer. Except for one thing. There is no way that you can tell by looking at the code which bing and bang will get modifed. Will ooo.eee.oo.ah_ah.ting.tang.walla.walla be modified? Or will the global variables bing and bang get clobbered? It is impossible to know for sure.

The with statement adds the members of an object to the current scope. Only if there is a bing in ooo.eee.oo.ah_ah.ting.tang.walla.walla will ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing be accessed.

If you can’t read a program and be confident that you know what it is going to do, you can’t have confidence that it is going to work correctly. For this reason, the with statement should be avoided.

Fortunately, JavaScript also provides a better alternative. We can simply define a var.

var o = ooo.eee.oo.ah_ah.ting.tang.walla.walla;
o.bing = true;
o.bang = true;

Now there is no ambiguity. We can have confidence that it is ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing and ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang that are being set, and not some hapless variables.
[http://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/]

ljbstc.yield

name::
* McsEngl.ljbstc.yield@cptIt,
* McsEngl.ljs'yield@cptIt,
* McsEngl.ljs'yield-sentence@cptIt,

_DESCRIPTION:
The yield keyword is used to pause and resume a generator.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield]
===
Late answering, probably everybody knows about yield now, but some better documentation has come along.

"Javascript's Future: Generators" by James Long has some good examples, including:

function foo(x) {
while (true) {
x = x * 2;
yield x;
}
}
When you call foo, you get back a Generator object which has a next method.

var g = foo(2);
g.next(); // -> 4
g.next(); // -> 8
g.next(); // -> 16
So yield is kind of like return: you get something back. return x returns the value of x, but yield x returns a function, which gives you a method to iterate toward the next value. Useful if you have a potentially memory intensive procedure that you might want to interrupt during the iteration.
[http://stackoverflow.com/a/20859859]

ljbstc.LOOP

name::
* McsEngl.ljbstc.LOOP@cptIt,
* McsEngl.ljs'loop-statement@cptIt,

_GENERIC:
* js--processing-code#ql:js'processing_code#

_SPECIFIC:
* for-loop#ql:ljs'for_in#,
* while#ql:js'while_statement#

ljbstc.DO-WHILE

name::
* McsEngl.ljbstc.DO-WHILE@cptIt,
* McsEngl.ljsdo@cptIt,
* McsEngl.ljs'do-keyword@cptIt,
* McsEngl.ljs'do-while@cptIt,
* McsEngl.ljs'do-while-statement@cptIt,

_DESCRIPTION:
Summary

Creates a loop that executes a specified statement until the test condition evaluates to false. The condition is evaluated after executing the statement, resulting in the specified statement executing at least once.

Version Information
Statement
Implemented in:  JavaScript 1.2, NES 3.0
ECMA Version:  ECMA-262, Edition 3
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/do...while]

_CODE.LJS:
do {
i += 1;
document.write(i);
} while (i < 5);
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/do...while]

ljbstc.WHILE

name::
* McsEngl.ljbstc.WHILE@cptIt,
* McsEngl.ljswhile@cptIt,
* McsEngl.ljs'while-keyword@cptIt,
* McsEngl.ljs'while@cptIt,
* McsEngl.ljs'while-statement@cptIt,

_CODE.LJS:
while( elem.hasChildNodes() ) {
elem.removeChild( elem.lastChild );
}
===
while (wet.length > 0)
{
var digit = wet.charAt(wet.length - 1);
val += mlt * getValueOfDigit(digit, srcAlphabet);
wet = wet.substring(0, wet.length - 1);
mlt *= srcBase;
}
===
while (elmUl.tagName === 'UL') {
elmUl.style.display = 'block';
}
===
while (!elmSec.get(0).tagName.match(/^SECTION/i)) {
elmSec = elmSec.parent();
if (elmSec.get(0).tagName.match(/^HEADER/i)) {
break;
}
}
===
i = array.length;
while (i--) {
 if (array[i] === item) {
   return i;
 }
}

ljbstc.OBJECT-MANIPULATION

name::
* McsEngl.ljbstc.OBJECT-MANIPULATION@cptIt,
* McsEngl.ljs'object-manipulation-statement@cptIt,

ljbstc.SIMPLE

name::
* McsEngl.ljbstc.SIMPLE@cptIt,
* McsEngl.ljs'simple-statement@cptIt,

_DESCRIPTION:
Simple Statements
Each line should contain at most one statement. Put a ; (semicolon) at the end of every simple statement. Note that an assignment statement which is assigning a function literal or object literal is still an assignment statement and must end with a semicolon.
JavaScript allows any expression to be used as a statement. This can mask some errors, particularly in the presence of semicolon insertion. The only expressions that should be used as statements are assignments and invocations.
[http://javascript.crockford.com/code.html]

ljbstc.SIMPLE.NO (COMPOUND)

name::
* McsEngl.ljbstc.SIMPLE.NO (COMPOUND)@cptIt,
* McsEngl.ljs'block-statement@cptIt,
* McsEngl.ljs'compound-statement@cptIt,

_DESCRIPTION:
Compound Statements
Compound statements are statements that contain lists of statements enclosed in { } (curly braces).

The enclosed statements should be indented four more spaces.
The { (left curly brace) should be at the end of the line that begins the compound statement.
The } (right curly brace) should begin a line and be indented to align with the beginning of the line containing the matching { (left curly brace).
Braces should be used around all statements, even single statements, when they are part of a control structure, such as an if or for statement. This makes it easier to add statements without accidentally introducing bugs.
[http://javascript.crockford.com/code.html]

ljbstc.DEBUGGER

name::
* McsEngl.ljbstc.DEBUGGER@cptIt,
* McsEngl.ljsdebugger-statement@cptIt,

_DESCRIPTION:
Suspends execution.
Remarks
You can place debugger statements anywhere in procedures to suspend execution. Using the debugger statement is similar to setting a breakpoint in the code.
The debugger statement suspends execution, but it does not close any files or clear any variables.
Note Note
The debugger statement has no effect unless the script is being debugged.
[http://msdn.microsoft.com/en-us/library/0bwt76sk(v=vs.94).aspx]

_CODE.LJS:
for(i = 1; i<5; i++) {
// Print i to the Output window.
Debug.write("loop index is " + i);
// Wait for user to resume.
debugger
}
[http://msdn.microsoft.com/en-us/library/0bwt76sk(v=vs.94).aspx]

ljbstc.THROW

name::
* McsEngl.ljbstc.THROW@cptIt,
* McsEngl.ljsthrow@cptIt,
* McsEngl.ljs'throw-keyword@cptIt,
* McsEngl.ljsthrow-statement@cptIt,

_DESCRIPTION:
Summary
Throws a user-defined exception.

Version Information
Statement
Implemented in:  JavaScript 1.4
ECMA Version:  ECMA-262, Edition 3
Syntax
throw expression;

Parameters
expression
The expression to throw.

Description
Use the throw statement to throw an exception. When you throw an exception, expression specifies the value of the exception. Each of the following throws an exception:
throw "Error2"; // generates an exception with a string value
throw 42; // generates an exception with the value 42
throw true; // generates an exception with the value true
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/throw]

ljbalgo'NAME-VALUE-PAIR

name::
* McsEngl.ljbalgo'NAME-VALUE-PAIR@cptIt,

ljbalgo'SEMANTIC-UNIT (sut)

_CREATED: {2015-10-24} {2014-04-12} {2014-02-09}

name::
* McsEngl.ljbalgo'SEMANTIC-UNIT (sut)@cptIt,
* McsEngl.ljsalgo'unit@cptIt,
* McsEngl.ljsalgo-unit@cptIt,
* McsEngl.ljsalgounit@cptIt, {2014-04-12}
* McsEngl.ljsarchounit@cptIt, {2014-06-08}
* McsEngl.ljsunit@cptIt, {2014-10-28}
* McsEngl.atom.lcpJs@cptIt,
* McsEngl.ljs'acode-meaning-unit@cptIt, {2014-11-01}
* McsEngl.ljs'acode.unitM@cptIt, {2014-11-01}
* McsEngl.ljs'acode.unitMeaning@cptIt, {2014-11-01}
* McsEngl.ljs'acode.unitSemasio@cptIt, {2014-11-01}
* McsEngl.ljs'meaning-unit@cptIt, {2014-11-01}
* McsEngl.ljs'munit@cptIt,
* McsEngl.ljs'semantic-unit@cptIt,
* McsEngl.ljs'semasio-sourcecode-unit@cptIt, {2014-10-29}
* McsEngl.ljsarsenal@cptIt, {2014-11-11}
* McsEngl.ljsatom@cptIt,
* McsEngl.ljsmeaningunit@cptIt,
* McsEngl.ljs'semantic-unit@cptIt, {2015-12-26}
* McsEngl.ljssemantic-unit@cptIt, {2015-12-26}
* McsEngl.ljsunitMeaning@cptIt,
* McsEngl.ljs'algo-unit@cptIt,
* McsEngl.ljs'algo'unit@cptIt,
* McsEngl.ljs'codeS.UNIT.MEANING@cptIt,
* McsEngl.ljs'primitive-value@cptIt,
* McsEngl.ljs'atom@cptIt,
* McsEngl.ljs'semantic-unit@cptIt, {2014-02-13}
* McsEngl.ljs'value.PRIMITIVE@cptIt,

_GENERIC:
* lcp-atom#ql:lcp'atom@cptIt#

_WHOLE:
* atom-structure##

_DESCRIPTION:
SEMASIOUNIT is a unit of sourcecode that MAPS to archetype.
[hmnSngo.2014-10-29]
===
Coming back to the six types used by ECMAScript programs, first five of them: Undefined, Null, Boolean, String and Number are types of primitive values.
Examples of primitive values:
var a = undefined;
var b = null;
var c = true;
var d = 'test';
var e = 10;
These values are represented in implementations directly on a low level. They are not objects, they do not have neither prototypes, nor constructors.
[http://dmitrysoshnikov.com/ecmascript/chapter-7-2-oop-ecmascript-implementation/#primitive-value-types]
===
4.3.14 Boolean type
type consisting of the primitive values true and false
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.14H3]

SPECIFIC

* jsunitM.specific,

_SPECIFIC: alphabetically:
* array#ql:jsarray@cptIt#
* boolean-literal#ql:lcpjs'boolean.literal#
* identifier#linkL#
* keyword.atom#linkL#
* function#ql:jsf@cptIt#
* object#ql:jso@cptIt#
* null#ql:lcpjs'atom.null@cptIt#
* number-literal#ql:lcpjs'number_atom@cptIt#
* operator-function#ql:jsoperator@cptIt#
* string-literal#ql:lcpjs'string_literal@cptIt#
* variable#ql:jsvariable#
* undefined#ql:lcpjs'atom.undefined@cptIt#

_SPECIFIC:
Ljs uses only 12 semantic-units to create algorithms:
01) a - Array,
02) b - Boolean,
03) f - Function,
04) l - nuLl,
05) m - Module,
06) n - Number,
07) o - Object,
08) r - Regexp,
09) s - String,
10) u - Undefined,
11) v - name-Value-pair,
12) x - miXed,
[http://synagonism.net/dirMiwMcs/dirTchInf/filMcsLjs.html#idLjssutSpcP1]
===
--- named
01) a - array#ql:jsarray@cptIt#
02) b - boolean#ql:lcpjs'boolean.literal#
03) f - function#ql:jsf@cptIt#
04) n - number#ql:lcpjs'number_atom@cptIt#
05) o - object#linkL#
06) s - string#ql:lcpjs'string_literal@cptIt#
07) r - regexp#ql:jsr@cptIt#
08) x - mixed
--- namedNo
09) comment#ql:jscomment@cptIt#
10) null#ql:lcpjs'atom.null@cptIt#
11) undefined#ql:lcpjs'atom.undefined@cptIt#
12) operator-function#ql:jsoperator@cptIt#
13) keyword - conjunction
14) keyword - verb

_SPECIFIC:
* array (arr)
* boolean (bln)
* comment
* function (fcn)
* null
* number (nbr)
* object (obj)
* string (str)
* regexp (rgx)
* undefined
* mixed (x)
===
* collection
* collectionNo

Data types
The latest ECMAScript standard defines seven data types:
Six data types that are primitives:
 Boolean
 Null
 Undefined
 Number
 String
 Symbol (new in ECMAScript 6)
and Object
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures]

ljbalgo.unit.NULL

name::
* McsEngl.ljbalgo.unit.NULL@cptIt,
* McsEngl.ljsnull@cptIt,
* McsEngl.ljs'archetype-null@cptIt,
* McsEngl.ljs'null-archetype@cptIt,
* McsEngl.ljs'codeS.unitM@cptIt,

_DESCRIPTION:
'null' is used to denote that a-variable has no value.
[hmnSngo.2015-10-25]
===
Null-archetype means NO information.
[hmnSngo.2014-02-14]

jsnull'code

name::
* McsEngl.jsnull'code@cptIt,
* McsEngl.ljs'null@cptIt,
* McsEngl.ljs'null-instance@cptIt,
* McsEngl.ljs'null-value@cptIt,
* McsEngl.ljs'atom.null@cptIt,
* McsEngl.ljs'null-literal@cptIt,
* McsEngl.ljs'value.null@cptIt,

_GENERIC:
* js-reserved-word#ql:lcpjs'reserved_word#
* instance-value#ql:js'value.instance#

_DESCRIPTION:
The typeof operator can be unintuitive if not properly understood. And one such example of that is with the value null. When null is supplied to the typeof operator, the result is "object" regardless of the fact that the type of null is specified as Null.

alert(typeof null); // "object"
And the reason is that the typeof operator returns the value taken from standard table which simply says: “for null value string "object" should be returned”.

Specification doesn’t clarify this, however Brendan Eich (JavaScript inventor) noticed that null in contrast with undefined, is used in mostly where objects appear, i.e. is an essence closely related to objects (meaning the “empty” reference to an object, probably reserved a place for the future purposes). But, in some drafts, there was provided the document where this “phenomenon” was described as a usual bug. Also, this bug appeared in one of bug-trackers where Brendan Eich also participated; as a result it has been decided to leave typeof null as is, i.e. "object" though ECMA-262-3 standard defines type of null as Null.
[http://dmitrysoshnikov.com/ecmascript/chapter-7-2-oop-ecmascript-implementation/]
===
The value null is actually almost never produced by Javascript. The only
case you’re likely to run across null is if you assign it somewhere (most of the
time you’ll get undefined instead – one notable exception is document.getElementById,
which returns null if it can’t ?nd an element). Making sparing use of undefined
and instead using null can make bugs much easier to track down.
[http://spencertipping.com/js-in-ten-minutes/js-in-ten-minutes.pdf]

_CODE.LJS:
> typeof null
"object"
> typeof Null
"undefined"
> typeof NULL
"undefined"
===
> window.hello
undefined
> window.hello == null
true
> window.hello === null
false
===
> var v1 = null
undefined
> v1
null
> var v2
undefined
> v2
undefined

ljbalgo.unit.UNDEFINED

name::
* McsEngl.ljbalgo.unit.UNDEFINED@cptIt,
* McsEngl.ljsundefined@cptIt,
* McsEngl.ljs'codeS.unitM.UNDEFINED@cptIt,

_DESCRIPTION:
'undefined' is a-primitive-meaning-unit needed to denote that a-variable-name is used without a previous declaration (creation).
[hmnSngo.2015-10-25]
===
'undefined' is a-primitive-munit needed to denote that a-variable-name is not assigned with a-value.
[hmnSngo.2015-06-27]
===
undefined (value) is a primitive and is the sole value of the Undefined type. Any property that has not been assigned a value, assumes the undefined value. (ECMA 4.3.9 and 4.3.10). A function without a return statement, or a function with an empty return statement returns undefined. The value of an unsupplied function argument is undefined.
var a;
typeof a; //"undefined"

window.b;
typeof window.b; //"undefined"

var c = (function() {})();
typeof c; //"undefined"

var d = (function(e) {return e})();
typeof d; //"undefined"
[https://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/]
===
4.3.9 undefined value
primitive value used when a variable has not been assigned a value
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.9]

_CODE.LJS
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
ReferenceError: n is not defined
> var n
undefined
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
FALSE
> n=undefined
undefined
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
FALSE

===
// It is NOT-UNDEFINED if has a-value OR the-special-values 'null, NaN'.
> n=5
5
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
TRUE
> n=null
null
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
TRUE
> n=NaN
NaN
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
TRUE
[hmnSngo.2013-06-13]

ljbalgo'sut.1.ARRAY (a)#ql:ljsa#

name::
* McsEngl.ljbalgo'sut.1.ARRAY (a)@cptIt,

ljbalgo'sut.2.BOOLEAN (b)

_CREATED: {2013-06-25}

name::
* McsEngl.ljbalgo'sut.2.BOOLEAN (b)@cptIt,
* McsEngl.ljsbln@cptIt, {2014-03-17}
* McsEngl.ljsboolean@cptIt,
* McsEngl.ljs'archetype-boolean@cptIt,
* McsEngl.ljs'boolean-archetype@cptIt,
* McsEngl.ljs'codeS.unitM.BOOLEAN@cptIt,
* McsEngl.ljsb'type@cptIt,
* McsEngl.ljsb@cptIt,
* McsEngl.ljs'bln@cptIt,

_DESCRIPTION:
4.3.14 Boolean type
type consisting of the primitive values true and false
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.14H3]

_GENERIC:
* js-named-semantic-unit#ql:js'named_semantic_unit#

jsb'code

name::
* McsEngl.jsb'code@cptIt,
* McsEngl.ljs'boolean@cptIt,
* McsEngl.ljs'boolean-data@cptIt,
* McsEngl.ljs'code.boolean@cptIt,
* McsEngl.ljs'logical-value@cptIt, [MozillaDN]
* McsEngl.ljs'value.BOOLEAN@cptIt,
* McsEngl.ljs'atom.BOOLEAN@cptIt,

_DESCRIPTION:
JavaScript, as we already know, has a boolean data type, which has only two possible values: true or false. Boolean expressions also evaluate to a boolean value.
===
A boolean in JavaScript can be either true or false. If a number is zero, it defaults to false. If an empty string defaults to false:
Following are the valid examples of a JavaScript Boolean:
true // true
false // false
0 // false
1 // true
"" // false
"hello" // true
[http://www.tutorialspoint.com/jquery/jquery-basics.htm]

===
The string 'false' is boolean true
1 is boolean true
0 is boolean false
An empty string is boolean false
null is boolean false
NaN is boolean false
[http://www.w3schools.com/js/tryit.asp?filename=tryjs_boolean]
===
Boolean Default
An empty string defaults to false:
!"" // true
!"hello" // false
!"true" // false
!new Boolean(false) // false
...
Boolean Default

If a number is zero, it defaults to false:
!0 // true
!1 // false
!-1 // false
[http://docs.jquery.com/Types]

_SPECIFIC:
* false,
* true,

jsb'converstion-to-boolean

name::
* McsEngl.jsb'converstion-to-boolean@cptIt,

_DESCRIPTION:
Any value can be converted to a boolean according to the following rules:
- false, 0, the empty string (""), NaN, null, and undefined all become false
- all other values become true
You can perform this conversion explicitly using the Boolean() function:
> Boolean("")
false
> Boolean(234)
true
However, this is rarely necessary, as JavaScript will silently perform this conversion when it expects a boolean, such as in an if statement (see below). For this reason, we sometimes speak simply of "true values" and "false values," meaning values that become true and false, respectively, when converted to booleans. Alternatively, such values can be called "truthy" and "falsy", respectively.

Boolean operations such as && (logical and), || (logical or), and ! (logical not) are supported;
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Other_types]

jsb'Boolean-function

name::
* McsEngl.jsb'Boolean-function@cptIt,

_CODE.LJS:
> typeof Boolean
"function"

SPECIFIC
jsb.ARRAY (true)

name::
* McsEngl.jsb.ARRAY (true)@cptIt,

_CODE.LJS:
> if ([]) {console.log("array TRUE")} else {console.log("array FALSE")}
array TRUE
> if ([1,2]) {console.log("array TRUE")} else {console.log("array FALSE")}
array TRUE

jsb.false

name::
* McsEngl.jsb.false@cptIt,
* McsEngl.ljsfalse@cptIt,
* McsEngl.ljs'false@cptIt,
* McsEngl.ljs'false-keyword@cptIt,

_CODE:
> !!false
false
> !!undefined
false
> !!null
false
> !!0
false

jsb.LITERAL (false|true)

_CREATED: {2013-06-25}

name::
* McsEngl.jsb.LITERAL (false|true)@cptIt,
* McsEngl.ljs'atom.boolean@cptIt,
* McsEngl.ljsb.atom@cptIt,
* McsEngl.ljs'boolean-literal@cptIt,
* McsEngl.ljs'boolean-value@cptIt,
* McsEngl.ljsb'value@cptIt,

_GENERIC:
* js-reserved-word#ql:lcpjs'reserved_word#

_DESCRIPTION:
4.3.13 Boolean value
member of the Boolean type
NOTE There are only two Boolean values, true and false.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.13H3]
===
A boolean in JavaScript can be either true or false. If a number is zero, it defaults to false. If an empty string defaults to false:
Following are the valid examples of a JavaScript Boolean:
true // true
false // false
0 // false
1 // true
"" // false
"hello" // true
[http://www.tutorialspoint.com/jquery/jquery-basics.htm]

jsb'conversion

name::
* McsEngl.jsb'conversion@cptIt,

_DESCRIPTION:
JavaScript CONVERTS automatically any code to boolean!!!
[hmnSngo.2014-02-09]

_CODE.LJS:
=== undefined
> Boolean(undefined)
false

> var u = undefined
undefined
> !u
true
> !!u
false

=== null
> Boolean(null)
false


=== NUMBER
> Boolean(3)
true
> Boolean(1)
true
> Boolean(0)
false


=== STRING
> Boolean("string")
true
> Boolean("")
false


=== ARRAY
> Boolean([1,2])
true
> Boolean([])
true

=== OBJECT
> Boolean({p1:1,p2:2})
true
> Boolean({})
true

jsb.null (false)

name::
* McsEngl.jsb.null (false)@cptIt,

_CODE.LJS:
> if (null) {console.log("null TRUE")} else {console.log("null FALSE")}
null FALSE

jsb.NUMBER (false|true)

name::
* McsEngl.jsb.NUMBER (false|true)@cptIt,

_CODE.LJS:
0 // false
NaN // false
1 // true
Infinity // true
[http://www.tutorialspoint.com/jquery/jquery-basics.htm]
===
> if (0) {console.log("0 TRUE")} else {console.log("0 FALSE")}
0 FALSE
> if (-0) {console.log("-0 TRUE")} else {console.log("-0 FALSE")}
-0 FALSE
> if (10) {console.log("10 TRUE")} else {console.log("10 FALSE")}
10 TRUE
> if (-10) {console.log("-10 TRUE")} else {console.log("-10 FALSE")}
-10 TRUE
===
> if (NaN) {console.log("NaN TRUE")} else {console.log("NaN FALSE")}
NaN FALSE
> if (Infinity) {console.log("Infinity TRUE")} else {console.log("Infinity FALSE")}
Infinity TRUE

jsb.OBJECT (true)

name::
* McsEngl.jsb.OBJECT (true)@cptIt,

_CODE.LJS:
> if ({}) {console.log("obj TRUE")} else {console.log("obj FALSE")}
obj TRUE

jsb.STRING (false|true)

name::
* McsEngl.jsb.STRING (false|true)@cptIt,

_CODE.LJS:
"" // false
"hello" // true
[http://www.tutorialspoint.com/jquery/jquery-basics.htm]
===
> if ("") {console.log("empty TRUE")} else {console.log("empty FALSE")}
empty FALSE
> if ("string") {console.log("string TRUE")} else {console.log("string FALSE")}
string TRUE

jsb.true

name::
* McsEngl.jsb.true@cptIt,
* McsEngl.ljstrue@cptIt,
* McsEngl.ljs'true-keyword@cptIt,
* McsEngl.ljs'true@cptIt,

_DESCRIPTION:
i.e. "true" is not equal to true, "true" will be considered as a string.
[http://www.hscripts.com/tutorials/javascript/boolean.php]

_TYPE:
>>> typeof true
"boolean"
>>> typeof TRUE
"undefined"

_CODE:
> !!true
true
> !!1
true
> !!-1
true
> var o={}
undefined
!!o
true
> function f(){}
undefined
!!f
true

jsb.undefined (false)

name::
* McsEngl.jsb.undefined (false)@cptIt,

_CODE.LJS:
> if (undefined) {console.log("undefined TRUE")} else {console.log("undefined FALSE")}
undefined FALSE

ljbalgo'sut.3.FUNCTION (f)

name::
* McsEngl.ljbalgo'sut.3.FUNCTION (f)@cptIt,

ljbalgo'sut.4.NUMBER (n)

name::
* McsEngl.ljbalgo'sut.4.NUMBER (n)@cptIt,
* McsEngl.ljsn'code@cptIt,
* McsEngl.ljs'code.NUMBER@cptIt,
* McsEngl.ljsnbr'code@cptIt,
* McsEngl.ljsnbr@cptIt,
* McsEngl.ljs'archetype-number@cptIt,
* McsEngl.ljsnbr-archetype@cptIt,
* McsEngl.ljsnumber@cptIt,
* McsEngl.ljs'codeS.unitM.NUMBER@cptIt,
* McsEngl.ljsnbr@cptIt, {2014-03-09}
* McsEngl.ljsn@cptIt,

_GENERIC:
* js-named-semantic-unit#ql:js'named_semantic_unit#

jsn'type

name::
* McsEngl.jsn'type@cptIt,
* McsEngl.ljsnbr-type@cptIt,
* McsEngl.ljsnbr.TYPE@cptIt,
* McsEngl.ljs'nbr@cptIt,
* McsEngl.ljs'n@cptIt,

_DESCRIPTION:
4.3.20 Number type
set of all possible Number values including the special “Not-a-Number” (NaN) values, positive infinity, and negative infinity
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.20H3]

SPECIFIC

_SPECIFIC:
* jsn.specific,
* jsnbr.specific,

jsn.BINARY

name::
* McsEngl.jsn.BINARY@cptIt,

_DESCRIPTION:
Is there “0b” or something similar to represent a binary number in Javascript?
Newer versions of JavaScript -- specifically ECMAScript 6 -- have added support for binary (prefix 0b) and octal (prefix 0o) numeric literals:

var foo = 0b1111; // foo will be set to 15
var bar = 0o17; // bar will be set to 15
This feature is already available in Firefox and Chrome. It's not currently supported in IE, but apparently will be when Spartan arrives.
(Thanks to Semicolon's comment and urish's answer for pointing this out.)

Original Answer:
No, there isn't an equivalent for binary numbers. JavaScript only supports numeric literals in decimal (no prefix), hexadecimal (prefix 0x) and octal (prefix 0) formats.

One possible alternative is to pass a binary string to the parseInt method along with the radix:

var foo = parseInt('1111', 2); // foo will be set to 15
[http://stackoverflow.com/a/2803188]

jsn.LITERAL

name::
* McsEngl.jsn.LITERAL@cptIt,
* McsEngl.ljs'literal.number@cptIt,
* McsEngl.ljs'numeric-value@cptIt,
* McsEngl.ljs'numerical-value@cptIt,
* McsEngl.ljsnbr@cptIt,
* McsEngl.ljsnbr-value@cptIt,
* McsEngl.ljsnbr.atom@cptIt,
* McsEngl.ljsnbr-atom@cptIt,
* McsEngl.ljs'literal.numeric@cptIt,
* McsEngl.ljsnbr.VALUE@cptIt,
* McsEngl.ljsnbr-literal@cptIt,
* McsEngl.ljs'numeric-literal@cptIt,
* McsEngl.ljs'value.NUMBER@cptIt,
* McsEngl.ljs'n@cptIt,

_GENERIC:
* js-value#ql:js'value#

_DEFINITION:
NumericLiteral ::
DecimalLiteral
HexIntegerLiteral
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.8.3.SyntaxDiv1]

_DESCRIPTION:
Number is 64-bit floating point, similar to Java's double and Double. There is no integer type. Division between two integers may produce a fractional result. Number also includes the special values NaN (not a number) and Infinity.
[http://javascript.crockford.com/survey.html]
===
Numbers in JavaScript are double-precision 64-bit format IEEE 754 values. They are immutable, just as strings.
Following are the valid examples of a JavaScript Numbers:
5350
120.27
0.26
[http://www.tutorialspoint.com/jquery/jquery-basics.htm]
===
4.3.19 Number value
primitive value corresponding to a double-precision 64-bit binary format IEEE 754 value
NOTE A Number value is a member of the Number type and is a direct representation of a number.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.19H3]

jsn.FLOATING-POINT

name::
* McsEngl.jsn.FLOATING-POINT@cptIt,
* McsEngl.ljs'floating-point-literal.number@cptIt,

_DESCRIPTION:
A floating-point literal can have the following parts:
A decimal integer which can be signed (preceded by "+" or "-"),
A decimal point ("."),
A fraction (another decimal number),
An exponent.
The exponent part is an "e" or "E" followed by an integer, which can be signed (preceded by "+" or "-"). A floating-point literal must have at least one digit and either a decimal point or "e" (or "E").
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals]

FLOATING-POINT (ΚΙΝΗΤΗΣ-ΥΠΔΙΑΣΤΟΛΗΣ):
3.14, 0.33, 1.43e22,
Some examples of floating-point literals are 3.1415, -3.1E12, .1e12, and 2E-12.

jsn.HEXADECIMAL (0xdd)

name::
* McsEngl.jsn.HEXADECIMAL (0xdd)@cptIt,

_CODE.LJS:
0x57, 0x5C, 0XEA, 0x577,
>0x11
17

jsn.Infinity

name::
* McsEngl.jsn.Infinity@cptIt,
* McsEngl.ljs'data'Infinity@cptIt,
* McsEngl.ljs'Infinity@cptIt,
* McsEngl.ljs'Infinity-value@cptIt,
* McsEngl.ljs'atom.Infinity@cptIt,

_DESCRIPTION:
Division by zero results in Infinity:
1 / 0 // Infinity
[http://docs.jquery.com/Types]
===
Όταν κατά την εκτέλεση πράξεων μέσα σε ένα πρόγραμμα κάποια τιμή ξεπεράσει το άνω ή το κάτω όριο των επιτρεπτών από τη γλώσσα τιμών, επιστρέφεται ένας από τους τύπους infinity ή -infinity.

_CODE.LJS:
>>> typeof infinity
"undefined"
>>> typeof Infinity
"number"
===
> Infinity
Infinity
> infinity
ReferenceError: infinity is not defined

jsn.INTEGER

name::
* McsEngl.jsn.INTEGER@cptIt,
* McsEngl.ljs'integer-literal.number@cptIt,

_SPECIFIC:
0, 117 and -345 (decimal, base 10)
015, 0001 and -077 (octal, base 8)
0x1123, 0x00111 and -0xF1A7 (hexadecimal, "hex" or base 16)

_DECIMAL:
123, 0, -43,

_OCTAL:
057, 014,
===
> 011
9

_HEXADECIMAL:
0x57, 0x5C, 0XEA, 0x577,
>0x11
17

jsn.NaN

name::
* McsEngl.jsn.NaN@cptIt,
* McsEngl.ljs'data.NaN@cptIt,
* McsEngl.ljs'NaN@cptIt,
* McsEngl.ljs'NaN-value@cptIt,
* McsEngl.ljs'NotANumber@cptIt,
* McsEngl.ljs'atom.NaN@cptIt,
* McsEngl.ljs'NaN@cptIt,

_GENERIC:
> typeof NaN
"number"
[http://docs.jquery.com/Types]

_DESCRIPTION:
4.3.23 NaN
number value that is a IEEE 754 “Not-a-Number” value
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.23H3]
===
Number is 64-bit floating point, similar to Java's double and Double. There is no integer type. Division between two integers may produce a fractional result. Number also includes the special values NaN (not a number) and Infinity.
[http://javascript.crockford.com/survey.html]
===
Definition and Usage

The NaN property represents "Not-a-Number" value. This property indicates that a value is not a legal number.

Tip: Use the isNaN() global function to see if a value is a NaN value.
[http://www.w3schools.com/jsref/jsref_nan.asp]

_CODE.LJS:
>>> typeof NaN
"number"

===
Here, the variable "Month" is assigned NaN if it is smaller than 1, or greater than 12:
<script type="text/javascript">

var Month=13;

if (Month < 1 || Month > 12)
{
Month = Number.NaN;
}

document.write(Month);

</script>

The output of the code above will be:
NaN

jsn.OCTAL (0ddd)

name::
* McsEngl.jsn.OCTAL (0ddd)@cptIt,

_CODE.LJS:
057, 014,
===
> 011
9

jsn.ZERO

name::
* McsEngl.jsn.ZERO@cptIt,
* McsEngl.ljs'zero-number@cptIt,

_DESCRIPTION:
Note that there is both a positive zero and a negative zero. For brevity, these values are also referred to for expository purposes by the symbols +0 and -0, respectively. (Note that these two different zero Number values are produced by the program expressions +0 (or simply 0) and -0.)
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.5P4]

_CODE.LJS:
var zero = 0;

if (!zero) {
console.log('0 is treated as false');
}
[https://www.dartlang.org/docs/synonyms/]

jsn'Number-function

name::
* McsEngl.jsn'Number-function@cptIt,
* McsEngl.ljs'fnumber@cptIt,
* McsEngl.ljsfcn.Number()@cptIt,
* McsEngl.ljs'Number-Function@cptIt,
* McsEngl.ljsnbr.Number-function@cptIt,
* McsEngl.ljsnbr.OBJECT@cptIt,
* McsEngl.ljsnbr-object@cptIt,
* McsEngl.ljsobt.Number@cptIt,
* McsEngl.ljs'oNumber@cptIt,

_GENERIC:
typeof Number
"function"
===
* js-prebuilt-object#ql:js'object.prebuilt#

_DESCRIPTION:
Number is 64-bit floating point, similar to Java's double and Double. There is no integer type. Division between two integers may produce a fractional result. Number also includes the special values NaN (not a number) and Infinity.
[http://javascript.crockford.com/survey.html]

ljb'onumber'implementation

name::
* McsEngl.ljb'onumber'implementation@cptIt,

Due to the implementation of numbers as double-precision values, the following result is not an error:

0.1 + 0.2 // 0.30000000000000004
[http://docs.jquery.com/Types]

ljb'onumber'type

name::
* McsEngl.ljb'onumber'type@cptIt,

The type of a number is "number".
typeof 12 // "number"
typeof 3.543 // "number"
[http://docs.jquery.com/Types]

_CODE.LJS:
<script type="text/javascript">
var STR_NUM1 = "1";
var STR_NUM2 = "2";
var STR_SUM = STR_NUM1 + STR_NUM2; //returns 12
alert(STR_SUM);

var INT_NUM1 = Number(STR_NUM1);
var INT_NUM2 = Number(STR_NUM2);
var INT_SUM = INT_NUM1 + INT_NUM2; //returns 3
alert(INT_SUM);
[http://www.learn-javascript-tutorial.com/JavaScript-Functions.cfm]

ljb'fnumber'member

name::
* McsEngl.ljb'fnumber'member@cptIt,

_SPECIFIC:
> Object.getOwnPropertyNames(Number).sort()
["MAX_VALUE", "MIN_VALUE", "NEGATIVE_INFINITY", "NaN", "POSITIVE_INFINITY", "arguments", "caller", "isFinite", "isNaN", "length", "name", "prototype"]
> Object.getOwnPropertyNames(Number.prototype).sort()
["constructor", "toExponential", "toFixed", "toLocaleString", "toPrecision", "toString", "valueOf"]

ljb'fnumber'prototype

name::
* McsEngl.ljb'fnumber'prototype@cptIt,

_CODE.LJS:
> Number.__proto__
function Empty() {}
> Object.getPrototypeOf(Number)
function Empty() {}

jsn.VARIABLE

name::
* McsEngl.jsn.VARIABLE@cptIt,

ljbalgo'sut.5.REGEXP (r)#ql:ljsr#

name::
* McsEngl.ljbalgo'sut.5.REGEXP (r)@cptIt,

ljbalgo'sut.6.OBJECT (o)#ql:ljso@cptIt#

name::
* McsEngl.ljbalgo'sut.6.OBJECT (o)@cptIt,

ljbalgo'sut.7.STRING (s)#ql:ljss#

name::
* McsEngl.ljbalgo'sut.7.STRING (s)@cptIt,

ljbalgo'sut.8.MIXED (x)

name::
* McsEngl.ljbalgo'sut.8.MIXED (x)@cptIt,
* McsEngl.ljs'mixed-algo-unit@cptIt,
* McsEngl.ljs'mixed-meaning-unit@cptIt,
* McsEngl.ljs'mixed-semantic-unit@cptIt,

_GENERIC:
* js-named-semantic-unit#ql:js'named_semantic_unit#

ljbalgo'sut.9.NULL (l)

name::
* McsEngl.ljbalgo'sut.9.NULL (l)@cptIt,
* McsEngl.ljs'null-meaning-unit@cptIt,
* McsEngl.ljs'null-semantic-unit@cptIt,

ljbalgo'sut.API

name::
* McsEngl.ljbalgo'sut.API@cptIt,
* McsEngl.ljbapi@cptIt,
* McsEngl.ljb'api@cptIt,

_DESCRIPTION:
JSAPI is the-system of types a-js-implementation supports.
[hmnSngo.2015-04-07]

_ADDRESS.WPG:
* http://help.dottoro.com/ljsdaoxj.php,
* http://www.javascripture.com//
JavaScript is the programming language of the web and is quickly gaining traction outside of the browser. JavaScripture.com is your definitive API reference for JavaScript. Each reference page contains detailed descriptions and examples you can modify and run to quickly learn by doing.

SPECIFIC
ljbapi.CORE

name::
* McsEngl.ljbapi.CORE@cptIt,
* McsEngl.ljbapi.core@cptIt,
* McsEngl.ljb'code.api.CORE@cptIt,
* McsEngl.ljb'core-api@cptIt,

_PART:
* Array
* Boolean
* Date
* Error
* Function
* Global
* JSON
* Math
* Number
* Object
* PropertyDescriptor
* RegExp
* String
* undefined

ljbJSON

_CODE.LJB:
> var o=JSON.parse('{"a":"a","n":2}')
undefined
> o
Object {a: "a", n: 2}
> var a=JSON.parse('[{"a":"a","n":2},3]')
undefined
> a
[Object a: "a"n: 2, 3]

ljbapi.H3

name::
* McsEngl.ljbapi.H3@cptIt,


<section id="idLjsObject-prototype">
<h3 id="idLjsObject-prototypeH3">ljs'Object.prototype
<a class="clsHide" href="#idLjsObject-prototypeH3"></a></h3>
<p id="idLjsObject-prototypedsn">Description:
<br/>
<a class="clsHide" href="#idLjsObject-prototypedsn"></a></p>
<p id="idLjsObject-prototypenam">Name:
<br/>* cpt.ljsObject.prototype,
<a class="clsHide" href="#idLjsObject-prototypenam"></a></p>
<p id="idLjsObject-prototypewhl">Whole-chain:
<br/>* Object-function,
<br/>* <a class="clsPreview" href="#idLjswindow">window</a>,
<a class="clsHide" href="#idLjsObject-prototypewhl"></a></p>
<p id="idLjsObject-prototypegnc">Generic-chain:
<br/>* <a class="clsPreview" href="#idLjsNode-prototype">Node.prototype</a>,
<br/>* <a class="clsPreview" href="#idLjsEventTarget-prototype">EventTarget.prototype</a>,
<br/>* <a class="clsPreview" href="#idLjsObject-prototype">Object.prototype</a>,
<a class="clsHide" href="#idLjsObject-prototypegnc"></a></p>
<p id="idLjsObject-prototypembr"><a class="clsPreview" href="#idLjsombr">Member</a>:
<br/><a class="clsPreview" href="#idLjscod">Code</a> (Chrome.50):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<br/>(Firefox.46):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<br/>(Edge.20):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<br/>(Safari.5.1.7):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<a class="clsHide" href="#idLjsObject-prototypembr"></a></p>
<p id="idLjsObject-prototypeSpc">Specific:
<br/>*
<a class="clsHide" href="#idLjsObject-prototypeSpc"></a></p>
</section>

ljbapi.H4

name::
* McsEngl.ljbapi.H4@cptIt,


<section id="idLjsObject-prototype">
<h4 id="idLjsObject-prototypeH4">ljs'Object.prototype
<a class="clsHide" href="#idLjsObject-prototypeH4"></a></h4>
<p id="idLjsObject-prototypedsn">Description:
<br/>
<a class="clsHide" href="#idLjsObject-prototypedsn"></a></p>
<p id="idLjsObject-prototypenam">Name:
<br/>* cpt.ljsObject.prototype,
<a class="clsHide" href="#idLjsObject-prototypenam"></a></p>
<p id="idLjsObject-prototypewhl">Whole-chain:
<br/>* Object,
<br/>* <a class="clsPreview" href="#idLjswindow">window</a>,
<a class="clsHide" href="#idLjsObject-prototypewhl"></a></p>
<p id="idLjsObject-prototypegnc">Generic-chain:
<br/>* <a class="clsPreview" href="#idLjsObject-prototype">Object.prototype</a>,
<a class="clsHide" href="#idLjsObject-prototypegnc"></a></p>
<p id="idLjsObject-prototypembr"><a class="clsPreview" href="#idLjsombr">Member</a>:
<br/><a class="clsPreview" href="#idLjscod">Code</a> (Chrome.50):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<br/>(Firefox.46):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<br/>(Edge.20):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<br/>(Safari.5.1.7):
<br/><code>> Object.getOwnPropertyNames(Object.prototype).sort()
<br/>[]</code>
<a class="clsHide" href="#idLjsObject-prototypembr"></a></p>
<p id="idLjsObject-prototypeSpc">Specific:
<br/>*
<a class="clsHide" href="#idLjsObject-prototypeSpc"></a></p>
</section>

ljbapi.AUDIO

name::
* McsEngl.ljbapi.AUDIO@cptIt,

_PART:
* AnalyserNode
* AudioBuffer
* AudioBufferSource..
* AudioContext
* AudioListener
* AudioNode
* AudioParam
* AudioProcessingEvent
* BiquadFilterNode
* ChannelMergerNode
* ChannelSplitterNode
* ConvolverNode
* DelayNode
* DynamicsCompress
* GainNode
* MediaElementAudio
* MediaStreamAudio..
* MediaStreamAudioS..
* OfflineAudioCompl..
* OfflineAudioContex..
* OscillatorNode
* PannerNode
* PeriodicWave
* ScriptProcessorNode
* WaveShaperNode

ljbapi.CANVAS

name::
* McsEngl.ljbapi.CANVAS@cptIt,

_PART:
* CanvasGradient
* CanvasPattern
* CanvasRenderingC..
* CanvasRenderingC..
* ImageData
* TextMetrics

ljbapi.debugger

name::
* McsEngl.ljbapi.debugger@cptIt,
* McsEngl.ljsdebugger@cptIt,

_DESCRIPTION:
It’s not always convenient or even desirable to set breakpoints using the dev tools interface.
Sometimes it’s just easier to launch the debugger directly from you code. This can be done via the use of the debugger keyword. The example below shows how you could pause code execution via a conditional statement in your code:
if (total_photos_diff > 300) {
debugger; // launch the debugger and pause execution
}
[http://www.creativebloq.com/javascript/javascript-debugging-beginners-3122820]

ljbapi.DOM

name::
* McsEngl.ljbapi.DOM@cptIt,
* McsEngl.ljsdom@cptIt,
* McsEngl.DOM-API@cptIt,

jsdom'specification#ql:dom@cptIt579#

name::
* McsEngl.jsdom'specification@cptIt,

ljbapi.FILE

name::
* McsEngl.ljbapi.FILE@cptIt,
* McsEngl.ljs'file-api@cptIt,
* McsEngl.ljs'file-system-api@cptIt,
* McsEngl.ljsfileapi@cptIt,

_EVOLUTING:
In April 2014, it was announced on public-webapps that the Filesystem API spec should be considered dead. Other browsers have showed little interest in implementing it.
[http://www.html5rocks.com/en/tutorials/file/filesystem/]

_PART:
* Blob
* DataTransferItem
* File
* FileList
* FileReader
* URL

_ADDRESS.WPG:
* http://www.w3.org/TR/FileAPI//
* https://github.com/eligrey/FileSaver.js,
* http://eligrey.com/demos/FileSaver.js//
* https://developer.mozilla.org/en-US/docs/WebGuide/API/File_System?redirectlocale=en-US&redirectslug=Web%2FGuide%2FAPI%2FFile+System,
* http://www.html5rocks.com/en/features/file_access,
* http://www.html5rocks.com/en/tutorials/file/filesystem//
===
* http://www.w3.org/TR/FileAPI//
* http://www.w3.org/TR/file-system-api//

_DESCRIPTION:
The File System API is an alternative to other storage APIs like IndexedDB, WebSQL (which has been deprecated since November18, 2010), and AppCache. The API is a better choice for apps that deal with blobs for the following reasons:
The File System API offers client-side storage for use cases that are not addressed by databases. If you want to have large mutable chunks of data, the File System API is a much more efficient storage solution than a database.
While Firefox supports blob storage for IndexedDB, Chrome currently does not (Chrome is still implementing support for blob storage in IndexedDB). If you are targeting Chrome for your app and you want to store blobs, the File System API and App Cache are your only choices. However, AppCache storage isn't locally mutable, and doesn't allow for fine-grained client-side management.
In Chrome, you can use the File System API with the Quota Management API, which lets you ask for more storage and manage your storage quota.
[https://developer.mozilla.org/en-US/docs/WebGuide/API/File_System/Introduction?redirectlocale=en-US&redirectslug=Web%2FGuide%2FAPI%2FFile+System%2FIntroduction]
===
The File System API is a virtual representation of a file system
The API doesn't give you access to the local file system, nor is the sandbox really a section of the file system. Instead, it is a virtualized file system that looks like a full-fledged file system to the web app. It does not necessarily have a relationship to the local file system outside the browser.
What this means is that a web app and a desktop app cannot share the same file at the same time. The API does not let your web app reach outside the browser to files that desktop apps can also work on. You can, however, export a file from a web app to a desktop app. For example, you can use the File API, create a blob, redirect an iframe to the blob, and invoke the download manager.
[https://developer.mozilla.org/en-US/docs/WebGuide/API/File_System/Introduction#virtual]

_SUPPORT:
// Check for the various File API support.
if (window.File && window.FileReader && window.FileList && window.Blob) {
// Great success! All the File APIs are supported.

} else {
alert('The File APIs are not fully supported in this browser.');
}

jsfileapi.relation-to-other-methods

name::
* McsEngl.jsfileapi.relation-to-other-methods@cptIt,

_DESCRIPTION:
The File System API and other storage APIs

The File System API is an alternative to other storage APIs like IndexedDB, WebSQL (which has been deprecated since November18, 2010), and AppCache. The API is a better choice for apps that deal with blobs for the following reasons:

The File System API offers client-side storage for use cases that are not addressed by databases. If you want to have large mutable chunks of data, the File System API is a much more efficient storage solution than a database.
While Firefox supports blob storage for IndexedDB, Chrome currently does not (Chrome is still implementing support for blob storage in IndexedDB). If you are targeting Chrome for your app and you want to store blobs, the File System API and App Cache are your only choices. However, AppCache storage isn't locally mutable, and doesn't allow for fine-grained client-side management.
In Chrome, you can use the File System API with the Quota Management API, which lets you ask for more storage and manage your storage quota.
[https://developer.mozilla.org/en-US/docs/WebGuide/API/File_System/Introduction#The_File_System_API_and_other_storage_APIs]

jsfileapi.SYNCHRONOUS

name::
* McsEngl.jsfileapi.SYNCHRONOUS@cptIt,

_DESCRIPTION:
The File System API includes both asynchronous and synchronous versions of the interfaces. The asynchronous API can be used in cases where you don't want an outstanding operation to block the UI. The synchronous API, on the other hand, allows for simpler programming model, but it must be used with WebWorkers.
[https://developer.mozilla.org/en-US/docs/WebGuide/API/File_System/Introduction#Overview]

ljbapi.GEOLOCATION

name::
* McsEngl.ljbapi.GEOLOCATION@cptIt,

_ADDRESS.WPG:
* http://dev.w3.org/geo/api//

ljbapi.IndexedDB

name::
* McsEngl.ljbapi.IndexedDB@cptIt,

_ADDRESS.WPG:
* http://www.w3.org/TR/IndexedDB//

ljbapi.LAYOUT

name::
* McsEngl.ljbapi.LAYOUT@cptIt,

jsoClientRect > Object.prototype

name::
* McsEngl.jsoClientRect > Object.prototype@cptIt,

jsoClientRect.GENERIC:
> Object.getPrototypeOf(document.body.getBoundingClientRect())
ClientRect {}
> Object.getPrototypeOf(document.body.getBoundingClientRect().__proto__)
Object {}

jsoClientRect.MEMBER.CHROME:
> Object.getOwnPropertyNames(document.body.getBoundingClientRect()).sort()
["bottom", "height", "left", "right", "top", "width"]
> ClientRect.prototype:
Object.getOwnPropertyNames(document.body.getBoundingClientRect().__proto__).sort()
["constructor"]
> Object.prototype: Object.getOwnPropertyNames(document.body.getBoundingClientRect().__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

ljbapi.MEDIA

name::
* McsEngl.ljbapi.MEDIA@cptIt,

_PART:
* AudioTrack
* AudioTrackList
* HTMLAudioElement
* HTMLMediaElement
* HTMLVideoElement
* MediaController
* MediaError
* MediaList
* TextTrack
* TextTrackList
* TimeRanges
* VideoTrack
* VideoTrackList

ljbapi.performance-and-timing-api

name::
* McsEngl.ljbapi.performance-and-timing-api@cptIt,
* McsEngl.ljsapi.timing-and-performance@cptIt,

_DESCRIPTION:
Timing and Performance APIs

This section documents the timing and performance-based standards supported by Windows Internet Explorer and Windows Store apps. As of this writing, these include (but are not limited to):
Navigation Timing (candidate recommendation, 13 March 2012)
Resource Timing (working draft, 11 August 2011)
User Timing (working draft, 1 September 2011)
Page Visibility (working draft, 21 July 2011)
Animation Timing (working draft, 2 June 2011)
Efficient Script Yielding (editor's draft, 28 July 2011)
The implementation of these specifications by Internet Explorer depends, in part, on the state of the specification at the time support was added to the browser. Because specifications can (and frequently do) change before they are finalized, refer to the current version of the specification for the latest information.
[https://msdn.microsoft.com/en-us/library/hh772738(v=vs.85).aspx]

ljbapi.polyfill

name::
* McsEngl.ljbapi.polyfill@cptIt,
* McsEngl.polyfill@cptIt,

_ADDRESS.WPG:
* http://polyfills.io// Polyfill as-a-service detects the current browser using the User-Agent header and bundles all the necessary polyfills into a single JS file, effectively polyfilling the browser itself. It also keeps track of the best polyfills and the relevant browser versions. You may now use the latest JS features and have it work on essentially all browsers with minimal effort.
Add the following code your HTML page:
<script src="https://cdn.jsdelivr.net/polyfills/polyfill.js"></script>

ljbapi.SVG

name::
* McsEngl.ljbapi.SVG@cptIt,

_PART:
* SVGAngle
* SVGAnimatedAngle

ljbapi.TypedArrays

name::
* McsEngl.ljbapi.TypedArrays@cptIt,

_PART:
* ArrayBuffer
* ArrayBufferView
* DataView
* Float32Array
* Float64Array
* Int16Array
* Int8Array
* Uint16Array
* Uint32Array
* Uint8Array
* Uint8ClampedArray

ljbapi.WebGL

name::
* McsEngl.ljbapi.WebGL@cptIt,

_PART:
* WebGLActiveInfo
* WebGLBuffer
* WebGLContextAttribute
* WebGLFramebuffer
* WebGLProgram
* WebGLRenderbuffer
* WebGLRenderingC..
* WebGLShader
* WebGLShaderPrecise
* WebGLTexture
* WebGLUniforLocator

ljbapi.WebCrypto

name::
* McsEngl.ljbapi.WebCrypto@cptIt,
* McsEngl.WebSocket-API@cptIt,

_ADDRESS.WPG:
* http://www.w3.org/TR/WebCryptoAPI//

_DESCRIPTION:
The Web Cryptography API defines a low-level interface to interacting with cryptographic key material that is managed or exposed by user agents. The API itself is agnostic of the underlying implementation of key storage, but provides a common set of interfaces that allow rich web applications to perform operations such as signature generation and verification, hashing and verification, encryption and decryption, without requiring access to the raw keying material.

Cryptographic transformations are exposed via the SubtleCrypto interface, which defines a common set of methods and events for dealing with initialization, processing data, and completing the operation to yield the final output. In addition to operations such as signature generation and verification, hashing and verification, and encryption and decryption, the API provides interfaces for key generation, key derivation, key import and export, and key discovery.
[http://www.w3.org/TR/WebCryptoAPI/]

ljbapi.WebSocket

name::
* McsEngl.ljbapi.WebSocket@cptIt,
* McsEngl.WebSocket-API@cptIt,

_ADDRESS.WPG:
* https://w3c.github.io/websockets//

_DESCRIPTION:
To enable Web applications to maintain bidirectional communications with server-side processes, this specification introduces the WebSocket interface.

This interface does not allow for raw access to the underlying network. For example, this interface could not be used to implement an IRC client without proxying messages through a custom server.
[https://w3c.github.io/websockets/]

ljbapi.WebStorage

name::
* McsEngl.ljbapi.WebStorage@cptIt,

_ADDRESS.WPG:
* https://w3c.github.io/webstorage//

ljbapi.worker

name::
* McsEngl.ljbapi.worker@cptIt,
* McsEngl.ljsworker@cptIt,
* McsEngl.ljs'web-worker@cptIt,

_PART:
* Worker
* WorkerGlobalScope

_ADDRESS.WPG:
* http://www.html5rocks.com/en/tutorials/workers/basics//

ljbapi.zip.lcpJs

name::
* McsEngl.ljbapi.zip.lcpJs@cptIt,

_ADDRESS.WPG:
* http://gildas-lormeau.github.io/zip.js//

ljbapi.protocol

name::
* McsEngl.ljbapi.protocol@cptIt,
* McsEngl.ljs'protocol@cptIt,

if (document.location.protocol == 'file:') {
 alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
}

ljbalgo'sut.api.window (the-most-whole object)

name::
* McsEngl.ljbalgo'sut.api.window (the-most-whole object)@cptIt,
* McsEngl.ljb'mwo@cptIt,
* McsEngl.ljbmwo@cptIt,
* McsEngl.jswindow@cptIt,
* McsEngl.jsoWindow@cptIt,
* McsEngl.window-object-ljb@cptIt,

* McsEngl.ljb'mwo@cptIt,
* McsEngl.ljbmwo@cptIt,
* McsEngl.ljso.window@cptIt,
* McsEngl.ljswindow@cptIt, {2015-11-20}
* McsEngl.ljs'global-object@cptIt,
* McsEngl.ljsoWindow@cptIt,
* McsEngl.ljsowindow@cptIt,
* McsEngl.ljsowin@cptIt, {2014-11-17}
* McsEngl.ljswindow@cptIt,
* McsEngl.ljsowindow@cptIt,
* McsEngl.ljswindow@cptIt,
* McsEngl.ljs'window@cptIt,
* McsEngl.ljshtml'oWindow@cptIt,

* McsEngl.ljbowin@cptIt,

_GENERIC:
> toString.call(window)
"[object Window]"
> window instanceof Window
true
> window.constructor
function Window() { [native code] }
> Object.getPrototypeOf(window)
Window {postMessage: function, close: function, blur: function, focus: function, onautocompleteerror: null…}

_ADDRESS.WPG:
* http://www.w3schools.com/jsref/obj_window.asp

_DESCRIPTION:
The-window-object is THE-MOST-WHOLE entity in a-js-code.
[hmnSngo.2015-10-30]
===
The-window-object is the-most-whole-object, the-global-object.
It is an-object of the-Window-function, which is a-member of it!!!
[hmnSngo.2016-03-17]
===
The window object implements the Window interface, which in turn inherits from the AbstractView interface. Some additional global functions, namespaces objects, interfaces, and constructors, not typically associated with the window, but available on it, are listed in the JavaScript Reference and DOM Reference.
[https://developer.mozilla.org/en-US/docs/Web/API/Window]
===
The top-level LexicalEnvironment in browser is window. It is also called a global object.
[http://javascript.info/tutorial/initialization]
===
* το αντικείμενο window έχει τη μεγαλύτερη σπουδαιότητα, αφού
- περικλείει το αντικείμενο document το οποίο αντιστοιχεί στο έγγραφο HTML, και
- επειδή σε αυτό εκτελείται ο κώδικας JavaScript.
[Λιακέας, Η γλώσσα JavaScript. 2002, 173]
===
Window Object
The window object represents an open window in a browser.
If a document contain frames (<frame> or <iframe> tags), the browser creates one window object for the HTML document, and one additional window object for each frame.
Note Note: There is no public standard that applies to the Window object, but all major browsers support it.
[http://www.w3schools.com/jsref/obj_window.asp]

ljbwindow'member

name::
* McsEngl.ljbwindow'member@cptIt,
* McsEngl.ljswindow'property@cptIt,
* McsEngl.ljswindow.member@cptIt,

jswindow.CHROME:
//2015-11-20
Array[576]
> Object.getOwnPropertyNames(window).sort()
* jswindow.AnalyserNode,
* jswindow.ApplicationCache,
* jswindow.ApplicationCacheErrorEvent,
* jswindow.Array,
* jswindow.ArrayBuffer,
* jswindow.Attr,
* jswindow.Audio,
* jswindow.AudioBuffer,
* jswindow.AudioBufferSourceNode,
* jswindow.AudioContext,
* jswindow.AudioDestinationNode,
* jswindow.AudioListener,
* jswindow.AudioNode,
* jswindow.AudioParam,
* jswindow.AudioProcessingEvent,
* jswindow.AutocompleteErrorEvent,
* jswindow.BarProp,
* jswindow.BatteryManager,
* jswindow.BeforeUnloadEvent,
* jswindow.BiquadFilterNode,
* jswindow.Blob,
* jswindow.Boolean,
* jswindow.CDATASection,
* jswindow.CSS,
* jswindow.CSSCharsetRule,
* jswindow.CSSFontFaceRule,
* jswindow.CSSImportRule,
* jswindow.CSSKeyframeRule,
* jswindow.CSSKeyframesRule,
* jswindow.CSSMediaRule,
* jswindow.CSSPageRule,
* jswindow.CSSPrimitiveValue,
* jswindow.CSSRule,
* jswindow.CSSRuleList,
* jswindow.CSSStyleDeclaration,
* jswindow.CSSStyleRule,
* jswindow.CSSStyleSheet,
* jswindow.CSSUnknownRule,
* jswindow.CSSValue,
* jswindow.CSSValueList,
* jswindow.CSSViewportRule,
* jswindow.CanvasGradient,
* jswindow.CanvasPattern,
* jswindow.CanvasRenderingContext2D,
* jswindow.ChannelMergerNode,
* jswindow.ChannelSplitterNode,
* jswindow.CharacterData,
* jswindow.ClientRect,
* jswindow.ClientRectList,
* jswindow.CloseEvent,
* jswindow.Comment,
* jswindow.CompositionEvent,
* jswindow.ConvolverNode,
* jswindow.Counter,
* jswindow.CustomEvent,
* jswindow.DOMError,
* jswindow.DOMException,
* jswindow.DOMImplementation,
* jswindow.DOMParser,
* jswindow.DOMSettableTokenList,
* jswindow.DOMStringList,
* jswindow.DOMStringMap,
* jswindow.DOMTokenList,
* jswindow.DataTransfer,
* jswindow.DataTransferItemList,
* jswindow.DataView,
* jswindow.Date,
* jswindow.DelayNode,
* jswindow.DeviceMotionEvent,
* jswindow.DeviceOrientationEvent,
* jswindow.Document,
* jswindow.DocumentFragment,
* jswindow.DocumentType,
* jswindow.DynamicsCompressorNode,
* jswindow.Element,
* jswindow.Error,
* jswindow.ErrorEvent,
* jswindow.EvalError,
* jswindow.Event,
* jswindow.EventSource,
* jswindow.EventTarget,
* jswindow.File,
* jswindow.FileError,
* jswindow.FileList,
* jswindow.FileReader,
* jswindow.Float32Array,
* jswindow.Float64Array,
* jswindow.FocusEvent,
* jswindow.FontFace,
* jswindow.FormData,
* jswindow.Function,
* jswindow.GainNode,
* jswindow.Gamepad,
* jswindow.GamepadEvent,
* jswindow.HTMLAllCollection,
* jswindow.HTMLAnchorElement,
* jswindow.HTMLAppletElement,
* jswindow.HTMLAreaElement,
* jswindow.HTMLAudioElement,
* jswindow.HTMLBRElement,
* jswindow.HTMLBaseElement,
* jswindow.HTMLBodyElement,
* jswindow.HTMLButtonElement,
* jswindow.HTMLCanvasElement,
* jswindow.HTMLCollection,
* jswindow.HTMLContentElement,
* jswindow.HTMLDListElement,
* jswindow.HTMLDataListElement,
* jswindow.HTMLDialogElement,
* jswindow.HTMLDirectoryElement,
* jswindow.HTMLDivElement,
* jswindow.HTMLDocument,
* jswindow.HTMLElement,
* jswindow.HTMLEmbedElement,
* jswindow.HTMLFieldSetElement,
* jswindow.HTMLFontElement,
* jswindow.HTMLFormControlsCollection,
* jswindow.HTMLFormElement,
* jswindow.HTMLFrameElement,
* jswindow.HTMLFrameSetElement,
* jswindow.HTMLHRElement,
* jswindow.HTMLHeadElement,
* jswindow.HTMLHeadingElement,
* jswindow.HTMLHtmlElement,
* jswindow.HTMLIFrameElement,
* jswindow.HTMLImageElement,
* jswindow.HTMLInputElement,
* jswindow.HTMLKeygenElement,
* jswindow.HTMLLIElement,
* jswindow.HTMLLabelElement,
* jswindow.HTMLLegendElement,
* jswindow.HTMLLinkElement,
* jswindow.HTMLMapElement,
* jswindow.HTMLMarqueeElement,
* jswindow.HTMLMediaElement,
* jswindow.HTMLMenuElement,
* jswindow.HTMLMetaElement,
* jswindow.HTMLMeterElement,
* jswindow.HTMLModElement,
* jswindow.HTMLOListElement,
* jswindow.HTMLObjectElement,
* jswindow.HTMLOptGroupElement,
* jswindow.HTMLOptionElement,
* jswindow.HTMLOptionsCollection,
* jswindow.HTMLOutputElement,
* jswindow.HTMLParagraphElement,
* jswindow.HTMLParamElement,
* jswindow.HTMLPictureElement,
* jswindow.HTMLPreElement,
* jswindow.HTMLProgressElement,
* jswindow.HTMLQuoteElement,
* jswindow.HTMLScriptElement,
* jswindow.HTMLSelectElement,
* jswindow.HTMLShadowElement,
* jswindow.HTMLSourceElement,
* jswindow.HTMLSpanElement,
* jswindow.HTMLStyleElement,
* jswindow.HTMLTableCaptionElement,
* jswindow.HTMLTableCellElement,
* jswindow.HTMLTableColElement,
* jswindow.HTMLTableElement,
* jswindow.HTMLTableRowElement,
* jswindow.HTMLTableSectionElement,
* jswindow.HTMLTemplateElement,
* jswindow.HTMLTextAreaElement,
* jswindow.HTMLTitleElement,
* jswindow.HTMLTrackElement,
* jswindow.HTMLUListElement,
* jswindow.HTMLUnknownElement,
* jswindow.HTMLVideoElement,
* jswindow.HashChangeEvent,
* jswindow.History,
* jswindow.IDBCursor,
* jswindow.IDBCursorWithValue,
* jswindow.IDBDatabase,
* jswindow.IDBFactory,
* jswindow.IDBIndex,
* jswindow.IDBKeyRange,
* jswindow.IDBObjectStore,
* jswindow.IDBOpenDBRequest,
* jswindow.IDBRequest,
* jswindow.IDBTransaction,
* jswindow.IDBVersionChangeEvent,
* jswindow.Image,
* jswindow.ImageBitmap,
* jswindow.ImageData,
* jswindow.Infinity,
* jswindow.InputMethodContext,
* jswindow.Int16Array,
* jswindow.Int32Array,
* jswindow.Int8Array,
* jswindow.Intl,
* jswindow.JSON,
* jswindow.KeyboardEvent,
* jswindow.Location,
* jswindow.Map,
* jswindow.Math,
* jswindow.MediaElementAudioSourceNode,
* jswindow.MediaError,
* jswindow.MediaKeyError,
* jswindow.MediaKeyEvent,
* jswindow.MediaList,
* jswindow.MediaSource,
* jswindow.MediaStreamAudioDestinationNode,
* jswindow.MediaStreamAudioSourceNode,
* jswindow.MediaStreamEvent,
* jswindow.MediaStreamTrack,
* jswindow.MessageChannel,
* jswindow.MessageEvent,
* jswindow.MessagePort,
* jswindow.MimeType,
* jswindow.MimeTypeArray,
* jswindow.MouseEvent,
* jswindow.MutationEvent,
* jswindow.MutationObserver,
* jswindow.MutationRecord,
* jswindow.NaN,
* jswindow.NamedNodeMap,
* jswindow.Navigator,
* jswindow.Node,
* jswindow.NodeFilter,
* jswindow.NodeIterator,
* jswindow.NodeList,
* jswindow.Notation,
* jswindow.Notification,
* jswindow.Number,
* jswindow.Object,
* jswindow.OfflineAudioCompletionEvent,
* jswindow.OfflineAudioContext,
* jswindow.Option,
* jswindow.OscillatorNode,
* jswindow.OverflowEvent,
* jswindow.PageTransitionEvent,
* jswindow.Path2D,
* jswindow.Performance,
* jswindow.PerformanceEntry,
* jswindow.PerformanceMark,
* jswindow.PerformanceMeasure,
* jswindow.PerformanceNavigation,
* jswindow.PerformanceResourceTiming,
* jswindow.PerformanceTiming,
* jswindow.PeriodicWave,
* jswindow.Plugin,
* jswindow.PluginArray,
* jswindow.PopStateEvent,
* jswindow.ProcessingInstruction,
* jswindow.ProgressEvent,
* jswindow.Promise,
* jswindow.RGBColor,
* jswindow.RTCIceCandidate,
* jswindow.RTCSessionDescription,
* jswindow.Range,
* jswindow.RangeError,
* jswindow.Rect,
* jswindow.ReferenceError,
* jswindow.RegExp,
* jswindow.SVGAElement,
* jswindow.SVGAltGlyphDefElement,
* jswindow.SVGAltGlyphElement,
* jswindow.SVGAltGlyphItemElement,
* jswindow.SVGAngle,
* jswindow.SVGAnimateElement,
* jswindow.SVGAnimateMotionElement,
* jswindow.SVGAnimateTransformElement,
* jswindow.SVGAnimatedAngle,
* jswindow.SVGAnimatedBoolean,
* jswindow.SVGAnimatedEnumeration,
* jswindow.SVGAnimatedInteger,
* jswindow.SVGAnimatedLength,
* jswindow.SVGAnimatedLengthList,
* jswindow.SVGAnimatedNumber,
* jswindow.SVGAnimatedNumberList,
* jswindow.SVGAnimatedPreserveAspectRatio,
* jswindow.SVGAnimatedRect,
* jswindow.SVGAnimatedString,
* jswindow.SVGAnimatedTransformList,
* jswindow.SVGAnimationElement,
* jswindow.SVGCircleElement,
* jswindow.SVGClipPathElement,
* jswindow.SVGComponentTransferFunctionElement,
* jswindow.SVGCursorElement,
* jswindow.SVGDefsElement,
* jswindow.SVGDescElement,
* jswindow.SVGDiscardElement,
* jswindow.SVGElement,
* jswindow.SVGEllipseElement,
* jswindow.SVGFEBlendElement,
* jswindow.SVGFEColorMatrixElement,
* jswindow.SVGFEComponentTransferElement,
* jswindow.SVGFECompositeElement,
* jswindow.SVGFEConvolveMatrixElement,
* jswindow.SVGFEDiffuseLightingElement,
* jswindow.SVGFEDisplacementMapElement,
* jswindow.SVGFEDistantLightElement,
* jswindow.SVGFEDropShadowElement,
* jswindow.SVGFEFloodElement,
* jswindow.SVGFEFuncAElement,
* jswindow.SVGFEFuncBElement,
* jswindow.SVGFEFuncGElement,
* jswindow.SVGFEFuncRElement,
* jswindow.SVGFEGaussianBlurElement,
* jswindow.SVGFEImageElement,
* jswindow.SVGFEMergeElement,
* jswindow.SVGFEMergeNodeElement,
* jswindow.SVGFEMorphologyElement,
* jswindow.SVGFEOffsetElement,
* jswindow.SVGFEPointLightElement,
* jswindow.SVGFESpecularLightingElement,
* jswindow.SVGFESpotLightElement,
* jswindow.SVGFETileElement,
* jswindow.SVGFETurbulenceElement,
* jswindow.SVGFilterElement,
* jswindow.SVGFontElement,
* jswindow.SVGFontFaceElement,
* jswindow.SVGFontFaceFormatElement,
* jswindow.SVGFontFaceNameElement,
* jswindow.SVGFontFaceSrcElement,
* jswindow.SVGFontFaceUriElement,
* jswindow.SVGForeignObjectElement,
* jswindow.SVGGElement,
* jswindow.SVGGeometryElement,
* jswindow.SVGGlyphElement,
* jswindow.SVGGlyphRefElement,
* jswindow.SVGGradientElement,
* jswindow.SVGGraphicsElement,
* jswindow.SVGHKernElement,
* jswindow.SVGImageElement,
* jswindow.SVGLength,
* jswindow.SVGLengthList,
* jswindow.SVGLineElement,
* jswindow.SVGLinearGradientElement,
* jswindow.SVGMPathElement,
* jswindow.SVGMarkerElement,
* jswindow.SVGMaskElement,
* jswindow.SVGMatrix,
* jswindow.SVGMetadataElement,
* jswindow.SVGMissingGlyphElement,
* jswindow.SVGNumber,
* jswindow.SVGNumberList,
* jswindow.SVGPathElement,
* jswindow.SVGPathSeg,
* jswindow.SVGPathSegArcAbs,
* jswindow.SVGPathSegArcRel,
* jswindow.SVGPathSegClosePath,
* jswindow.SVGPathSegCurvetoCubicAbs,
* jswindow.SVGPathSegCurvetoCubicRel,
* jswindow.SVGPathSegCurvetoCubicSmoothAbs,
* jswindow.SVGPathSegCurvetoCubicSmoothRel,
* jswindow.SVGPathSegCurvetoQuadraticAbs,
* jswindow.SVGPathSegCurvetoQuadraticRel,
* jswindow.SVGPathSegCurvetoQuadraticSmoothAbs,
* jswindow.SVGPathSegCurvetoQuadraticSmoothRel,
* jswindow.SVGPathSegLinetoAbs,
* jswindow.SVGPathSegLinetoHorizontalAbs,
* jswindow.SVGPathSegLinetoHorizontalRel,
* jswindow.SVGPathSegLinetoRel,
* jswindow.SVGPathSegLinetoVerticalAbs,
* jswindow.SVGPathSegLinetoVerticalRel,
* jswindow.SVGPathSegList,
* jswindow.SVGPathSegMovetoAbs,
* jswindow.SVGPathSegMovetoRel,
* jswindow.SVGPatternElement,
* jswindow.SVGPoint,
* jswindow.SVGPointList,
* jswindow.SVGPolygonElement,
* jswindow.SVGPolylineElement,
* jswindow.SVGPreserveAspectRatio,
* jswindow.SVGRadialGradientElement,
* jswindow.SVGRect,
* jswindow.SVGRectElement,
* jswindow.SVGRenderingIntent,
* jswindow.SVGSVGElement,
* jswindow.SVGScriptElement,
* jswindow.SVGSetElement,
* jswindow.SVGStopElement,
* jswindow.SVGStringList,
* jswindow.SVGStyleElement,
* jswindow.SVGSwitchElement,
* jswindow.SVGSymbolElement,
* jswindow.SVGTSpanElement,
* jswindow.SVGTextContentElement,
* jswindow.SVGTextElement,
* jswindow.SVGTextPathElement,
* jswindow.SVGTextPositioningElement,
* jswindow.SVGTitleElement,
* jswindow.SVGTransform,
* jswindow.SVGTransformList,
* jswindow.SVGUnitTypes,
* jswindow.SVGUseElement,
* jswindow.SVGVKernElement,
* jswindow.SVGViewElement,
* jswindow.SVGViewSpec,
* jswindow.SVGZoomEvent,
* jswindow.Screen,
* jswindow.ScreenOrientation,
* jswindow.ScriptProcessorNode,
* jswindow.Selection,
* jswindow.Set,
* jswindow.ShadowRoot,
* jswindow.SharedWorker,
* jswindow.SpeechSynthesisEvent,
* jswindow.SpeechSynthesisUtterance,
* jswindow.Storage,
* jswindow.StorageEvent,
* jswindow.String,
* jswindow.StyleSheet,
* jswindow.StyleSheetList,
* jswindow.Symbol,
* jswindow.SyntaxError,
* jswindow.Text,
* jswindow.TextDecoder,
* jswindow.TextEncoder,
* jswindow.TextEvent,
* jswindow.TextMetrics,
* jswindow.TextTrack,
* jswindow.TextTrackCue,
* jswindow.TextTrackCueList,
* jswindow.TextTrackList,
* jswindow.TimeRanges,
* jswindow.Touch,
* jswindow.TouchEvent,
* jswindow.TouchList,
* jswindow.TrackEvent,
* jswindow.TransitionEvent,
* jswindow.TreeWalker,
* jswindow.TypeError,
* jswindow.UIEvent,
* jswindow.URIError,
* jswindow.URL,
* jswindow.Uint16Array,
* jswindow.Uint32Array,
* jswindow.Uint8Array,
* jswindow.Uint8ClampedArray,
* jswindow.VTTCue,
* jswindow.ValidityState,
* jswindow.WaveShaperNode,
* jswindow.WeakMap,
* jswindow.WeakSet,
* jswindow.WebGLActiveInfo,
* jswindow.WebGLBuffer,
* jswindow.WebGLContextEvent,
* jswindow.WebGLFramebuffer,
* jswindow.WebGLProgram,
* jswindow.WebGLRenderbuffer,
* jswindow.WebGLRenderingContext,
* jswindow.WebGLShader,
* jswindow.WebGLShaderPrecisionFormat,
* jswindow.WebGLTexture,
* jswindow.WebGLUniformLocation,
* jswindow.WebKitAnimationEvent,
* jswindow.WebKitCSSFilterRule,
* jswindow.WebKitCSSFilterValue,
* jswindow.WebKitCSSMatrix,
* jswindow.WebKitCSSTransformValue,
* jswindow.WebKitGamepad,
* jswindow.WebKitMutationObserver,
* jswindow.WebKitPoint,
* jswindow.WebKitTransitionEvent,
* jswindow.WebSocket,
* jswindow.WheelEvent,
* jswindow.Window,
* jswindow.Worker,
* jswindow.XMLDocument,
* jswindow.XMLHttpRequest,
* jswindow.XMLHttpRequestProgressEvent,
* jswindow.XMLHttpRequestUpload,
* jswindow.XMLSerializer,
* jswindow.XPathEvaluator,
* jswindow.XPathExpression,
* jswindow.XPathResult,
* jswindow.XSLTProcessor,
* jswindow.__commandLineAPI,
* jswindow.applicationCache,
* jswindow.chrome,
* jswindow.clientInformation,
* jswindow.closed,
* jswindow.console,
* jswindow.crypto,
* jswindow.decodeURI,
* jswindow.decodeURIComponent,
* jswindow.defaultStatus,
* jswindow.defaultstatus,
* jswindow.devicePixelRatio,
* jswindow.document,
* jswindow.encodeURI,
* jswindow.encodeURIComponent,
* jswindow.escape,
* jswindow.eval,
* jswindow.event,
* jswindow.external,
* jswindow.frameElement,
* jswindow.frames,
* jswindow.history,
* jswindow.indexedDB,
* jswindow.innerHeight,
* jswindow.innerWidth,
* jswindow.isFinite,
* jswindow.isNaN,
* jswindow.length,
* jswindow.localStorage,
* jswindow.location,
* jswindow.locationbar,
* jswindow.menubar,
* jswindow.name,
* jswindow.navigator,
* jswindow.offscreenBuffering,
* jswindow.opener,
* jswindow.outerHeight,
* jswindow.outerWidth,
* jswindow.pageXOffset,
* jswindow.pageYOffset,
* jswindow.parent,
* jswindow.parseFloat,
* jswindow.parseInt,
* jswindow.performance,
* jswindow.personalbar,
* jswindow.screen,
* jswindow.screenLeft,
* jswindow.screenTop,
* jswindow.screenX,
* jswindow.screenY,
* jswindow.scrollX,
* jswindow.scrollY,
* jswindow.scrollbars,
* jswindow.self,
* jswindow.sessionStorage,
* jswindow.speechSynthesis,
* jswindow.status,
* jswindow.statusbar,
* jswindow.styleMedia,
* jswindow.toolbar,
* jswindow.top,
* jswindow.undefined,
* jswindow.unescape,
* jswindow.webkitAudioContext,
* jswindow.webkitIDBCursor,
* jswindow.webkitIDBDatabase,
* jswindow.webkitIDBFactory,
* jswindow.webkitIDBIndex,
* jswindow.webkitIDBKeyRange,
* jswindow.webkitIDBObjectStore,
* jswindow.webkitIDBRequest,
* jswindow.webkitIDBTransaction,
* jswindow.webkitIndexedDB,
* jswindow.webkitMediaStream,
* jswindow.webkitOfflineAudioContext,
* jswindow.webkitRTCPeerConnection,
* jswindow.webkitSpeechGrammar,
* jswindow.webkitSpeechGrammarList,
* jswindow.webkitSpeechRecognition,
* jswindow.webkitSpeechRecognitionError,
* jswindow.webkitSpeechRecognitionEvent,
* jswindow.webkitStorageInfo,
* jswindow.webkitURL,
* jswindow.window,

jswindow.FF:
//2015-11-20
> Object.getOwnPropertyNames(window).sort()
[2973]

ljbwindow.DOMTokenList-function

name::
* McsEngl.ljbwindow.DOMTokenList-function@cptIt,
* McsEngl.ljbDOMTokenList@cptIt,
* McsEngl.ljb'DOMTokenList@cptIt,
* McsEngl.DOMTokenList@cptIt,

_DESCRIPTION:
The DOMTokenList interface represents a set of space-separated tokens. Such a set is returned by Element.classList, HTMLLinkElement.relList, HTMLAnchorElement.relList or HTMLAreaElement.relList. It is indexed beginning with 0 as with JavaScript Array objects. DOMTokenList is always case-sensitive.
[https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList]

_MEMBER:
// Object.getOwnPropertyNames(DOMTokenList.prototype).sort()
["add", "constructor", "contains", "entries", "forEach", "item", "keys", "length", "remove", "supports", "toString", "toggle", "value", "values"]

ljbwindow.alert-function

name::
* McsEngl.ljbwindow.alert-function@cptIt,
* McsEngl.ljsalert@cptIt,
* McsEngl.ljs'alert@cptIt,
* McsEngl.ljs'alert-window@cptIt,

lcpJs'ex.alert_window:
Example

Display an alert box:
<html>
<head>
<script type="text/javascript">
function display_alert()
{
alert("Hello! I am an alert box!!");
}
</script>
</head>
<body>

<input type="button" onclick="display_alert()" value="Display alert box" />

</body>
</html>

ljbwindow.confirm

name::
* McsEngl.ljbwindow.confirm@cptIt,
* McsEngl.ljsconfirm@cptIt,
* McsEngl.ljs'confirm@cptIt,

_DESCRIPTION:
Confirmation Dialog Box:
A confirmation dialog box is mostly used to take user's consent on any option. It displays a dialog box with two buttons: OK and Cancel.

If the user clicks on OK button the window method confirm() will return true. If the user clicks on the Cancel button confirm() returns false. You can use confirmation dialog box as follows:

<head>
<script type="text/javascript">
<!--
var retVal = confirm("Do you want to continue ?");
if( retVal == true ){
alert("User wants to continue!");
  return true;
}else{
alert("User does not want to continue!");
  return false;
}
//-->
</script>
</head>
[http://www.tutorialspoint.com/javascript/javascript_dialog_boxes.htm]

ljbwindow.customElements object

name::
* McsEngl.ljbwindow.customElements object@cptIt,
* McsEngl.customElements-object-ljb@cptIt,

_GENERIC:
* CustomElementRegistry.prototype,
* Object.prototype,

_MEMBER:
> Object.getOwnPropertyNames(customElements).sort()
[]
> Object.getOwnPropertyNames(customElements.__proto__).sort()
["constructor", "define", "get", "whenDefined"]
> Object.getOwnPropertyNames(customElements.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

ljbwindow.customElements.define-function

name::
* McsEngl.ljbwindow.customElements.define-function@cptIt,
* McsEngl.customElements.define@cptIt,

_DESCRIPTION:
Consumers of a customized built-in element can use it in several ways. They can declare it by adding the is="" attribute on the native tag:

<!-- This <button> is a fancy button. -->
<button is="fancy-button" disabled>Fancy button!</button>
[https://developers.google.com/web/fundamentals/getting-started/primers/customelements]

_CODE.LJS:
customElements.define('fancy-app-drawer', FancyDrawer);
customElements.define('fancy-button', FancyButton, {extends: 'button'});

ljbwindow.decodeURI

name::
* McsEngl.ljbwindow.decodeURI@cptIt,
* McsEngl.decodeURI@cptIt,

_CODE.LJS:
> decodeURI('http://el.wikipedia.org/wiki/%CE%A0%CE%B1%CE%BB%CE%AC%CF%84%CE%B9_%CF%84%CF%89%CE%BD_%CE%91%CF%81%CF%87%CE%B9%CE%B5%CF%80%CE%B9%CF%83%CE%BA%CF%8C%CF%80%CF%89%CE%BD_%CF%84%CE%B7%CF%82_%CE%9D%CE%B1%CF%81%CE%BC%CF%80%CF%8C%CE%BD')
"http://el.wikipedia.org/wiki/Παλάτι_των_Αρχιεπισκόπων_της_Ναρμπόν"

ljbwindow.frames

name::
* McsEngl.ljbwindow.frames@cptIt,
* McsEngl.lcpJs'frames@cptIt,

Definition and Usage
The frames property returns an array of all the frames (including iframes) in the current window.
Tip: Use frames.length to find the number of frames.

Syntax
window.frames

Example

Find the number of frames on a page, and change the src property of every frame element to "w3schools.com":
<html>
<body>

<iframe src="http://microsoft.com"></iframe>
<iframe src="http://google.com"></iframe>
<iframe src="http://youtube.com"></iframe>

<script type="text/javascript">
for (var i=0; i<frames.length; i++)
{
frames[i].location="http://w3schools.com"
}
</script>

</body>
</html>

ljbwindow.getComputedStyle()

name::
* McsEngl.ljbwindow.getComputedStyle()@cptIt,
* McsEngl.ljsgetComputedStyle@cptIt,
* McsEngl.ljs'getComputedStyle@cptIt,

_CODE.LJS:
//logs rgb(0, 128, 0) or green, this is an inline element style
console.log(window.getComputedStyle(div).backgroundColor);

===
> window.getComputedStyle(document.getElementById("id69"))
CSSStyleDeclaration#ql:jsCSSStyleDeclaration# {0: "animation-delay", 1: "animation-direction", 2: "animation-duration", 3: "animation-fill-mode", 4: "animation-iteration-count", 5: "animation-name", 6: "animation-play-state", 7: "animation-timing-function", 8: "background-attachment", 9: "background-blend-mode", 10: "background-clip", 11: "background-color", 12: "background-image", 13: "background-origin", 14: "background-position", 15: "background-repeat", 16: "background-size", 17: "border-bottom-color", 18: "border-bottom-left-radius", 19: "border-bottom-right-radius", 20: "border-bottom-style", 21: "border-bottom-width", 22: "border-collapse", 23: "border-image-outset", 24: "border-image-repeat", 25: "border-image-slice", 26: "border-image-source", 27: "border-image-width", 28: "border-left-color", 29: "border-left-style", 30: "border-left-width", 31: "border-right-color", 32: "border-right-style", 33: "border-right-width", 34: "border-top-color", 35: "border-top-left-radius", 36: "border-top-right-radius", 37: "border-top-style", 38: "border-top-width", 39: "bottom", 40: "box-shadow", 41: "box-sizing", 42: "caption-side", 43: "clear", 44: "clip", 45: "color", 46: "cursor", 47: "direction", 48: "display", 49: "empty-cells", 50: "float", 51: "font-family", 52: "font-kerning", 53: "font-size", 54: "font-stretch", 55: "font-style", 56: "font-variant", 57: "font-variant-ligatures", 58: "font-weight", 59: "height", 60: "image-rendering", 61: "isolation", 62: "left", 63: "letter-spacing", 64: "line-height", 65: "list-style-image", 66: "list-style-position", 67: "list-style-type", 68: "margin-bottom", 69: "margin-left", 70: "margin-right", 71: "margin-top", 72: "max-height", 73: "max-width", 74: "min-height", 75: "min-width", 76: "mix-blend-mode", 77: "motion-offset", 78: "motion-path", 79: "motion-rotation", 80: "object-fit", 81: "object-position", 82: "opacity", 83: "orphans", 84: "outline-color", 85: "outline-offset", 86: "outline-style", 87: "outline-width", 88: "overflow-wrap", 89: "overflow-x", 90: "overflow-y", 91: "padding-bottom", 92: "padding-left", 93: "padding-right", 94: "padding-top", 95: "page-break-after", 96: "page-break-before", 97: "page-break-inside", 98: "pointer-events", 99: "position"…}

ljbwindow.getSelection()

name::
* McsEngl.ljbwindow.getSelection()@cptIt,
* McsEngl.ljsgetSelection@cptIt,

_CODE.LJS:
window.getSelection().toString()

ljbwindow.localStorage > oStorage > Object.prototype

name::
* McsEngl.ljbwindow.localStorage > oStorage > Object.prototype@cptIt,
* McsEngl.ljslocalStorage@cptIt,
* McsEngl.ljsolocalStorage@cptIt,

_PROPERTY:
> FIREFOX:
Object.getOwnPropertyNames(localStorage).sort()
[]
Object.getOwnPropertyNames(localStorage.__proto__).sort()
["clear", "getItem", "key", "length", "removeItem", "setItem"]
Object.getOwnPropertyNames(localStorage.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]

ljbwindow.location > oLocation#ql:jslocation@cptIt#

name::
* McsEngl.ljbwindow.location > oLocation@cptIt,

ljbwindow.onblur

name::
* McsEngl.ljbwindow.onblur@cptIt,
* McsEngl.lcpJs'onblur@cptIt,

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Window focus/blur events</title>
</head>
<body>
<div id="x">loaded</div>
<script>
// I realize that this is absolutely horrible, but it's a <60sec hack.
window.onfocus = function () { x.innerHTML += '<br />focus'; };
window.onblur = function () { x.innerHTML += '<br />blur'; };
</script>
</body>
</html>

ljbwindow.onfocus

name::
* McsEngl.ljbwindow.onfocus@cptIt,
* McsEngl.lcpJs'onfocus@cptIt,

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Window focus/blur events</title>
</head>
<body>
<div id="x">loaded</div>
<script>
// I realize that this is absolutely horrible, but it's a <60sec hack.
window.onfocus = function () { x.innerHTML += '<br />focus'; };
window.onblur = function () { x.innerHTML += '<br />blur'; };
</script>
</body>
</html>

focus() and blur() are exactly the events I need to listen. Thanks Peter!
BTW, wrapping them using jQuery works in Firefox (and others except IE):
$(window).focus(function(e){ $('#x').append('<br>focus'); });
$(window).blur(function(e){ $('#x').append('<br>blur'); });

Perhaps use $(document) instead of $(window).

ljbwindow.open-function

name::
* McsEngl.ljbwindow.open-function@cptIt,
* McsEngl.ljsopen@cptIt,
* McsEngl.ljsopen-function@cptIt,
* McsEngl.ljswindow.open@cptIt,
* McsEngl.ljs'open-browser-tab@cptIt,
* McsEngl.ljscode.open-browser-tab@cptIt,
* McsEngl.ljswindow'doing.popup@cptIt,
* McsEngl.ljs'ex.window.popup@cptIt,

_CODE.LJS:
window.open("http://synagonism.net")
// opens a browser tab with this address.

_CODE.LJS:
* http://javascript-array.com/scripts/window_open/
<a href="javascript: void(0)"
onclick="window.open('popup.html', 'windowname1', 'width=200, height=77');
return false;">Click here for simple popup window</a>

ljbwindow.prompt

name::
* McsEngl.ljbwindow.prompt@cptIt,
* McsEngl.ljsprompt@cptIt,
* McsEngl.ljs'prompt@cptIt,

_DESCRIPTION:
Prompt Dialog Box:
The prompt dialog box is very useful when you want to pop-up a text box to get user input. Thus it enable you to interact with the user. The user needs to fill in the field and then click OK.

This dialog box is displayed using a method called prompt() which takes two parameters (i) A label which you want to display in the text box (ii) A default string to display in the text box.

This dialog box with two buttons: OK and Cancel. If the user clicks on OK button the window method prompt() will return entered value from the text box. If the user clicks on the Cancel button the window method prompt() returns null.

You can use prompt dialog box as follows:

<head>
<script type="text/javascript">
<!--
var retVal = prompt("Enter your name : ", "your name here");
alert("You have entered : " + retVal );
//-->
</script>
</head>
[http://www.tutorialspoint.com/javascript/javascript_dialog_boxes.htm]

ljbwindow.self

name::
* McsEngl.ljbwindow.self@cptIt,
* McsEngl.ljsself@cptIt,
* McsEngl.ljs'self@cptIt,

_CODE.LJS:
window.self === self; //true

ljbwindow.sessionStorage

name::
* McsEngl.ljbwindow.sessionStorage@cptIt,
* McsEngl.ljsosessionStorage@cptIt,
* McsEngl.ljssessionStorage@cptIt,

_DESCRIPTION:
The sessionStorage object is equal to the localStorage object, except that it stores the data for only one session. The data is deleted when the user closes the browser window.

The following example counts the number of times a user has clicked a button, in the current session:

Example

if (sessionStorage.clickcount) {
sessionStorage.clickcount = Number(sessionStorage.clickcount) + 1;
} else {
sessionStorage.clickcount = 1;
}
document.getElementById("result").innerHTML = "You have clicked the button " +
sessionStorage.clickcount + " time(s) in this session.";
[http://www.w3schools.com/html/html5_webstorage.asp]

ljbwindow.setTimeout()

name::
* McsEngl.ljbwindow.setTimeout()@cptIt,
* McsEngl.ljssetTimeout@cptIt,
* McsEngl.ljs'delay-execution@cptIt,
* McsEngl.ljs'time-delay@cptIt,
* McsEngl.ljs'setTimeout.window-method@cptIt,
* McsEngl.ljs'ex.window.setTimeout@cptIt,

Definition and Usage
The setTimeout() method calls a function or evaluates an expression after a specified number of milliseconds.
Tip: 1000 ms = 1 second.
[http://www.w3schools.com/jsref/met_win_settimeout.asp]

Syntax
setTimeout(code,millisec,lang)

Parameter  Description
code  Required. A reference to the function or the code to be executed
millisec  Required. The number of milliseconds to wait before executing the code
lang  Optional. The scripting language: JScript | VBScript | JavaScript

_CODE.LJS:
function timedMsg()
{
var t=setTimeout("alert('I am displayed after 3 seconds!')",3000)
}
===
Chrome supports anonymous functions in setTimeout.

setTimeout(function(){ alert("test"); }, 5000);

Anonymous function executes faster than passing a string to setTimeout

-Adam
===
1  var pollInterval = 1000 * 60; // 1 minute, in milliseconds
2  
3  function startRequest() {
4   updateBadge();
5   window.setTimeout(startRequest, pollInterval);
6  }

Do not pass strings to setTimeout() or setInterval()

Passing strings to these functions is just another form of eval() in disguise. Instead of a string with JavaScript code, pass an actual function variable or an anonymous function.

//instead of this:
setTimeout("alert('Time is up!');", 9000);
//prefer this:
setTimeout( function () {alert('Time is up');}, 9000);

ljbwindow.top

name::
* McsEngl.ljbwindow.top@cptIt,
* McsEngl.ljs'top.window-methodNo@cptIt,

_DESCRIPTION:
The top property returns the topmost browser window of the current window.

_CODE.LJS:
<html>
<head>
<script type="text/javascript">
function check()
{
if (window.top!=window.self)
{
document.write("<p>This window is not the topmost window! Am I in a frame?</p>")
}
else
{
document.write("<p>This window is the topmost window!</p>")
}
}
</script>
</head>
<body>
<input type="button" onclick="check()" value="Check window" />
</body>
</html>

ljbwindow'Window-function

name::
* McsEngl.ljbwindow'Window-function@cptIt,
* McsEngl.jsfWindow@cptIt,
* McsEngl.jsWindow-function@cptIt,
* McsEngl.ljsfWindow@cptIt,
* McsEngl.ljsWindow-function@cptIt,
* McsEngl.ljs'Window-function@cptIt,
* McsEngl.ljsf.Window@cptIt,
* McsEngl.ljs'Window-function@cptIt,

_GENERIC:
* EventTarget, (Object.getPrototypeOf(Window) // function EventTarget() { [native code] })
* Function.prototype, (EventTarget.__proto__ === Function.prototype //true)

_MEMBER:
getAllPropertyNames(Window).sort()
["PERSISTENT", "TEMPORARY", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "apply", "arguments", "bind", "call", "caller", "constructor", "hasOwnProperty", "isPrototypeOf", "length", "name", "propertyIsEnumerable", "prototype", "toLocaleString", "toString", "valueOf"]
===
Object.getOwnPropertyNames(Window).sort()
["PERSISTENT", "TEMPORARY", "arguments", "caller", "length", "name", "prototype", "toString"]

ljbwindow'Window-object > Window.prototype > EventTarget.prototype > Object.prototype
ljbwindow'Window.prototype > EventTarget.prototype > Object.prototype

name::
* McsEngl.ljbwindow'Window.prototype > EventTarget.prototype > Object.prototype@cptIt,
* McsEngl.ljsWindow.prototype@cptIt,

jsWindow.prototype.CHROME:
//2015-11-14
0: "jsPERSISTENT"
1: "jsTEMPORARY"
2: "jsalert"
3: "jsatob"
4: "jsblur"
5: "jsbtoa"
6: "jscancelAnimationFrame"
7: "jscaptureEvents"
8: "jsclearInterval"
9: "jsclearTimeout"
10: "jsclose"
11: "jsconfirm"
12: "jsconstructor"
13: "jsfetch"
14: "jsfind"
15: "jsfocus"
16: "jsgetComputedStyle"
17: "jsgetMatchedCSSRules"
18: "jsgetSelection"
19: "jsmatchMedia"
20: "jsmoveBy"
21: "jsmoveTo"
22: "jsonabort"
23: "jsonanimationend"
24: "jsonanimationiteration"
25: "jsonanimationstart"
26: "jsonautocomplete"
27: "jsonautocompleteerror"
28: "jsonbeforeunload"
29: "jsonblur"
30: "jsoncancel"
31: "jsoncanplay"
32: "jsoncanplaythrough"
33: "jsonchange"
34: "jsonclick"
35: "jsonclose"
36: "jsoncontextmenu"
37: "jsoncuechange"
38: "jsondblclick"
39: "jsondevicemotion"
40: "jsondeviceorientation"
41: "jsondrag"
42: "jsondragend"
43: "jsondragenter"
44: "jsondragleave"
45: "jsondragover"
46: "jsondragstart"
47: "jsondrop"
48: "jsondurationchange"
49: "jsonemptied"
50: "jsonended"
51: "jsonerror"
52: "jsonfocus"
53: "jsonhashchange"
54: "jsoninput"
55: "jsoninvalid"
56: "jsonkeydown"
57: "jsonkeypress"
58: "jsonkeyup"
59: "jsonlanguagechange"
60: "jsonload"
61: "jsonloadeddata"
62: "jsonloadedmetadata"
63: "jsonloadstart"
64: "jsonmessage"
65: "jsonmousedown"
66: "jsonmouseenter"
67: "jsonmouseleave"
68: "jsonmousemove"
69: "jsonmouseout"
70: "jsonmouseover"
71: "jsonmouseup"
72: "jsonmousewheel"
73: "jsonoffline"
74: "jsononline"
75: "jsonpagehide"
76: "jsonpageshow"
77: "jsonpause"
78: "jsonplay"
79: "jsonplaying"
80: "jsonpopstate"
81: "jsonprogress"
82: "jsonratechange"
83: "jsonreset"
84: "jsonresize"
85: "jsonscroll"
86: "jsonsearch"
87: "jsonseeked"
88: "jsonseeking"
89: "jsonselect"
90: "jsonshow"
91: "jsonstalled"
92: "jsonstorage"
93: "jsonsubmit"
94: "jsonsuspend"
95: "jsontimeupdate"
96: "jsontoggle"
97: "jsontransitionend"
98: "jsonunload"
99: "jsonvolumechange"[100 … 126]100: "jsonwaiting"
101: "jsonwebkitanimationend"
102: "jsonwebkitanimationiteration"
103: "jsonwebkitanimationstart"
104: "jsonwebkittransitionend"
105: "jsonwheel"
106: "jsopen"
107: "jsopenDatabase"
108: "jspostMessage"
109: "jsprint"
110: "jsprompt"
111: "jsreleaseEvents"
112: "jsrequestAnimationFrame"
113: "jsresizeBy"
114: "jsresizeTo"
115: "jsscroll"
116: "jsscrollBy"
117: "jsscrollTo"
118: "jssetInterval"
119: "jssetTimeout"
120: "jsstop"
121: "jstoString"
122: "jswebkitCancelAnimationFrame"
123: "jswebkitCancelRequestAnimationFrame"
124: "jswebkitRequestAnimationFrame"
125: "jswebkitRequestFileSystem"
126: "jswebkitResolveLocalFileSystemURL"

ljbalgo'sut.api.Object.prototype (the-most-generic)

name::
* McsEngl.ljbalgo'sut.api.Object.prototype (the-most-generic)@cptIt,
* McsEngl.jsObject.prototype@cptIt,
* McsEngl.ljso.Object.prototype@cptIt,
* McsEngl.ljs'codeS.unitM.jso.Object.prototype@cptIt,
* McsEngl.ljso.outermost@cptIt,
* McsEngl.ljso.Object.prototype@cptIt,
* McsEngl.ljsObject.prototype@cptIt,
* McsEngl.ljsoObject.prototype@cptIt,
* McsEngl.Object.prototype@cptIt,

* McsEngl.ljbmgo@cptIt,
* McsEngl.ljsop@cptIt, {2015-11-14}
* McsEngl.ljsoo@cptIt, {2015-09-19}
* McsEngl.ljsoo@cptIt,, {2015-09-19}
* McsEngl.ljsop@cptIt, {2014-12-03}

_DESCRIPTION:
Object.prototype is the MOST generic object in JavaScript.
[hmnSngo.2014-11-19]
===
* Object.prototype is the real root of JavaScript inheritance.
[http://www.3site.eu/doc//]

_DESCRIPTION:
The jso 'Object.prototype' is the MOST generic object in all 'prototype-chains'
[hmnSngo.2015-04-02]

jsoObject.FIREFOX:
> Object:
Object.getOwnPropertyNames(new Object()).sort()
[]
> ObjectPrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__.__proto__.__proto__).sort()
* jsoObject.__defineGetter__, ObjectPrototype, firefox,
* jsoObject.__defineSetter__, ObjectPrototype, firefox,
* jsoObject.__lookupGetter__, ObjectPrototype, firefox,
* jsoObject.__lookupSetter__, ObjectPrototype, firefox,
* jsoObject.constructor, ObjectPrototype, firefox,
* jsoObject.hasOwnProperty, ObjectPrototype, firefox,
* jsoObject.isPrototypeOf, ObjectPrototype, firefox,
* jsoObject.propertyIsEnumerable, ObjectPrototype, firefox,
* jsoObject.toLocaleString, ObjectPrototype, firefox,
* jsoObject.toSource, ObjectPrototype, firefox,
* jsoObject.toString, ObjectPrototype, firefox,
* jsoObject.unwatch, ObjectPrototype, firefox,
* jsoObject.valueOf, ObjectPrototype, firefox,
* jsoObject.watch, ObjectPrototype, firefox,

jsoObject.MEMBER.CHROME:
> Object.getOwnPropertyNames(new Object()).sort()
[]
Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

_GENERIC:
> typeof Object.prototype
"object"
===
Object.prototype.toString()
"[object Object]"
===
> Object.prototype
Object {}
===
> Object.getPrototypeOf(URL)
function Empty() {}
Object.getPrototypeOf(URL.prototype)
Object {}

_CODE.LJS:
> > Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames({}.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

jsop'member

name::
* McsEngl.jsop'member@cptIt,

jsObject.prototype.FF:
> Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]

jsObject.prototype.CHROME:
> Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

jsObject.prototype.MEMBER:
* __defineGetter__, chrome, firefox,
* __defineSetter__, chrome, firefox,
* __lookupGetter__, chrome, firefox,
* __lookupSetter__, chrome, firefox,
* __proto__, chrome,
* constructor, chrome, firefox,
* hasOwnProperty, chrome, firefox,
* isPrototypeOf, chrome, firefox,
* propertyIsEnumerable, chrome, firefox,
* toLocaleString, chrome, firefox,
* toSource, firefox,
* toString, chrome, firefox,
* unwatch, firefox,
* valueOf, chrome, firefox,
* watch, firefox,

jsop'--proto--

name::
* McsEngl.jsop'--proto--@cptIt,
* McsEngl.ljs'proto-member@cptIt,

_DESCRIPTION:
The __proto__ property of Object.prototype is an accessor property (a getter function and a setter function) that exposes the internal [[Prototype]] (either an object or null) of the object through which it is accessed.

The use of __proto__ is controversial, and has been discouraged. It was never originally included in the EcmaScript language spec, but modern browsers decided to implement it anyway. Only recently, the __proto__ property has been standardized in the ECMAScript 6 language specification for web browsers to ensure compatibility, so will be supported into the future. It is deprecated in favor of Object.getPrototypeOf/Reflect.getPrototypeOf and Object.setPrototypeOf/Reflect.setPrototypeOf (though still, setting the [[Prototype]] of an object is a slow operation that should be avoided if performance is a concern).

The __proto__ property can also be used in an object literal definition to set the object [[Prototype]] on creation, as an alternative to Object.create(). See: object initializer / literal syntax.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto]

_PROPERTY:
> Object.__proto__
function Empty() {}
> Object.__proto__.__proto__
Object {}
> Object.__proto__.__proto__.__proto__
null

jsop'constructor

name::
* McsEngl.jsop'constructor@cptIt,
* McsEngl.ljsconstructor@cptIt,

jsop'hasOwnProperty

name::
* McsEngl.jsop'hasOwnProperty@cptIt,
* McsEngl.ljshasOwnProperty@cptIt,
* McsEngl.ljs'hasOwnProperty@cptIt,

_DESCRIPTION:
Returns a boolean indicating whether the object has the specified property.
Method of Object
Implemented in  JavaScript 1.5
ECMAScript Edition  ECMAScript 3rd Edition
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty]

lcpJs'object'hasOwnProperty()

_SYNTAX:
obj.hasOwnProperty(prop)

_RETURN:
Returns a boolean indicating whether the object has the specified property.

_DESCRIPTION:
Every object descended from Object inherits the hasOwnProperty method. This method can be used to determine whether an object has the specified property as a direct property of that object; unlike the in operator, this method does not check down the object's prototype chain.
[https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/hasOwnProperty]

_VERSION:
ECMA-262 3rd Edition

_CODE.LJS:
for (var n in myHashtable) {
if (myHashtable.hasOwnProperty(n)) {
document.writeln("<p>" + n + ": " + myHashtable[n] + "</p>");
}
}

_CODE.LJS:
//text inherited properties only
var textPropertiesOnlyInherited = [];
for(var p in text){
 if(!text.hasOwnProperty(p)){
   textPropertiesOnlyInherited.push(p);
 }
}
console.log(textPropertiesOnlyInherited.sort());
[http://domenlightenment.com/#7.2]

jsop'isPrototypeOf

name::
* McsEngl.jsop'isPrototypeOf@cptIt,
* McsEngl.ljsisPrototypeOf@cptIt,
* McsEngl.ljs'isPrototypeOf@cptIt,

_DESCRIPTION:
Summary
Tests for an object in another object's prototype chain.

Method of Object
Implemented in  JavaScript ?
ECMAScript Edition  ECMAScript 3rd Edition

Syntax
prototype.isPrototypeOf(object)

Parameters
prototype
an object to be tested against each link in the prototype chain of the object argument
Notes: isPrototypeOf differs from instanceof operator. In the expression object instanceof AFunction, the object prototype chain is checked against AFunction.prototype, not against AFunction itself
object
the object whose prototype chain will be searched

Description
isPrototypeOf allows you to check whether or not an object exists within another object's prototype chain.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FObject%2FisPrototypeOf]

_CODE.LJS:
> var o={}
undefined
> var o2=Object.create(o)
> o.isPrototypeOf(o2)
true
> Object.prototype.isPrototypeOf(o2)
true

===
isPrototypeOf allows you to check whether or not an object exists within another object's prototype chain.

For example, consider the following prototype chain:

function Fee() {
// . . .
}

function Fi() {
// . . .
}
Fi.prototype = new Fee();

function Fo() {
// . . .
}
Fo.prototype = new Fi();

function Fum() {
// . . .
}
Fum.prototype = new Fo();
Later on down the road, if you instantiate Fum and need to check if Fi's prototype exists within the Fum prototype chain, you could do this:

var fum = new Fum();
. . .

if (Fi.prototype.isPrototypeOf(fum)) {
// do something safe
}
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FObject%2FisPrototypeOf]

===
var animal={eats:"grass"}
undefined
var rabbit={jumps: true}
undefined
rabbit.__proto__= animal
Object {eats: "grass"}
rabbit.eats
"grass"
Object.isPrototypeOf(rabbit)
false
animal.isPrototypeOf(rabbit)
true

jsop'propertyIsEnumerable

name::
* McsEngl.jsop'propertyIsEnumerable@cptIt,
* McsEngl.ljspropertyIsEnumerable@cptIt,

_DESCRIPTION:
The propertyIsEnumerable() method returns a Boolean indicating whether the specified property is enumerable.

Syntax
obj.propertyIsEnumerable(prop)

Parameters
prop
The name of the property to test.

Description
Every object has a propertyIsEnumerable method. This method can determine whether the specified property in an object can be enumerated by a for...in loop, with the exception of properties inherited through the prototype chain. If the object does not have the specified property, this method returns false.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable]

jsop'toLocaleString

name::
* McsEngl.jsop'toLocaleString@cptIt,
* McsEngl.ljstoLocaleString@cptIt,

jsop'toString

name::
* McsEngl.jsop'toString@cptIt,
* McsEngl.ljstoString@cptIt,
* McsEngl.ljs'toString@cptIt,

_DESCRIPTION:
Every object has a toString() method that is automatically called when the object is to be represented as a text value or when an object is referred to in a manner in which a string is expected. By default, the toString() method is inherited by every object descended from Object. If this method is not overridden in a custom object, toString() returns "[object type]", where type is the object type.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString]

_CODE.LJS:
Math.toString(); // returns [object Math]

jsop'valueOf

name::
* McsEngl.jsop'valueOf@cptIt,
* McsEngl.ljsvalueOf@cptIt,

jsop'Object-function

name::
* McsEngl.jsop'Object-function@cptIt,
* McsEngl.ljsf.Object@cptIt,
* McsEngl.ljsfObject@cptIt, {2014-06-08}
* McsEngl.ljsObject-function@cptIt,
* McsEngl.ljs'fobject@cptIt,
* McsEngl.ljs'Object-constructor@cptIt,
* McsEngl.ljs'Object-function@cptIt,
* McsEngl.ljs'Object-object@cptIt,
* McsEngl.ljs'ofunction@cptIt,
* McsEngl.ljs'oo@cptIt,
* McsEngl.ljsObject-function@cptIt,

_GENERIC:
> typeof Object
"function"
===
* js-prebuilt-object#ql:js'object.prebuilt#

_CODE.LJS:
>>> Object instanceof Function
true
>>> Function instanceof Object
true

ljsfObject'member

name::
* McsEngl.ljsfObject'member@cptIt,
* McsEngl.ljsfObject'property@cptIt,
* McsEngl.ljs'fobject'member@cptIt,

_SPECIFIC:
===
> Object.getOwnPropertyNames(Object).sort()
["arguments", "caller", "create", "defineProperties", "defineProperty", "freeze", "getOwnPropertyDescriptor", "getOwnPropertyNames", "getPrototypeOf", "is", "isExtensible", "isFrozen", "isSealed", "keys", "length", "name", "preventExtensions", "prototype", "seal"]
> Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames(Object.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
> Object.getOwnPropertyNames(Object.constructor).sort()
["arguments", "caller", "length", "name", "prototype"]
===
getAllPropertyNames(Object).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "apply", "arguments", "bind", "call", "caller", "constructor", "create", "defineProperties", "defineProperty", "freeze", "getOwnPropertyDescriptor", "getOwnPropertyNames", "getPrototypeOf", "hasOwnProperty", "is", "isExtensible", "isFrozen", "isPrototypeOf", "isSealed", "keys", "length", "name", "preventExtensions", "propertyIsEnumerable", "prototype", "seal", "toLocaleString", "toString", "valueOf"]
===
* getOwnPropertyNames()
* keyes()

ljsfObject.arguments object

name::
* McsEngl.ljsfObject.arguments object@cptIt,
* McsEngl.ljsarguments@cptIt,

ljsfObject.assign

name::
* McsEngl.ljsfObject.assign@cptIt,
* McsEngl.ljs'Object.assign@cptIt,

_DESCRIPTION:
Object.assign is a fantastic new addition that’s great for keeping things immutable (or at least only doing ephemeral mutations to intermediate objects). But did you know you can use it for setting array values too?

const original = [0,1,2,3];
const copy = Object.assign([], original, { 2: 42 }); // [0,1,42,3]
[https://engineering.haus.com/dumb-es6-tricks-53ecadd1b29f#.efix6c7ha]

ljsfObject.caller

name::
* McsEngl.ljsfObject.caller@cptIt,
* McsEngl.ljscaller@cptIt,

ljsfObject.constructor-function

name::
* McsEngl.ljsfObject.constructor-function@cptIt,
* McsEngl.ljsconstructor@cptIt,

_GENERIC:
> typeof Object.constructor
"function"

_CODE.LJS:
Object.constructor
function Function() { [native code] }

_PROPERTY:
> Object.getOwnPropertyNames(Object.constructor).sort()
["arguments", "caller", "length", "name", "prototype"]
> Object.getOwnPropertyNames(Object.constructor.prototype).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]

ljsfObject.create-function

name::
* McsEngl.ljsfObject.create-function@cptIt,
* McsEngl.Object.create-ljs@cptIt,
* McsEngl.ljscreate@cptIt,
* McsEngl.ljs'create@cptIt,
* McsEngl.ljscreate-of-Object@cptIt,

_DESCRIPTION:
var o2 = Object.create(o1);
Creates a new object o2, with no own members, but with prototype the object o1.
o2 is a specific of o1.
[hmnSngo.2015-06-11]
===
Creates a new object, with prototype the parameter object of function create.
[hmnSngo.2015-06-11]
===
Creates a new object, SPECIFIC of this function's parameter.
[hmnSngo.2014-10-12]
===

All modern browsers except Opera (IE from 9) support two standard methods for working with prototypes:
Object.create(proto[, props])
Creates an empty object with given __proto__:

var animal = { eats: true }
rabbit = Object.create(animal)
alert(rabbit.eats) // true

The code above creates empty rabbit with animal __proto__:
Once the rabbit is created, we can add properties to it.
var animal = { eats: true }
rabbit = Object.create(animal)
rabbit.jumps = true
There second argument props is optional and allows to set properties of the new object. Here we skip it, because we are concerned about the inheritance part.
[http://javascript.info/tutorial/inheritance]

_CODE.LJS:
> var o = Object.create({n:1,s:"string"})
> Object.getPrototypeOf(o)
Object {n: 1, s: "string"}
> Object.getPrototypeOf(Object.getPrototypeOf(o)) === Object.prototype
true
===
> var oLiteral = {n:1}
undefined
> var o2 = Object.create(oLiteral);
undefined
> Object.getOwnPropertyNames(o2).sort()
[]
> Object.getOwnPropertyNames(o2.__proto__).sort()
["n"]
> Object.getOwnPropertyNames(o2.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> var o2 = Object.create(oFunction);
undefined
> Object.getOwnPropertyNames(o2).sort()
[]
> Object.getOwnPropertyNames(o2.__proto__).sort()
["n"]
> Object.getOwnPropertyNames(o2.__proto__.__proto__).sort()
["constructor"]
> Object.getOwnPropertyNames(o2.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===

> var o = {}
undefined
> var o2 = Object.create(o)
undefined
> o2 instanceof Object
true

ljsfObject.defineProperties

name::
* McsEngl.ljsfObject.defineProperties@cptIt,
* McsEngl.ljsdefineProperties@cptIt,

ljsfObject.defineProperty

name::
* McsEngl.ljsfObject.defineProperty@cptIt,
* McsEngl.ljsdefineProperty@cptIt,

_CODE.LJS:
// ECMAScript 5 only compatible approaches
// Set properties
Object.defineProperty( newObject, "someKey", {
value: "for more control of the property's behavior",
writable: true,
enumerable: true,
configurable: true
});
/ If the above feels a little difficult to read, a short-hand could
// be written as follows:

var defineProp = function ( obj, key, value ){
config.value = value;
Object.defineProperty( obj, key, config );
};
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#constructorpatternjavascript]
===
Notice also that meta-method Object.defineProperty is not only for creating object’s properties, but also for altering them. Moreover, it returns altered object, so we can use this method to bind newly created object to needed variable name, making it in one action:

// create "foo" object and define "bar" property
var foo = Object.defineProperty({}, "bar", {
value: 10,
enumerable: true
});

// alter value and enumerable attribute
Object.defineProperty(foo, "bar", {
value: 20,
enumerable: false
});

console.log(foo.bar); // 20
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-1-properties-and-property-descriptors/]

ljsfObject.freeze

name::
* McsEngl.ljsfObject.freeze@cptIt,
* McsEngl.ljsfreeze@cptIt,

ljsfObject.getOwnPropertyDescriptor

name::
* McsEngl.ljsfObject.getOwnPropertyDescriptor@cptIt,
* McsEngl.ljsgetOwnPropertyDescriptor@cptIt,

ljsfObject.getOwnPropertyNames()

name::
* McsEngl.ljsfObject.getOwnPropertyNames()@cptIt,
* McsEngl.ljsgetOwnPropertyNames@cptIt,
* McsEngl.ljs'getOwnPropertyNames()@cptIt,

_DESCRIPTION:
This method returns an array containing all own properties names (enumerable or not) of an object o.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects]

_CODE.LJS:
> Object.getOwnPropertyNames(window).sort()
Array[861]
> Object.getOwnPropertyNames(window).sort().join(', ')
"$, $$, $0, $1, $2, $3, $4, $_, $x, AUMIframeDone, ...
===
> Object.getOwnPropertyNames(window).sort().filter(function (sP){return sP.match(/^[a]/)}).join(', ')
"adFeedback_init__50350, adFeedback_init__58726, ados, adosResults, adosRun, ados_addInlinePlacement, ados_addPlacement, ados_addPlacementObject, ados_add_placement, ados_async_load, ados_execPassback, ados_findPassback, ados_frameLoaded, ados_load, ados_loadDiv, ados_loadFIframe, ados_loadInline, ados_loadPassback, ados_loadResults, ados_log, ados_passback, ados_passbackFilled, ados_passbackWritePixel, ados_passback_last, ados_passback_next, ados_passback_receiveMessage, ados_refresh, ados_setDomain, ados_setIP, ados_setIp, ados_setKeywordCookie, ados_setKeywords, ados_setNoTrack, ados_setPassbackTimeout, ados_setUser, ados_setUserAgent, ados_setWriteResults, ados_timeoutExpired, ados_writeGenericPixel, ados_writePixel, alert, applicationCache, atob, azHtmlLoad, azInitExtension, azLoad, azRegisterExtension, azScriptExtensionLoad, azScriptInlineLoad, azScriptSRCLoad, azk_clearframe, azk_passback, azkadFeedback_css__93270, azkadFeedback_js__14556"
===
> 2015-12-31 CHROME:
Object.getOwnPropertyNames(Object).sort()
["arguments", "assign", "caller", "create", "defineProperties", "defineProperty", "deliverChangeRecords", "freeze", "getNotifier", "getOwnPropertyDescriptor", "getOwnPropertyNames", "getOwnPropertySymbols", "getPrototypeOf", "is", "isExtensible", "isFrozen", "isSealed", "keys", "length", "name", "observe", "preventExtensions", "prototype", "seal", "setPrototypeOf", "unobserve"]
===
> Object.getOwnPropertyNames(Object).sort()
["arguments", "caller", "create", "defineProperties", "defineProperty", "freeze", "getOwnPropertyDescriptor", "getOwnPropertyNames", "getPrototypeOf", "is", "isExtensible", "isFrozen", "isSealed", "keys", "length", "name", "preventExtensions", "prototype", "seal"]

ljsfObject.getPrototypeOf()

name::
* McsEngl.ljsfObject.getPrototypeOf()@cptIt,
* McsEngl.ljsgetPrototypeOf@cptIt,
* McsEngl.ljsObject.getPrototypeOf@cptIt,
* McsEngl.ljs'getPrototypeOf@cptIt,

_DESCRIPTION:
Returns the prototype (i.e. the internal [[Prototype]]) of the specified object.
Method of Object
Implemented in  JavaScript 1.8.1
ECMAScript Edition  ECMAScript 5th Edition
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf]
===
Historically one JavaScript property that’s seen a lot of use (mostly due to its convenience) is that of __proto__. It’s a quick-and-dirty way of accessing the original prototype property of the object’s constructor function. For example, the following is true:

"test".__proto__ === String.prototype

// Another alternative, not using __proto__
// Only works when constructor isn't changed
"test".constructor.prototype === String.prototype
This feature has been codified in the upcoming ECMAScript 3.1 specification as a new method: Object.getPrototypeOf(object) (and is implemented in the latest Firefox nightlies).
[http://ejohn.org/blog/objectgetprototypeof/]

_CODE.LJS:
> var o={}
undefined
> var o2=Object.create(o)
undefined
> Object.getPrototypeOf(o2)
Object {}
> Object.getPrototypeOf(o2) === o
true
> Object.getPrototypeOf(o) === Object.prototype
true
> Object.getPrototypeOf(o2) === Object.prototype
false

===
> Object.getPrototypeOf(oPgmHtml.oI.fILayoutFlow)
function Empty() {}
> Object.getPrototypeOf(new oPgmHtml.oI.fILayoutFlow())
oI.fILayout {oIltSettings: Object, fIltRenderPre: function, fIltApplyClasses: function, fIltToHtml: function, fIltCnrRecalc: function…}
===
Object.getPrototypeOf(Node)
function EventTarget#ql:js'eventtarget#() { [native code] }

ljsfObject.is

name::
* McsEngl.ljsfObject.is@cptIt,
* McsEngl.ljsis@cptIt,

_Code.js:
> Object.is(3,3)
true
> Object.is({},{})
false

ljsfObject.isExtensible

name::
* McsEngl.ljsfObject.isExtensible@cptIt,
* McsEngl.ljsisExtensible@cptIt,

ljsfObject.isFrozen

name::
* McsEngl.ljsfObject.isFrozen@cptIt,
* McsEngl.ljsisFrozen@cptIt,

ljsfObject.isSealed

name::
* McsEngl.ljsfObject.isSealed@cptIt,
* McsEngl.ljsisSealed@cptIt,

ljsfObject.keys()

name::
* McsEngl.ljsfObject.keys()@cptIt,
* McsEngl.ljskeys@cptIt,
* McsEngl.ljs'keys()@cptIt,

_CODE.LJS:
Object.keys(document.body).sort()
["aLink", "accessKey", "attributes", "background", "baseURI", "bgColor", "childElementCount", "childNodes", "children", "classList", "className", "clientHeight", "clientLeft", "clientTop", "clientWidth", "contentEditable", "dataset", "dir", "draggable", "firstChild", "firstElementChild", "hidden", "id", "innerHTML", "innerText", "isContentEditable", "lang", "lastChild", "lastElementChild", "link", "localName", "namespaceURI", "nextElementSibling", "nextSibling", "nodeName", "nodeType", "nodeValue", "offsetHeight", "offsetLeft", "offsetParent", "offsetTop", "offsetWidth", "outerHTML", "outerText", "ownerDocument", "parentElement", "parentNode", "prefix", "previousElementSibling", "previousSibling", "scrollHeight", "scrollLeft", "scrollTop", "scrollWidth", "spellcheck", "style", "tabIndex", "tagName", "text", "textContent", "title", "translate", "vLink", "webkitPseudo", "webkitShadowRoot", "webkitdropzone"]

ljsfObject.length

name::
* McsEngl.ljsfObject.length@cptIt,
* McsEngl.ljslength@cptIt,

_CODE.LJS:
> Object.length
1

ljsfObject.name

name::
* McsEngl.ljsfObject.name@cptIt,
* McsEngl.ljsname@cptIt,

ljsfObject.preventExtensions

name::
* McsEngl.ljsfObject.preventExtensions@cptIt,
* McsEngl.ljsprefentExtensions@cptIt,

ljsfObject.prototype object#ql:jsobject.prototype#

name::
* McsEngl.ljsfObject.prototype object@cptIt,

ljsfObject.seal

name::
* McsEngl.ljsfObject.seal@cptIt,
* McsEngl.ljsseal@cptIt,

SPECIFIC

name::
* McsEngl.ljsoo.specific@cptIt,
* McsEngl.ljsop.specific@cptIt,

_SPECIFIC:
> Object.prototype.isPrototypeOf(Object.prototype) false
> Object.prototype.isPrototypeOf(Object) true
> Object.prototype.isPrototypeOf(Function) true
> Object.prototype.isPrototypeOf(Window) true
> Object.prototype.isPrototypeOf(window) true
> Object.prototype.isPrototypeOf(Window.prototype) true
> Object.prototype.isPrototypeOf(Window.__proto__) true
> Object.prototype.isPrototypeOf(Window.__proto__.__proto__) true
> Object.prototype.isPrototypeOf(Window.__proto__.__proto__.__proto__) false
> Object.isPrototypeOf(Function) false
* jsop.Blob.prototype#ql:jsblob#
* jsop.EventTarget.prototype#ql:jseventtarget#
* jsop.FormData.prototype#ql:jsoformdata#
* jsop.NodeList.prototype#ql:jsnodelist#
* jsop.RegExp.prototype
* jsop.String.prototype
* jsop.TreeWalker.prototype

jsop.Location.prototype

name::
* McsEngl.jsop.Location.prototype@cptIt,
* McsEngl.ljsoLocation@cptIt,

_CODE.LJS:
> var sURL = location.protocol + "//" + location.host + location.pathname;
undefined
> sURL
"http://localhost/pgmHtml/pgmHtml.html"

jsoLocation.MEMBER.FIREFOX:
> Object.getOwnPropertyNames(location).sort()
["assign", "hash", "host", "hostname", "href", "origin", "password", "pathname", "port", "protocol", "reload", "replace", "search", "toJSON", "toString", "username", "valueOf"]
> Object.getOwnPropertyNames(Location.prototype).sort()
["constructor"]

jsoLocation.MEMBER.CHROME:
> Object.getOwnPropertyNames(location).sort()
["ancestorOrigins", "assign", "hash", "host", "hostname", "href", "origin", "pathname", "port", "protocol", "reload", "replace", "search", "toString", "valueOf"]

location

location
Location {replace: function, assign: function, ancestorOrigins: DOMStringList, origin: "http://localhost", hash: ""…}
ancestorOrigins: DOMStringList
assign: function () { [native code] }
hash: ""
host: "localhost"
hostname: "localhost"
href: "http://localhost/pgmHtml/pgmHtml.html"
origin: "http://localhost"
pathname: "/pgmHtml/pgmHtml.html"
port: ""
protocol: "http:"
reload: function reload() { [native code] }
replace: function () { [native code] }
search: ""
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
__proto__: Location

jsop.NamedNodeMap (chrome)

name::
* McsEngl.jsop.NamedNodeMap (chrome)@cptIt,
* McsEngl.ljsMozNamedAttrMap@cptIt,
* McsEngl.ljsNamedNodeMap@cptIt,
* McsEngl.ljso.NamedNodeMap@cptIt,

_GENERIC:
> Object.getPrototypeOf(NamedNodeMap)
function Empty() {}

_CREATION:
//CHROME
> toString.call(document.body.attributes)
"[object NamedNodeMap]"
===
> toString.call(document.body.attributes)
"[object MozNamedAttrMap]"

_MEMBER:
//CHROME:
> Object.getOwnPropertyNames(NamedNodeMap.prototype).sort()
["constructor", "getNamedItem", "getNamedItemNS", "item", "removeNamedItem", "removeNamedItemNS", "setNamedItem", "setNamedItemNS"]

jsop.Navigator.prototype

name::
* McsEngl.jsop.Navigator.prototype@cptIt,
* McsEngl.ljsNavigator@cptIt,
* McsEngl.ljso.Navigator@cptIt,
* McsEngl.ljsoNavigator@cptIt,

_DESCRIPTION:
The Window.navigator read-only property returns a reference to the Navigator object, which can be queried for information about the application running the script.
Syntax

navigatorObject = window.navigator

Examples
Example#1: Browser detect and return a string

var sBrowser, sUsrAg = navigator.userAgent;

if(sUsrAg.indexOf("Chrome") > -1) {
sBrowser = "Google Chrome";
} else if (sUsrAg.indexOf("Safari") > -1) {
sBrowser = "Apple Safari";
} else if (sUsrAg.indexOf("Opera") > -1) {
sBrowser = "Opera";
} else if (sUsrAg.indexOf("Firefox") > -1) {
sBrowser = "Mozilla Firefox";
} else if (sUsrAg.indexOf("MSIE") > -1) {
sBrowser = "Microsoft Internet Explorer";
}

alert("You are using: " + sBrowser);
[https://developer.mozilla.org/en-US/docs/Web/API/Window.navigator]

jsop.Range.prototype#ql:jsorange#

name::
* McsEngl.jsop.Range.prototype@cptIt,

jsop.Selection.prototype

name::
* McsEngl.jsop.Selection.prototype@cptIt,
* McsEngl.ljsSelection-object@cptIt,
* McsEngl.ljso.Selection@cptIt,
* McsEngl.ljsoSelection@cptIt,

_GENERIC:
* Object.prototype#linkL#

jsoSelection.MEMBER.CHROME:
//2016-02-02
> Object.getOwnPropertyNames(window.getSelection()).sort()
[]
> Object.getOwnPropertyNames(window.getSelection().__proto__).sort()
["jsaddRange", "ljsanchorNode", "ljsanchorOffset", "ljsbaseNode", "ljsbaseOffset", "ljscollapse", "ljscollapseToEnd", "ljscollapseToStart", "ljsconstructor", "ljscontainsNode", "ljsdeleteFromDocument", "ljsempty", "ljsextend", "ljsextentNode", "ljsextentOffset", "ljsfocusNode", "ljsfocusOffset", "ljsgetRangeAt", "ljsisCollapsed", "ljsmodify", "ljsrangeCount", "ljsremoveAllRanges", "ljsselectAllChildren", "ljssetBaseAndExtent", "ljssetPosition", "ljstoString", "ljstype"]
===
> Object.getOwnPropertyNames(window.getSelection())
["type", "extentOffset", "extentNode", "baseOffset", "baseNode", "rangeCount", "isCollapsed", "focusOffset", "focusNode", "anchorOffset", "anchorNode"]
> Object.getOwnPropertyNames(window.getSelection().__proto__)
["collapse", "collapseToStart", "collapseToEnd", "extend", "selectAllChildren", "deleteFromDocument", "getRangeAt", "addRange", "removeAllRanges", "containsNode", "modify", "setBaseAndExtent", "setPosition", "empty", "toString", "constructor"]
> Object.getOwnPropertyNames(window.getSelection().__proto__.__proto__)
["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "__defineGetter__", "__lookupGetter__", "__defineSetter__", "__lookupSetter__", "__proto__"]
===
//CHROME
> Object.getOwnPropertyNames(Selection.prototype).sort()
["addRange", "collapse", "collapseToEnd", "collapseToStart", "constructor", "containsNode", "deleteFromDocument", "empty", "extend", "getRangeAt", "modify", "removeAllRanges", "selectAllChildren", "setBaseAndExtent", "setPosition", "toString"]
===
> Object.getPrototypeOf(window.getSelection())
Selection {collapse: function, collapseToStart: function, collapseToEnd: function, extend: function, selectAllChildren: function…}
addRange: function addRange() { [native code] }
collapse: function collapse() { [native code] }
collapseToEnd: function collapseToEnd() { [native code] }collapseToStart: function collapseToStart() { [native code] }constructor: function Selection() { [native code] }containsNode: function containsNode() { [native code] }deleteFromDocument: function deleteFromDocument() { [native code] }empty: function empty() { [native code] }extend: function extend() { [native code] }getRangeAt: function getRangeAt() { [native code] }modify: function modify() { [native code] }removeAllRanges: function removeAllRanges() { [native code] }selectAllChildren: function selectAllChildren() { [native code] }setBaseAndExtent: function setBaseAndExtent() { [native code] }setPosition: function setPosition() { [native code] }toString: function toString() { [native code] }__proto__: Object

jsSelection.prototype > Object.prototype

name::
* McsEngl.jsSelection.prototype > Object.prototype@cptIt,
* McsEngl.jsSelection.prototype@cptIt,

_DESCRIPTION:
A Selection object represents the range of text selected by the user or the current position of the caret. To obtain a Selection object for examination or modification, call window.getSelection().
A user may make a selection from left to right (in document order) or right to left (reverse of document order). The anchor is where the user began the selection and the focus is where the user ends the selection. If you make a selection with a desktop mouse, the anchor is placed where you pressed the mouse button and the focus is placed where you released the mouse button. Anchor and focus should not be confused with the start and end positions of a selection, since anchor can be placed before the focus or vice versa, depending on the direction you made your selection.
[https://developer.mozilla.org/en-US/docs/Web/API/Selection]

jsSelection.prototype.CHROME:
> Object.getOwnPropertyNames(Selection.prototype).sort()
["addRange", "anchorNode", "anchorOffset", "baseNode", "baseOffset", "collapse", "collapseToEnd", "collapseToStart", "constructor", "containsNode", "deleteFromDocument", "empty", "extend", "extentNode", "extentOffset", "focusNode", "focusOffset", "getRangeAt", "isCollapsed", "modify", "rangeCount", "removeAllRanges", "selectAllChildren", "setBaseAndExtent", "setPosition", "toString", "type"]

jsaddRange
jsanchorNode

_CODE.LJS:
The Selection.anchorNode read-only property returns the Node in which the selection begins.

A user may make a selection from left to right (in document order) or right to left (reverse of document order). The anchor is where the user began the selection. This can be visualized by holding the Shift key and pressing the arrow keys on your keyboard. The selection's anchor does not move, but the selection's focus, the other end of the selection, does move.
[https://developer.mozilla.org/en-US/docs/Web/API/Selection/anchorNode]

jsanchorOffset

_CODE.LJS:

jsbaseNode
jsbaseOffset
jscollapse
jscollapseToEnd
jscollapseToStart
jsconstructor
jscontainsNode
jsdeleteFromDocument
jsempty
jsextend
jsextentNode
jsextentOffset
jsfocusNode

_CODE.LJS:
Selection.focusNode read-only property returns the Node, in which selection ends.

A user may make a selection from left to right (in document order) or right to left (reverse of document order). The focus is where the user ended the selection. This can be visualized by holding the Shift key and pressing the arrow keys on your keyboard to modify the current selection. The selection's focus moves, but the selection's anchor, the other end of the selection, does not move.
[https://developer.mozilla.org/en-US/docs/Web/API/Selection/focusNode]

jsfocusOffset

_CODE.LJS:

jsgetRangeAt

_CODE.LJS:
getSelection().getRangeAt(0)

jsisCollapsed

_CODE.LJS:
The Selection.isCollapsed read-only property returns a Boolean which indicates whether or not there is currently any text selected; That is to say that the selection's start and end points are at the same position in the content.

Keep in mind that a collapsed selection may still have one (or more, in Gecko) Ranges, so Selection.rangeCount may not be zero. In that scenario, calling a Selection object's getRangeAt() method may return a Range object which is collapsed.
[https://developer.mozilla.org/en-US/docs/Web/API/Selection/isCollapsed]

jsmodify
jsrangeCount

_CODE.LJS:
The Selection.rangeCount read-only property returns the number of ranges in the selection.

Before the user has clicked a freshly loaded page, the rangeCount is 0. After the user clicks on the page, rangeCount is 1, even if no selection is visible.

A user can normally only select one range at a time, so the rangeCount will usually be 1. Scripting can be used to make the selection contain more than 1 range.

Gecko browsers allow multiple selections across table cells.
[https://developer.mozilla.org/en-US/docs/Web/API/Selection/rangeCount]

jsremoveAllRanges
jsselectAllChildren
jssetBaseAndExtent
jssetPosition
jstoString

_CODE.LJS:

jstype
jsop.Set

name::
* McsEngl.jsop.Set@cptIt,
* McsEngl.ljsSet-object@cptIt,
* McsEngl.ljso.Set@cptIt,

_DESCRIPTION:
Description
Set objects are collections of values, you can iterate its elements in insertion order. A value in the Set may only occur once; it is unique in the Set's collection.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set]

_MEMBER:
> Object.getOwnPropertyNames(Set.prototype).sort()
["add", "clear", "constructor", "delete", "entries", "forEach", "has", "keys", "size", "values"]

ljbalgo'sut.CLASS

_CREATED: {2014-04-21}

name::
* McsEngl.ljbalgo'sut.CLASS@cptIt,
* McsEngl.ljb'algo'code'unitS.CLASS@cptIt,
* McsEngl.ljsclass@cptIt,
* McsEngl.ljs'class@cptIt,

_DESCRIPTION:
JavaScript does NOT have classes (period).
[hmnSngo.2014-07-28]
===
From what I hear (I wasn't there at the time), JavaScript was initially a prototypal inheritance system. It was super simple like the rest of the language. But then Netscape decided to make it be more like Java and added the idea of constructors to the language. Hence pseudo classes were born.
[http://howtonode.org/prototypical-inheritance]

ljbalgo'sut.CUSTOM

name::
* McsEngl.ljbalgo'sut.CUSTOM@cptIt,
* McsEngl.ljs'custom-semantic-unit@cptIt,

_DESCRIPTION:
The-algo-units a-programer uses.
[hmnSngo.2015-12-26]

_SPECIFIC:
01) a-array#ql:jsarray#
02) b-boolean#ql:jsboolean#
03) f-function#ql:jsf@cptIt#
04) n-number#ql:jsn#
05) o-object#ql:jso@cptIt#
06) r-regexp#ql:jsr@cptIt#
07) s-string#ql:jss#
08) x-mixed
09) null#ql:jsnull#
10) undefined#ql:jsundefined#

ljbalgo'sut.NAMED

name::
* McsEngl.ljbalgo'sut.NAMED@cptIt,
* McsEngl.ljb'name-value-pair@cptIt,
* McsEngl.ljs'named-algo-unit@cptIt,
* McsEngl.ljs'named-meaning-unit@cptIt,
* McsEngl.ljs'named-semantic-unit@cptIt,
* McsEngl.ljs'valuename-variable@cptIt, {2015-12-26}

_DESCRIPTION:
The-algo-units a-programer uses which have a-name.
[hmnSngo.2015-12-26]
===
As seen in the explanations, hoisting in JavaScript has many forms. Even if you know exactly how it works, the general advice is to code variables in a sequence of declare > initialize > use.
[http://rainsoft.io/javascript-hoisting-in-details/]

_SPECIFIC:
01) a-array#ql:jsarray#
02) b-boolean#ql:jsboolean#
03) f-function#ql:jsf@cptIt#
04) n-number#ql:jsn#
05) o-object#ql:jso@cptIt#
06) r-regexp#ql:jsr@cptIt#
07) s-string#ql:jss#
08) x-mixed

ljbalgo'sut.NAMED.NO

name::
* McsEngl.ljbalgo'sut.NAMED.NO@cptIt,
* McsEngl.ljb'algo'code'unitS.NAMED.NO@cptIt,
* McsEngl.ljsalgo'anonymous-unit@cptIt,

_SPECIFIC:
* boolean
* function-anonymous##
* null
* number
* string

ljbalgo'sut.PRIMITIVE

name::
* McsEngl.ljbalgo'sut.PRIMITIVE@cptIt,
* McsEngl.ljsprimitive@cptIt,
* McsEngl.ljs'codeS.unitM.PRIMITIVE@cptIt,

_SPECIFIC:
* boolean#ql:jsboolean#
* null#ql:jsnull#
* number#ql:jsn#
* regexp#ql:jsr@cptIt#
* string#ql:jss#
* undefined#ql:jsundefined#

ljbalgo'sut.PRIMITIVE.NO

name::
* McsEngl.ljbalgo'sut.PRIMITIVE.NO@cptIt,
* McsEngl.ljsprimitiveNo@cptIt,
* McsEngl.ljs'codeS.unitM.PRIMITIVE.NO@cptIt,

SPECIFIC

_SPECIFIC:
* array#ql:jsarray#
* function#ql:jsf@cptIt#
* object#ql:jso@cptIt#
* structured##
* structuredNo##

ljbalgo'UNIT-STRUCTURE

name::
* McsEngl.ljbalgo'UNIT-STRUCTURE@cptIt,

ljbuts'code

name::
* McsEngl.ljbuts'code@cptIt,
* McsEngl.ljs'code-unit-structure@cptIt,

_SPECIFIC:
* character#linkL#
===
* character#ql:js'character#,
* data#ql:js'data#,
* delimeter,
* expression#ql:js'expression#,
* file#ql:js'file#,
* function#ql:js'function#,
* identifier#ql:js'identifier#,
* keyword#ql:js'keyword#,
* object#ql:js'object#,
* statement#ql:js'statement#,
* token#ql:js'token#,
* value#ql:js'value#
* variable#ql:js'variable#
* whitespace##

ljb'unit.DIV-PUNCTUATOR

name::
* McsEngl.ljb'unit.DIV-PUNCTUATOR@cptIt,
* McsEngl.ljs'DivPunctuator@cptIt,

_DEFINITION:
DivPunctuator :: one of
/  /=  
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.7.SyntaxDiv2]

ljb'unit.FUTURE-RESERVED-WORD

name::
* McsEngl.ljb'unit.FUTURE-RESERVED-WORD@cptIt,
* McsEngl.ljs'future-reserved-word@cptIt,

_GENERIC:
* js-reserved-word#ql:lcpjs'reserved_word#

_DEFINITION:
FutureReservedWord :: one of
class  enum  extends  super
const  export  import  
The following tokens are also considered to be FutureReservedWords when they occur within strict mode code (see 10.1.1). The occurrence of any of these tokens within strict mode code in any context where the occurrence of a FutureReservedWord would produce an error must also produce an equivalent error:

implements  let  private  public  yield
interface  package  protected  static
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.6.1.2.Syntax]

_SPECIFIC:
* lcpJs'class_future_reserved_word
* lcpJs'const_future_reserved_word
* lcpJs'enum_future_reserved_word
* lcpJs'export_future_reserved_word
* lcpJs'extends_future_reserved_word
* lcpJs'implements_future_reserved_word
* lcpJs'import_future_reserved_word
* lcpJs'interface_future_reserved_word
* lcpJs'let_future_reserved_word
* lcpJs'package_future_reserved_word
* lcpJs'private_future_reserved_word
* lcpJs'protected_future_reserved_word
* lcpJs'public_future_reserved_word
* lcpJs'static_future_reserved_word
* lcpJs'super_future_reserved_word
* lcpJs'yield_future_reserved_word
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.6.1.2.Syntax]

ljb'unit.IDENTIFER-NAME

name::
* McsEngl.ljb'unit.IDENTIFER-NAME@cptIt,
* McsEngl.ljs'identifer-name@cptIt,
* McsEngl.ljs'identiferName@cptIt,
* McsEngl.lcpEs'identiferName@cptIt,

_DEFINITION:
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.6.SyntaxDiv2]

_PART:
* identifer#linkL#
* reserved-word#linkL#

lcpEs'IdentifierStart:
IdentifierStart ::
UnicodeLetter
$
_
\ UnicodeEscapeSequence
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.6.SyntaxDiv3]

lcpEs'IdentiferPart:
IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
<ZWNJ>
<ZWJ>
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.6.SyntaxDiv4]

lcpEs'UnicodeLetter ::
any character in the Unicode categories “Uppercase letter (Lu)”, “Lowercase letter (Ll)”, “Titlecase letter (Lt)”, “Modifier-letter#ql:chrucd.category.lm.letter.modifier# (Lm)”, “Other letter (Lo)”, or “Letter number (Nl)”.

lcpEs'UnicodeCombiningMark ::
any character in the Unicode categories “Non-spacing mark (Mn)” or “Combining spacing mark (Mc)”

lcpEs'UnicodeDigit ::
any character in the Unicode category “Decimal number (Nd)”

lcpEs'UnicodeConnectorPunctuation ::
any character in the Unicode category “Connector punctuation (Pc)”

ljb'unit.INPUT-ELEMENT

name::
* McsEngl.ljb'unit.INPUT-ELEMENT@cptIt,
* McsEngl.input-element.js@cptIt,
* McsEngl.ljs'input-element@cptIt,

_WHOLE:
* js-source-text#ql:js'source_text#

_DESCRIPTION:
The source text of an ECMAScript program is first converted into a sequence of input elements, which are tokens, line terminators, comments, or white space. The source text is scanned from left to right, repeatedly taking the longest possible sequence of characters as the next input element.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7P1]

_SPECIFIC:
* js-comment##
* js-line-terminator##
* js-token##
* js-white-space#ql:js'whitespace#

ljb'unit.KEYWORD

name::
* McsEngl.ljb'unit.KEYWORD@cptIt,
* McsEngl.ljskeyword@cptIt,
* McsEngl.lcpJc'keyword@cptIt,

_GENERIC:
* js-reserved-word#ql:lcpjs'reserved_word#

_SPECIFIC:
Keyword :: one of
break  do    instanceof  typeof
case  else    new    var
catch  finally    return    void
continue  for    switch    while
debugger  function  this    with
default  if    throw  
delete  in    try
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.6.1.1.SyntaxDiv1]

_DESCRIPTION:
A keyword can be a name or a value.
[hmnSngo.2013-11-20]
===
Reserved Words
JavaScript is very heavy handed in its restrictions on reserved words. The reserved words are

abstract
boolean break byte
case catch char class const continue
debugger default delete do double
else enum export extends
false final finally float for function
goto
if implements import in instanceof int interface
long
native new null
package private protected public
return
short static super switch synchronized
this throw throws transient true try typeof
var volatile void
while with

Most of those words are not even used in the language. A reserved word cannot be used
As a name in literal object notation
As a member name in dot notation
As a function argument
As a var
As an unqualified global variable
As a statement label
There is no excuse for the first two restrictions. None. There is an excuse for the second two restrictions, but it is very weak.
[http://javascript.crockford.com/survey.html]

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words,

_SPECIFIC:
* jskeyword.abstract,  lcpJs'abstract_keyword,

* jskeyword.boolean,  lcpJs'boolean_keyword,
* jskeyword.break,  lcpJs'break_keyword,
* jskeyword.byte,  lcpJs'byte_keyword,

* jskeyword.case,  lcpJs'case_keyword,
* jskeyword.catch,  lcpJs'catch_keyword,
* jskeyword.char,  lcpJs'char_keyword,
* jskeyword.class,  lcpJs'class_keyword,
* jskeyword.const,  lcpJs'const_keyword,
* jskeyword.continue#ql:lcpjs'continue#,

* jskeyword.debugger,  lcpJs'debugger_keyword,
* jskeyword.default,  lcpJs'default_keyword,
* jskeyword.delete#ql:lcpjs'delete#,
* jskeyword.do,    lcpJs'do_keyword,
* jskeyword.double,  lcpJs'double_keyword,

* jskeyword.else,  lcpJs'else_keyword,
* jskeyword.enum,  lcpJs'enum_keyword,
* jskeyword.export,  lcpJs'export_keyword,
* jskeyword.extends,  lcpJs'extends_keyword,

* jskeyword.false#ql:lcpjs'false#,  (value)
* jskeyword.final,  lcpJs'final_keyword,
* jskeyword.finally,  lcpJs'finally_keyword,
* jskeyword.float,  lcpJs'float_keyword,
* jskeyword.for#ql:lcpjs'for#,
* jskeyword.function#ql:lcpjs'function#,

* jskeyword.goto,  lcpJs'goto_keyword,

* jskeyword.if,    lcpJs'if_keyword,
* jskeyword.implements,  lcpJs'implements_keyword,
* jskeyword.import,  lcpJs'import_keyword,
* jskeyword.in,    lcpJs'in_keyword,
* jskeyword.instanceof,  lcpJs'instanceof_keyword,
* jskeyword.int,  lcpJs'int_keyword,
* jskeyword.interface,  lcpJs'interface_keyword,

* jskeyword.long,  lcpJs'long_keyword,

* jskeyword.native,  lcpJs'native_keyword,
* jskeyword.new,  lcpJs'new_keyword,
* jskeyword.null,  lcpJs'null_keyword,

* jskeyword.package,  lcpJs'package_keyword,
* jskeyword.private,  lcpJs'private_keyword,
* jskeyword.protected,  lcpJs'protected_keyword,
* jskeyword.public,  lcpJs'public_keyword,

* jskeyword.return#ql:lcpjs'return#,

* jskeyword.short,  lcpJs'short_keyword,
* jskeyword.static,  lcpJs'static_keyword,
* jskeyword.switch,  lcpJs'switch_keyword,
* jskeyword.synchronized,  lcpJs'synchronized_keyword,

* jskeyword.this,  lcpJs'this_keyword,
* jskeyword.throw#ql:jsthrow#,
* jskeyword.transient,  lcpJs'transient_keyword,
* jskeyword.true#ql:jstrue#,  (value)
* jskeyword.try,  lcpJs'try_keyword,
* jskeyword.typeof#ql:jstypeof#,  (operator)

* jskeyword.var#ql:jsvar#,
* jskeyword.void,  lcpJs'void_keyword,

* jskeyword.while#ql:jswhile#,
* jskeyword.with#ql:jswith#

ljb'unit.LINE-TERMINATOR

name::
* McsEngl.ljb'unit.LINE-TERMINATOR@cptIt,
* McsEngl.ljs'line-terminator@cptIt,
* McsEngl.ljs'chr.LINE-TERMINATOR@cptIt,
* McsEngl.ljs'line-terminator@cptIt,

_DESCRIPTION:
Like white space characters, line terminator characters are used to improve source text readability and to separate tokens (indivisible lexical units) from each other. However, unlike white space characters, line terminators have some influence over the behaviour of the syntactic grammar. In general, line terminators may occur between any two tokens, but there are a few places where they are forbidden by the syntactic grammar. Line terminators also affect the process of automatic semicolon insertion (7.9). A line terminator cannot occur within any token except a StringLiteral. Line terminators may only occur within a StringLiteral token as part of a LineContinuation.

A line terminator can occur within a MultiLineComment (7.4) but cannot occur within a SingleLineComment.

Line terminators are included in the set of white space characters that are matched by the \s class in regular expressions.

The ECMAScript line terminator characters are listed in Table 3.

Table 3 — Line Terminator Characters
Code Unit Value  Name  Formal Name
\u000A  Line Feed  <LF>
\u000D  Carriage Return  <CR>
\u2028  Line separator  <LS>
\u2029  Paragraph separator  <PS>
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.3]
===
Spaces and tabs are ignored, so one-lining is possible:
alert('Hello'); alert('World!');
But newlines are not ignored. Instead, a newline may separate statements, just like semicolons do.
[http://javascript.info/tutorial/variables-and-statements]

ljb'unit.PUNCTUATOR

name::
* McsEngl.ljb'unit.PUNCTUATOR@cptIt,
* McsEngl.ljs'punctuator@cptIt,

_GENERIC:
* js-token#ql:lcpjs'token@cptIt#

_DEFINITION:
Punctuator :: one of
{  }  (  )  [  ]
.  ;  ,  <  >  <=
>=  ==  !=  ===  !==  
+  -  *  %  ++  --
<<  >>  >>>  &  |  ^
!  ~  &&  ||  ?  :
=  +=  -=  *=  %=  <<=
>>=  >>>=  &=  |=  ^=
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.7.SyntaxDiv1]

ljb'unit.RESERVED-WORD

name::
* McsEngl.ljb'unit.RESERVED-WORD@cptIt,
* McsEngl.ljsreserved-word@cptIt,
* McsEngl.ljs'reserved-word@cptIt,

_GENERIC:
* js-token#linkL#

_DEFINITION:
ReservedWord ::
Keyword#ql:lcpjs'unit.keyword#
FutureReservedWord#ql:lcpjs'future_reserved_word#
NullLiteral#ql:lcpjs'null_literal#
BooleanLiteral#ql:lcpjs'boolean_literal#
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.6.1.SyntaxDiv1]

_ADDRESS.WPG:
* http://mathiasbynens.be/notes/reserved-keywords,
* http://stackoverflow.com/questions/26255/reserved-keywords-in-javascript,

ljb'unit.TOKEN

name::
* McsEngl.ljb'unit.TOKEN@cptIt,
* McsEngl.ljs'token@cptIt,

_GENERIC:
* js-input-element#ql:js'input_element#
* unit-of-code#ql:js'unit_of_code#

_DEFINITION:
Token ::
IdentifierName#ql:lcpjs'identifer_name@cptIt#
Punctuator#ql:lcpjs'punctuator#
NumericLiteral#ql:lcpjs'numeric_literal#
StringLiteral#ql:lcpjs'string_literal@cptIt#
NOTE The DivPunctuator and RegularExpressionLiteral productions define tokens, but are not included in the Token production.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.5.Syntax]
===
tokens (indivisible lexical units)
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.3P1]

_DESCRIPTION:
What is a token? According to ECMAScript specification (see Section 5.1.2):
Input elements other than white space and comments form the terminal symbols for the syntactic grammar for ECMAScript and are called ECMAScript tokens. These tokens are the reserved words, identifiers, literals, and punctuators of the ECMAScript language.
In Section 7.5, the list of all tokens are provided:
IdentifierName
Punctuator
NumericLiteral
StringLiteral
Furthermore, Section 7.6.1 says something about reserved words:
A reserved word is an IdentifierName that cannot be used as an Identifier.
For example, you can’t use keywords such as if, while, and many others as your variable name. In addition, there are also literals like null, true, and false (the last two are Boolean literals) which belong to this reserved group.
[http://ariya.ofilabs.com/2012/07/most-popular-javascript-tokens.html]

_SPECIFIC:
* operator,
* identifier,

ljb'unit.WHITESPACE

name::
* McsEngl.ljb'unit.WHITESPACE@cptIt,
* McsEngl.ljs'chr.WHITESPACE@cptIt,
* McsEngl.ljs'whitespace@cptIt,
* McsEngl.whitespace.js@cptIt,

_GENERIC:
* js-input-element#ql:lcpjs'input_element#

_ADDRESS.WPG:
* http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.2,

_DESCRIPTION:
7.2 White Space
White space characters are used to improve source text readability and to separate tokens (indivisible lexical units) from each other, but are otherwise insignificant. White space characters may occur between any two tokens and at the start or end of input. White space characters may also occur within a StringLiteral or a RegularExpressionLiteral (where they are considered significant characters forming part of the literal value) or within a Comment, but cannot appear within any other kind of token.

The ECMAScript white space characters are listed in Table 2.

Table 2 — Whitespace Characters
Code Unit Value  Name  Formal Name
\u0009  Tab  <TAB>
\u000B  Vertical Tab  <VT>
\u000C  Form Feed  <FF>
\u0020  Space  <SP>
\u00A0  No-break space  <NBSP>
\uFEFF
Other category “Zs”

Byte Order Mark

Any other Unicode “space separator”

<BOM>

<USP>

ECMAScript implementations must recognise all of the white space characters defined in Unicode 3.0. Later editions of the Unicode Standard may define other white space characters. ECMAScript implementations may recognise white space characters from later editions of the Unicode Standard.

Syntax
WhiteSpace ::
<TAB>
<VT>
<FF>
<SP>
<NBSP>
<BOM>
<USP>
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.2]
===
Whitespace
Blank lines improve readability by setting off sections of code that are logically related.

Blank spaces should be used in the following circumstances:

A keyword followed by ( (left parenthesis) should be separated by a space.
while (true) {
A blank space should not be used between a function value and its ( (left parenthesis). This helps to distinguish between keywords and function invocations.
All binary operators except . (period) and ( (left parenthesis) and [ (left bracket) should be separated from their operands by a space.
No space should separate a unary operator and its operand except when the operator is a word such as typeof.
Each ; (semicolon) in the control part of a for statement should be followed with a space.
Whitespace should follow every , (comma).
[http://javascript.crockford.com/code.html#whitespace]

ljbalgo.UNIT (unt)

name::
* McsEngl.ljbalgo.UNIT (unt)@cptIt,

ljbunt'code

name::
* McsEngl.ljbunt'code@cptIt,
* McsEngl.ljs'acode-unit@cptIt, {2014-11-01}
* McsEngl.ljs'unit.acode@cptIt, {2014-11-01}
* McsEngl.ljschr@cptIt, {2014-03-24}
* McsEngl.ljssourceunit@cptIt, {2014-11-11}
* McsEngl.ljsunitSource@cptIt, {2014-11-11}
* McsEngl.ljs'sign@cptIt,
* McsEngl.ljs'symbol@cptIt,
* McsEngl.ljs'character@cptIt,
* McsEngl.ljs'code-unit@cptIt,
* McsEngl.ljs'unit.code@cptIt,
* McsEngl.ljssunit@cptIt, {2014-11-11}
* McsEngl.ljs'chr@cptIt,

_WHOLE:
* js-code,

_DESCRIPTION:
The units of the-source-code, are the SYMBOLS (leters, numbers, whitespace) used to create the source-code.
[hmnSngo.2014-11-01]
===
Unit is INDIVISIBLE code.
[hmnSngo.2014-02-09]
===
Any identifiable part of a program#ql:"js'program"#.

ljbunt.MINUS (-)

name::
* McsEngl.ljbunt.MINUS (-)@cptIt,
* McsEngl.ljs'minus-symbol@cptIt,
* McsEngl.ljs'symbol.minus@cptIt,

- might be both a prefix operator (negation) and an infix operator (subtraction),
[http://javascript.crockford.com/tdop/tdop.html]

ljbunt.PUNCTUATION

name::
* McsEngl.ljbunt.PUNCTUATION@cptIt,

ljbunt.SEMICOLON (;)

name::
* McsEngl.ljbunt.SEMICOLON (;)@cptIt,
* McsEngl.ljs'semicolon-symbol@cptIt,
* McsEngl.ljs'symbol.semicolon@cptIt,

_DESCRIPTION:
JavaScript uses a C-like syntax which requires the use of semicolons to delimit certain statements. JavaScript attempts to make those semicolons optional with a semicolon insertion mechanism. This is dangerous because it can mask errors.
[http://www.jslint.com/lint.html]
===
Semicolon Insertion
One of the mistakes in the language is semicolon insertion. This is a technique for making semicolons optional as statement terminators. It is reasonable for IDEs and shell programs to do semicolon insertion. It is not reasonable for the language definition to require compilers to do it. Use semicolons.
[http://javascript.crockford.com/survey.html]

ljbalgo.SPECIFIC

name::
* McsEngl.ljbalgo.SPECIFIC@cptIt,

* lbjalgo.specific,

_SPECIFIC:
* Command Pattern
* Constructor Pattern
* Decorator Pattern
* Facade Pattern
* Factory Pattern
* Flyweight Pattern
* Mediator Pattern
* Mixin Pattern
* Module Pattern
* Observer Pattern
* Prototype Pattern
* Revealing Module Pattern
* Singleton Pattern

_SPECIFIC:
JavaScript applications such as web e-mail, maps, document editing, and collaboration tools are becoming an increasingly important part of the everyday computing.
[http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf]

_SPECIFIC:
* algo
===
* array (arr)
* boolean (bln)
* collection
* collectionNo
* comment
* function (fcn)
* information
* named
* namedNo
* number (nbr)
* object (obj)
* regexp (rgx)
* string (str)
* time
* type

ljbalgo.A

name::
* McsEngl.ljbalgo.A@cptIt,

ljbalgo.address-current

name::
* McsEngl.ljbalgo.address-current@cptIt,

location.href:
The href property returns the entire URL of the current page.
[http://www.w3schools.com/jsref/prop_loc_href.asp]

location.href= "#id":
goes to that address.

ljbalgo.AJAX

_CREATED: {2011-08-24} {2010-09-30}

name::
* McsEngl.ljbalgo.AJAX@cptIt,
* McsEngl.conceptIt581,
* McsEngl.ajax@cptIt554i,
* McsEngl.Asynchronous-JavaScript-And-Xml@cptIt,
* McsEngl.ljs'ajax@cptIt,
* McsEngl.ljs'code.AJAX@cptIt,

_ADDRESS.WPG:
* http://www.ajax.org//
* http://learn.jquery.com/ajax//

_DESCRIPTION:
AJAX is the art of exchanging data with a server, and updating parts of a web page - without reloading the whole page.
[http://w3schools.com/jquery/jquery_ajax_intro.asp]
===
The term AJAX is a pseudo-acronym for "Asynchronous JavaScript And XML," (see footnote) but is now used much more broadly to cover all methods of communicating with a server using JavaScript. As we will see, Ajax (see footnote) is not always asynchronous and does not always involve XML.
[http://www.learn-ajax-tutorial.com//]
===
Ajax (pronounced /?e?d??ks/) (shorthand for Asynchronous JavaScript and XML[1]) is a group of interrelated web development techniques used on the client-side to create interactive web applications. With Ajax, web applications can retrieve data from the server asynchronously in the background without interfering with the display and behavior of the existing page. The use of Ajax techniques has led to an increase in interactive or dynamic interfaces on web pages. Data is usually retrieved using the XMLHttpRequest object. Despite the name, the use of XML is not actually required, nor do the requests need to be asynchronous.[2]
Like DHTML and LAMP, Ajax is not a technology in itself, but a group of technologies. Ajax uses a combination of HTML and CSS to mark up and style information. The DOM is accessed with JavaScript to dynamically display, and to allow the user to interact with, the information presented. JavaScript and the XMLHttpRequest object provide a method for exchanging data asynchronously between browser and server to avoid full page reloads.
[http://en.wikipedia.org/wiki/AJAX]
===
Ajax or Asynchronous JavaScript and XML enables the programmer to execute a server-side script without refreshing the page.
[http://www.openjs.com/ajax/tutorial/]

ajax'API

name::
* McsEngl.ajax'API@cptIt,

_DESCRIPTION:
Unfortunately, different browsers implement the Ajax API differently. Typically this meant that developers would have to account for all the different browsers to ensure that Ajax would work universally. Fortunately, jQuery provides Ajax support that abstracts away painful browser differences. It offers both a full-featured $.ajax() method, and simple convenience methods such as $.get(), $.getScript(), $.getJSON(), $.post(), and $().load().
[http://learn.jquery.com/ajax/]

ajax'asyncronicity

name::
* McsEngl.ajax'asyncronicity@cptIt,

A is for Asynchronous

The asynchronicity of Ajax catches many new jQuery users off guard. Because Ajax calls are asynchronous by default, the response is not immediately available. Responses can only be handled using a callback. So, for example, the following code will not work:

var response;

$.get( "foo.php", function( r ) {
response = r;
});

console.log( response ); // undefined
Instead, we need to pass a callback function to our request; this callback will run when the request succeeds, at which point we can access the data that it returned, if any.

$.get( "foo.php", function( response ) {
console.log( response ); // server response
});
[http://learn.jquery.com/ajax/key-concepts/]

ajax'cross-domain#ql:xhr.cors#

name::
* McsEngl.ajax'cross-domain@cptIt,

ajax'Evolution

name::
* McsEngl.ajax'Evolution@cptIt,

{time.2005}: Google Suggest
AJAX was made popular in 2005 by Google, with Google Suggest.
Google Suggest is using AJAX to create a very dynamic web interface: When you start typing in Google's search box, a JavaScript sends the letters off to a server and the server returns a list of suggestions.
[http://www.w3schools.com/ajax/ajax_intro.asp]

{time.2003}:
Traditionally webpages required reloading to update their content. For web-based email this meant that users had to manually reload their inbox to check and see if they had new mail. This had huge drawbacks: it was slow and it required user input. When the user reloaded their inbox, the server had to reconstruct the entire web page and resend all of the HTML, CSS, JavaScript, as well as the user's email. This was hugely inefficient. Ideally, the server should only have to send the user's new messages, not the entire page. By 2003, all the major browsers solved this issue by adopting the XMLHttpRequest (XHR) object, allowing browsers to communicate with the server without requiring a page reload.
[http://learn.jquery.com/ajax/]

ajax'https

name::
* McsEngl.ajax'https@cptIt,
* McsEngl.https'ajax@cptIt,

cookie

name::
* McsEngl.cookie@cptIt,

So, why, why, why doesn't the browser pass on the cookie when making the HTTPS Ajax call? Any ideas? I am about to lose my mind...

Ok, found the solution to the cookie problem.

See XHR specs, jQuery docs and StackOverflow.

The solution to have the cookies sent when switching protocol and/or subdomain is to set the withCredentials property to true.

E.g. (using jQuery)

$.ajax( {
/* Setup the call */
xhrFields: {
withCredentials: true
}
});
[http://stackoverflow.com/questions/10230341/http-cookies-and-ajax-requests-over-https]

ajax'Framework

name::
* McsEngl.ajax'Framework@cptIt,

_GENERIC:
* web-application-framework

_DESCRIPTION:
An Ajax framework is a web application framework that helps to develop web applications that use Ajax, a collection of technologies used to build dynamic web pages on the client side. Data is read from the server or sent to the server by JavaScript requests. However, some processing at the server side may be required to handle requests, such as finding and storing the data. This is accomplished more easily with the use of a framework dedicated to processing Ajax requests. The goal of the framework is to provide the Ajax engine and associated server and client-side functions.
[http://en.wikipedia.org/wiki/Ajax_framework]

ajax'GET-POST-method

name::
* McsEngl.ajax'GET-POST-method@cptIt,

GET vs. POST

The two most common "methods" for sending a request to a server are GET and POST. It's important to understand the proper application of each.

The GET method should be used for non-destructive operations — that is, operations where you are only "getting" data from the server, not changing data on the server. For example, a query to a search service might be a GET request. GET requests may be cached by the browser, which can lead to unpredictable behavior if you are not expecting it. GET requests generally send all of their data in a query string.

The POST method should be used for destructive operations — that is, operations where you are changing data on the server. For example, a user saving a blog post should be a POST request. POST requests are generally not cached by the browser; a query string can be part of the URL, but the data tends to be sent separately as post data.
[http://learn.jquery.com/ajax/key-concepts/]

ajax'jQuery

name::
* McsEngl.ajax'jQuery@cptIt,
* McsEngl.jquery'ajax-api@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/category/ajax//
* http://jqfundamentals.com/chapter/ajax-deferreds,

_DESCRIPTION:
Category: Ajax
The jQuery library has a full suite of AJAX capabilities. The functions and methods therein allow us to load data from the server without a browser page refresh.
[http://api.jquery.com/category/ajax/]

_SPECIFIC:
.ajaxComplete()
Register a handler to be called when Ajax requests complete. This is an AjaxEvent.
Also in: Ajax > Global Ajax Event Handlers
.ajaxError()
Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.
Also in: Ajax > Global Ajax Event Handlers
.ajaxSend()
Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.
Also in: Ajax > Global Ajax Event Handlers
.ajaxStart()
Register a handler to be called when the first Ajax request begins. This is an Ajax Event.
Also in: Ajax > Global Ajax Event Handlers
.ajaxStop()
Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.
Also in: Ajax > Global Ajax Event Handlers
.ajaxSuccess()
Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.
Also in: Ajax > Low-Level Interface
jQuery.ajax()
Perform an asynchronous HTTP (Ajax) request.
Also in: Ajax > Low-Level Interface
jQuery.ajaxPrefilter()
Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().
Also in: Ajax > Low-Level Interface
jQuery.ajaxSetup()
Set default values for future Ajax requests. Its use is not recommended.
Also in: Ajax > Low-Level Interface
jQuery.ajaxTransport()
Creates an object that handles the actual transmission of Ajax data.
Also in: Ajax > Shorthand Methods
jQuery.get()
Load data from the server using a HTTP GET request.
Also in: Ajax > Shorthand Methods
jQuery.getJSON()
Load JSON-encoded data from the server using a GET HTTP request.
Also in: Ajax > Shorthand Methods
jQuery.getScript()
Load a JavaScript file from the server using a GET HTTP request, then execute it.
Also in: Miscellaneous > Collection Manipulation | Forms | Ajax > Helper Functions
jQuery.param()
Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.
Also in: Ajax > Shorthand Methods
jQuery.post()
Load data from the server using a HTTP POST request.
Also in: Ajax > Shorthand Methods
.load()
Load data from the server and place the returned HTML into the matched element.
Also in: Forms | Ajax > Helper Functions
.serialize()
Encode a set of form elements as a string for submission.
Also in: Forms | Ajax > Helper Functions
.serializeArray()
Encode a set of form elements as an array of names and values.
[http://api.jquery.com/category/ajax//]

ajax'relation-to-jQuery
ajax'relation-to-jQuery

name::
* McsEngl.ajax'relation_to_jQuery@cptIt,
* McsEngl.jquery'relation-to-ajax@cptIt,

_DESCRIPTION:
What About jQuery and AJAX?
jQuery provides several methods for AJAX functionality.

With the jQuery AJAX methods, you can request text, HTML, XML, or JSON from a remote server using both HTTP Get and HTTP Post - And you can load the external data directly into the selected HTML elements of your web page!

 Without jQuery, AJAX coding can be a bit tricky!

Writing regular AJAX code can be a bit tricky, because different browsers have different syntax for AJAX implementation. This means that you will have to write extra code to test for different browsers. However, the jQuery team has taken care of this for us, so that we can write AJAX functionality with only one single line of code.
[http://w3schools.com/jquery/jquery_ajax_intro.asp]

jquery'ajax_method

name::
* McsEngl.jquery'ajax_method@cptIt,

// Using the core $.ajax() method
$.ajax({
// the URL for the request
url: "post.php",

// the data to send (will be converted to a query string)
data: {
id: 123
},

// whether this is a POST or GET request
type: "GET",

// the type of data we expect back
dataType : "json",

// code to run if the request succeeds;
// the response is passed to the function
success: function( json ) {
$( "<h1/>" ).text( json.title ).appendTo( "body" );
$( "<div class=\"content\"/>").html( json.html ).appendTo( "body" );
},

// code to run if the request fails; the raw request and
// status codes are passed to the function
error: function( xhr, status ) {
alert( "Sorry, there was a problem!" );
},

// code to run regardless of success or failure
complete: function( xhr, status ) {
alert( "The request is complete!" );
}
});
[http://learn.jquery.com/ajax/jquery-ajax-methods/]

jquery'form_code

name::
* McsEngl.jquery'form_code@cptIt,

_ADDRESS.WPG:
* http://learn.jquery.com/ajax/ajax-and-forms//

jquery'JSONP

name::
* McsEngl.jquery'JSONP@cptIt,
* McsEngl.JSONP@cptIt,

_WHOLE:
* cross-domain-communication#ql:cross_domain_communication@cptIt#

_DESCRIPTION:
There have been some criticisms raised about JSONP. Cross-origin resource sharing (CORS) is a more recent method of getting data from a server in a different domain, which addresses some of those criticisms.
[http://en.wikipedia.org/wiki/JSONP] 2013-07-20,
===
Working with JSONP
The advent of JSONP — essentially a consensual cross-site scripting hack — has opened the door to powerful mashups of content. Many prominent sites provide JSONP services, allowing you access to their content via a predefined API. A particularly great source of JSONP-formatted data is the Yahoo! Query Language, which we'll use in the following example to fetch news about cats.

// Using YQL and JSONP
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql",

// the name of the callback parameter, as specified by the YQL service
jsonp: "callback",

// tell jQuery we're expecting JSONP
dataType: "jsonp",

// tell YQL what we want and that we want JSON
data: {
q: "select title,abstract,url from search.news where query=\"cat\"",
format: "json"
},

// work with the response
success: function( response ) {
console.log( response ); // server response
}
});
jQuery handles all the complex aspects of JSONP behind-the-scenes — all we have to do is tell jQuery the name of the JSONP callback parameter specified by YQL ("callback" in this case), and otherwise the whole process looks and feels like a normal Ajax request.
[http://learn.jquery.com/ajax/working-with-jsonp/]

In general, Ajax does not work across domains. For instance, a webpage loaded from example1.com is unable to make an Ajax request to example2.com as it would violate the same origin policy. As a work around, JSONP (JSON with Padding) uses <script> tags to load files containing arbitrary JavaScript content and JSON, from another domain. More recently browsers have implemented a technology called Cross-Origin Resource Sharing (CORS), that allows Ajax requests to different domains.
[http://learn.jquery.com/ajax/]

_CODE.JQUERY:

<!DOCTYPE html>
<html>
<head>
<style>img{ height: 100px; float: left; }</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id="images">

</div>
<script>
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
{
tags: "dogs",
tagmode: "any",
format: "json"
},
function(data) {
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});</script>

</body>
</html>
[view-source:http://www.w3resource.com/JSON/jsonp-example.html]

jquery'load-method

name::
* McsEngl.jquery'load_method@cptIt,
* McsEngl.jqo.load@cptIt,
* McsEngl.jquery'api.load-method@cptIt,
* McsEngl.jquery'ex.INCLUDE-FILE-IN-HTML@cptIt,
* McsEngl.jquery'file-load@cptIt,
* McsEngl.jquery'include-file-in-html@cptIt,
* McsEngl.jquery'load@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/load//
* http://w3schools.com/jquery/jquery_ajax_load.asp,

_DESCRIPTION:
Load data from the server and place the returned HTML into the matched element.
[http://api.jquery.com/load/]
===
Also loads LOCAL files.
[hmnSngo.2014-07-27]

_CODE.JQUERY:
<!DOCTYPE html>
<html>
<head>
<title>Load locally</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
</head>
<body>
<p>loaded content on next paragraph:</p>
<p id="idLoad"></p>

<script>
$("#idLoad").load("file:///D:/File1a/PgmSgm/template1.html");
</script>
</body>
</html>
===
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script>
$(document).ready(function() {
$("#idLoad").load("test.txt");
});
</script>
</head>

<body>
<p>load example:
<br/><span id="idLoad"></span>
</p>
</body>
</html>
===
$.fn.load
The .load() method is unique among jQuery’s Ajax methods in that it is called on a selection. The .load() method fetches HTML from a URL, and uses the returned HTML to populate the selected element(s). In addition to providing a URL to the method, you can optionally provide a selector; jQuery will fetch only the matching content from the returned HTML.

// Using $.fn.load to populate an element
$( "#newContent" ).load( "/foo.html" );
// Using $.fn.load to populate an element based on a selector
$( "#newContent" ).load( "/foo.html#myDiv h1:first:", function( html ) {
alert( "Content updated!" );
});
[http://learn.jquery.com/ajax/jquery-ajax-methods/]
===
The following example loads the content of the file "demo_test.txt" into a specific <div> element:
$("#div1").load("demo_test.txt");

The following example loads the content of the element with id="p1", inside the file "demo_test.txt", into a specific <div> element:
$("#div1").load("demo_test.txt#p1");
[http://w3schools.com/jquery/jquery_ajax_load.asp]
===

In my opinion the best solution is:

Using jQuery:

a.html:

<html>
<head>
<script src="jquery.js"></script>
<script>
$(function){
$("#includedContent").load("b.html");
});
</script>
</head>

<body>
<div id="includedContent"></div>
</body>
</html>

b.html:
<p> This is my include file </p>
Like that i can get a simple and clean solution to my problem.
[http://stackoverflow.com/questions/8988855/include-another-html-file-in-a-html-file]

_CODE.LJS:
function load(url, element)
{
req = new XMLHttpRequest();
req.open("GET", url, false);
req.send(null);

element.innerHTML = req.responseText;
}
usage

load("x.html", document.getElementById("b"));
[http://stackoverflow.com/a/17901198]
===
.load()

$("#loadTo").load("http://subinsb.com");
xhr=new XMLHttpRequest();
xhr.open("GET", "http://subinsb.com/", true);
xhr.send();
xhr.onreadystatechange=function(){
if(xhr.readyState==4 && xhr.status==200){
document.getElementById("loadTo").innerHTML = xhr.responseText;
}
}

jquery'post-method

name::
* McsEngl.jquery'post_method@cptIt,
* McsEngl.jqo.post@cptIt,
* McsEngl.jquery'post@cptIt,
* McsEngl.jquery'ajax'post@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/jQuery.post//

_CODE.JQUERY:
Request the test.php page and send some additional data along (while still ignoring the return results).
$.post("test.php", { name: "John", time: "2pm" } );

ajax'security

name::
* McsEngl.ajax'security@cptIt,

Security
AJAX is a as safe as a plain old form + refresh page. In the end it's always an HTTP request. Why do you think that ?

However, from a usability point, make sure that people that disable javascript can still log into your app.

Be sure to use POST method to send your AJAX request, as GET requests, and their params (such as, let's say, plain-text password) might end in your web server logs, unles you are using HTTPS.
[http://stackoverflow.com/questions/6938969/is-it-safe-to-use-ajax-for-login/6939003#6939003]

Another weakness of AJAX is the process that formulates server requests. The Ajax engine uses JS to capture the user commands and to transform them into function calls. Such function calls are sent in plain visible text to the server and may easily reveal database table fields such as valid product and user IDs, or even important variable names, valid data types or ranges, and any other parameters which may be manipulated by a hacker.
With this information, a hacker can easily use AJAX functions without the intended interface by crafting specific HTTP requests directly to the server. In case of cross-site scripting, maliciously injected scripts can actually leverage the AJAX provided functionalities to act on behalf of the user thereby tricking the user with the ultimate aim of redirecting his browsing session (e.g., phishing) or monitoring his traffic.
[http://www.acunetix.com/websitesecurity/ajax/]

ajax'Technology

name::
* McsEngl.ajax'Technology@cptIt,

Technologies
The term Ajax has come to represent a broad group of web technologies that can be used to implement a web application that communicates with a server in the background, without interfering with the current state of the page. In the article that coined the term Ajax,[1] Jesse James Garrett explained that the following technologies are incorporated:

HTML (or XHTML) and CSS for presentation
The Document Object Model (DOM) for dynamic display of and interaction with data
XML for the interchange of data, and XSLT for its manipulation
The XMLHttpRequest object for asynchronous communication
JavaScript to bring these technologies together
Since then, however, there have been a number of developments in the technologies used in an Ajax application, and the definition of the term Ajax. In particular, it has been noted that JavaScript is not the only client-side scripting language that can be used for implementing an Ajax application; other languages such as VBScript are also capable of the required functionality.[2][9] JavaScript is the most popular language for Ajax programming due to its inclusion in and compatibility with the majority of modern web browsers. Also, XML is not required for data interchange and therefore XSLT is not required for the manipulation of data. JavaScript Object Notation (JSON) is often used as an alternative format for data interchange,[10] although other formats such as preformatted HTML or plain text can also be used.[11]
[http://en.wikipedia.org/wiki/Ajax_(programming)]

ajax'XMLHttpRequest-object > XMLHttpRequest.prototype#ql:jsxmlhttprequest.prototype#

name::
* McsEngl.ajax'XMLHttpRequest-object@cptIt,
* McsEngl.ljsoXMLHttpRequest@cptIt,
* McsEngl.ljsXMLHttpRequest@cptIt,
* McsEngl.ljsXMLHttpRequest-object@cptIt,
* McsEngl.XHR@cptIt19i,
* McsEngl.XMLHttpRequest@cptIt19i,

* McsEngl.ljsoXHR@cptIt,

_ADDRESS.WPG:
* https://xhr.spec.whatwg.org//

_WHOLE:
* AJAX#ql:ajax@cptIt554i#

_DESCRIPTION::
XMLHttpRequest (XHR) is an API available in web browser scripting languages such as JavaScript. It is used to send HTTP or HTTPS requests directly to a web server and load the server response data directly back into the script.[1] The data might be received from the server as XML text[2] or as plain text.[3] Data from the response can be used directly to alter the DOM of the currently active document in the browser window without loading a new web page document. The response data can also be evaluated by client-side scripting. For example, if it was formatted as JSON by the web server, it can easily be converted into a client-side data object for further use.

XMLHttpRequest has an important role in the Ajax web development technique. It is currently used by many websites to implement responsive and dynamic web applications. Examples of these web applications include Gmail, Google Maps, Facebook and many others.

XMLHttpRequest is subject to the browser's same origin policy in that, for security reasons, requests will only succeed if they are made to the same server that served the original web page. There are alternative ways to circumvent this policy if required.
[http://en.wikipedia.org/wiki/XMLHttpRequest]
===
The XMLHttpRequest object implements an interface exposed by a scripting engine that allows scripts to perform HTTP client functionality, such as submitting form data or loading data from a server. It is the ECMAScript HTTP API.
[http://www.w3.org/TR/XMLHttpRequest/]
===
The XMLHttpRequest object is used to exchange data with a server behind the scenes.

The XMLHttpRequest object is a developer's dream, because you can:

Update a web page without reloading the page
Request data from a server after the page has loaded
Receive data from a server after the page has loaded
Send data to a server in the background
[http://www.w3schools.com/xml/xml_http.asp]
===
Create an XMLHttpRequest Object

All modern browsers (IE7+, Firefox, Chrome, Safari, and Opera) have a built-in XMLHttpRequest object.

Syntax for creating an XMLHttpRequest object:

xmlhttp=new XMLHttpRequest();
Old versions of Internet Explorer (IE5 and IE6) uses an ActiveX Object:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
In the next chapter, we will use the XMLHttpRequest object to retrieve XML information from a server.
[http://www.w3schools.com/xml/xml_http.asp]
===
With the XMLHttpRequest object you can update parts of a web page, without reloading the whole page.
[http://www.w3schools.com/dom/dom_httprequest.asp]

jsoXhr'FormData
jsoXhr'FormData

name::
* McsEngl.jsoXhr'FormData@cptIt,
* McsEngl.ljsFormData@cptIt,
* McsEngl.ljsoFormData@cptIt,

_GENERIC:
> Object.getPrototypeOf(FormData.prototype)
Object {}

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects,

_MEMBER:
> Object.getOwnPropertyNames(new FormData()).sort()
[]
> Object.getOwnPropertyNames(new FormData().__proto__).sort()
["append", "constructor"]
> Object.getOwnPropertyNames(new FormData().__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

_CODE.LJS:
var formData = new FormData();

formData.append("username", "Groucho");
formData.append("accountnum", 123456); // number 123456 is immediately converted to a string "123456"

// HTML file input, chosen by user
formData.append("userfile", fileInputElement.files[0]);

// JavaScript file-like object
var content = '<a id="a"><b id="b">hey!</b></a>'; // the body of the new file...
var blob = new Blob([content], { type: "text/xml"});

formData.append("webmasterfile", blob);

var request = new XMLHttpRequest();
request.open("POST", "http://foo.com/submitform.php");
request.send(formData);
[https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects]
===
var xhr = new XMLHttpRequest();
var dataToSend = new FormData(); // create a new FormData object

xhr.open('POST','/processing_script');

dataToSend.append('name','Joseph Q. Public'); // add data to the object
dataToSend.append('age','52');
dataToSend.append('hobby','knitting');

xhr.send(dataToSend); // send the object
[http://dev.opera.com/articles/view/xhr2/#formdata]

jsFormData.prototype

name::
* McsEngl.jsFormData.prototype@cptIt,

jsFormData.prototype.CHROME:
> Object.getOwnPropertyNames(FormData.prototype).sort()
["append", "constructor"]

jsoXhr'member

name::
* McsEngl.jsoXhr'member@cptIt,
* McsEngl.ljsoXhr'member@cptIt,
* McsEngl.ljsoXhr.member@cptIt,
* McsEngl.ljsoXMLHttpRequest.member@cptIt,

jsoXMLHttpRequest.MEMBER:
* jsoXhr.__defineGetter__, Object.prototype, Chrome, ObjectPrototype, Firefox,
* jsoXhr.__defineSetter__, Object.prototype, Chrome, ObjectPrototype, Firefox,
* jsoXhr.__lookupGetter__, Object.prototype, Chrome, ObjectPrototype, Firefox,
* jsoXhr.__lookupSetter__, Object.prototype, Chrome, ObjectPrototype, Firefox,
* jsoXhr.__proto__, Object.prototype, Chrome,
* abort, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.addEventListener, EventTarget.prototype, Chrome, EventTargetPrototype, Firefox,
* jsoXhr.constructor, EventTarget.prototype, Chrome, EventTargetPrototype, Firefox,
* jsoXhr.constructor, Object.prototype, Chrome, ObjectPrototype, Firefox,
* jsoXhr.constructor, XMLHttpRequestEventTarget.prototype, Chrome,
* jsoXhr.constructor, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.dispatchEvent, EventTarget.prototype, Chrome, EventTargetPrototype, Firefox,
* jsoXhr.DONE, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.getAllResponseHeaders, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.getResponseHeader, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.hasOwnProperty, Object.prototype, Chrome, ObjectPrototype, Firefox,
* jsoXhr.HEADERS_RECEIVED, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.isPrototypeOf, Object.prototype, Chrome, ObjectPrototype, Firefox,
* jsoXhr.LOADING, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.mozAnon, XMLHttpRequestPrototype, Firefox,
* jsoXhr.mozBackgroundRequest, XMLHttpRequestPrototype, Firefox,
* jsoXhr.mozSystem, XMLHttpRequestPrototype, Firefox,
* jsoXhr.onabort, Chrome, XMLHttpRequestEventTargetPrototype, Firefox,
* onerror, Chrome, XMLHttpRequestEventTargetPrototype, Firefox,
* onload, Chrome, XMLHttpRequestEventTargetPrototype, Firefox,
* jsoXhr.onloadend, Chrome, XMLHttpRequestEventTargetPrototype, Firefox,
* jsoXhr.onloadstart, Chrome, XMLHttpRequestEventTargetPrototype, Firefox,
* jsoXhr.onprogress, Chrome, XMLHttpRequestEventTargetPrototype, Firefox,
* jsoXhr.onreadystatechange, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.ontimeout, Chrome, XMLHttpRequestEventTargetPrototype, Firefox,
* jsoXhr.open, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.OPENED, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.overrideMimeType, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.propertyIsEnumerable, Object.prototype, Chrome, ObjectPrototype, Firefox,
* jsoXhr.readyState, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.removeEventListener, EventTarget.prototype, Chrome, EventTargetPrototype, Firefox,
* jsoXhr.response, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.responseText, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.responseType, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.responseXML, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.send, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.sendAsBinary, XMLHttpRequestPrototype, Firefox,
* jsoXhr.setRequestHeader, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.status, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.statusText, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.timeout, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.toLocaleString, Object.prototype, Chrome, ObjectPrototype, Firefox,
* jsoXhr.toSource, ObjectPrototype, Firefox,.prototype, Chrome,
* jsoXhr.toString, ObjectPrototype, Firefox,
* jsoXhr.UNSENT, XMLHttpRequest.prototype, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.unwatch, ObjectPrototype, Firefox,
* jsoXhr.upload, Chrome, XMLHttpRequestPrototype, Firefox,
* jsoXhr.valueOf, Object.prototype, Chrome, ObjectPrototype, Firefox,
* jsoXhr.watch, ObjectPrototype, Firefox,
* withCredentials, Chrome, XMLHttpRequestPrototype, Firefox,

===
> FIREFOX:
Object.getOwnPropertyNames((new XMLHttpRequest())).sort()
[]
> XMLHttpRequestPrototype,
Object.getOwnPropertyNames((new XMLHttpRequest()).__proto__).sort()
["DONE", "HEADERS_RECEIVED", "LOADING", "OPENED", "UNSENT", "abort", "constructor", "getAllResponseHeaders", "getResponseHeader", "mozAnon", "mozBackgroundRequest", "mozSystem", "onreadystatechange", "open", "overrideMimeType", "readyState", "response", "responseText", "responseType", "responseXML", "send", "sendAsBinary", "setRequestHeader", "status", "statusText", "timeout", "upload", "withCredentials"]
> XMLHttpRequestEventTargetPrototype,
Object.getOwnPropertyNames((new XMLHttpRequest()).__proto__.__proto__).sort()
["onabort", "onerror", "onload", "onloadend", "onloadstart", "onprogress", "ontimeout"]
> EventTargetPrototype,
Object.getOwnPropertyNames((new XMLHttpRequest()).__proto__.__proto__.__proto__).sort()
["addEventListener", "constructor", "dispatchEvent", "removeEventListener"]
> ObjectPrototype:
Object.getOwnPropertyNames((new XMLHttpRequest()).__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]

===
> CHROME:
Object.getOwnPropertyNames(new XMLHttpRequest()).sort()
["onabort", "onerror", "onload", "onloadend", "onloadstart", "onprogress", "onreadystatechange", "ontimeout", "readyState", "response", "responseText", "responseType", "responseXML", "status", "statusText", "timeout", "upload", "withCredentials"]
> XMLHttpRequest.prototype:
Object.getOwnPropertyNames((new XMLHttpRequest()).__proto__).sort()
["DONE", "HEADERS_RECEIVED", "LOADING", "OPENED", "UNSENT", "abort", "constructor", "getAllResponseHeaders", "getResponseHeader", "open", "overrideMimeType", "send", "setRequestHeader"]
> XMLHttpRequestEventTarget.prototype:
Object.getOwnPropertyNames((new XMLHttpRequest()).__proto__.__proto__).sort()
["constructor"]
> EventTarget.prototype:
Object.getOwnPropertyNames((new XMLHttpRequest()).__proto__.__proto__.__proto__).sort()
["addEventListener", "constructor", "dispatchEvent", "removeEventListener"]
> Object.prototype:
Object.getOwnPropertyNames((new XMLHttpRequest()).__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

===
* __defineGetter__, Object.prototype, Chrome,
* __defineSetter__, Object.prototype, Chrome,
* __lookupGetter__, Object.prototype, Chrome,
* __lookupSetter__, Object.prototype, Chrome,
* __proto__, Object.prototype, Chrome,
* abort, XMLHttpRequest.prototype, Chrome,
* addEventListener, EventTarget.prototypeChrome,
* constructor, EventTarget.prototypeChrome,
* constructor, Object.prototype, Chrome,
* constructor, XMLHttpRequest.prototype, Chrome,
* constructor, XMLHttpRequestEventTarget.prototype, Chrome,
* dispatchEvent, EventTarget.prototypeChrome,
* DONE, XMLHttpRequest.prototype, Chrome,
* getAllResponseHeaders, XMLHttpRequest.prototype, Chrome,
* getResponseHeader, XMLHttpRequest.prototype, Chrome,
* hasOwnProperty, Object.prototype, Chrome,
* HEADERS_RECEIVED, XMLHttpRequest.prototype, Chrome,
* isPrototypeOf, Object.prototype, Chrome,
* LOADING, XMLHttpRequest.prototype, Chrome,
* onabort, Chrome,
* onerror, Chrome,
* onload, Chrome,
* onloadend, Chrome,
* onloadstart, Chrome,
* onprogress, Chrome,
* onreadystatechange, Chrome,
* ontimeout, Chrome,
* open, XMLHttpRequest.prototype, Chrome,
* OPENED, XMLHttpRequest.prototype, Chrome,
* overrideMimeType, XMLHttpRequest.prototype, Chrome,
* propertyIsEnumerable, Object.prototype, Chrome,
* readyState, Chrome,
* removeEventListener, EventTarget.prototypeChrome,
* response, Chrome,
* responseText, Chrome,
* responseType, Chrome,
* responseXML, Chrome,
* send, XMLHttpRequest.prototype, Chrome,
* setRequestHeader, XMLHttpRequest.prototype, Chrome,
* status, Chrome,
* statusText, Chrome,
* timeout, Chrome,
* toLocaleString, Object.prototype, Chrome,
* toString, Object.prototype, Chrome,
* UNSENT, XMLHttpRequest.prototype, Chrome,
* upload, Chrome,
* valueOf, Object.prototype, Chrome,
* withCredentials, Chrome,

jsoXhr.abort():
abort() – use to stop a request that’s already in progress.

jsoXhr.onerror:
onerror – use instead of onreadystatechange to detect errors.
===
oXhr.onerror = function(){};

jsoXhr'member.onload()

name::
* McsEngl.jsoXhr'member.onload()@cptIt,
* McsEngl.ljsoXhr.onload@cptIt,

_CODE.LJS:
//onload – use instead of onreadystatechange to detect successes.
var xhr = new XMLHttpRequest();
xhr.open("get", "http://www.nczonline.net/some_resource/", true);
xhr.onload = function(){ //instead of onreadystatechange
//do something
};
xhr.send(null);
[http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/]

jsoXhr'member.onreadystatechange

name::
* McsEngl.jsoXhr'member.onreadystatechange@cptIt,
* McsEngl.ljsoXhr.onreadystatechange@cptIt,

_DESCRIPTION:
When a request to a server is sent, we want to perform some actions based on the response.
The onreadystatechange event is triggered every time the readyState changes.
The readyState property holds the status of the XMLHttpRequest.
[http://www.w3schools.com/dom/dom_httprequest.asp]
===
onreadystatechange  property that takes a function as value that is invoked when the readystatechange event is dispatched.
[http://www.xul.fr/en-xml-ajax.html]

_CODE.LJS:
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
[http://www.w3schools.com/dom/dom_httprequest.asp]

jsoXhr'member.ontimeout()

name::
* McsEngl.jsoXhr'member.ontimeout()@cptIt,
* McsEngl.ljsoXhr.ontimeout@cptIt,

xhr.ontimeout = onTimeOutHandler;

jsoXhr'member.open(sGETPOST; sUrl; bAsyn)

name::
* McsEngl.jsoXhr'member.open(sGETPOST; sUrl; bAsyn)@cptIt,
* McsEngl.ljsoXhr.open@cptIt,

_CODE.LJS:
xhrequest.open('GET', 'http://' + location.hostname + '/hitpmenu.html', true);

_DESCRIPTION:
To send a request to a server, we use the open() and send() methods of the XMLHttpRequest object:

xmlhttp.open("GET","xmlhttp_info.txt",true);
xmlhttp.send();
[http://www.w3schools.com/dom/dom_httprequest.asp]

param: GET/POST

name::
* McsEngl.param: GET/POST@cptIt,

GET or POST?

GET is simpler and faster than POST, and can be used in most cases.

However, always use POST requests when:
- A cached file is not an option (update a file or database on the server)
- Sending a large amount of data to the server (POST has no size limitations)
- Sending user input (which can contain unknown characters), POST is more robust and secure than GET
[http://www.w3schools.com/dom/dom_httprequest.asp]

param: URL

name::
* McsEngl.param: URL@cptIt,

The url - A File On a Server

The url parameter of the open() method, is an address to a file on a server:

xmlhttp.open("GET","xmlhttp_info.txt",true);
The file can be any kind of file, like .txt and .xml, or server scripting files like .asp and .php (which can perform actions on the server before sending the response back).
[http://www.w3schools.com/dom/dom_httprequest.asp]

param: Asynchronous - True or False?

name::
* McsEngl.param: Asynchronous - True or False?@cptIt,

To send the request asynchronously, the async parameter of the open() method has to be set to true:

xmlhttp.open("GET","xmlhttp_info.txt",true);
Sending asynchronously requests is a huge improvement for web developers. Many of the tasks performed on the server are very time consuming.

By sending asynchronously, the JavaScript does not have to wait for the server response, but can instead:

execute other scripts while waiting for server response
deal with the response when the response ready
Async=true

When using async=true, specify a function to execute when the response is ready in the onreadystatechange event:

Example

xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","xmlhttp_info.txt",true);
xmlhttp.send();

Try it yourself »

Async=false

To use async=false, change the third parameter in the open() method to false:

xmlhttp.open("GET","xmlhttp_info.txt",false);
Using async=false is not recommended, but for a few small requests this can be ok.

Remember that the JavaScript will NOT continue to execute, until the server response is ready. If the server is busy or slow, the application will hang or stop.

Note: When you use async=false, do NOT write an onreadystatechange function - just put the code after the send() statement:

Example

xmlhttp.open("GET","xmlhttp_info.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
[http://www.w3schools.com/dom/dom_httprequest.asp]

xhr'readState variable##

readyState  the code successively changes value from 0 to 4 that means for "ready".
[http://www.xul.fr/en-xml-ajax.html]

jsoXhr'member.responseText

name::
* McsEngl.jsoXhr'member.responseText@cptIt,
* McsEngl.ljsoXhr.responseText@cptIt,

_DESCRIPTION:
The responseText Property

If the response from the server is not XML, use the responseText property.

The responseText property returns the response as a string, and you can use it accordingly:

Example
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
[http://www.w3schools.com/dom/dom_httprequest.asp]

jsoXhr'member.responseXML

name::
* McsEngl.jsoXhr'member.responseXML@cptIt,
* McsEngl.ljsoXhr.responseXML@cptIt,

The responseXML Property

If the response from the server is XML, and you want to parse it as an XML object, use the responseXML property:

Example

Request the file cd_catalog.xml and parse the response:

xmlDoc=xmlhttp.responseXML;
var txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
txt=txt + x[i].childNodes[0].nodeValue + "<br />";
}
document.getElementById("myDiv").innerHTML=txt;
[http://www.w3schools.com/dom/dom_httprequest.asp]

jsoXhr'member.send()

name::
* McsEngl.jsoXhr'member.send()@cptIt,
* McsEngl.ljsoXhr.send@cptIt,

_ADDRESS.WPG:
* http://www.w3.org/TR/XMLHttpRequest/#the-send()-method,

_DESCRIPTION:
Initiates the request. The optional argument provides the request entity body. The argument is ignored if request method is GET or HEAD.
[http://www.w3.org/TR/XMLHttpRequest/#the-send()-method]

_CODE.LJS:
oHhr.send();

jsoXhr'member.setRequestHeader

name::
* McsEngl.jsoXhr'member.setRequestHeader@cptIt,
* McsEngl.ljssetRequestHeader@cptIt,
* McsEngl.ljsoXhr.setRequestHeader@cptIt,

_CODE.LJS:
oXhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
===
oXhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
===
oXhr.setRequestHeader('User-Agent', navigator.userAgent);

jsoXhr'member.status

name::
* McsEngl.jsoXhr'member.status@cptIt,
* McsEngl.ljsoXhr.status@cptIt,

status  200 is OK
404 if the page is not found.
[http://www.xul.fr/en-xml-ajax.html]

jsoXhr'member.timeout

name::
* McsEngl.jsoXhr'member.timeout@cptIt,
* McsEngl.ljsoXhr.timeout@cptIt,

xhr.timeout = 3000;

jsoXhr'member.withCredentials

name::
* McsEngl.jsoXhr'member.withCredentials@cptIt,
* McsEngl.ljsoXhr.withCredentials@cptIt,

_CODE.LJS:
xhr.withCredentials = true;

_DESCRIPTION:
By default, cross-origin requests do not provide credentials (cookies, HTTP authentication, and client-side SSL certificates). You can specify that a request should send credentials by setting the withCredentials property to true. If the server allow credentialed requests, then it responds with the following HTTP header:

Access-Control-Allow-Credentials: true
If a credentialed request is sent and this header is not sent as part of the response, then the browser doesn’t pass the response to JavaScript (responseText is an empty string, status is 0, and onerror() is invoked). Note that the server can also send this HTTP header as part of the preflight response to indicate that the origin is allowed to send credentialed requests.

Internet Explorer 8 doesn’t support the withCredentials property; Firefox 3.5, Safari 4, and Chrome all support it.
[http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/]

jsoXhr'resource

name::
* McsEngl.jsoXhr'resource@cptIt,

_ADDRESS.WPG:
* http://www.html5rocks.com/en/tutorials/file/xhr2//
* spec: https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html,
* http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or-xdomainrequest.html,
* http://ejohn.org/blog/cross-site-xmlhttprequest//
* https://developer.apple.com/library/mac/#documentation/AppleApplications/Conceptual/SafariJSProgTopics/Articles/XHR.html#//apple_ref/doc/uid/TP40006227-SW1,

jsoXhr'same_origin_policy

name::
* McsEngl.jsoXhr'same_origin_policy@cptIt,

jsoXhr'XMLHttpRequest-function

name::
* McsEngl.jsoXhr'XMLHttpRequest_function@cptIt,
* McsEngl.ljsoXhr'Construction@cptIt,

_DESCRIPTION:
Create an XMLHttpRequest Object

All modern browsers (IE7+, Firefox, Chrome, Safari, and Opera) have a built-in XMLHttpRequest object.

Syntax for creating an XMLHttpRequest object:

xmlhttp=new XMLHttpRequest();
Old versions of Internet Explorer (IE5 and IE6) uses an ActiveX Object:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
To handle all modern browsers, including IE5 and IE6, check if the browser supports the XMLHttpRequest object. If it does, create an XMLHttpRequest object, if not, create an ActiveXObject:

Example

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
[http://www.w3schools.com/dom/dom_httprequest.asp]

_MEMBER:
> FIREFOX: Object.getOwnPropertyNames(XMLHttpRequest).sort()
["DONE", "HEADERS_RECEIVED", "LOADING", "OPENED", "UNSENT", "length", "prototype", "toString"]
Object.getOwnPropertyNames(XMLHttpRequest.__proto__).sort()
["length", "prototype", "toString"]
Object.getOwnPropertyNames(XMLHttpRequest.__proto__.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "isGenerator", "length", "name", "toSource", "toString"]
Object.getOwnPropertyNames(XMLHttpRequest.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]

> CHROME: Object.getOwnPropertyNames(XMLHttpRequest).sort()
["DONE", "HEADERS_RECEIVED", "LOADING", "OPENED", "UNSENT", "arguments", "caller", "length", "name", "prototype", "toString"]
Object.getOwnPropertyNames(XMLHttpRequest.__proto__).sort()
["arguments", "caller", "length", "name", "prototype", "toString"]
Object.getOwnPropertyNames(XMLHttpRequest.__proto__.__proto__).sort()
["arguments", "caller", "length", "name", "prototype", "toString"]
Object.getOwnPropertyNames(XMLHttpRequest.__proto__.__proto__.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
Object.getOwnPropertyNames(XMLHttpRequest.__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

ajax'XMLHttpRequest.prototype > XMLHttpRequestEventTarget.prototype > EventTarget.prototype > Object.prototype

name::
* McsEngl.ajax'XMLHttpRequest.prototype > XMLHttpRequestEventTarget.prototype > EventTarget.prototype > Object.prototype@cptIt,
* McsEngl.ljsXMLHttpRequest.prototype@cptIt,

jsXMLHttpRequest.prototype.CHROME:
> Object.getOwnPropertyNames(XMLHttpRequest.prototype).sort()
["DONE", "HEADERS_RECEIVED", "LOADING", "OPENED", "UNSENT", "abort", "constructor", "getAllResponseHeaders", "getResponseHeader", "onreadystatechange", "open", "overrideMimeType", "readyState", "response", "responseText", "responseType", "responseURL", "responseXML", "send", "setRequestHeader", "status", "statusText", "timeout", "upload", "withCredentials"]
> Object.getOwnPropertyNames(XMLHttpRequest.prototype.__proto__).sort()
["constructor", "onabort", "onerror", "onload", "onloadend", "onloadstart", "onprogress", "ontimeout"]
> Object.getOwnPropertyNames(XMLHttpRequest.prototype.__proto__.__proto__).sort()
["addEventListener", "constructor", "dispatchEvent", "removeEventListener"]
> Object.getOwnPropertyNames(XMLHttpRequest.prototype.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

jsoXhr.CORS

name::
* McsEngl.jsoXhr.CORS@cptIt,

jsoXhr.EXAMPLE

name::
* McsEngl.jsoXhr.EXAMPLE@cptIt,
* McsEngl.ljs.ex.XMLHttpRequest@cptIt,

_READING_URL:
//localhost
var oXHR = new XMLHttpRequest();
oXHR.open('GET', 'http://localhost/WebsiteSgm/index.html#idHeader', false);
oXHR.send(null);
if (oXHR.status === 200) {
console.log(oXHR.responseText);
}
===
//read url
oXHR.open('GET', sUrl, false);
oXHR.send(null);
if (oXHR.status === 200) {
console.log(oXHR.responseText);
}
===
function httpGet(theUrl)
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
return xmlhttp.responseText;
}
}
xmlhttp.open("GET", theUrl, false );
xmlhttp.send();
}
[http://stackoverflow.com/questions/10642289/return-html-content-as-a-string-given-url-javascript-function]

_READING_LOCAL_FILE:
<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();
}
</script>
</head>
<body>

<div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button type="button" onclick="loadXMLDoc()">Change Content</button>

</body>
</html>
[http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first]

ljbalgo.B

name::
* McsEngl.ljbalgo.B@cptIt,

ljbalgo.BOOLEAN

name::
* McsEngl.ljbalgo.BOOLEAN@cptIt,
* McsEngl.ljs'boolean-processing@cptIt,

ljbalgo.C

name::
* McsEngl.ljbalgo.C@cptIt,

ljbalgo.CHARACTER-PROCESSING

name::
* McsEngl.ljbalgo.CHARACTER-PROCESSING@cptIt,
* McsEngl.ljs'char-processing@cptIt,
* McsEngl.ljs'character-processing@cptIt,
* McsEngl.ljs'symbol-processing@cptIt,
* McsEngl.ljsalgo.symbol@cptIt,

_CODE.LJS:
//char to number
> '@'.charCodeAt(0)
64
> '&'.charCodeAt(0)
38

===
//number to char
> String.fromCharCode(59)
";"

ljbalgo.CONVERTER

name::
* McsEngl.ljbalgo.CONVERTER@cptIt,
* McsEngl.ljsconverter@cptIt,
* McsEngl.ljs'converter@cptIt,
* McsEngl.ljs'converting@cptIt,

jsconverter.DATATYPE

name::
* McsEngl.jsconverter.DATATYPE@cptIt,
* McsEngl.ljsalgo.Converting-datatype@cptIt,
* McsEngl.ljs'datatyp-converting-processing@cptIt,

jsconverter.EURO-TO-DRAHMES

name::
* McsEngl.jsconverter.EURO-TO-DRAHMES@cptIt,

_ADDRESS.WPG:
* http://synagonism.net/worldview/edu/pgm.euro2dhrahmes.html,

jsconverter.number.BINARY-TO-DECIMAL

name::
* McsEngl.jsconverter.number.BINARY-TO-DECIMAL@cptIt,
* McsEngl.ljs'binary-to-decimal@cptIt,

_CODE.LJS:
> parseInt("01001011", 2);
75

jsconverter.number.DECIMAL-TO-BINARY

name::
* McsEngl.jsconverter.number.DECIMAL-TO-BINARY@cptIt,
* McsEngl.ljs'decimal-to-binary@cptIt,

_CODE.LJS:
> (26).toString(2)
"11010"

jsconverter.number.DECIMAL-TO-HEXADECIMAL

name::
* McsEngl.jsconverter.number.DECIMAL-TO-HEXADECIMAL@cptIt,
* McsEngl.ljs'decimal-to-hexadecimal@cptIt,

_CODE.LJS:
> (169).toString(16)
"a9"

jsconverter.number.DECIMAL-TO-OCTAL

name::
* McsEngl.jsconverter.number.DECIMAL-TO-OCTAL@cptIt,
* McsEngl.ljs'decimal-to-octal@cptIt,

_CODE.LJS:
> (169).toString(8)
"251"

jsconverter.number.HEXADECIMAL-TO-DECIMAL

name::
* McsEngl.jsconverter.number.HEXADECIMAL-TO-DECIMAL@cptIt,
* McsEngl.ljs'hexadecimal-to-decimal@cptIt,

_CODE.LJS:
> (169).toString(16)
"a9"

ljbalgo.COMPARISING

name::
* McsEngl.ljbalgo.COMPARISING@cptIt,
* McsEngl.ljs'comparison-processing@cptIt,

ljbalgo.COPY-TO-CLIPBOARD

name::
* McsEngl.ljbalgo.COPY-TO-CLIPBOARD@cptIt,

_ADDRESS.WPG:
* https://clipboardjs.com//

ljbalgo.Count-LI

name::
* McsEngl.ljbalgo.Count-LI@cptIt,
* McsEngl.ljs'count-list-item@cptIt,

function countAll(){
  var all= count('ola','li') +count('olb','li');
  alert("All the terms are: "+all);
}
function count(parent, child){
  var parent = document.getElementById(parent);
var childCount = parent.getElementsByTagName(child).length;
return childCount;
}

<input type="button" value="Count-All-Terms" onclick="countAll()"/>

ljbalgo.D

name::
* McsEngl.ljbalgo.D@cptIt,

ljbalgo.DEFINED

_CREATED: {2014-06-08}

name::
* McsEngl.ljbalgo.DEFINED@cptIt,
* McsEngl.ljsarchonode.defined@cptIt,

ljbalgo.DEFINED.NO

_CREATED: {2014-06-08}

name::
* McsEngl.ljbalgo.DEFINED.NO@cptIt,
* McsEngl.ljsarchonode.definedNo@cptIt,
* McsEngl.ljsarchonode.undefined@cptIt,
* McsEngl.ljsundefined-archonode@cptIt,

ljb'archo.UNDEFINED-OR-NULL

_CREATED: {2014-06-08}

name::
* McsEngl.ljb'archo.UNDEFINED-OR-NULL@cptIt,
* McsEngl.ljsarchonode.definedNo-or-null@cptIt,
* McsEngl.ljsnull-or-undefined@cptIt,
* McsEngl.ljsudefined-or-null@cptIt,

_CODE.LJS:
(str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, '');

ljbalgo.E

name::
* McsEngl.ljbalgo.E@cptIt,

ljbalgo.EXECUTE-PROGRAM

name::
* McsEngl.ljbalgo.EXECUTE-PROGRAM@cptIt,
* McsEngl.jsalgo.launch-application@cptIt,

<SCRIPT Language="JScript">
function runcmd() {
File="cmd.exe";
WSH=new ActiveXObject("WScript.Shell");
WSH.run(File);
}
</SCRIPT>

<A href="#" onClick="runcmd(); return false;">Run CMD.exe</A>

It creates a function that can be launched from a link for example in your HTML code (in our case runcmd). This will run the File variable that must be set - i used cmd.exe in my example. If it's not a system command, enter it using full path (\\FOLDER\\SUBFOLDER\\application.exe for example).

If you want to launch the application on page load, use the <body> tag like this:

<body onLoad="javascript:runcmd();">

Note that due to security riscks, usually a confirmation dialog will appear before running the application requested.

The script works well on Internet Explorer. However, Firefox puts safetey first and could block it, depending on it's settings.

ljbalgo.F

name::
* McsEngl.ljbalgo.F@cptIt,

ljbalgo.file-processing#ql:ljbalgo.file-processing@cptIt#

name::
* McsEngl.ljbalgo.file-processing@cptIt,

ljbalgo.Find-Text

name::
* McsEngl.ljbalgo.Find-Text@cptIt,

_CODE.LJS:
<script>
//IE only!!!!
function find_text(txt) {
var rng = document.body.createTextRange()
if (rng.findText(txt)) {
rng.select();
}
}
</script>

</head>
<body>

<form>
<input type ='text'
name ='search_term'>
<input type ='button'
value ='Search'
onClick='javascript:find_text(search_term.value);'>
</form>

some text here...
[http://www.adp-gmbh.ch/web/js/find_text.html]

ljbalgo.document

name::
* McsEngl.ljbalgo.document@cptIt,

var regex = /sandwich/;

// Test the text of the body element against our regular expression.
if (regex.test(document.body.innerText)) {

ljbalgo.Form

name::
* McsEngl.ljbalgo.Form@cptIt,

* http://www.javascript-coder.com/category/html-form

ljbalgo.Formatter.MONEY

name::
* McsEngl.ljbalgo.Formatter.MONEY@cptIt,

_ADDRESS.WPG:
* https://osrec.github.io/currencyFormatter.js//

ljbalgo.Frame-Breaking

name::
* McsEngl.ljbalgo.Frame-Breaking@cptIt,
* McsEngl.ljs'Frame-breaking@cptIt,

Automatically Break Out of HTML Frames

Do you have a problem with other websites framing pages at your site and displaying ads at their site that benefit from your content? If so, you are not alone, but the solution is simple. Just add the three lines of code below somewhere between the <head> and </head> tags of web pages at your site that you do not want other sites to be able to frame. It will instantly break website visitors out frames at other websites and will rewrite your web page URL in their web browser address bars so their visitors will be effectively moved (as if by magic) to your site.

<script type="text/javascript">
if (top != self) top.location.href = self.location.href;
</script>
With this code, other webmasters who frame your pages to steal your content will be passing their website visitors to you.
[http://www.4techies.com/webmaster-tips/break-out-of-frames.php]

ljbalgo.FTP-LOGIN

name::
* McsEngl.ljbalgo.FTP-LOGIN@cptIt,
* McsEngl.ljs'ftp-login@cptIt,

_ADDRESS.WPG:
* http://www.codeproject.com/Articles/5861/A-Simple-FTP-Solution,

_CODE.LJS:

<!-- TWO STEPS TO INSTALL FTP SERVER LOGIN:

1. Copy the coding into the HEAD of your HTML document
2. Add the last code into the BODY of your HTML document -->

<!-- STEP ONE: Paste this code into the HEAD of your HTML document -->

<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!-- Original: Reinout Verkerk -->

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://www.javascriptsource.com -->

<!-- Begin
function Login(form) {
var username = form.username.value;
var password = form.password.value;
var server = form.server.value;
if (username && password && server) {
var ftpsite = "ftp://" + username + ":" + password + "@" + server;
window.location = ftpsite;
}
else {
alert("Please enter your username, password, and FTP server's address.");
}
}
// End -->
</script>
</HEAD>

<!-- STEP TWO: Copy this code into the BODY of your HTML document -->

<BODY>

<center>
<form name=login>
<table width=250 border=1 cellpadding=3>
<tr>
<td colspan=2 align=center><b><h2>Logon to FTP Server!</h2></b></td>
</tr>
<tr>
<td>Username:</td>
<td><input type=text name=username size=20></td>
</tr>
<tr>
<td>Password:</td>
<td><input type=password name=password size=20></td>
</tr>
<tr>
<td>Server:</td>
<td><tt>ftp://</tt><input type=text name=server size=14></td>
</tr>
<tr>
<td colspan=2 align=center>
<input type=button value="Login!" onClick="Login(this.form)"></td>
</tr>
</table>
</form>
</center>

<p><center>
<font face="arial, helvetica" size="-2">Free JavaScripts provided<br/>
by <a href="http://javascriptsource.com">The JavaScript Source</a></font>
</center><p>

<!-- Script Size: 1.53 KB -->
[http://www.javascriptsource.com/navigation/ftp-server-login.html]

ljbalgo.function#ql:jsf@cptIt#

name::
* McsEngl.ljbalgo.function@cptIt,

ljbalgo.G

name::
* McsEngl.ljbalgo.G@cptIt,

ljbalgo.geolocation

name::
* McsEngl.ljbalgo.geolocation@cptIt,

* http://diveintohtml5.org/geolocation.html

ljbalgo.GET-ELEMENTS-BY-TAGNAME

name::
* McsEngl.ljbalgo.GET-ELEMENTS-BY-TAGNAME@cptIt,
* McsEngl.ljs'Elements.get-by-tagname@cptIt,

function getElementsByTagNames(list,obj) {
 if (!obj) var obj = document;
 var tagNames = list.split(',');
 var resultArray = new Array();
 for (var i=0;i<tagNames.length;i++) {
   var tags = obj.getElementsByTagName(tagNames[i]);
   for (var j=0;j<tags.length;j++) {
     resultArray.push(tags[j]);
   }
 }
 var testNode = resultArray[0];
 if (!testNode) return [];
 if (testNode.sourceIndex) {
   resultArray.sort(function (a,b) {
       return a.sourceIndex - b.sourceIndex;
   });
 }
 else if (testNode.compareDocumentPosition) {
   resultArray.sort(function (a,b) {
       return 3 - (a.compareDocumentPosition(b) & 6);
   });
 }
 return resultArray;
}
[http://www.quirksmode.org/dom/getElementsByTagNames.html]

ljbalgo.H

name::
* McsEngl.ljbalgo.H@cptIt,

ljbalgo.Highlighting

name::
* McsEngl.ljbalgo.Highlighting@cptIt,
* McsEngl.ljs'Highlighting@cptIt,

_ADDRESS.WPG:
* https://github.com/asvd/microlight,

JavaScript text higlighting jQuery plugin
* http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html

SET-STYLE-IN-ELEMENT:
function hoverIds(){
var listone = document.getElementById("listone").getElementsByTagName("li"));
for(var i = 0; i <listone.length; i++){
if(listone[i] == hoverObj){
listtwo[i].style.someCSSProp = "new css prop";
}
}
}

ljbalgo.HTML#ql:ljbalgo.html_p*#

name::
* McsEngl.ljbalgo.HTML@cptIt,

ljbalgo.I

name::
* McsEngl.ljbalgo.I@cptIt,

ljbalgo.iFrame

name::
* McsEngl.ljbalgo.iFrame@cptIt,

Scripting Iframes - Tutorial and Examples
* http://www.dyn-web.com/tutorials/iframes//

ljbalgo.Inject-CSS-Into-Page

name::
* McsEngl.ljbalgo.Inject-CSS-Into-Page@cptIt,
* McsEngl.ljsalgo.load-CSS@cptIt,
* McsEngl.ljsalgo.insert-CSS@cptIt,
* McsEngl.ljsalgo.dynamically-insert-CSS@cptIt,

<link href="css-html5-law-2010-11-18.css" rel="stylesheet" type="text/css"/>

Dynamic Cascading Style Sheets
The usefulness of being able to dynamically load a style sheet is fairly limited, but there is one very good reason to keep this tool handy: it lets you load a specific stylesheet for a specific browser. Instead of having one massive style sheet for every browser which visits your page, you can break out the stylesheets into browser specific Firefox, IE, Safari, Opera, etc styles which accommodate the eccentricities of each browser and let you serve smaller css files to your visitors to boot.

The code for this is just as simple as the javascript.

var headID = document.getElementsByTagName("head")[0];
var cssNode = document.createElement('link');
cssNode.type = 'text/css';
cssNode.rel = 'stylesheet';
cssNode.href = 'FireFox.css';
cssNode.media = 'screen';
headID.appendChild(cssNode);
We get the <head> tag, then create the link and apply the attributes. When it's all set up we insert the new cssNode into the head section of our webpage where the various styles are instantly applied.

A complete reference for adding, creating, altering and deleting stylesheets and their elements can be found in a newer article titled Totally Pwn CSS with Javascript. If you are looking to do more than dynamically add a stylesheet you should definitely check out this article.
[http://www.hunlock.com/blogs/Howto_Dynamically_Insert_Javascript_And_CSS]

Totally Pwn CSS with Javascript
Filed: Fri, Feb 16 2007 under Programming|| Tags: .css1 javascript css dynamic
The last great frontier for a Javascript programmer is usually the direct manipulation of a stylesheet. While incredibly powerful tools, the documentation is sparse and the browsers rife with incompatibilities. You may be sending floating divisions flying across the screen playing videos of spanking kitties, but have you ever created a new stylesheet class on the fly? No? Read on!
function getCSSRule(ruleName, deleteFlag) { // Return requested style obejct
ruleName=ruleName.toLowerCase(); // Convert test string to lower case.
if (document.styleSheets) { // If browser can play with stylesheets
for (var i=0; i<document.styleSheets.length; i++) { // For each stylesheet
var styleSheet=document.styleSheets[i]; // Get the current Stylesheet
var ii=0; // Initialize subCounter.
var cssRule=false; // Initialize cssRule.
do { // For each rule in stylesheet
if (styleSheet.cssRules) { // Browser uses cssRules?
cssRule = styleSheet.cssRules[ii]; // Yes --Mozilla Style
} else { // Browser usses rules?
cssRule = styleSheet.rules[ii]; // Yes IE style.
} // End IE check.
if (cssRule) { // If we found a rule...
if (cssRule.selectorText.toLowerCase()==ruleName) { // match ruleName?
if (deleteFlag=='delete') { // Yes. Are we deleteing?
if (styleSheet.cssRules) { // Yes, deleting...
styleSheet.deleteRule(ii); // Delete rule, Moz Style
} else { // Still deleting.
styleSheet.removeRule(ii); // Delete rule IE style.
} // End IE check.
return true; // return true, class deleted.
} else { // found and not deleting.
return cssRule; // return the style object.
} // End delete Check
} // End found rule name
} // end found cssRule
ii++; // Increment sub-counter
} while (cssRule) // end While loop
} // end For loop
} // end styleSheet ability check
return false; // we found NOTHING!
} // end getCSSRule

function killCSSRule(ruleName) { // Delete a CSS rule
return getCSSRule(ruleName,'delete'); // just call getCSSRule w/delete flag.
} // end killCSSRule

function addCSSRule(ruleName) { // Create a new css rule
if (document.styleSheets) { // Can browser do styleSheets?
if (!getCSSRule(ruleName)) { // if rule doesn't exist...
if (document.styleSheets[0].addRule) { // Browser is IE?
document.styleSheets[0].addRule(ruleName, null,0); // Yes, add IE style
} else { // Browser is IE?
document.styleSheets[0].insertRule(ruleName+' { }', 0); // Yes, add Moz style.
} // End browser check
} // End already exist check.
} // End browser ability check.
return getCSSRule(ruleName); // return rule we just created.
}
[http://www.hunlock.com/blogs/Totally_Pwn_CSS_with_Javascript]

ljbalgo.Inject-Script-Into-Page

name::
* McsEngl.ljbalgo.Inject-Script-Into-Page@cptIt,
* McsEngl.ljsalgo.load-script@cptIt,
* McsEngl.ljsalgo.insert-script@cptIt,
* McsEngl.ljsalgo.dynamically-insert-script@cptIt,

<script type='text/javascript' src='common.js'></script>

Dynamic Javascript Insertion
Fortunately, dynamic insertion of CSS or Javascript is relatively painless.

var headID = document.getElementsByTagName("head")[0];
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'http://www.somedomain.com/somescript.js';
headID.appendChild(newScript);
It's really that simple. headID gets the <head> element of the page. Next we create a new 'script' element, assign it a text/javascript type, and then the url of the script (which can be anywhere on the net since it's basically a javascript include). Finally we append the new element to our head section where it is automatically loaded.

If you're loading an external javascript and you need to know when the script has loaded you can simply use .onload=yourfunction; to set up the onload handler. Here's an example.

var headID = document.getElementsByTagName("head")[0];
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.onload=scriptLoaded;
newScript.src = 'http://api.flickr.com/services/feeds/photos_public.gne?tags=sunset&format=json';
headID.appendChild(newScript);
Now when this script has been loaded the .onload event will call a function named scriptLoaded().
[http://www.hunlock.com/blogs/Howto_Dynamically_Insert_Javascript_And_CSS]

You can inject a script into the world of the page -
script = document.createElement("script");
script.src = chrome.extension.getURL("script.js");
document.head.appendChild(script);
And then do whatever you want as usual.

var script = document.createElement("script");
script.src = "http://www.jdgregson.com/buildingblox/dragiframe.js";
document.head.appendChild(script);

Hi, I propose you to use some small loader which will chain and do stuff for you. For example like this one:

function loadScripts(array,callback){
var loader = function(src,handler){
var script = document.createElement("script");
script.src = src;
script.onload = script.onreadystatechange = function(){
script.onreadystatechange = script.onload = null;
handler();
}
var head = document.getElementsByTagName("head")[0];
(head || document.body).appendChild( script );
};
(function(){
if(array.length!=0){
loader(array.shift(),arguments.callee);
}else{
callback && callback();
}
})();
}
This script should help you to build the script tags and call your callback when all files are loaded. Invoke is pretty easy:

loadScripts([
"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js",
"http://ajax.googleapis.com/ajax/libs/prototype/1.6.1.0/prototype.js"
],function(){
alert('All things are loaded');
});
Hope this will help
[http://stackoverflow.com/questions/1866717/document-createelementscript-adding-two-scripts-with-one-callback]

ljbalgo.Insert-After()

name::
* McsEngl.ljbalgo.Insert-After()@cptIt,
* McsEngl.ljs'InsertAfter@cptIt,

function insertAfter(newEl, targetEl)
{
var parentEl = targetEl.parentNode;

if(parentEl.lastChild == targetEl)
{
parentEl.appendChild(newEl);
}else
{
parentEl.insertBefore(newEl,targetEl.nextSibling);
}
}
[http://www.cnblogs.com/samlin/archive/2009/03/28/JavaScript-appendChild-insertBefore-insertAfter.html]

ljbalgo.Invoke-JS

name::
* McsEngl.ljbalgo.Invoke-JS@cptIt,
* McsEngl.ljs'Invoke-JS@cptIt,
* McsEngl.ljs'Call-JS@cptIt,
* McsEngl.ljsalgo.call-JS@cptIt,

ljb'invoke.onclick

name::
* McsEngl.ljb'invoke.onclick@cptIt,
* McsEngl.ljsalgo.onclick@cptIt,

_CODE.LJS:
<html>
<head>
</head>

<body>
<header>
header: test
</header>

<h1 id="h0.1" onclick="alert(document.getElementById('h0.1').id)">
Heading 1 (click to see my id)
</h1>
<p>
Paragraph 1
</p>

<footer>
footer: test
</footer>
</body>
</html>

<html>
<head>
<script type="text/javascript">
function displayDate()
{
document.getElementById("demo").innerHTML=Date();
}
</script>
</head>
<body>

<h1>My First Web Page</h1>
<p id="demo">This is a paragraph.</p>

<button type="button" onclick="displayDate()">Display Date</button>

</body>
</html>

ljb'invode.onload.window

name::
* McsEngl.ljb'invode.onload.window@cptIt,

The separated way

We do this by attaching the call to the onload event of the window object.

When we only use one function, we don't use the parenthesis at the end of the function name, as that would send back the result of the function rather than trigger the function.

If we have more than one function, we have to use an anonymous function that calls the others, this time with parenthesis.

Javascript:
window.onload=foo;

or

window.onload=function(){
foo();
bar();
baz();
}
This method of calling functions is of course not only applicable to the window object. As shown before, we can add it to any object in the page. It is supported by any Javascript/DOM-able browser out there.

The drawback of this solution is that we are not totally unobtrusive. If we had more than one .js include, they'd overwrite each other's onload calls.

The really unobtrusive way

There is an option to add event handlers to already existing ones. Sadly enough, different browsers handle this functionality differently, and IE on Macs not at all.

Scott Andrew wrote a nice reusable function[1] that does exactly that, and you invoke it by giving it the object to attach the event to, the event type, and the function name.

function addEvent(obj, evType, fn){
if (obj.addEventListener){
obj.addEventListener(evType, fn, false);
return true;
} else if (obj.attachEvent){
var r = obj.attachEvent("on"+evType, fn);
return r;
} else {
return false;
}
}
addEvent(window, 'load', foo);
addEvent(window, 'load', bar);
The obvious drawback being that it won't attach anything on IE on macintosh systems.
[http://onlinetools.org/articles/unobtrusivejavascript/chapter4.html]

ljb'invoke.onload

name::
* McsEngl.ljb'invoke.onload@cptIt,
* McsEngl.ljsalgo.onload@cptIt,

The oldschool way

Back when we were young and innocent, we added the onload to the body element.

HTML:
<body onload="foo();">
Which is something that we should remember that we have done wrong and not do any more!

If we call the script(s) in the body element we have achieved nothing, as we still mix markup and event calls. What we need to do is to separate the call out into the .js file.
[http://onlinetools.org/articles/unobtrusivejavascript/chapter4.html]

ljbalgo.ITERATING

name::
* McsEngl.ljbalgo.ITERATING@cptIt,
* McsEngl.ljs'iterating@cptIt,

_DESCRIPTION:
Types
JavaScript provides several built-in datatypes. In addition to those, this page documents virtual types like Selectors, enhanced pseudo-types like Events and all and everything you wanted to know about Functions.

You should be able to try out most of the examples below by just copying them to the Firebug console (note: Firebug requires Firefox).

Whenever an example mentions that a type defaults to a boolean value, the result is good to know when using that type in a boolean context:

var x = ""
if ( x )
console.log("x defaulted to true")
else
console.log("x defaulted to false")
In this case, "x defaulted to false" is printed.

To keep the examples short, the invert-operator is used to show a boolean context:

!x // true
On to the actual types.

CONTENTS
1 String
1.1 Quoting
1.2 Built-in Methods
1.3 Length Property
1.4 Boolean Default
2 Number
2.1 Boolean Default
2.2 Math
2.3 Parsing Numbers
2.4 Numbers to Strings
2.5 NaN and Infinity
2.6 Integer
2.7 Float
3 Boolean
4 Object
4.1 Dot Notation
4.2 Array Notation
4.3 Iteration
4.4 Boolean default
4.5 Prototype
5 Options
6 Array
6.1 Iteration
6.2 Boolean Default
6.3 Array<Type> Notation
7 Map
8 Function
8.1 Arguments
8.2 Context, Call and Apply
8.3 Scope
8.4 Closures
8.5 Proxy Pattern
9 Callback
10 Selector
11 Event
12 Element
13 jQuery
14 XMLHttpRequest
[edit]
STRING

"I'm a String in JavaScript!"
'So am I!'
A string in JavaScript is an immutable object that contains none, one or many characters.

The type of a string is "string".

typeof "some string"; // "string"
[edit]
Quoting

A string can be defined using single or double quotes. You can nest single quotes inside of double quotes, and the other way round. To mix double quotes with double quotes, the nested ones have to be escaped with a backslash.

"You make 'me' sad."
'Holy "cranking" moses!'
"<a href=\"home\">Home</a>"
[edit]
Built-in Methods

A string in JavaScript has some built-in methods to manipulate the string, though the result is always a new string - or something else, eg. split returns an array.

"hello".charAt(0) // "h"
"hello".toUpperCase() // "HELLO"
"Hello".toLowerCase() // "hello"
"hello".replace(/e|o/g, "x") // "hxllx"
"1,2,3".split(",") // ["1", "2", "3"]
[edit]
Length Property

All strings have a length property.

"Hello".length // 5
"".length // 0
[edit]
Boolean Default

An empty string defaults to false:

!"" // true
!"hello" // false
!"true" // false
!new Boolean(false) // false
[edit]
NUMBER

12
3.543
Numbers in JavaScript are double-precision 64-bit format IEEE 754 values. They are immutable, just as strings. All operators common in c-based languages are available to work with numbers (+, -, *, /, %, =, +=, -=, *=, /=, ++, --).

The type of a number is "number".

typeof 12 // "number"
typeof 3.543 // "number"
[edit]
Boolean Default

If a number is zero, it defaults to false:

!0 // true
!1 // false
!-1 // false
Due to the implementation of numbers as double-precision values, the following result is not an error:

0.1 + 0.2 // 0.30000000000000004

[edit]
Math

JavaScript provides utilities to work with numbers in the Math object:

Math.PI // 3.141592653589793
Math.cos(Math.PI) // -1
[edit]
Parsing Numbers

parseInt and parseFloat help parsing strings into numbers. Both do some implicit conversion if the base isn't specified:

parseInt("123") = 123 (implicit decimal)
parseInt("010") = 8 (implicit octal)
parseInt("0xCAFE") = 51966 (implicit hexadecimal)
parseInt("010", 10) = 10 (explicit decimal)
parseInt("11", 2) = 3 (explicit binary)
parseFloat("10.10") = 10.1
[edit]
Numbers to Strings

When appending numbers to string, the result is always a string. The operator is the same, so be careful: If you want to add numbers and then append them to a string, put parentheses around them:

"" + 1 + 2; // "12"
"" + (1 + 2); // "3"
"" + 0.0000001; // "1e-7"
parseInt(0.0000001); // 1 (!)
Or you use the String class provided by javascript, which try to parse a value as string:

String(1) + String(2); //"12"
String(1 + 2); //"3"
[edit]
NaN and Infinity

Parsing something that isn't a number results in NaN. isNaN helps to detect those cases:

parseInt("hello", 10) // NaN
isNaN(parseInt("hello", 10)) // true
Division by zero results in Infinity:

1 / 0 // Infinity
Both NaN and Infinity are of type "number":

typeof NaN // "number"
typeof Infinity // "number"
Note that NaN compares in a strange way:

NaN == NaN // false (!)
But:

Infinity == Infinity // true
[edit]
Integer

An integer is a plain Number type, but whenever explicitly mentioned, indicates that a non-floating-point number is expected.

[edit]
Float

A float is a plain Number type, just as Integer, but whenever explicitly mentioned, indicates that a floating-point number is expected.


[edit]
BOOLEAN

A boolean in JavaScript can be either true or false:

if ( true ) console.log("always!")
if ( false ) console.log("never!")
When an option is specified as a boolean, it often looks like this:

$("...").somePlugin({
hideOnStartup: true,
onlyOnce: false
});
[edit]
OBJECT

Everything in JavaScript is an object, though some are more objective (haha). The easiest way to create an object is the object literal:

var x = {};
var y = {
name: "Pete",
age: 15
};
The type of an object is "object":

typeof {} // "object"
[edit]
Dot Notation

You can write and read properties of an object using the dot notation:

y.name // "Pete"
y.age // 15
x.name = y.name + " Pan" // "Pete Pan"
x.age = y.age + 1 // 16
[edit]
Array Notation

Or you write and read properties using the array notation, which allows you to dynamically choose the property:

var operations = {
increase: "++",
decrease: "--"
}
var operation = "increase";
operations[operation] // "++";
operations["multiply"] = "*"; // "*"
[edit]
Iteration

Iterating over objects is easy with the for-in-loop:


var obj = {
name: "Pete",
age: 15
};
for(key in obj) {
alert("key is "+[key]+", value is "+obj[key]);
}
Note that for-in-loop can be spoiled by extending Object.prototype (see Object.prototype is verboten) so take care when using other libraries.

jQuery provides a generic each-function to iterate over properties of objects, as well as elements of arrays:

jQuery.each(obj, function(key, value) {
console.log("key", key, "value", value);
});
The drawback is that the callback is called in the context of each value, therefore you lose the context of your own object if applicable. More on this below at Functions.
[http://docs.jquery.com/Types]

ljbalgo.J

name::
* McsEngl.ljbalgo.J@cptIt,

ljbalgo.K

name::
* McsEngl.ljbalgo.K@cptIt,

ljbalgo.KEY

name::
* McsEngl.ljbalgo.KEY@cptIt,

JavaScript Event KeyCode Test Page:
* http://asquare.net/javascript/tests/KeyCode.html

Press any key to determine the javascript key code of that key. This is a simple script:
<script language="JavaScript">
document.onkeydown = checkKeycode
function checkKeycode(e) {
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
alert("keycode: " + keycode);
}
</script>
You may also use this sort of function to disable certain keys, by adding a void(0) in the function as shown. This essentially tells the page to cancel the last event, e.g. the pressing of that certain key. In the example below, the key that is disabled is the enter key.
<script language="JavaScript">
document.onkeydown = checkKeycode
function checkKeycode(e) {
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
if(keycode == 13){
void(0);
}
}
</script>
[http://www.ryancooper.com/resources/keycode.asp]

keyCode#ql:jskeycode#
ljbalgo.L

name::
* McsEngl.ljbalgo.L@cptIt,

ljbalgo.LAYOUT

name::
* McsEngl.ljbalgo.LAYOUT@cptIt,
* McsEngl.ljs'code.LAYOUT@cptIt,
* McsEngl.ljs'layout-code@cptIt,

_SPECIFIC:
* css-code#linkL#

ljbalgo.bottom (y+h)

name::
* McsEngl.ljbalgo.bottom (y+h)@cptIt,

ljbalgo.left (x)

name::
* McsEngl.ljbalgo.left (x)@cptIt,

ljbalgo.height (h)

name::
* McsEngl.ljbalgo.height (h)@cptIt,
* McsEngl.ljs'height@cptIt,

_CODE.JQUERY:
you can use JQuery for passing height to an element
$(document).ready(function() {
var hgt = $(window).height();
$("#content").css({"height" : hgt });
});
===
var popupHeight = parseInt($('#elementThatWillGetTaller').css('height'));

ljbalgo.position (x;y)

name::
* McsEngl.ljbalgo.position (x;y)@cptIt,

ljbalgo.rectagle (x;y;h;w)

name::
* McsEngl.ljbalgo.rectagle (x;y;h;w)@cptIt,

ljbalgo.right (x+w)

name::
* McsEngl.ljbalgo.right (x+w)@cptIt,

ljbalgo.height

name::
* McsEngl.ljbalgo.height@cptIt,

ljbalgo.size (h;w)

name::
* McsEngl.ljbalgo.size (h;w)@cptIt,

ljbalgo.top (y)

name::
* McsEngl.ljbalgo.top (y)@cptIt,

ljbalgo.width (w)

name::
* McsEngl.ljbalgo.width (w)@cptIt,

ljbalgo.M

name::
* McsEngl.ljbalgo.M@cptIt,

ljbalgo.Map

name::
* McsEngl.ljbalgo.Map@cptIt,

_ADDRESS.WPG:
* an open-source JavaScript library for mobile-friendly interactive maps http://leafletjs.com//

ljbalgo.Math

name::
* McsEngl.ljbalgo.Math@cptIt,
* McsEngl.ljs'math@cptIt,
* McsEngl.ljs'arithmetic-processing@cptIt,
* McsEngl.ljs'code.MATH-PROCESSING@cptIt,
* McsEngl.ljs'math@cptIt,
* McsEngl.ljs'number-processing@cptIt,
* McsEngl.ljs'proc.Arithmetic@cptIt,
* McsEngl.ljs'proc.Number@cptIt,
* McsEngl.ljs'code.processing.MATH@cptIt,

_ADDRESS.WPG:
* http://www.javascripter.net/math/index.htm,
* http://www.mathjax.org//
MathJax is an open source JavaScript display engine for mathematics that works in all modern browsers.
No more setup for readers. No more browser plugins. No more font installations… It just works.
* Doing Math with JavaScript
http://www.javascripter.net/math/index.htm
* http://sourceforge.net/projects/jquerymathview//

_DESCRIPTION:
Numbers to Strings
When appending numbers to string, the result is always a string. The operator is the same, so be careful: If you want to add numbers and then append them to a string, put parentheses around them:

"" + 1 + 2; // "12"
"" + (1 + 2); // "3"
"" + 0.0000001; // "1e-7"
parseInt(0.0000001); // 1 (!)
Or you use the String class provided by javascript, which try to parse a value as string:

String(1) + String(2); //"12"
String(1 + 2); //"3"
[http://docs.jquery.com/Types]

ljb'arithmetic-operator

name::
* McsEngl.ljb'arithmetic-operator@cptIt,
* McsEngl.ljs'number'operator@cptIt,
* McsEngl.ljs'operator.ARITHMETIC@cptIt,

_DESCRIPTION:
All operators common in c-based languages are available to work with numbers (+, -, *, /, %, =, +=, -=, *=, /=, ++, --).
[http://docs.jquery.com/Types]
===
Arithmetic Operators
(+, -, *, /, %, ++, --, unary -, unary +)
Arithmetic operators take numerical values (either literals or variables) as their operands and return a single numerical value.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators]

lcpJs'operator.modulus:
%:
> 5 % 2
1
> 5 % 5
0
Modulus (%) operator returns only the remainder.

ljb'Math-object

name::
* McsEngl.ljb'Math-object@cptIt,
* McsEngl.ljs'Math-object@cptIt,
* McsEngl.ljsobject.Math@cptIt,

_GENERIC:
* js-prebuilt-object#ql:js'object.prebuilt#,
===
> typeof Math
"object"

_DESCRIPTION:
JavaScript provides utilities to work with numbers in the Math object:
Math.PI // 3.141592653589793
Math.cos(Math.PI) // -1
[http://docs.jquery.com/Types]
===
Το αντικείμενο Math παρέχει τις βασικές μεθόδους και σταθερές για την πραγματοποίηση μαθηματικών υπολογισμών.
[Λιακέας, Η γλώσσα JavaScript. 2002, 138]

ljb'Math'member

name::
* McsEngl.ljb'Math'member@cptIt,

_SPECIFIC:
> Object.getOwnPropertyNames(Math).sort()
["E", "LN10", "LN2", "LOG10E", "LOG2E", "PI", "SQRT1_2", "SQRT2", "abs", "acos", "asin", "atan", "atan2", "ceil", "cos", "exp", "floor", "imul", "log", "max", "min", "pow", "random", "round", "sin", "sqrt", "tan"]
===
> Object.getOwnPropertyNames(Math.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> getMemberAll(Math).sort()
["E", "LN10", "LN2", "LOG10E", "LOG2E", "PI", "SQRT1_2", "SQRT2", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "abs", "acos", "asin", "atan", "atan2", "ceil", "constructor", "cos", "exp", "floor", "hasOwnProperty", "imul", "isPrototypeOf", "log", "max", "min", "pow", "propertyIsEnumerable", "random", "round", "sin", "sqrt", "tan", "toLocaleString", "toString", "valueOf"]

ljbalgo.MathJax

name::
* McsEngl.ljbalgo.MathJax@cptIt,
* McsEngl.MathJax@cptIt,

_DESCRIPTION:
MathJax is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all modern browsers. It was designed with the goal of consolidating the recent advances in web technologies into a single, definitive, math-on-the-web platform supporting the major browsers and operating systems, including those on mobile devices. It requires no setup on the part of the user (no plugins to download or software to install), so the page author can write web documents that include mathematics and be confident that users will be able to view it naturally and easily. One simply includes MathJax and some mathematics in a web page, and MathJax does the rest.

MathJax uses web-based fonts (in those browsers that support it) to produce high-quality typesetting that scales and prints at full resolution (unlike mathematics included as images). MathJax can be used with screen readers, providing accessibility for the visually impaired. With MathJax, mathematics is text-based rather than image-based, and so it is available for search engines, meaning that your equations can be searchable, just like the text of your pages. MathJax allows page authors to write formulas using TeX and LaTeX notation, MathML, a World Wide Web Consortium standard for representing mathematics in XML format, or AsciiMath notation. MathJax will even convert TeX notation into MathML, so that it can be rendered more quickly by those browsers that support MathML natively, or so that you can copy and paste it into other programs.

MathJax is modular, so it loads components only when necessary, and can be extended to include new capabilities as needed. MathJax is highly configurable, allowing authors to customize it for the special requirements of their web sites. Finally, MathJax has a rich application programming interface (API) that can be used to make the mathematics on your web pages interactive and dynamic.
[http://docs.mathjax.org/en/latest/mathjax.html]

_USIGN_MATHJAX:
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
[https://www.mathjax.org/cdn-shutting-down/]
===
To use MathJax from our server, you need to do two things:

Link MathJax into the web pages that are to include mathematics.
Put mathematics into your web pages so that MathJax can display it.
You accomplish the first step by putting

<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
into the <head> block of your document. (It can also go in the <body> if necessary, but the head is to be preferred.) This will load the latest version of MathJax from the distributed server, and configure it to recognize mathematics in both TeX and MathML notation, and ask it to generate its output using MathML if the browser supports that well enough, and otherwise use HTML-with-CSS to display the mathematics. This is one of the most general configurations, and should suffice for most people’s needs. Other configurations are available, however, and you can also provide additional configuration parameters to taylor one of the configurations to your needs. More details can be found in the Loading and Configuring MathJax instructions.

The use of cdn.mathjax.org is governed by its terms of service, so be sure to read that before linking to the MathJax CDN server.

To see how to enter mathematics in your web pages, see Putting mathematics in a web page below.
[http://docs.mathjax.org/en/latest/start.html#mathjax-cdn]

ljbalgo.MENU

name::
* McsEngl.ljbalgo.MENU@cptIt,

_PULL_DOWN_MENU:
* http://www.sitepoint.com//
* http://corefiling.com//

ljbalgo.N

name::
* McsEngl.ljbalgo.N@cptIt,

ljbalgo.notification

name::
* McsEngl.ljbalgo.notification@cptIt,
* McsEngl.ljs'notification@cptIt,

var notification = webkitNotifications.createNotification(
'icon-toc.png', // icon url - can be relative
'Hello!', // notification title
'Kasselouris.Nikos' // notification body text
);
// Then show the notification.
notification.show();

CLOSE_NOTIFICATION_AFTER_A_WHILE:
a = webkitNotification.createNotification("","","");
a.show();
setTimeout(function(){a.cancel();}, 5000);

> Should work.
> ?*PhistucK*

ljbalgo.NUMBER-PROCESSING

name::
* McsEngl.ljbalgo.NUMBER-PROCESSING@cptIt,

_CODE.LJS:
// decimal to hex
> parseInt(38, 16)
56
> parseInt('38', 16)
56

ljbalgo.O

name::
* McsEngl.ljbalgo.O@cptIt,

ljbalgo.onKeyPress

name::
* McsEngl.ljbalgo.onKeyPress@cptIt,

The following example uses the Event Object and keyboard related properties to only allow alphabetical keys plus BACKSPACE and SPACE in a form field.
<form>
<input type="text" id="alphanumeric" size="25"></textarea>
</form>

<script type="text/javascript">

document.getElementById("alphanumeric").onkeypress=function(e){
var e=window.event || e
var keyunicode=e.charCode || e.keyCode
//Allow alphabetical keys, plus BACKSPACE and SPACE
return (keyunicode>=65 && keyunicode<=122 || keyunicode==8 || keyunicode==32)? true : false
}

</script>

ljbalgo.P

name::
* McsEngl.ljbalgo.P@cptIt,

ljbalgo.PATH

name::
* McsEngl.ljbalgo.PATH@cptIt,
* McsEngl.ljspath-of-file-directory@cptIt,

_CODE.LJS:
//FINDS directory of a script loaded on page.
var scripts = document.getElementsByTagName('script'), sBaseURL;
for (var i = 0; i < scripts.length; i++) {
var src = scripts[i].src;
if (/hitp\.js/.test(src)) {
sBaseURL = src.substring(0, src.lastIndexOf('/')); // the path of hitp.js
break;
}
}

ljbalgo.PHP-communication

name::
* McsEngl.ljbalgo.PHP-communication@cptIt,

_CODE.LJS:
var tocImgFolder = "<?php echo $this->skin->getSkinStylePath() ?>";
//quotes are necessary.

ljbalgo.Q

name::
* McsEngl.ljbalgo.Q@cptIt,

ljbalgo.R

name::
* McsEngl.ljbalgo.R@cptIt,

ljbalgo.Redirect-page

name::
* McsEngl.ljbalgo.Redirect-page@cptIt,
* McsEngl.ljs'redirect-page@cptIt,

<script type="text/javascript">
<!--
window.location = "http://www.google.com/"
//-->
</script>

<script language="javascript">
location.replace("sch/")
</script>

<html>
<head>
<script type="text/javascript">
<!--
function delayer(){
window.location = "../javascriptredirect.php"
}
//-->
</script>
</head>
<body onLoad="setTimeout('delayer()', 5000)">
<h2>Prepare to be redirected!</h2>
<p>This page is a time delay redirect, please update your bookmarks to our new
location!</p>

</body>
</html>

ljbalgo.Reload-Page

name::
* McsEngl.ljbalgo.Reload-Page@cptIt,
* McsEngl.ljs'reload-page@cptIt,

<html>
<head>
<script type="text/javascript">
function reloadPage()
{
window.location.reload()
}
</script>
</head>
<body>

<input type="button" value="Reload page" onclick="reloadPage()" />

</body>
</html>

ljbalgo.S

name::
* McsEngl.ljbalgo.S@cptIt,

ljbalgo.save-local

name::
* McsEngl.ljbalgo.save-local@cptIt,
* McsEngl.ljs'save-locally@cptIt,

JavaScript is run in a sandboxed environment, meaning it only has access to specific browser resources. Specifically, it doesn't have access to the filesystem, or dynamic resources from other domains (web pages, javascript etc). Well, there are other things (I/O, devices), but you get the point.
You will need to post the data to the server which can invoke a file download, or use another technology such as flash, java applets, or silverlight. (i'm not sure about the support for this in the last 2, and I also wouldn't recommend using them, depends what it's for...)
[http://stackoverflow.com/questions/2762236/save-file-from-local-data-in-javascript]

For saving data on the client-side, without any server interaction, the best I've seen is Downloadify, is a small JavaScript + Flash library allows you to generate and save files on the fly, directly in the browser...
* downloadify: https://github.com/dcneiner/Downloadify
* demo: http://pixelgraphics.us/downloadify/test.html

ljbalgo.SEARCHING

name::
* McsEngl.ljbalgo.SEARCHING@cptIt,
* McsEngl.ljs'searching@cptIt,

_ADDRESS.WPG:
* http://dzone.com/snippets/simple-javascriptxml-based,

ljbalgo.service-worker

name::
* McsEngl.ljbalgo.service-worker@cptIt,
* McsEngl.ljs'service-worker@cptIt,

_ADDRESS.WPG:
* http://www.html5rocks.com/en/tutorials/service-worker/introduction//

_DESCRIPTION:
One of the toughest things we do as front-end engineers is try to keep up with the onslaught of new standards and features that browsers are implementing. It's difficult to know what you should know about what you shouldn't. Periodically, I'll give you a heads up on some technology you should be looking into, and this time it's service workers.

It's likely you've heard of service workers due to a masterful marketing campaign by the Chrome team, but most of the discussions I see center around creating "offline-first" applications using service workers. While that's a definite possibility, limiting the thinking around service workers to just offline capabilities is missing the larger picture of what service workers do.

In short, service workers are a proxy that ships with the browser. They intercept requests as they come out from the browser and allow you to change what happens as a result of a request. Yes, you could decide to avoid making the request altogether and return content to create an offline experience. But you could also implement your own caching algorithm, only periodically going back to your server; you could disallow certain requests during certain periods of time; you could purposefully bypass the cache based on some heuristic. The possibilities are tremendous.

I don't think it's a stretch to say that service workers could have an impact similar in magnitude to XMLHttpRequest, the feature that began the Ajax revolution in web applications. Both service workers and XMLHttpRequest share the same basic nature: fairly low-level APIs that give developers more control over network requests. It's conceivable that in another couple of years, you won't even think of writing a web application without using service workers to monitor and manage requests between the browser and your server.

I think service workers are still not quite ready to use. There are compatibility issues and lack of browser support to worry about. However, service workers will progress and I think by this time next year we'll all be talking about how to better leverage them in our web applications. Experiment and prototype now if you're interested, but definitely keep an eye on service workers going forward.

Be well.
[NCZOnline newsletter@nczonline.net, 2015-11-10]

ljbalgo.Shortcut

name::
* McsEngl.ljbalgo.Shortcut@cptIt,
* McsEngl.ljsalgo.keyboard-shortcut@cptIt,

_ADDRESS.WPG:
* https://github.com/ccampbell/mousetrap, https://craig.is/killing/mice,

_CODE.LJS:
an event handler for the document's keyup event seems like an appropriate solution

// define a handler
function doc_keyUp(e) {

// this would test for whichever key is 40 and the ctrl key at the same time
if (e.ctrlKey && e.keyCode == 40) {
// call your function to do the thing
pauseSound();
}
}
// register the handler
document.addEventListener('keyup', doc_keyUp, false);
[http://stackoverflow.com/a/2511474]

_CODE.LJS:
/**
* http://www.openjs.com/scripts/events/keyboard_shortcuts//
* Version : 2.01.B
* By Binny V A
* License : BSD
*/
shortcut = {
 'all_shortcuts':{},//All the shortcuts are stored in this array
 'add': function(shortcut_combination,callback,opt) {
   //Provide a set of default options
   var default_options = {
     'type':'keydown',
     'propagate':false,
     'disable_in_input':false,
     'target':document,
     'keycode':false
   }
   if(!opt) opt = default_options;
   else {
     for(var dfo in default_options) {
       if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
     }
   }

   var ele = opt.target;
   if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
   var ths = this;
   shortcut_combination = shortcut_combination.toLowerCase();

   //The function to be called at keypress
   var func = function(e) {
     e = e || window.event;
     
     if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields
       var element;
       if(e.target) element=e.target;
       else if(e.srcElement) element=e.srcElement;
       if(element.nodeType==3) element=element.parentNode;

       if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;
     }
 
     //Find Which key is pressed
     if (e.keyCode) code = e.keyCode;
     else if (e.which) code = e.which;
     var character = String.fromCharCode(code).toLowerCase();
     
     if(code == 188) character=","; //If the user presses , when the type is onkeydown
     if(code == 190) character="."; //If the user presses , when the type is onkeydown

     var keys = shortcut_combination.split("+");
     //Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
     var kp = 0;
     
     //Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
     var shift_nums = {
       "`":"~",
       "1":"!",
       "2":"@",
       "3":"#",
       "4":"$",
       "5":"%",
       "6":"^",
       "7":"&",
       "8":"*",
       "9":"(",
       "0":")",
       "-":"_",
       "=":"+",
       ";":":",
       "'":"\"",
       ",":"<",
       ".":">",
       "/":"?",
       "\\":"|"
     }
     //Special Keys - and their codes
     var special_keys = {
       'esc':27,
       'escape':27,
       'tab':9,
       'space':32,
       'return':13,
       'enter':13,
       'backspace':8,
 
       'scrolllock':145,
       'scroll_lock':145,
       'scroll':145,
       'capslock':20,
       'caps_lock':20,
       'caps':20,
       'numlock':144,
       'num_lock':144,
       'num':144,
       
       'pause':19,
       'break':19,
       
       'insert':45,
       'home':36,
       'delete':46,
       'end':35,
       
       'pageup':33,
       'page_up':33,
       'pu':33,
 
       'pagedown':34,
       'page_down':34,
       'pd':34,
 
       'left':37,
       'up':38,
       'right':39,
       'down':40,
 
       'f1':112,
       'f2':113,
       'f3':114,
       'f4':115,
       'f5':116,
       'f6':117,
       'f7':118,
       'f8':119,
       'f9':120,
       'f10':121,
       'f11':122,
       'f12':123
     }
 
     var modifiers = {
       shift: { wanted:false, pressed:false},
       ctrl : { wanted:false, pressed:false},
       alt : { wanted:false, pressed:false},
       meta : { wanted:false, pressed:false}  //Meta is Mac specific
     };

     if(e.ctrlKey)  modifiers.ctrl.pressed = true;
     if(e.shiftKey)  modifiers.shift.pressed = true;
     if(e.altKey)  modifiers.alt.pressed = true;
     if(e.metaKey) modifiers.meta.pressed = true;

     for(var i=0; k=keys[i],i<keys.length; i++) {
       //Modifiers
       if(k == 'ctrl' || k == 'control') {
         kp++;
         modifiers.ctrl.wanted = true;

       } else if(k == 'shift') {
         kp++;
         modifiers.shift.wanted = true;

       } else if(k == 'alt') {
         kp++;
         modifiers.alt.wanted = true;
       } else if(k == 'meta') {
         kp++;
         modifiers.meta.wanted = true;
       } else if(k.length > 1) { //If it is a special key
         if(special_keys[k] == code) kp++;
         
       } else if(opt['keycode']) {
         if(opt['keycode'] == code) kp++;

       } else { //The special keys did not match
         if(character == k) kp++;
         else {
           if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
             character = shift_nums[character];
             if(character == k) kp++;
           }
         }
       }
     }
     
     if(kp == keys.length &&
           modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
           modifiers.shift.pressed == modifiers.shift.wanted &&
           modifiers.alt.pressed == modifiers.alt.wanted &&
           modifiers.meta.pressed == modifiers.meta.wanted) {
       callback(e);
 
       if(!opt['propagate']) { //Stop the event
         //e.cancelBubble is supported by IE - this will kill the bubbling process.
         e.cancelBubble = true;
         e.returnValue = false;
 
         //e.stopPropagation works in Firefox.
         if (e.stopPropagation) {
           e.stopPropagation();
           e.preventDefault();
         }
         return false;
       }
     }
   }
   this.all_shortcuts[shortcut_combination] = {
     'callback':func,
     'target':ele,
     'event': opt['type']
   };
   //Attach the function with the event
   if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
   else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
   else ele['on'+opt['type']] = func;
 },

 //Remove the shortcut - just specify the shortcut and I will remove the binding
 'remove':function(shortcut_combination) {
   shortcut_combination = shortcut_combination.toLowerCase();
   var binding = this.all_shortcuts[shortcut_combination];
   delete(this.all_shortcuts[shortcut_combination])
   if(!binding) return;
   var type = binding['event'];
   var ele = binding['target'];
   var callback = binding['callback'];

   if(ele.detachEvent) ele.detachEvent('on'+type, callback);
   else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
   else ele['on'+type] = false;
 }
}

ljbalgo.STORAGE

name::
* McsEngl.ljbalgo.STORAGE@cptIt,
* McsEngl.ljs'storage@cptIt,

ljb'localStorage

name::
* McsEngl.ljb'localStorage@cptIt,

localStorage

localStorage is the same as sessionStorage with same same-origin rules applied but it is persistent. localStorage was introduced in Firefox 3.5.
[https://developer.mozilla.org/en-US/docs/Web/Guide/DOM/Storage?redirectlocale=en-US&redirectslug=DOM%2FStorage]

ljb'sessionStorage

name::
* McsEngl.ljb'sessionStorage@cptIt,

_CODE.LJS:
sessionStorage

This is a global object (sessionStorage) that maintains a storage area that's available for the duration of the page session. A page session lasts for as long as the browser is open and survives over page reloads and restores. Opening a page in a new tab or window will cause a new session to be initiated.

// Save data to a the current session's store
sessionStorage.setItem("username", "John");

// Access some stored data
alert( "username = " + sessionStorage.getItem("username"));
The sessionStorage object is most useful for hanging on to temporary data that should be saved and restored if the browser is accidentally refreshed.
[https://developer.mozilla.org/en-US/docs/Web/Guide/DOM/Storage?redirectlocale=en-US&redirectslug=DOM%2FStorage]

ljbalgo.style

name::
* McsEngl.ljbalgo.style@cptIt,
* McsEngl.ljsalgo.CSS@cptIt,

_Style_Property_of_Element:
* see#ql:js'style#

_jQuery:
$(tocElDivToc).find("p").css('font-size','16px');
$("body").css("margin", 8);

ljbalgo.table.Dynamic

name::
* McsEngl.ljbalgo.table.Dynamic@cptIt,
* McsEngl.ljs'table-sorting@cptIt,

* http://www.dynamictable.com//
- client-side sorting

ljbalgo.table-of-contents

name::
* McsEngl.ljbalgo.table-of-contents@cptIt,
* McsEngl.ljs'table-of-contents@cptIt,
* McsEngl.ljs'toc@cptIt,

_ADDRESS.WPG:
* http://www.dominykas.com/2010/01/benchmark-html-outlining-toc-scripts.html,
* http://christianheilmann.com/2010/01/06/the-table-of-contents-script-my-old-nemesis//
* https://github.com/codepo8/TocIt,
* http://isithackday.com/demos/tocit/index.html,
* http://projects.jga.me/toc//
* http://bright-green.com/blog/2004_06_02/javascript_table_of_contents.html,
* http://www.dhtmlgoodies.com/?whichScript=dynamic-table-of-contents,

function createTOC() {
 var y = document.createElement('div');
 y.id = 'innertoc';
 var a = y.appendChild(document.createElement('span'));
 a.onclick = showhideTOC;
 a.id = 'contentheader';
 a.innerHTML = 'show page contents';
 var z = y.appendChild(document.createElement('div'));
 z.onclick = showhideTOC;
 var toBeTOCced = getElementsByTagNames('h2,h3,h4,h5');
 if (toBeTOCced.length < 2) return false;

 for (var i=0;i<toBeTOCced.length;i++) {
   var tmp = document.createElement('a');
   tmp.innerHTML = toBeTOCced[i].innerHTML;
   tmp.className = 'page';
   z.appendChild(tmp);
   if (toBeTOCced[i].nodeName == 'H4')
     tmp.className += ' indent';
   if (toBeTOCced[i].nodeName == 'H5')
     tmp.className += ' extraindent';
   var headerId = toBeTOCced[i].id || 'link' + i;
   tmp.href = '#' + headerId;
   toBeTOCced[i].id = headerId;
   if (toBeTOCced[i].nodeName == 'H2') {
     tmp.innerHTML = 'Top';
     tmp.href = '#top';
     toBeTOCced[i].id = 'top';
   }
 }
 return y;
}

var TOCstate = 'none';

function showhideTOC() {
 TOCstate = (TOCstate == 'none') ? 'block' : 'none';
 var newText = (TOCstate == 'none') ? 'show page contents' : 'hide page contents';
 document.getElementById('contentheader').innerHTML = newText;
 document.getElementById('innertoc').lastChild.style.display = TOCstate;
}
[http://www.quirksmode.org/dom/toc.html]

a JavaScript-driven menu that's made to look close to what Windows Explorer® does. Released under the BSD license it's OSI Certified Open Source Software which means it can be freely used and modified for both commercial and non-commercial websites.
* http://www.treemenu.org//

/** Generated TOC
Stuart Langridge, July 2007

Generate a table of contents, based on headings in the page.

To place the TOC on the page, add

<div id="generated-toc"></div>

to the page where you want the TOC to appear. If this element
is not present, the TOC will not appear.

The TOC defaults to displaying all headings that are contained within
the same element as it itself is contained in (or all headings on the
page if you did not provide a generated-toc container). To override this,
provide a "highest heading" value by adding class="generate_from_h3"
(or h2, h4, etc) to the container. (If unspecified, this will display all
headings, as if class="generate_from_h1" was specified.)

The TOC defaults to operating only on headings contained within the same
element as it itself, i.e., in a page like this:

<div>
<div>
<div id="generated-toc"></div>
<h1>foo</h1>
<h2>bar</h2>
</div>
<h1>quux</h1>
</div>

The "quux" heading will not appear in the TOC. To override this,
add class="generate_for_page" to the container, which will process
all headings on the page wheresoever they may be.

*/

generated_toc = {
generate: function() {
// Identify our TOC element, and what it applies to
generate_from = '0';
generate_for = 'unset';
tocparent = document.getElementById('generated-toc');
if (tocparent) {
// there is a div class="generated-toc" in the document
// dictating where the TOC should appear
classes = tocparent.className.split(/\s+/);
for (var i=0; i<classes.length; i++) {
// if it specifies which heading level to generate from,
// or what level to generate for, save these specifications
if (classes[i].match(/^generate_from_h[1-6]$/)) {
generate_from = classes[i].substr(classes[i].length-1,1);
} else if (classes[i].match(/^generate_for_[a-z]+$/)) {
generate_for = classes[i].match(/^generate_for_([a-z])+$/)[1];
}
}
} else {
// They didn't specify a TOC element; exit
return;
}

// set top_node to be the element in the document under which
// we'll be analysing headings
if (generate_for == 'page') {
top_node = document.getElementsByTagName('body');
} else {
// i.e., explicitly set to "parent", left blank (so "unset"),
// or some invalid value
top_node = tocparent.parentNode;
}

// If there isn't a specified header level to generate from, work
// out what the first header level inside top_node is
// and make that the specified header level
if (generate_from == 0) {
first_header_found = generated_toc.findFirstHeader(top_node);
if (!first_header_found) {
// there were no headers at all inside top_node!
return;
} else {
generate_from = first_header_found.toLowerCase().substr(1);
}
}

// add all levels of heading we're paying attention to to the
// headings_to_treat dictionary, ready to be filled in later
headings_to_treat = {"h6":''};
for (var i=5; i>= parseInt(generate_from); i--) {
headings_to_treat["h" + i] = '';
}

// get headings. We can't say
// getElementsByTagName("h1" or "h2" or "h3"), etc, so get all
// elements and filter them ourselves
// need to use .all here because IE doesn't support gEBTN('*')
nodes = top_node.all ? top_node.all : top_node.getElementsByTagName('*');

// put all the headings we care about in headings
headings = [];
for (var i=0; i<nodes.length;i++) {
if (nodes[i].nodeName.toLowerCase() in headings_to_treat) {
// if heading has class no-TOC, skip it
if ((' ' + nodes[i].className + ' ').indexOf('no-TOC') != -1) {
continue;
}
headings.push(nodes[i]);
}
}

// make the basic elements of the TOC itself, ready to fill into

// first, check if there's a cookie defined to save the state as open
status = generated_toc.readCookie("generated_toc_display");
if (status && status == "open") {
display_initially = "block";
toggle_initially = "Hide table of contents";
} else {
display_initially = "none";
toggle_initially = "Show table of contents";
}

cur_head_lvl = "h" + generate_from;
cur_list_el = document.createElement('ul');
cur_list_el.style.display = display_initially;
p = document.createElement('p');
span = document.createElement('span');
span.className = 'hidden';
a = document.createElement('a');
a.href = '#aftertoc';
a.appendChild(document.createTextNode('skip table of contents'));
span.appendChild(a);
p.appendChild(span);
tocparent.appendChild(p);
p = document.createElement('p');
p.id = 'toggle-container';
a = document.createElement('a');
a.id = 'generated_toc_d_toggle';
a.appendChild(document.createTextNode(toggle_initially));
p.appendChild(a);
a.onclick = generated_toc.wrapOpenClose(a,cur_list_el);
a.href = '#';
tocparent.appendChild(p);
tocparent.appendChild(cur_list_el);

// now walk through our saved heading nodes
for (var i=0; i<headings.length; i++) {
this_head_el = headings[i];
this_head_lvl = headings[i].nodeName.toLowerCase();
if (!this_head_el.id) {
// if heading doesn't have an ID, give it one
this_head_el.id = 'heading_toc_j_' + i;
this_head_el.setAttribute('tabindex','-1');
}

while(this_head_lvl > cur_head_lvl) {
// this heading is at a lower level than the last one;
// create additional nested lists to put it at the right level

// get the *last* LI in the current list, and add our new UL to it
var last_listitem_el = null;
for (var j=0; j<cur_list_el.childNodes.length; j++) {
if (cur_list_el.childNodes[j].nodeName.toLowerCase() == 'li') {
last_listitem_el = cur_list_el.childNodes[j];
}
}
if (!last_listitem_el) {
// there aren't any LIs, so create a new one to add the UL to
last_listitem_el = document.createElement('li');
}
new_list_el = document.createElement('ul');
last_listitem_el.appendChild(new_list_el);
cur_list_el.appendChild(last_listitem_el);
cur_list_el = new_list_el;
cur_head_lvl = 'h' + (parseInt(cur_head_lvl.substr(1,1)) + 1);
}

while (this_head_lvl < cur_head_lvl) {
// this heading is at a higher level than the last one;
// go back up the TOC to put it at the right level
cur_list_el = cur_list_el.parentNode.parentNode;
cur_head_lvl = 'h' + (parseInt(cur_head_lvl.substr(1,1)) - 1);
}

// create a link to this heading, and add it to the TOC
li = document.createElement('li');
a = document.createElement('a');
a.href = '#' + this_head_el.id;
a.appendChild(document.createTextNode(generated_toc.innerText(this_head_el)));
li.appendChild(a);
cur_list_el.appendChild(li);
}

// add an aftertoc paragraph as destination for the skip-toc link
p = document.createElement('p');
p.id = 'aftertoc';
tocparent.appendChild(p);

// go through the TOC and find all LIs that are "empty", i.e., contain
// only ULs and no links, and give them class="missing"
var alllis = tocparent.getElementsByTagName("li");
for (var i=0; i<alllis.length; i++) {
var foundlink = false;
for (var j=0; j<alllis[i].childNodes.length; j++) {
if (alllis[i].childNodes[j].nodeName.toLowerCase() == 'a') {
foundlink = true;
}
}
if (!foundlink) {
alllis[i].className = "missing";
} else {
alllis[i].className = "notmissing";
}
}

},

wrapOpenClose: function(a, cur_list_el) {
// we return a function here so that it acts as a closure;
// in essence the inner function, which is the event handler
// for clicking on the toggle-toc link, remembers the a and cur_list_el
// elements as they are when they're passed in to it.
// This is an explicit function rather than an anonymous function
// defined where it's called so it's easier to understand.
return function(e) {
d = cur_list_el.style.display;
a.firstChild.nodeValue = (d == 'block' ? 'Show' : 'Hide') + ' table of contents';
a.className = (d == 'block' ? 'toggle-closed' : 'toggle-open');
cur_list_el.style.display = d == 'block' ? 'none' : 'block';
// set a cookie to "open" or "closed" to save the state of the TOC
if (cur_list_el.style.display == "block") {
generated_toc.createCookie("generated_toc_display","open",21);
} else {
generated_toc.createCookie("generated_toc_display","closed",21);
}
if (window.event) {
window.event.returnValue = false;
window.event.cancelBubble = true;
} else {
e.preventDefault();
e.stopPropagation();
}
}
},

/* cookie handling: http://www.quirksmode.org/js/cookies.html */
createCookie: function(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
},

readCookie: function(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0)
return c.substring(nameEQ.length,c.length);
}
return null;
},

eraseCookie: function(name) {
createCookie(name,"",-1);
},

innerText: function(el) {
return (typeof(el.innerText) != 'undefined') ? el.innerText :
(typeof(el.textContent) != 'undefined') ? el.textContent :
el.innerHTML.replace(/<[^>]+>/g, '');
},

findFirstHeader: function(node) {
// a recursive function which returns the first header it finds inside
// node, or null if there are no functions inside node.
var nn = node.nodeName.toLowerCase();
if (nn.match(/^h[1-6]$/)) {
// this node is itself a header; return our name
return nn;
} else {
for (var i=0; i<node.childNodes.length; i++) {
var subvalue = generated_toc.findFirstHeader(node.childNodes[i]);
// if one of the subnodes finds a header, abort the loop and return it
if (subvalue) return subvalue;
}
// no headers in this node at all
return null;
}
},

init: function() {
// quit if this function has already been called
if (arguments.callee.done) return;

// flag this function so we don't do the same thing twice
arguments.callee.done = true;

generated_toc.generate();
}
};

(function(i) {var u =navigator.userAgent;var e=/*@cc_on!@*/false; var st =
setTimeout;if(/webkit/i.test(u)){st(function(){var dr=document.readyState;
if(dr=="loaded"||dr=="complete"){i()}else{st(arguments.callee,10);}},10);}
else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){
document.addEventListener("DOMContentLoaded",i,false); } else if(e){ (
function(){var t=document.createElement('doc:rdy');try{t.doScroll('left');
i();t=null;}catch(e){st(arguments.callee,0);}})();}else{window.onload=i;}})(generated_toc.init);

[http://www.kryogenix.org/code/browser/generated-toc/generated_toc.js]

ljbalgo.table.From-JSON

name::
* McsEngl.ljbalgo.table.From-JSON@cptIt,

<html>
<head>
<title>
 Array JSON-JavaScript Example
</title>
<script language="javascript" >
 var students = { "Maths" : [
  { "Name" : "Amit", // First element
  "Marks" : 67,
  "age" : 23 },
  {
                    "Name" : "Sandeep", // Second element
  "Marks" : 65,
  "age" : 21 }
  ],
  "Science" : [
          { "Name" : "Shaili", // First Element
  "Marks" : 56,
  "age" : 27 },
  { "Name" : "Santosh", // Second Element
  "Marks" : 78,
  "age" : 41 }
  ]
  }
     // Printing all array values
 var i=0
 document.writeln("<table border='1'><tr>");
 for(i=0;i<students.Maths.length;i++)
 {  
   document.writeln("<td>");
   document.writeln("<table border='0' width=100 >");
   document.writeln("<tr><td><B>Name</B></td><td width=50>"+students.Maths[i].Name+"</td></tr>");
   document.writeln("<tr><td><B>Marks</B></td><td width=50>"+students.Maths[i].Marks +"</td></tr>");
   document.writeln("<tr><td><B>Age</B></td><td width=50>"+students.Maths[i].age +"</td></tr>");
   document.writeln("</table>");
   document.writeln("</td>");
 }
 for(i=0;i<students.Science.length;i++)
 {
   document.writeln("<td>");
   document.writeln("<table border='0' width=100 >");
   document.writeln("<tr><td><B>Name</B></td><td width=50>"+students.Science[i].Name+"</td></tr>");
   document.writeln("<tr><td><B>Marks</B></td><td width=50>"+students.Science[i].Marks +"</td></tr>");
   document.writeln("<tr><td><B>Age</B></td><td width=50>"+students.Science[i].age +"</td></tr>");
   document.writeln("</table>");
   document.writeln("</td>");
 }
 document.writeln("</tr></table>");
</script>
</head>
<body>
Using Array of objects via JSON in JavaScript
</body>
</html>
[http://www.roseindia.net/tutorials/json/ArrayObject-json.shtml]

ljbalgo.table.HEADER.FREEZE

name::
* McsEngl.ljbalgo.table.HEADER.FREEZE@cptIt,

_ADDRESS.WPG:
* https://jsfiddle.net/dPixie/byB9d/3//

ljbalgo.table.SORTED

name::
* McsEngl.ljbalgo.table.SORTED@cptIt,

_CODE.LJS:
* http://www.kryogenix.org/code/browser/sorttable/sorttable.js,
/*
SortTable
version 2
7th April 2007
Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/

Instructions:
Download this file
Add <script src="sorttable.js"></script> to your HTML
Add class="sortable" to any table you'd like to make sortable
Click on the headers to sort

Thanks to many, many people for contributions and suggestions.
Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
This basically means: do what you want with it.
*/


var stIsIE = /*@cc_on!@*/false;

sorttable = {
init: function() {
// quit if this function has already been called
if (arguments.callee.done) return;
// flag this function so we don't do the same thing twice
arguments.callee.done = true;
// kill the timer
if (_timer) clearInterval(_timer);

if (!document.createElement || !document.getElementsByTagName) return;

sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;

forEach(document.getElementsByTagName('table'), function(table) {
if (table.className.search(/\bsortable\b/) != -1) {
sorttable.makeSortable(table);
}
});

},

makeSortable: function(table) {
if (table.getElementsByTagName('thead').length == 0) {
// table doesn't have a tHead. Since it should have, create one and
// put the first table row in it.
the = document.createElement('thead');
the.appendChild(table.rows[0]);
table.insertBefore(the,table.firstChild);
}
// Safari doesn't support table.tHead, sigh
if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0];

if (table.tHead.rows.length != 1) return; // can't cope with two header rows

// Sorttable v1 put rows with a class of "sortbottom" at the bottom (as
// "total" rows, for example). This is B&R, since what you're supposed
// to do is put them in a tfoot. So, if there are sortbottom rows,
// for backwards compatibility, move them to tfoot (creating it if needed).
sortbottomrows = [];
for (var i=0; i<table.rows.length; i++) {
if (table.rows[i].className.search(/\bsortbottom\b/) != -1) {
sortbottomrows[sortbottomrows.length] = table.rows[i];
}
}
if (sortbottomrows) {
if (table.tFoot == null) {
// table doesn't have a tfoot. Create one.
tfo = document.createElement('tfoot');
table.appendChild(tfo);
}
for (var i=0; i<sortbottomrows.length; i++) {
tfo.appendChild(sortbottomrows[i]);
}
delete sortbottomrows;
}

// work through each column and calculate its type
headrow = table.tHead.rows[0].cells;
for (var i=0; i<headrow.length; i++) {
// manually override the type with a sorttable_type attribute
if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col
mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/);
if (mtch) { override = mtch[1]; }
  if (mtch && typeof sorttable["sort_"+override] == 'function') {
  headrow[i].sorttable_sortfunction = sorttable["sort_"+override];
  } else {
  headrow[i].sorttable_sortfunction = sorttable.guessType(table,i);
  }
  // make it clickable to sort
  headrow[i].sorttable_columnindex = i;
  headrow[i].sorttable_tbody = table.tBodies[0];
  dean_addEvent(headrow[i],"click", sorttable.innerSortFunction = function(e) {

if (this.className.search(/\bsorttable_sorted\b/) != -1) {
// if we're already sorted by this column, just
// reverse the table, which is quicker
sorttable.reverse(this.sorttable_tbody);
this.className = this.className.replace('sorttable_sorted',
'sorttable_sorted_reverse');
this.removeChild(document.getElementById('sorttable_sortfwdind'));
sortrevind = document.createElement('span');
sortrevind.id = "sorttable_sortrevind";
sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴';
this.appendChild(sortrevind);
return;
}
if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
// if we're already sorted by this column in reverse, just
// re-reverse the table, which is quicker
sorttable.reverse(this.sorttable_tbody);
this.className = this.className.replace('sorttable_sorted_reverse',
'sorttable_sorted');
this.removeChild(document.getElementById('sorttable_sortrevind'));
sortfwdind = document.createElement('span');
sortfwdind.id = "sorttable_sortfwdind";
sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾';
this.appendChild(sortfwdind);
return;
}

// remove sorttable_sorted classes
theadrow = this.parentNode;
forEach(theadrow.childNodes, function(cell) {
if (cell.nodeType == 1) { // an element
cell.className = cell.className.replace('sorttable_sorted_reverse','');
cell.className = cell.className.replace('sorttable_sorted','');
}
});
sortfwdind = document.getElementById('sorttable_sortfwdind');
if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
sortrevind = document.getElementById('sorttable_sortrevind');
if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }

this.className += ' sorttable_sorted';
sortfwdind = document.createElement('span');
sortfwdind.id = "sorttable_sortfwdind";
sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾';
this.appendChild(sortfwdind);

  // build an array to sort. This is a Schwartzian transform thing,
  // i.e., we "decorate" each row with the actual sort key,
  // sort based on the sort keys, and then put the rows back in order
  // which is a lot faster because you only do getInnerText once per row
  row_array = [];
  col = this.sorttable_columnindex;
  rows = this.sorttable_tbody.rows;
  for (var j=0; j<rows.length; j++) {
  row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
  }
  /* If you want a stable sort, uncomment the following line */
  //sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
  /* and comment out this one */
  row_array.sort(this.sorttable_sortfunction);

  tb = this.sorttable_tbody;
  for (var j=0; j<row_array.length; j++) {
  tb.appendChild(row_array[j][1]);
  }

  delete row_array;
  });
  }
}
},

guessType: function(table, column) {
// guess the type of a column based on its first non-blank row
sortfn = sorttable.sort_alpha;
for (var i=0; i<table.tBodies[0].rows.length; i++) {
text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
if (text != '') {
if (text.match(/^-?[?$?]?[\d,.]+%?$/)) {
return sorttable.sort_numeric;
}
// check for a date: dd/mm/yyyy or dd/mm/yy
// can have / or . or - as separator
// can be mm/dd as well
possdate = text.match(sorttable.DATE_RE)
if (possdate) {
// looks like a date
first = parseInt(possdate[1]);
second = parseInt(possdate[2]);
if (first > 12) {
// definitely dd/mm
return sorttable.sort_ddmm;
} else if (second > 12) {
return sorttable.sort_mmdd;
} else {
// looks like a date, but we can't tell which, so assume
// that it's dd/mm (English imperialism!) and keep looking
sortfn = sorttable.sort_ddmm;
}
}
}
}
return sortfn;
},

getInnerText: function(node) {
// gets the text we want to use for sorting for a cell.
// strips leading and trailing whitespace.
// this is *not* a generic getInnerText function; it's special to sorttable.
// for example, you can override the cell text with a customkey attribute.
// it also gets .value for <input> fields.

if (!node) return "";

hasInputs = (typeof node.getElementsByTagName == 'function') &&
node.getElementsByTagName('input').length;

if (node.getAttribute("sorttable_customkey") != null) {
return node.getAttribute("sorttable_customkey");
}
else if (typeof node.textContent != 'undefined' && !hasInputs) {
return node.textContent.replace(/^\s+|\s+$/g, '');
}
else if (typeof node.innerText != 'undefined' && !hasInputs) {
return node.innerText.replace(/^\s+|\s+$/g, '');
}
else if (typeof node.text != 'undefined' && !hasInputs) {
return node.text.replace(/^\s+|\s+$/g, '');
}
else {
switch (node.nodeType) {
case 3:
if (node.nodeName.toLowerCase() == 'input') {
return node.value.replace(/^\s+|\s+$/g, '');
}
case 4:
return node.nodeValue.replace(/^\s+|\s+$/g, '');
break;
case 1:
case 11:
var innerText = '';
for (var i = 0; i < node.childNodes.length; i++) {
innerText += sorttable.getInnerText(node.childNodes[i]);
}
return innerText.replace(/^\s+|\s+$/g, '');
break;
default:
return '';
}
}
},

reverse: function(tbody) {
// reverse the rows in a tbody
newrows = [];
for (var i=0; i<tbody.rows.length; i++) {
newrows[newrows.length] = tbody.rows[i];
}
for (var i=newrows.length-1; i>=0; i--) {
tbody.appendChild(newrows[i]);
}
delete newrows;
},

/* sort functions
each sort function takes two parameters, a and b
you are comparing a[0] and b[0] */
sort_numeric: function(a,b) {
aa = parseFloat(a[0].replace(/[^0-9.-]/g,''));
if (isNaN(aa)) aa = 0;
bb = parseFloat(b[0].replace(/[^0-9.-]/g,''));
if (isNaN(bb)) bb = 0;
return aa-bb;
},
sort_alpha: function(a,b) {
if (a[0]==b[0]) return 0;
if (a[0]<b[0]) return -1;
return 1;
},
sort_ddmm: function(a,b) {
mtch = a[0].match(sorttable.DATE_RE);
y = mtch[3]; m = mtch[2]; d = mtch[1];
if (m.length == 1) m = '0'+m;
if (d.length == 1) d = '0'+d;
dt1 = y+m+d;
mtch = b[0].match(sorttable.DATE_RE);
y = mtch[3]; m = mtch[2]; d = mtch[1];
if (m.length == 1) m = '0'+m;
if (d.length == 1) d = '0'+d;
dt2 = y+m+d;
if (dt1==dt2) return 0;
if (dt1<dt2) return -1;
return 1;
},
sort_mmdd: function(a,b) {
mtch = a[0].match(sorttable.DATE_RE);
y = mtch[3]; d = mtch[2]; m = mtch[1];
if (m.length == 1) m = '0'+m;
if (d.length == 1) d = '0'+d;
dt1 = y+m+d;
mtch = b[0].match(sorttable.DATE_RE);
y = mtch[3]; d = mtch[2]; m = mtch[1];
if (m.length == 1) m = '0'+m;
if (d.length == 1) d = '0'+d;
dt2 = y+m+d;
if (dt1==dt2) return 0;
if (dt1<dt2) return -1;
return 1;
},

shaker_sort: function(list, comp_func) {
// A stable sort function to allow multi-level sorting of data
// see: http://en.wikipedia.org/wiki/Cocktail_sort
// thanks to Joseph Nahmias
var b = 0;
var t = list.length - 1;
var swap = true;

while(swap) {
swap = false;
for(var i = b; i < t; ++i) {
if ( comp_func(list[i], list[i+1]) > 0 ) {
var q = list[i]; list[i] = list[i+1]; list[i+1] = q;
swap = true;
}
} // for
t--;

if (!swap) break;

for(var i = t; i > b; --i) {
if ( comp_func(list[i], list[i-1]) < 0 ) {
var q = list[i]; list[i] = list[i-1]; list[i-1] = q;
swap = true;
}
} // for
b++;

} // while(swap)
}
}

/* ******************************************************************
Supporting functions: bundled here to avoid depending on a library
****************************************************************** */

// Dean Edwards/Matthias Miller/John Resig

/* for Mozilla/Opera9 */
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", sorttable.init, false);
}

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
if (this.readyState == "complete") {
sorttable.init(); // call the onload handler
}
};
/*@end @*/

/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
var _timer = setInterval(function() {
if (/loaded|complete/.test(document.readyState)) {
sorttable.init(); // call the onload handler
}
}, 10);
}

/* for other browsers */
window.onload = sorttable.init;

// written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini

// http://dean.edwards.name/weblog/2005/10/add-event/

function dean_addEvent(element, type, handler) {
 if (element.addEventListener) {
   element.addEventListener(type, handler, false);
 } else {
   // assign each event handler a unique ID
   if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++;
   // create a hash table of event types for the element
   if (!element.events) element.events = {};
   // create a hash table of event handlers for each element/event pair
   var handlers = element.events[type];
   if (!handlers) {
     handlers = element.events[type] = {};
     // store the existing event handler (if there is one)
     if (element["on" + type]) {
       handlers[0] = element["on" + type];
     }
   }
   // store the event handler in the hash table
   handlers[handler.$$guid] = handler;
   // assign a global event handler to do all the work
   element["on" + type] = handleEvent;
 }
};
// a counter used to create unique IDs
dean_addEvent.guid = 1;

function removeEvent(element, type, handler) {
 if (element.removeEventListener) {
   element.removeEventListener(type, handler, false);
 } else {
   // delete the event handler from the hash table
   if (element.events && element.events[type]) {
     delete element.events[type][handler.$$guid];
   }
 }
};

function handleEvent(event) {
 var returnValue = true;
 // grab the event object (IE uses a global event object)
 event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
 // get a reference to the hash table of event handlers
 var handlers = this.events[event.type];
 // execute each event handler
 for (var i in handlers) {
   this.$$handleEvent = handlers[i];
   if (this.$$handleEvent(event) === false) {
     returnValue = false;
   }
 }
 return returnValue;
};

function fixEvent(event) {
 // add W3C standard event methods
 event.preventDefault = fixEvent.preventDefault;
 event.stopPropagation = fixEvent.stopPropagation;
 return event;
};
fixEvent.preventDefault = function() {
 this.returnValue = false;
};
fixEvent.stopPropagation = function() {
this.cancelBubble = true;
}

// Dean's forEach: http://dean.edwards.name/base/forEach.js
/*
 forEach, version 1.0
 Copyright 2006, Dean Edwards
 License: http://www.opensource.org/licenses/mit-license.php
*/

// array-like enumeration
if (!Array.forEach) { // mozilla already supports this
 Array.forEach = function(array, block, context) {
   for (var i = 0; i < array.length; i++) {
     block.call(context, array[i], i, array);
   }
 };
}

// generic enumeration
Function.prototype.forEach = function(object, block, context) {
 for (var key in object) {
   if (typeof this.prototype[key] == "undefined") {
     block.call(context, object[key], key, object);
   }
 }
};

// character enumeration
String.forEach = function(string, block, context) {
 Array.forEach(string.split(""), function(chr, index) {
   block.call(context, chr, index, string);
 });
};

// globally resolve forEach enumeration
var forEach = function(object, block, context) {
 if (object) {
   var resolve = Object; // default
   if (object instanceof Function) {
     // functions have a "length" property
     resolve = Function;
   } else if (object.forEach instanceof Function) {
     // the object implements a custom forEach method so use that
     object.forEach(block, context);
     return;
   } else if (typeof object == "string") {
     // the object is a string
     resolve = String;
   } else if (typeof object.length == "number") {
     // the object is array-like
     resolve = Array;
   }
   resolve.forEach(object, block, context);
 }
};

ljbalgo.table.SPREADSHEET

name::
* McsEngl.ljbalgo.table.SPREADSHEET@cptIt,
* McsEngl.jsalgo.spreadseet@cptIt,

_ADDRESS.WPG:
* https://jsfiddle.net/ondras/hYfN3// (30 lines of code)

_CODE.HML:
<p>Inspired by <a href="http://thomasstreet.net/blog/spreadsheet.html">http://thomasstreet.net/blog/spreadsheet.html</a>. Features:</p>

<ul>
<li>Under 30 lines of vanilla JavaScript</li>
<li>Libraries used: <strong>none</strong></li>
<li>Excel-like syntax (formulas start with "=")</li>
<li>Support for arbitrary expressions (=A1+B2*C3)</li>
<li>Circular reference prevention</li>
<li>Automatic localStorage persistence</li>
</ul>

<table></table>

<footer><p>© 2013 <a href="http://ondras.zarovi.cz/">Ondrej �αra</a></p></footer>

_CODE.CSS:
li {
list-style: none;
}
li:before {
content: "? ";
}

input {
border: none;
width: 80px;
font-size: 14px;
padding: 2px;
}

input:hover {
background-color:#eee;
}

input:focus {
background-color:#ccf;
}

input:not(:focus) {
text-align: right;
}

table {
border-collapse: collapse;
}

td {
border: 1px solid#999;
padding: 0;
}

tr:first-child td, td:first-child {
background-color:#ccc;
padding: 1px 3px;
font-weight: bold;
text-align: center;
}

footer {
font-size: 80%;
}

_CODE.LJS:
for (var i=0; i<6; i++) {
var row = document.querySelector("table").insertRow(-1);
for (var j=0; j<6; j++) {
var letter = String.fromCharCode("A".charCodeAt(0)+j-1);
row.insertCell(-1).innerHTML = i&&j ? "<input id='"+ letter+i +"'/>" : i||letter;
}
}

var DATA={}, INPUTS=[].slice.call(document.querySelectorAll("input"));
INPUTS.forEach(function(elm) {
elm.onfocus = function(e) {
e.target.value = localStorage[e.target.id] || "";
};
elm.onblur = function(e) {
localStorage[e.target.id] = e.target.value;
computeAll();
};
var getter = function() {
var value = localStorage[elm.id] || "";
if (value.charAt(0) == "=") {
with (DATA) return eval(value.substring(1));
} else { return isNaN(parseFloat(value)) ? value : parseFloat(value); }
};
Object.defineProperty(DATA, elm.id, {get:getter});
Object.defineProperty(DATA, elm.id.toLowerCase(), {get:getter});
});
(window.computeAll = function() {
INPUTS.forEach(function(elm) { try { elm.value = DATA[elm.id]; } catch(e) {} });
})();

ljbalgo.table.SUM

name::
* McsEngl.ljbalgo.table.SUM@cptIt,
* McsEngl.ljs'table-sum@cptIt,

<table id="sum_table" width="300" border="1">
<tr>
<td>Apple</td>
<td>Orange</td>
<td>Watermelon</td>
</tr>
<tr>
<td class="rowDataSd">1</td>
<td class="rowDataSd">2</td>
<td class="rowDataSd">3</td>
</tr>
<tr>
<td class="rowDataSd">1</td>
<td class="rowDataSd">2</td>
<td class="rowDataSd">3</td>
</tr>
<tr>
<td class="rowDataSd">1</td>
<td class="rowDataSd">2</td>
<td class="rowDataSd">3</td>
</tr>
<tr class="totalColumn">
<td class="totalCol">Total:</td>
<td class="totalCol">Total:</td>
<td class="totalCol">Total:</td>
</tr>
</table>
$('#sum_table tr:first td').each(function(){
var $td = $(this);

var colTotal = 0;
$('#sum_table tr:not(:first,.totalColumn)').each(function(){
colTotal += parseInt($(this).children().eq($td.index()).html(),10);
});

$('#sum_table tr.totalColumn').children().eq($td.index()).html('Total: ' + colTotal);
});

Apple  Orange  Watermelon
1  2  3
1  2  3
1  2  3
Total: 3  Total: 6  Total: 9
[http://jsfiddle.net/unKDk/7/]

ljbalgo.TEST-FRAMEWORK

name::
* McsEngl.ljbalgo.TEST-FRAMEWORK@cptIt,

_ADDRESS.WPG:
* http://mochajs.org// (Node)

ljbalgo.TEXT-PROCESSING

name::
* McsEngl.ljbalgo.TEXT-PROCESSING@cptIt,
* McsEngl.ljs'proc.string@cptIt,
* McsEngl.ljs'text-processing@cptIt,

_DESCRIPTION:
Parsing Numbers

parseInt and parseFloat help parsing strings into numbers. Both do some implicit conversion if the base isn't specified:

parseInt("123") = 123 (implicit decimal)
parseInt("010") = 8 (implicit octal)
parseInt("0xCAFE") = 51966 (implicit hexadecimal)
parseInt("010", 10) = 10 (explicit decimal)
parseInt("11", 2) = 3 (explicit binary)
parseFloat("10.10") = 10.1
[http://docs.jquery.com/Types]

_Substring:
tocImgFolder = tocImgFolder.substring(0, tocImgFolder.length-4);

<script type="text/javascript">

/*code for extending String object with method that writes text backwards*/

//core custom method for writing text backwards
function outputbackwards(){
for (i=this.length-1;i>=0;i--)
document.write(this.charAt(i))
}

//Attach custom method to string object
String.prototype.writeback=outputbackwards

</script>
The above code may not look like much, but it just added a whole new functionality to the default string object- the ability to output any text backwards! Here are a few examples:

<script type="text/javascript">
var message1="Welcome to my site!"
message1.writeback()
var message2="Today is a beautiful day"
message2.writeback()
</script>
Output:

!etis ym ot emocleW
yad lufituaeb a si yadoT
[http://www.javascriptkit.com/javatutors/proto4.shtml]

ljbalgo.TextField

name::
* McsEngl.ljbalgo.TextField@cptIt,
* McsEngl.ljs'textfield@cptIt,

_CODE.LJS:
<HTML>
<HEAD>
<TITLE>JavaScript Form - Input Text Field</TITLE>
<SCRIPT Language="JavaScript">
<!--//
function showAndClearField(frm){
if (frm.firstName.value == "")
alert("Hey! You didn't enter anything!")
else
alert("The field contains the text: " + frm.firstName.value)
frm.firstName.value = ""
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="test">
<H2>Enter something into the field and press the button. <br>
Please try this a few times.</H2>
<P>Enter your First Name: <INPUT TYPE="TEXT" NAME="firstName"><BR><BR>
<INPUT TYPE="Button" Value="Show and Clear Input" onClick="showAndClearField(this.form)">
</P>
</FORM>
</BODY>
</HTML>
For example if there is a form named test and an input field named firstName then the text in the field can be accessed like this:

result = document.test.firstName.value

Similarly text can be placed in the field this way:

document.test.firstName.value = "Hello World!"
[http://www.ryerson.ca/JavaScript/lectures/forms/textinput.html]

jx'ex.textfield.NUMBER-INPUT

name::
* McsEngl.jx'ex.textfield.NUMBER-INPUT@cptIt,

Example: Allow only numbers/digits in TextBox
<HTML>
<HEAD>
<SCRIPT language=Javascript>
<!--
function isNumberKey(evt)
{
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;

return true;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<INPUT id="txtChar" onkeypress="return isNumberKey(event)" type="text" name="txtChar">
</BODY>
</HTML>
[http://www.cambiaresearch.com/articles/39/how-can-i-use-javascript-to-allow-only-numbers-to-be-entered-in-a-textbox]

ljbalgo.TIME

name::
* McsEngl.ljbalgo.TIME@cptIt,
* McsEngl.ljstime-processing@cptIt,

_SPECIFIC:
* moment-module#ql:ndmdl.moment#

ljbalgo.DATE

name::
* McsEngl.ljbalgo.DATE@cptIt,
* McsEngl.ljs'doing.Date@cptIt,

_CODE.LJS:
//Writes the last-modified date of doc:
<SCRIPT>
var theDate = ""
theDate = document.lastModified
document.writeln("Last modified: ");
document.write(theDate);
document.write();
</SCRIPT>

ljbalgo.TOKENIZER

name::
* McsEngl.ljbalgo.TOKENIZER@cptIt,

// A framework for simple tokenizers. Takes care of newlines and
// white-space, and of getting the text from the source stream into
// the token object. A state is a function of two arguments -- a
// string stream and a setState function. The second can be used to
// change the tokenizer's state, and can be ignored for stateless
// tokenizers. This function should advance the stream over a token
// and return a string or object containing information about the next
// token, or null to pass and have the (new) state be called to finish
// the token. When a string is given, it is wrapped in a {style, type}
// object. In the resulting object, the characters consumed are stored
// under the content property. Any whitespace following them is also
// automatically consumed, and added to the value property. (Thus,
// content is the actual meaningful part of the token, while value
// contains all the text it spans.)

function tokenizer(source, state) {
// Newlines are always a separate token.
function isWhiteSpace(ch) {
// The messy regexp is because IE's regexp matcher is of the
// opinion that non-breaking spaces are no whitespace.
return ch != "\n" && /^[\s\u00a0]*$/.test(ch);
}

var tokenizer = {
state: state,

take: function(type) {
if (typeof(type) == "string")
type = {style: type, type: type};

type.content = (type.content || "") + source.get();
if (!/\n$/.test(type.content))
source.nextWhile(isWhiteSpace);
type.value = type.content + source.get();
return type;
},

next: function () {
if (!source.more()) throw StopIteration;

var type;
if (source.equals("\n")) {
source.next();
return this.take("whitespace");
}

if (source.applies(isWhiteSpace))
type = "whitespace";
else
while (!type)
type = this.state(source, function(s) {tokenizer.state = s;});

return this.take(type);
}
};
return tokenizer;
}
[https://chrome.google.com/extensions/detail/nglgdmkkiemejlladcdjegcllaieegoe#]

ljbalgo.Type-ahead

name::
* McsEngl.ljbalgo.Type-ahead@cptIt,
* McsEngl.autocomplete.ljb@cptIt,
* McsEngl.autosuggest.ljb@cptIt,
* McsEngl.completion-suggester.ljb@cptIt,
* McsEngl.suggester.ljb@cptIt,
* McsEngl.ljb'autocomplete@cptIt,
* McsEngl.ljb'autosuggest@cptIt,
* McsEngl.ljs'autocomplete@cptIt,
* McsEngl.ljs'autosuggest@cptIt,
* McsEngl.ljsalgo.Autosuggest@cptIt,
* McsEngl.ljsalgo.auto-complete@cptIt,
* McsEngl.ljs'search-ahead@cptIt,
* McsEngl.ljsalgo.tracing@cptIt,
* McsEngl.ljsalgo.find-as-you-type@cptIt,

_ADDRESS.WPG:
* http://jqueryui.com/autocomplete//

MIKE-WEST:
Type-Ahead search for select elements
Thursday, March 17, 2005
* http://mikewest.org/2005/03/type-ahead-search-for-select-elements

<!-- THREE STEPS TO INSTALL LIST CHOOSER:

1. Copy the coding into the HEAD of your HTML document
2. Add the onLoad event handler into the BODY tag
3. Put the last coding into the BODY of your HTML document -->

<!-- STEP ONE: Paste this code into the HEAD of your HTML document -->

<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!-- Original: Anand Raman (anand_raman@poboxes.com) -->
<!-- Web Site: http://www.angelfire.com/ar/diduknow -->

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->

<!-- Begin
function SelObj(formname,selname,textname,str) {
this.formname = formname;
this.selname = selname;
this.textname = textname;
this.select_str = str || '';
this.selectArr = new Array();
this.initialize = initialize;
this.bldInitial = bldInitial;
this.bldUpdate = bldUpdate;
}

function initialize() {
if (this.select_str =='') {
for(var i=0;i<document.forms[this.formname][this.selname].options.length;i++) {
this.selectArr[i] = document.forms[this.formname][this.selname].options[i];
this.select_str += document.forms[this.formname][this.selname].options[i].value+":"+
document.forms[this.formname][this.selname].options[i].text+",";
}
}
else {
var tempArr = this.select_str.split(',');
for(var i=0;i<tempArr.length;i++) {
var prop = tempArr[i].split(':');
this.selectArr[i] = new Option(prop[1],prop[0]);
}
}
return;
}
function bldInitial() {
this.initialize();
for(var i=0;i<this.selectArr.length;i++)
document.forms[this.formname][this.selname].options[i] = this.selectArr[i];
document.forms[this.formname][this.selname].options.length = this.selectArr.length;
return;
}

function bldUpdate() {
var str = document.forms[this.formname][this.textname].value.replace('^\\s*','');
if(str == '') {this.bldInitial();return;}
this.initialize();
var j = 0;
pattern1 = new RegExp("^"+str,"i");
for(var i=0;i<this.selectArr.length;i++)
if(pattern1.test(this.selectArr[i].text))
document.forms[this.formname][this.selname].options[j++] = this.selectArr[i];
document.forms[this.formname][this.selname].options.length = j;
if(j==1){
document.forms[this.formname][this.selname].options[0].selected = true;
//document.forms[this.formname][this.textname].value = document.forms[this.formname][this.selname].options[0].text;
}
}
function setUp() {
obj1 = new SelObj('menuform','itemlist','entry');
// menuform is the name of the form you use
// itemlist is the name of the select pulldown menu you use
// entry is the name of text box you use for typing in
obj1.bldInitial();
}
// End -->
</script>
</HEAD>

<!-- STEP TWO: Insert the onLoad event handler into your BODY tag -->

<BODY OnLoad="javascript:setUp()">

<!-- STEP THREE: Copy this code into the BODY of your HTML document -->

<center>
<form name="menuform" onSubmit="javascript:window.location = document.menuform.itemlist.options[document.menuform.itemlist.selectedIndex].value;return false;">

<font face="arial, helvetica" size="-1">Please enter the first few letters of the item you are looking for.</font>
<br><br>
<input type="text" name="entry" size="30" onKeyUp="javascript:obj1.bldUpdate();">
<br>
<select name="itemlist" size=5>
<option value="page.html">ALL
<option value="page.html">ALL CATALOG
<option value="page.html">ALL CLUSTERS
<option value="page.html">ALL CLUSTERS HASH EXPRESSIONS
<option value="page.html">ALL COL COMMENTS
<option value="page.html">ALL COL PRIVS
<option value="page.html">ALL COL PRIVS MADE
<option value="page.html">ALL COL PRIVS SENT
<option value="page.html">ALL CONSTRAINTS
<option value="page.html">ALL CONS COLUMNS
<option value="page.html">ALL DB LINKS
<option value="page.html">ALL DEF AUDIT
<option value="page.html">ALL DEPENDENCIES
<option value="page.html">ALL ERRORS
<option value="page.html">ALL HISTOGRAMS
<option value="page.html">ALL INDEXES
<option value="page.html">ALL IND COLUMNS
<option value="page.html">ALL JOBS
<option value="page.html">ALL OBJECTS
<option value="page.html">ALL REFRESH
<option value="page.html">ALL REFRESH NOW
<option value="page.html">ALL USERS
<option value="page.html">ALL VIEWS
<option value="page.html">AUDIT ACTIONS
<option value="page.html">BOOKS
<option value="page.html">CLIENTS
<option value="page.html">CLOSED
<option value="page.html">COLUMN PRIVILEGES
<option value="page.html">DBA ANALYZE COST
<option value="page.html">DBA FROM CLIENTS
<option value="page.html">DBA FROM NEIGHBORS
<option value="page.html">DBA PROFILES
<option value="page.html">DBA REFRESH ALL
<option value="page.html">DBA REFRESH PAGE
<option value="page.html">DBA REPORT
<option value="page.html">DBA RGROUP
<option value="page.html">DBA ROLE
<option value="page.html">DBA ROLE SUMMARY
<option value="page.html">DBA ROLLBACK SEGS
</select>
</form>
</center>

<p><center>
<font face="arial, helvetica" size="-2">Free JavaScripts provided<br>
by <a href="http://javascriptsource.com">The JavaScript Source</a></font>
</center><p>

<!-- Script Size: 4.83 KB -->
[http://javascript.internet.com/forms/list-chooser.html]

JS Select Box Type Ahead
Asked by micamedia in JavaScript
Tags: javascript, box, select, type, ahead
I have come up with the follow code which lets the user type in the text box and the select box finds the closest first match. I have a part commented out which will actually highlight the part not typed (just in ie's address bar). It works fine, but when the select boxes get big *500+*(which in my application they are all) it takes a long time.

Is there a better way to do this, or can this be optimized somehow? If you have a better way of doing the same thing or can optimze it please responde
with the new code.

by the way i realize this in an IE only solution and that's ok. I only need it to work in IE.

However I need it to work. Honestly I'd like to just have a select box that worked EXACTLY like the type ahead in IE's address bar.

But I can't figure out how. I don't mind using Active X either. Like i said it only has to work in IE.

Thanks

my code follows:
============

<script language="javascript">
function findMatch(selectBox, txtFind, objEvent) {

if (objEvent.keyCode != 8) {
var i;
var s = "";
var st2 = new String(txtFind.value)
s2 = st2.toLowerCase()

for (i=0; i<selectBox.options.length; i++) {
s = selectBox.options[i].text;
st = new String(s)
s = st.toLowerCase()
if (s.indexOf(s2) == 0) {
selectBox.selectedIndex = i;

//Selects the text. Commented out because it's too slow.
/*
var typed_string = new String(s2);
var total_string = new String(s);
var t = total_string.length - (total_string.length -
typed_string.length);
var end_string = total_string.substring(t, total_string.length);
txtFind.value = s
if (end_string != "" && end_string.length > 1) {
var range = txtFind.createTextRange();
range.findText(end_string)
range.select();
}
*/

return;
}
}
}
}
</script>
[http://www.experts-exchange.com/Web/Web_Languages/JavaScript/Q_20433351.html]

Resource

_ADDRESS.WPG:
* An extremely lightweight and powerful vanilla JavaScript completion suggester. https://goodies.pixabay.com/javascript/auto-complete/demo.html,
* http://www.javascript-examples.com/autocomplete-demo//
* http://web.cs.ucla.edu/classes/winter15/cs144/projects/javascript/suggest1.html,
* http://web.cs.ucla.edu/classes/winter15/cs144/projects/javascript/suggest2.html,

ljbalgo.URL

name::
* McsEngl.ljbalgo.URL@cptIt,

_ADDRESS.WPG:
* http://blog.stevenlevithan.com/archives/parseuri,

ljbalgo.VARIABLE

name::
* McsEngl.ljbalgo.VARIABLE@cptIt,

_CODE.LJS:
var regex = /sandwich/;

ljbalgo.W

name::
* McsEngl.ljbalgo.W@cptIt,

ljbalgo.Window-Size

name::
* McsEngl.ljbalgo.Window-Size@cptIt,
* McsEngl.ljs'Window-Size@cptIt,

function alertSize() {
var myWidth = 0, myHeight = 0;
if( typeof( window.innerWidth ) == 'number' ) {
//Non-IE
myWidth = window.innerWidth;
myHeight = window.innerHeight;
} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
//IE 6+ in 'standards compliant mode'
myWidth = document.documentElement.clientWidth;
myHeight = document.documentElement.clientHeight;
} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
//IE 4 compatible
myWidth = document.body.clientWidth;
myHeight = document.body.clientHeight;
}
window.alert( 'Width = ' + myWidth );
window.alert( 'Height = ' + myHeight );
}
[http://www.howtocreate.co.uk/tutorials/javascript/browserwindow]

ljbalgo.XML

name::
* McsEngl.ljbalgo.XML@cptIt,
* McsEngl.ljs'code.XML-PROCESSING@cptIt,
* McsEngl.ljs'xml-processing-code@cptIt,

ljb'cdSource.xml'resource

name::
* McsEngl.ljb'cdSource.xml'resource@cptIt,

_ADDRESS.WPG:
* http://jsxml.net//

ljbalgo.pattern.Abstract-Factory

name::
* McsEngl.ljbalgo.pattern.Abstract-Factory@cptIt,
* McsEngl.ljs'abstract-factory-pattern@cptIt,

_GENERIC:
* js-creational-pattern#ql:js'pattern.creational#

_DESCRIPTION:
Creates an instance of several families of classes without detailing concrete classes.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Adapter

name::
* McsEngl.ljbalgo.pattern.Adapter@cptIt,
* McsEngl.ljs'adapter-pattern@cptIt,

_GENERIC:
* js-structural-pattern#ql:js'pattern.structural#

_DESCRIPTION:
Match interfaces of different classes therefore classes can work together despite incompatible interfaces
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.BAD

name::
* McsEngl.ljbalgo.pattern.BAD@cptIt,
* McsEngl.ljs'anti-pattern@cptIt,
* McsEngl.ljs'bad-pattern@cptIt,

_SPECIFIC:
To summarize, an anti-pattern is a bad design that is worthy of documenting. Examples of anti-patterns in JavaScript are the following:
* Polluting the global namespace by defining a large number of variables in the global context
* Passing strings rather than functions to either setTimeout or setInterval as this triggers the use of eval() internally.
* Modifying the Object class prototype (this is a particularly bad anti-pattern)
* Using JavaScript in an inline form as this is inflexible
* The use of document.write where native DOM alternatives such as document.createElement are more appropriate. document.write has been grossly misused over the years and has quite a few disadvantages including that if it's executed after the page has been loaded it can actually overwrite the page we're on, whilst document.createElement does not. We can see here for a live example of this in action. It also doesn't work with XHTML which is another reason opting for more DOM-friendly methods such as document.createElement is favorable.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#antipatterns]

ljbalgo.pattern.BEHAVIORAL

name::
* McsEngl.ljbalgo.pattern.BEHAVIORAL@cptIt,
* McsEngl.ljs'behavioral-pattern@cptIt,

_DESCRIPTION:
Behavioral patterns focus on improving or streamlining the communication between disparate objects in a system.
Some behavioral patterns include: Iterator, Mediator, Observer and Visitor.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#categoriesofdesignpatterns]

_SPECIFIC:
Behavioral   Based on the way objects play and work together.
Class
Interpreter   A way to include language elements in an application to match the grammar of the intended language.
Template
Method  Creates the shell of an algorithm in a method, then defer the exact steps to a subclass.
Object
Chain of
Responsibility   A way of passing a request between a chain of objects to find the object that can handle the request.
Command   Encapsulate a command request as an object to enable, logging and/or queuing of requests, and provides error-handling for unhandled requests.
Iterator   Sequentially access the elements of a collection without knowing the inner workings of the collection.
Mediator   Defines simplified communication between classes to prevent a group of classes from referring explicitly to each other.
Memento   Capture an object's internal state to be able to restore it later.
Observer   A way of notifying change to a number of classes to ensure consistency between the classes.
State   Alter an object's behavior when its state changes
Strategy   Encapsulates an algorithm inside a class separating the selection from the implementation
Visitor   Adds a new operation to a class without changing the class
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Bridge

name::
* McsEngl.ljbalgo.pattern.Bridge@cptIt,
* McsEngl.ljs'bridge-pattern@cptIt,

_GENERIC:
* js-structural-pattern#ql:js'pattern.structural#

_DESCRIPTION:
Separates an object's interface from its implementation so the two can vary independently
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Builder

name::
* McsEngl.ljbalgo.pattern.Builder@cptIt,
* McsEngl.ljs'builder-pattern@cptIt,

_GENERIC:
* js-creational-pattern#ql:js'pattern.creational#

_DESCRIPTION:
Separates object construction from its representation, always creates the same type of object.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Chain-of-Responsibility

name::
* McsEngl.ljbalgo.pattern.Chain-of-Responsibility@cptIt,
* McsEngl.ljs'chain-of-responsibility-pattern@cptIt,

_GENERIC:
* js-behavioral-pattern#ql:js'pattern.behavioral#

_DESCRIPTION:
A way of passing a request between a chain of objects to find the object that can handle the request.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Command

name::
* McsEngl.ljbalgo.pattern.Command@cptIt,
* McsEngl.ljs'command-pattern@cptIt,

_GENERIC:
* js-behavioral-pattern#ql:js'pattern.behavioral#

_DESCRIPTION:
Encapsulate a command request as an object to enable, logging and/or queuing of requests, and provides error-handling for unhandled requests.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Composite

name::
* McsEngl.ljbalgo.pattern.Composite@cptIt,
* McsEngl.ljs'composite-pattern@cptIt,

_GENERIC:
* js-structural-pattern#ql:js'pattern.structural#

_DESCRIPTION:
A structure of simple and composite objects which makes the total object more than just the sum of its parts.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.CREATIONAL

name::
* McsEngl.ljbalgo.pattern.CREATIONAL@cptIt,
* McsEngl.ljs'creational-pattern@cptIt,

_DESCRIPTION:
Creational design patterns focus on handling object creation mechanisms where objects are created in a manner suitable for the situation we're are working in. The basic approach to object creation might otherwise lead to added complexity in a project whilst these patterns aim to solve this problem by controlling the creation process.

Some of the patterns that fall under this category are: Constructor, Factory, Abstract, Prototype, Singleton and Builder.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#categoriesofdesignpatterns]

_SPECIFIC:
Creational   Based on the concept of creating an object.
Class
Factory Method  This makes an instance of several derived classes based on interfaced data or events.
Object
Abstract Factory  Creates an instance of several families of classes without detailing concrete classes.
Builder  Separates object construction from its representation, always creates the same type of object.
Prototype  A fully initialized instance used for copying or cloning.
Singleton  A class with only a single instance with global access points.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Decorator

name::
* McsEngl.ljbalgo.pattern.Decorator@cptIt,
* McsEngl.ljs'decorator-pattern@cptIt,

_GENERIC:
* js-structural-pattern#ql:js'pattern.structural#

_DESCRIPTION:
Dynamically add alternate processing to objects.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

Example 1: Decorating Constructors With New Functionality

// A vehicle constructor
function vehicle( vehicleType ){

// some sane defaults
this.vehicleType = vehicleType || "car";
this.model = "default";
this.license = "00000-000";

}

// Test instance for a basic vehicle
var testInstance = new vehicle( "car" );
console.log( testInstance );

// Outputs:
// vehicle: car, model:default, license: 00000-000

// Lets create a new instance of vehicle, to be decorated
var truck = new vehicle( "truck" );

// New functionality we're decorating vehicle with
truck.setModel = function( modelName ){
this.model = modelName;
};

truck.setColor = function( color ){
this.color = color;
};

// Test the value setters and value assignment works correctly
truck.setModel( "CAT" );
truck.setColor( "blue" );

console.log( truck );

// Outputs:
// vehicle:truck, model:CAT, color: blue

// Demonstrate "vehicle" is still unaltered
var secondInstance = new vehicle( "car" );
console.log( secondInstance );

// Outputs:
// vehicle: car, model:default, license: 00000-000
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#decoratorpatternjavascript]

ljbalgo.pattern.Facade

name::
* McsEngl.ljbalgo.pattern.Facade@cptIt,
* McsEngl.ljs'facade-pattern@cptIt,

_GENERIC:
* js-structural-pattern#ql:js'pattern.structural#

_DESCRIPTION:
A single class that hides the complexity of an entire subsystem.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Factory-Method

name::
* McsEngl.ljbalgo.pattern.Factory-Method@cptIt,
* McsEngl.ljs'factory-method-pattern@cptIt,

_GENERIC:
* js-creational-pattern#ql:js'pattern.creational#

_DESCRIPTION:
This makes an instance of several derived classes based on interfaced data or events.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Flyweight

name::
* McsEngl.ljbalgo.pattern.Flyweight@cptIt,
* McsEngl.ljs'flyweight-pattern@cptIt,

_GENERIC:
* js-structural-pattern#ql:js'pattern.structural#

_DESCRIPTION:
A fine-grained instance used for efficient sharing of information that is contained elsewhere.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]
===
The name Flyweight itself is derived from this weight classification as it refers to the small weight (memory footprint) the pattern aims to help us achieve.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailflyweight]

ljbalgo.pattern.Interpreter

name::
* McsEngl.ljbalgo.pattern.Interpreter@cptIt,
* McsEngl.ljs'interpreter-pattern@cptIt,

_GENERIC:
* js-behavioral-pattern#ql:js'pattern.behavioral#

_DESCRIPTION:
A way to include language elements in an application to match the grammar of the intended language.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Iterator

name::
* McsEngl.ljbalgo.pattern.Iterator@cptIt,
* McsEngl.ljs'iterator-pattern@cptIt,

_GENERIC:
* js-behavioral-pattern#ql:js'pattern.behavioral#

_DESCRIPTION:
Sequentially access the elements of a collection without knowing the inner workings of the collection.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.MATHEMATICAL

name::
* McsEngl.ljbalgo.pattern.MATHEMATICAL@cptIt,
* McsEngl.ljs'mathematical-operation@cptIt,

_DESCRIPTION:
Mathematical operations such as addition, subtraction, negation, multiplication, division, and the mathematical functions defined later in this clause should always be understood as computing exact mathematical results on mathematical real numbers, which do not include infinities and do not include a negative zero that is distinguished from positive zero. Algorithms in this standard that model floating-point arithmetic include explicit steps, where necessary, to handle infinities and signed zero and to perform rounding. If a mathematical operation or function is applied to a floating-point number, it should be understood as being applied to the exact mathematical value represented by that floating-point number; such a floating-point number must be finite, and if it is +0 or -0 then the corresponding mathematical value is simply 0.

The mathematical function abs(x) yields the absolute value of x, which is -x if x is negative (less than zero) and otherwise is x itself.

The mathematical function sign(x) yields 1 if x is positive and -1 if x is negative. The sign function is not used in this standard for cases when x is zero.

The notation “x modulo y” (y must be finite and nonzero) computes a value k of the same sign as y (or zero) such that abs(k) < abs(y) and x-k = q Χ y for some integer q.

The mathematical function floor(x) yields the largest integer (closest to positive infinity) that is not larger than x.

NOTEfloor(x) = x-(x modulo 1).
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec5.2P8]

ljbalgo.pattern.Mediator

name::
* McsEngl.ljbalgo.pattern.Mediator@cptIt,
* McsEngl.ljs'mediator-pattern@cptIt,

_GENERIC:
* js-behavioral-pattern#ql:js'pattern.behavioral#

_DESCRIPTION:
Defines simplified communication between classes to prevent a group of classes from referring explicitly to each other.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]
===
A real-world analogy could be a typical airport traffic control system. A tower (Mediator) handles what planes can take off and land because all communications (notifications being listened out for or broadcast) are done from the planes to the control tower, rather than from plane-to-plane. A centralized controller is key to the success of this system and that's really the role a Mediator plays in software design.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#mediatorpatternjavascript]

_ADDRESS.WPG:
* http://arguments.callee.info/2009/05/18/javascript-design-patterns--mediator//

ljbalgo.pattern.Memento

name::
* McsEngl.ljbalgo.pattern.Memento@cptIt,
* McsEngl.ljs'memento-pattern@cptIt,

_GENERIC:
* js-behavioral-pattern#ql:js'pattern.behavioral#

_DESCRIPTION:
Capture an object's internal state to be able to restore it later.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.MODULAR#ql:js'modular-pattern#

name::
* McsEngl.ljbalgo.pattern.MODULAR@cptIt,

ljbalgo.pattern.MVC

name::
* McsEngl.ljbalgo.pattern.MVC@cptIt,
* McsEngl.ljs'MVC-pattern@cptIt,

controller

_DESCRIPTION:
controllers are traditionally responsible for updating the model when the user updates the view.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailmvcmvp]

model
view
ljbalgo.MVP

name::
* McsEngl.ljbalgo.MVP@cptIt,

_DESCRIPTION:
In MVP, the P observes models and updates views when models change. The P effectively binds models to views, a responsibility which was previously held by controllers in MVC.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailmvcmvp]

ljbalgo.MVVM

name::
* McsEngl.ljbalgo.MVVM@cptIt,

ljbalgo.pattern.Observer

name::
* McsEngl.ljbalgo.pattern.Observer@cptIt,
* McsEngl.ljs'observer-pattern@cptIt,

_GENERIC:
* js-behavioral-pattern#ql:js'pattern.behavioral#

_DESCRIPTION:
A way of notifying change to a number of classes to ensure consistency between the classes.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]
===
The Observer is a design pattern where an an object (known as a subject) maintains a list of objects depending on it (observers), automatically notifying them of any changes to state.

When a subject needs to notify observers about something interesting happening, it broadcasts a notification to the observers (which can include specific data related to the topic of the notification).

When we no longer wish for a particular observer to be notified of changes by the subject they are registered with, the subject can remove them from the list of observers.

It's often useful to refer back to published definitions of design patterns that are language agnostic to get a broader sense of their usage and advantages over time. The definition of the Observer pattern provided in the GoF book, Design Patterns: Elements of Reusable Object-Oriented Software, is:

"One or more observers are interested in the state of a subject and register their interest with the subject by attaching themselves. When something changes in our subject that the observer may be interested in, a notify message is sent which calls the update method in each observer. When the observer is no longer interested in the subject's state, they can simply detach themselves."
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjavascript]

ljb'op'notification

name::
* McsEngl.ljb'op'notification@cptIt,

_DESCRIPTION:
When a subject needs to notify observers about something interesting happening, it broadcasts a notification to the observers (which can include specific data related to the topic of the notification).
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjavascript]

ljb'op'observer

name::
* McsEngl.ljb'op'observer@cptIt,

_DESCRIPTION:
The Observer is a design pattern where an an object (known as a subject) maintains a list of objects depending on it (observers), automatically notifying them of any changes to state.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjavascript]

ljb'op'subject

name::
* McsEngl.ljb'op'subject@cptIt,

_DESCRIPTION:
The Observer is a design pattern where an an object (known as a subject) maintains a list of objects depending on it (observers), automatically notifying them of any changes to state.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjavascript]

ljbalgo.pattern.Prototype

name::
* McsEngl.ljbalgo.pattern.Prototype@cptIt,
* McsEngl.ljs'prototype-pattern@cptIt,

_GENERIC:
* js-creational-pattern#ql:js'pattern.creational#

_DESCRIPTION:
A fully initialized instance used for copying or cloning.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]
===
The GoF refer to the prototype pattern as one which creates objects based on a template of an existing object through cloning.
We can think of the prototype pattern as being based on prototypal inheritance where we create objects which act as prototypes for other objects. The prototype object itself is effectively used as a blueprint for each object the constructor creates. If the prototype of the constructor function used contains a property called name for example (as per the code sample lower down), then each object created by that same constructor will also have this same property.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#prototypepatternjavascript]

ljbalgo.pattern.Proxy

name::
* McsEngl.ljbalgo.pattern.Proxy@cptIt,
* McsEngl.ljs'proxy-pattern@cptIt,

_GENERIC:
* js-structural-pattern#ql:js'pattern.structural#

_DESCRIPTION:
A place holder object representing the true object
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Singleton

name::
* McsEngl.ljbalgo.pattern.Singleton@cptIt,
* McsEngl.ljs'singleton-pattern@cptIt,

_GENERIC:
* js-creational-pattern#ql:js'pattern.creational#

_DESCRIPTION:
A class with only a single instance with global access points.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]
===
The Singleton pattern is thus known because it restricts instantiation of a class to a single object. Classically, the Singleton pattern can be implemented by creating a class with a method that creates a new instance of the class if one doesn't exist. In the event of an instance already existing, it simply returns a reference to that object.

Singletons differ from static classes (or objects) as we can delay their initialization, generally because they require some information that may not be available during initialization time. They don't provide a way for code that is unaware of a previous reference to them to easily retrieve them. This is because it is neither the object or "class" that's returned by a Singleton, it's a structure. Think of how closured variables aren't actually closures - the function scope that provides the closure is the closure.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#singletonpatternjavascript]

ljbalgo.pattern.State

name::
* McsEngl.ljbalgo.pattern.State@cptIt,
* McsEngl.ljs'state-pattern@cptIt,

_GENERIC:
* js-behavioral-pattern#ql:js'pattern.behavioral#

_DESCRIPTION:
Alter an object's behavior when its state changes
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Strategy

name::
* McsEngl.ljbalgo.pattern.Strategy@cptIt,
* McsEngl.ljs'strategy-pattern@cptIt,

_GENERIC:
* js-behavioral-pattern#ql:js'pattern.behavioral#

_DESCRIPTION:
Encapsulates an algorithm inside a class separating the selection from the implementation
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.STRUCTURAL

name::
* McsEngl.ljbalgo.pattern.STRUCTURAL@cptIt,
* McsEngl.ljs'structural-pattern@cptIt,

_DESCRIPTION:
Structural patterns are concerned with object composition and typically identify simple ways to realize relationships between different objects. They help ensure that when one part of a system changes, the entire structure of the system doesn't need to do the same. They also assist in recasting parts of the system which don't fit a particular purpose into those that do.
Patterns that fall under this category include: Decorator, Facade, Flyweight, Adapter and Proxy.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#categoriesofdesignpatterns]

_SPECIFIC:
Structural   Based on the idea of building blocks of objects
Class
Adapter   Match interfaces of different classes therefore classes can work together despite incompatible interfaces
Object
Adapter   Match interfaces of different classes therefore classes can work together despite incompatible interfaces
Bridge  Separates an object's interface from its implementation so the two can vary independently
Composite   A structure of simple and composite objects which makes the total object more than just the sum of its parts.
Decorator   Dynamically add alternate processing to objects.
Facade   A single class that hides the complexity of an entire subsystem.
Flyweight   A fine-grained instance used for efficient sharing of information that is contained elsewhere.
Proxy   A place holder object representing the true object
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Template-Method

name::
* McsEngl.ljbalgo.pattern.Template-Method@cptIt,
* McsEngl.ljs'template-method-pattern@cptIt,

_GENERIC:
* js-behavioral-pattern#ql:js'pattern.behavioral#

_DESCRIPTION:
Creates the shell of an algorithm in a method, then defer the exact steps to a subclass.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.pattern.Visitor

name::
* McsEngl.ljbalgo.pattern.Visitor@cptIt,
* McsEngl.ljs'visitor-pattern@cptIt,

_GENERIC:
* js-behavioral-pattern#ql:js'pattern.behavioral#

_DESCRIPTION:
Adds a new operation to a class without changing the class
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns]

ljbalgo.BROWSER-PROCESSING

name::
* McsEngl.ljbalgo.BROWSER-PROCESSING@cptIt,
* McsEngl.ljsalgo.browser-manging@cptIt,
* McsEngl.ljsbrowser-managing@cptIt,
* McsEngl.ljs'BOM@cptIt,
* McsEngl.BOM!=browser object model@cptIt, [http://domenlightenment.com/#11.4]

_DESCRIPTION:
Browser-object-model is A-GROUP of objects of oWindow that help us to manage the-browser.
[hmnSngo.2015-10-31]

_ADDRESS.WPG:
* http://javascript.info/tutorial/browser-environment,

_SPECIFIC:
* history##
* location##
* navigator##
* screen##
===
Browser Objects Reference
* Window object
* Navigator object
* Screen object
* History object
* Location object
[http://www.w3schools.com/jsref/default.asp] 2010-09-23

js'browser-compatibility#ql:js'browser-support#

name::
* McsEngl.js'browser-compatibility@cptIt,

jsBrowser-event

name::
* McsEngl.ljsevt.browser@cptIt,
* McsEngl.ljsevent.browser@cptIt,

ljbevt.popstate

name::
* McsEngl.ljbevt.popstate@cptIt,
* McsEngl.ljspopstate-event@cptIt,
* McsEngl.ljsonpopstate@cptIt,
* McsEngl.ljsevt.onpopstate@cptIt,
* McsEngl.ljsevent.popstate@cptIt,

_DESCRIPTION:
The popstate event is fired when the active history entry changes. If the history entry being activated was created by a call to history.pushState() or was affected by a call to history.replaceState(), the popstate event's state property contains a copy of the history entry's state object.

Note that just calling history.pushState() or history.replaceState() won't trigger a popstate event. The popstate event is only triggered by doing a browser action such as a click on the back button (or calling history.back() in JavaScript).

Browsers tend to handle the popstate event differently on page load. Chrome (prior to v34) and Safari always emit a popstate event on page load, but Firefox doesn't.
[https://developer.mozilla.org/en-US/docs/Web/Events/popstate]

_TRIGGER:
As per MDN documentation
Note that just calling history.pushState() or history.replaceState() won't trigger a popstate event. The popstate event is only triggered by doing a browser action such as a click on the back button (or calling history.back() in JavaScript).

jsBrowser-detection

name::
* McsEngl.ljsalgo.BROWSER-DETECTION@cptIt,
* McsEngl.ljs'detection.browser@cptIt,
* McsEngl.ljscode.detection.browser@cptIt,

_CODE.LJS:
//FIREFOX
if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {}
===
You can try following way to check Browser version.

<!DOCTYPE html>
<html>
<body>
<p>What is the name(s) of your browser?</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>

function myFunction() {
if(navigator.userAgent.indexOf("Chrome") != -1 )
{
alert('Chrome');
}
else if(navigator.userAgent.indexOf("Opera") != -1 )
{
alert('Opera');
}
else if(navigator.userAgent.indexOf("Firefox") != -1 )
{
alert('Firefox');
}
else if((navigator.userAgent.indexOf("MSIE") != -1 ) || (!!document.documentMode == true )) //IF IE > 10
{
alert('IE');
}
else
{
alert('unknown');
}
}
</script>

</body>
</html>
And if you need to know only IE Browser version then you can follow below code. This code working well for version IE6 to IE11

<!DOCTYPE html>
<html>
<body>

<p>Click on Try button to check IE Browser version.</p>

<button onclick="getInternetExplorerVersion()">Try it</button>

<p id="demo"></p>

<script>
function getInternetExplorerVersion() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
var rv = -1;

if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number
{

if (isNaN(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))))) {
//For IE 11 >
if (navigator.appName == 'Netscape') {
var ua = navigator.userAgent;
var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null) {
rv = parseFloat(RegExp.$1);
alert(rv);
}
}
else {
alert('otherbrowser');
}
}
else {
//For < IE11
alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
}
return false;
}}
</script>

</body>
</html>
[http://stackoverflow.com/a/26358856]

jshistory-object > History.prototype > Object.prototype

name::
* McsEngl.jshistory-object > History.prototype > Object.prototype@cptIt,
* McsEngl.ljsoHistory@cptIt,
* McsEngl.ljshistory@cptIt,

ljshistory.MEMBER:

ljb'History-function

name::
* McsEngl.ljb'History-function@cptIt,
* McsEngl.ljs'history@cptIt,

_GENERIC:
typeof History
"function"

_DESCRIPTION:
History Object

The history object contains the URLs visited by the user (within a browser window).

The history object is part of the window object and is accessed through the window.history property.

Note: There is no public standard that applies to the history object, but all major browsers support it.

History Object Properties

Property  Description
length  Returns the number of URLs in the history list
History Object Methods

Method  Description
back()  Loads the previous URL in the history list
forward()  Loads the next URL in the history list
go()  Loads a specific URL from the history list
[http://www.w3schools.com/jsref/obj_history.asp]

jshistory.back()

name::
* McsEngl.jshistory.back()@cptIt,

_DESCRIPTION:
This will act exactly like the user clicked on the Back button in their browser toolbar.
[https://developer.mozilla.org/en-US/docs/Web/API/History_API]

jslocation-object

name::
* McsEngl.ljslocation@cptIt,
* McsEngl.ljso.location@cptIt,
* McsEngl.ljsolocation@cptIt,
* McsEngl.ljs'location-global-variable@cptIt,
* McsEngl.ljs'location-member-of-window-object@cptIt,

jsolocation.MEMBER:
> toString.call(location)
"[object Location]"
> Object.getOwnPropertyNames(location).sort()
["ancestorOrigins", "assign", "hash", "host", "hostname", "href", "origin", "pathname", "port", "protocol", "reload", "replace", "search", "toString", "valueOf"]
> Location.prototype:
Object.getOwnPropertyNames(location.__proto__).sort()
["constructor"]
> Object.prototype:
Object.getOwnPropertyNames(location.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

jsolocation.href
"file:///D:/File1a/PgmSgm/pgmSgm.html"

lcpJs'Location-function

name::
* McsEngl.lcpJs'Location_function@cptIt,
* McsEngl.lcpJs'location@cptIt,

_GENERIC:
* browser-object#ql:js'object.browser#,
===
> typeof Location
"function"

_DESCRIPTION:
Location Object
The location object contains information about the current URL.

The location object is part of the window object and is accessed through the window.location property.

Note Note: There is no public standard that applies to the location object, but all major browsers support it.
Location Object Properties
Property  Description
hash  Returns the anchor portion of a URL
host  Returns the hostname and port of a URL
hostname  Returns the hostname of a URL
href  Returns the entire URL
pathname  Returns the path name of a URL
port  Returns the port number the server uses for a URL
protocol  Returns the protocol of a URL
search  Returns the query portion of a URL
Location Object Methods
Method  Description
assign()  Loads a new document
reload()  Reloads the current document
replace()  Replaces the current document with a new one
[http://www.w3schools.com/jsref/obj_location.asp]
===
window.location:
U can use document.title to access the title of the page &
window.location.host gives you the URL of the current page
whereas location.href will give you the complete URL.
===
It is better than using window.location.href =, because replace() does not put the originating page in the session history, meaning the user won't get stuck in a never-ending back-button fiasco. If you want to simulate someone clicking on a link, use location.href. If you want to simulate an HTTP redirect, use location.replace.

For example:
// similar behavior as an HTTP redirect
window.location.replace("http://stackoverflow.com");
// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";
[http://stackoverflow.com/questions/503093/how-can-i-make-a-redirect-page-in-jquery-javascript]

_CODE.LJS:
<html>
<body>

<script type="text/javascript">

document.write(location.href);

</script>

</body>
</html>
==============
http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_loc_href

jsnavigator-object

name::
* McsEngl.ljsonavigator@cptIt,
* McsEngl.ljsoNavigator@cptIt,
* McsEngl.ljso.window.navigator@cptIt,

_DESCRIPTION:
The navigator object contains information about the browser.

Note: There is no public standard that applies to the navigator object, but all major browsers support it.

Navigator Object Properties
Property  Description
* appCodeName  Returns the code name of the browser
* appName  Returns the name of the browser
* appVersion  Returns the version information of the browser
* jscookieEnabled  Determines whether cookies are enabled in the browser
* jsgeolocation  Returns a Geolocation object that can be used to locate the user's position
* jslanguage  Returns the language of the browser
* jsonLine  Determines whether the browser is online
* jsplatform  Returns for which platform the browser is compiled
* jsproduct  Returns the engine name of the browser
* userAgent  Returns the user-agent header sent by the browser to the server
Navigator Object Methods
Method  Description
* jsjavaEnabled()  Specifies whether or not the browser has Java enabled
* jstaintEnabled()  Removed in JavaScript version 1.2. Specifies whether the browser has data tainting enabled
[http://www.w3schools.com/jsref/obj_navigator.asp]

* jsappCodeName  Returns the code name of the browser
> CHROME: navigator.appCodeName
"Mozilla"

jsappName:
The returned value varies from different browsers:
* IE11, Firefox, Chrome and Safari returns "Netscape"
* IE 10 and earlier versions return "Microsoft Internet Explorer"
* Opera returns "Opera"
[http://www.w3schools.com/jsref/prop_nav_appname.asp]
===
> navigator.appName
"Netscape"

* jsappVersion  Returns the version information of the browser
> navigator.appVersion
"5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36"

ljb'Navigator-function

name::
* McsEngl.ljb'Navigator-function@cptIt,
* McsEngl.ljs'navigator@cptIt,

_GENERIC:
> Object.getPrototypeOf(Navigator)
function Empty() {}
> Navigator.__proto__
function Empty() {}
> typeof Navigator
"function"

_DESCRIPTION:
Navigator Object
The navigator object contains information about the browser.

Note Note: There is no public standard that applies to the navigator object, but all major browsers support it.

Navigator Object Properties
Property    Description
appCodeName  Returns the code name of the browser
appName    Returns the name of the browser
appVersion    Returns the version information of the browser
cookieEnabled  Determines whether cookies are enabled in the browser
platform    Returns for which platform the browser is compiled
userAgent    Returns the user-agent header sent by the browser to the server

Navigator Object Methods
Method    Description
javaEnabled()  Specifies whether or not the browser has Java enabled
taintEnabled()  Specifies whether or not the browser has data tainting enabled
[http://www.w3schools.com/jsref/obj_navigator.asp]

_MEMBER:
Object.getOwnPropertyNames(Navigator).sort()
["arguments", "caller", "length", "name", "prototype", "toString"]
===
getAllPropertyNames(Navigator).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "apply", "arguments", "bind", "call", "caller", "constructor", "hasOwnProperty", "isPrototypeOf", "length", "name", "propertyIsEnumerable", "prototype", "toLocaleString", "toString", "valueOf"]

oNavigator (navigator)

jsoNavigator.CHROME:
> Object.getOwnPropertyNames(navigator).sort()
[]

Navigator.prototype > Object.prototype

name::
* McsEngl.Navigator.prototype > Object.prototype@cptIt,

jsNavigator.prototype.CHROME:
> Object.getOwnPropertyNames(Navigator.prototype).sort()
["jsappCodeName", "ljsappName", "ljsappVersion", "ljsconstructor", "ljscookieEnabled", "ljsdoNotTrack", "ljsgeolocation", "ljsgetBattery", "ljsgetGamepads", "ljsgetStorageUpdates", "ljshardwareConcurrency", "ljsjavaEnabled", "ljslanguage", "ljslanguages", "ljsmaxTouchPoints", "ljsmimeTypes", "ljsonLine", "ljspermissions", "ljsplatform", "ljsplugins", "ljsproduct", "ljsproductSub", "ljsregisterProtocolHandler", "ljsrequestMIDIAccess", "ljsrequestMediaKeySystemAccess", "ljssendBeacon", "ljsserviceWorker", "ljsunregisterProtocolHandler", "ljsuserAgent", "ljsvendor", "ljsvendorSub", "ljsvibrate", "ljswebkitGetUserMedia", "ljswebkitPersistentStorage", "ljswebkitTemporaryStorage"]
> Object.getOwnPropertyNames(Navigator.prototype.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

navigator.userAgent

name::
* McsEngl.navigator.userAgent@cptIt,
* McsEngl.jsuserAgent@cptIt,
* McsEngl.ljsuserAgent@cptIt,

_DESCRIPTION:
Returns the user-agent header sent by the browser to the server.

_ADDRESS.WPG:
* http://www.useragentstring.com//

Platform token  Description
Windows NT 6.3  Windows 8.1
Windows NT 6.2  Windows 8
Windows NT 6.1  Windows 7
Windows NT 6.0  Windows Vista
Windows NT 5.2  Windows Server 2003; Windows XP x64 Edition
Windows NT 5.1  Windows XP
Windows NT 5.01  Windows 2000, Service Pack 1 (SP1)
Windows NT 5.0  Windows 2000
Windows NT 4.0  Microsoft Windows NT 4.0
Windows 98; Win 9x 4.90  Windows Millennium Edition (Windows Me)
Windows 98  Windows 98
Windows 95  Windows 95
Windows CE  Windows CE
[https://msdn.microsoft.com/library/ms537503.aspx]

chrome

name::
* McsEngl.chrome@cptIt,

> CHROME: navigator.userAgent
//2016-02-04
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"
===
//2015-11-15
> navigator.userAgent
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"
===
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36"

FireFox

name::
* McsEngl.FireFox@cptIt,

> FIREFOX: navigator.userAgent
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
===
"Mozilla/5.0 (Windows NT 5.1; rv:36.0) Gecko/20100101 Firefox/36.0"

Safari

name::
* McsEngl.Safari@cptIt,

Safari 7.0.3
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A

Edge

name::
* McsEngl.Edge@cptIt,

> ie12 (Edge):
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240"
===
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136"
===
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246

IE

name::
* McsEngl.IE@cptIt,

_ADDRESS.WPG:
* https://msdn.microsoft.com/library/ms537503.aspx,

Version token  Description
MSIE 10.0  Internet Explorer 10
MSIE 9.0  Internet Explorer 9
MSIE 8.0  Internet Explorer 8 or IE8 Compatibility View/Browser Mode
MSIE 7.0  Windows Internet Explorer 7 or IE7 Compatibility View/Browser Mode
MSIE 6.0  Microsoft Internet Explorer 6

> ie11
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko
===
"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko"
===
"Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko"

> ie10
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"
===
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
===
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"

> ie9
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
===
Trident/5.0  Internet Explorer 9
===
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"

> ie8:
Trident/4.0  Internet Explorer 8
===
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"

> ie7:
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"

> ie6:
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

jsscreen-object

name::
* McsEngl.ljsoscreen@cptIt,
* McsEngl.ljs'screen@cptIt,

_GENERIC:
typeof Screen
"function"

_DESCRIPTION:
Screen Object
The screen object contains information about the visitor's screen.
Note: There is no public standard that applies to the screen object, but all major browsers support it.

jsoscreen'member:
availHeight: 686
availLeft: 0
availTop: 0
availWidth: 1280
colorDepth: 24
height: 720
orientation: ScreenOrientation
pixelDepth: 24
width: 1280
__proto__: Screen
===
Screen Object Properties
Property  Description
availHeight  Returns the height of the screen (excluding the Windows Taskbar)
availWidth  Returns the width of the screen (excluding the Windows Taskbar)
colorDepth  Returns the bit depth of the color palette for displaying images
height  Returns the total height of the screen
pixelDepth  Returns the color resolution (in bits per pixel) of the screen
width  Returns the total width of the screen
[http://www.w3schools.com/jsref/obj_screen.asp]

ljbalgo.DOM-PROCESSING

name::
* McsEngl.ljbalgo.DOM-PROCESSING@cptIt,
* McsEngl.ljshtml'DOM-PROCESSING@cptIt,
* McsEngl.ljs'DOM@cptIt,
* McsEngl.ljs'DOM-API@cptIt,
* McsEngl.ljs'hdom@cptIt, {2013-10-23}
* McsEngl.ljs'HTML-DOM-API@cptIt,
* McsEngl.ljs'html-dom@cptIt,
* McsEngl.ljs-html-dom@cptIt,
* McsEngl.ljsobject.HTML-DOM@cptIt,

* McsEngl.ljsdom@cptIt,

_GENERIC:
* js-api#ql:js'api#
* DOM#cptItsoft579#

_DESCRIPTION:
JS-HTML-DOM is a-representation of an-html-document using js-objects.
[hmnSngo.2014-12-07]
===
The Document Object Model (DOM) is a programming interface for HTML, XML and SVG documents. It provides a structured representation of the document (a tree) and it defines a way that the structure can be accessed from programs so that they can change the document structure, style and content. The DOM provides a representation of the document as a structured group of nodes and objects that have properties and methods. Nodes can also have event handlers attached to them, and once that event is triggered the event handlers get executed. Essentially, it connects web pages to scripts or programming languages.
Though often accessed using JavaScript, the DOM itself is not a part of the JavaScript language, and it can be accessed by other languages, though this is much less common.
[https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model]
===
The Document Object Model (DOM) is a programming interface for HTML and XML documents. It provides a structured representation of the document and it defines a way that the structure can be accessed from programs so that they can change the document structure, style and content. The DOM provides a representation of the document as a structured group of nodes and objects that have properties and methods. Essentially, it connects web pages to scripts or programming languages.
A Web page is a document. This document can be either displayed in the browser window, or as the HTML source. But it is the same document in both cases. The Document Object Model (DOM) provides another way to represent, store and manipulate that same document. The DOM is a fully object-oriented representation of the web page, and it can be modified with a scripting language such as JavaScript.
[https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction]
===
When a web page is loaded, the browser creates a Document Object Model of the page.
The HTML DOM model is constructed as a tree of Objects:
What is the DOM?
The DOM is a W3C (World Wide Web Consortium) standard.
The DOM defines a standard for accessing documents:
"The W3C Document Object Model (DOM) is a platform and language-neutral interface that allows programs and scripts to dynamically access and update the content, structure, and style of a document."
The W3C DOM standard is separated into 3 different parts:
Core DOM - standard model for all document types
XML DOM - standard model for XML documents
HTML DOM - standard model for HTML documents
[http://www.w3schools.com/js/js_htmldom.asp]
===
In other words: The HTML DOM is a standard for how to get, change, add, or delete HTML elements.
[http://www.w3schools.com/htmldom/dom_intro.asp]
===
Τα αντικείμενα που δημιουργούνται σε ένα πρόγραμμα περιήγησης συνιστούν ΙΕΡΑΡΧΙΚΟ μοντέλο αντικειμένων, η βάση του οποίου είναι το αντικείμενο window. Ο οργανισμός W3C τυποποίησε το μοντέλο αυτό το έτος 2000, δημιουργώντας ένα πρότυπο που ονομάστηκε DOM1.
[Λιακέας, Η γλώσσα JavaScript. 2002, 173-174]

_USAGE:
JavaScript and the DOM are usually seen as a single entity since JavaScript is most commonly used for this purpose (interacting with content on the web). The DOM API is used to access, traverse and manipulate HTML and XML documents.
[http://net.tutsplus.com/tutorials/javascript-ajax/javascript-and-the-dom-series-lesson-1/]

_DOM_API:
The programming interface is the properties and methods of each object.
[http://www.w3schools.com/js/js_htmldom_methods.asp]

jsdom'DOMImplementation-function

name::
* McsEngl.jsdom'DOMImplementation-function@cptIt,
* McsEngl.ljsDOMImplementation@cptIt,

_DESCRIPTION:
document.implementation
is the-methodNo which returns the-object of this function.
[hmnSngo.2015-12-17]

DOMImplementation.prototype > Object.prototype

name::
* McsEngl.DOMImplementation.prototype > Object.prototype@cptIt,

jsDOMImplementation.prototype.member.CHROME:
//{2015-12-17}
> Object.getOwnPropertyNames(DOMImplementation.prototype).sort()
["constructor", "createDocument", "createDocumentType", "createHTMLDocument", "hasFeature"]

DOMImplementation.prototype.createHTMLDocument

name::
* McsEngl.DOMImplementation.prototype.createHTMLDocument@cptIt,
* McsEngl.ljscreateHTMLDocument@cptIt,

_CODE.LJS:
document.implementation.createHTMLDocument()
#document
<!DOCTYPE html><html>?<head>?</head>?<body>?</body>?</html>
> document.implementation.createHTMLDocument("nikkas")
#document
<!DOCTYPE html>
<html>
<head>
<title>nikkas</title>
</head>
<body>
</body>
</html>

DOMImplementation.prototype.hasFeature

name::
* McsEngl.DOMImplementation.prototype.hasFeature@cptIt,

jsdom'implementation

name::
* McsEngl.jsdom'implementation@cptIt,

_DESCRIPTION:
Each layout engine has a slightly different implementation of the DOM standard. For example, the Firefox web browser, which uses the Gecko layout engine, has quite a good implementation (although, not entirely inline with the W3C specification) but Internet Explorer, which uses the Trident layout engine is known for it’s buggy and incomplete implementation; a cause of much anguish within the web development community!
[http://net.tutsplus.com/tutorials/javascript-ajax/javascript-and-the-dom-series-lesson-1/]

jsdom'program

name::
* McsEngl.jsdom'program@cptIt,

_ADDRESS.WPG:
* http://software.hixie.ch/utilities/js/live-dom-viewer//

jsdom'resource

name::
* McsEngl.jsdom'resource@cptIt,

_ADDRESS.WPG:
* http://reference.sitepoint.com/javascript/domcore,

SPECIFIC

_SPECIFIC:
There are several DOMs in existence. The following sections explain each of these DOMs in detail and describe how you can use them to access and modify document content.

The Legacy DOM: This is the model which was introduced in early versions of JavaScript language. It is well supported by all browsers, but allows access only to certain key portions of documents, such as forms, form elements, and images.

The W3C DOM: This document object model allows access and modification of all document content and is standardized by the World Wide Web Consortium (W3C). This model is supported by almost all the modern browsers.

The IE4 DOM: This document object model was introduced in Version 4 of Microsoft's Internet Explorer browser. IE 5 and later versions include support for most basic W3C DOM features.

DOM compatibility
If you want to write a script that uses the W3C DOM when it is available, and otherwise uses the IE 4 DOM if it is available, you can use a capability-testing approach that first checks for the existence of a method or property to determine whether the browser has the capability you desire. For example:

if (document.getElementById) {

// If the W3C method exists, use it

}

else if (document.all) {

// If the all[] array exists, use it

}

else {

// Otherwise use the legacy DOM

}
[http://www.tutorialspoint.com/javascript/javascript_html_dom.htm]

jsdom.DOM4

name::
* McsEngl.jsdom.DOM4@cptIt,
* McsEngl.ljs'DOM4@cptIt,

_SPEC:
* http://www.w3.org/TR/domcore//
* http://dom.spec.whatwg.org//

_DESCRIPTION:
In its original sense, "The DOM" is an API for accessing and manipulating documents (in particular, HTML and XML documents). In this specification, the term "document" is used for any markup-based resource, ranging from short static documents to long essays or reports with rich multimedia, as well as to fully-fledged interactive applications.
[http://www.w3.org/TR/domcore/#introduction-to-the-dom]

jsdom.DOM3

name::
* McsEngl.jsdom.DOM3@cptIt,
* McsEngl.ljs'DOM3@cptIt,

_SPEC:
* http://www.w3.org/TR/DOM-Level-3-Core/core.html,

jsdom.DOM2

name::
* McsEngl.jsdom.DOM2@cptIt,
* McsEngl.ljs'DOM2@cptIt,

_SPEC:
* http://www.w3.org/TR/DOM-Level-2-Core/core.html,

ljbalgo.ERROR-PROCESSING

name::
* McsEngl.ljbalgo.ERROR-PROCESSING@cptIt,

_ADDRESS.WPG:
* https://github.com/i-break-codes/ejs, Playing with console errors, experimental project.

ljbalgo.HTML-PROCESSING (ljbhml)

name::
* McsEngl.ljbalgo.HTML-PROCESSING (ljbhml)@cptIt,
* McsEngl.ljshml@cptIt,
* McsEngl.ljsalgo.html-processing@cptIt,
* McsEngl.ljshtml@cptIt,
* McsEngl.ljshtml-processing@cptIt,
* McsEngl.ljshtml@cptIt,
* McsEngl.ljs'code.processing.HTML@cptIt,
* McsEngl.ljs'code.HTML-PROCESSING@cptIt,
* McsEngl.ljs'html@cptIt,
* McsEngl.ljs'html-processing@cptIt,
* McsEngl.ljs'html@cptIt,
* McsEngl.ljbhml@cptIt,

ljbhml'API

name::
* McsEngl.ljbhml'API@cptIt,

_SPECIFIC:
* oCharacterData##
* oDocument##
* oNode##
* oText##
===
HTML DOM Objects Reference
* Document object
* Event object
* HTMLElement object
* Anchor object
* Area object
* Base object
* Body object
* Button object
* Form object
* Frame/IFrame object
* Frameset object
* Image object
* Input Button object
* Input Checkbox object
* Input File object
* Input Hidden object
* Input Password object
* Input Radio object
* Input Reset object
* Input Submit object
* Input Text object
* Link object
* Meta object
* Object object
* Option object
* Select object
* Style object
* Table object
* TableCell object
* TableRow object
* Textarea object
[http://www.w3schools.com/jsref/default.asp] 2010-09-23

_SPECIFIC:
DOM interfaces

Attr
CharacterData
ChildNode
Comment
CustomEvent
Document
DocumentFragment
DocumentType
DOMError
DOMException
DOMImplementation
DOMString
DOMTimeStamp
DOMSettableTokenList
DOMStringList
DOMTokenList
Element
Event
EventTarget
HTMLCollection
MutationObserver
MutationRecord
Node
NodeFilter
NodeIterator
NodeList
ParentNode
ProcessingInstruction
Promise
PromiseResolver
Range
Text
TreeWalker
URL
Window
Worker
XMLDocument
[https://developer.mozilla.org/en-US/docs/DOM/DOM_Reference]

ljbhml'oCSSStyleRule > oCSSRule

name::
* McsEngl.ljbhml'oCSSStyleRule > oCSSRule@cptIt,
* McsEngl.ljsCSSStyleRule@cptIt,
* McsEngl.ljsoCSSStyleRule@cptIt,
* McsEngl.ljs'CSSStyleRule-object@cptIt,

_DESCRIPTION:
A CSSStyleRule object represents each CSS rule contained in a style sheet. Basicly a CSSStyleRule is the interface to the CSS properties and values attached to a selector.
[http://domenlightenment.com/#9.4]

ljbhml'oCSSStyleSheet > oStyleSheet

name::
* McsEngl.ljbhml'oCSSStyleSheet > oStyleSheet@cptIt,
* McsEngl.ljsCSSStyleSheet@cptIt,
* McsEngl.ljsoCSSStyleSheet@cptIt,
* McsEngl.ljs'CSSStyleSheet-object@cptIt,

_GENERIC:
> Object.getPrototypeOf(CSSStyleSheet)
function StyleSheet() { [native code] }

_DESCRIPTION:
CSSStyleSheet
Read content offline
HISTORY EDIT
TABLE OF CONTENTS

Properties
Methods
Notes
Specification
See also
TAGS FILES
« DOM Reference « CSSOM

An object implementing the CSSStyleSheet interface represents a single CSS style sheet.

A CSS style sheet consists of CSS rules, each of which can be manipulated through an object that corresponds to that rule and that implements the CSSStyleRule interface, which in turn implements CSSRule. The CSSStyleSheet itself lets you examine and modify its corresponding style sheet, including its list of rules.

In practice, every CSSStyleSheet also implements the more generic StyleSheet interface. A list of CSSStyleSheet-implementing objects corresponding to the style sheets for a given document can be reached by the document.styleSheets property, if the document is styled by an external CSS style sheet or an inline style element.

Properties

cssRules
Returns a CSSRuleList of the CSS rules in the style sheet.
ownerRule
If this style sheet is imported into the document using an @import rule, the ownerRule property will return that CSSImportRule, otherwise it returns null.
Methods

deleteRule
Deletes a rule from the style sheet.
insertRule
Inserts a new style rule into the current style sheet.
Notes

In some browsers, if a stylesheet is loaded from a different domain, calling cssRules result in SecurityError.

Specification

DOM Level 2 CSS: CSSStyleSheet interface
[https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet]

ljbhml'API.WHOLE-PART

name::
* McsEngl.ljbhml'API.WHOLE-PART@cptIt,

_DESCRIPTION:
The js-objects that represent an html-document create a-whole-part-hierarchy IN RELATION to their members.
The-js-code is written in whole-part structure.
[hmnSngo.2015-10-30]

window (oWindow)#ql:jsowindow#
* document (oHTMLDocument)#linkL#
* oDocumentType#linkL#
* oHTMLHtmlElement#ql:jsohtmlhtmlelement#

ljbhml'API.GENERIC-SPECIFIC

name::
* McsEngl.ljbhml'API.GENERIC-SPECIFIC@cptIt,

_DESCRIPTION:
The js-objects that represent an html-document create a generic-specific hierarchy IN RELATION to their members.
[hmnSngo.2014-12-08]

Object.prototype#linkL#
oEventTarget#linkL#
 oNode#linkL#
   oCharacterData#linkL#
     oComment#linkL#
     oText#linkL#
   oDocument#linkL#
     oHTMLDocument#linkL#
   oDocumentFragment#linkL#
   oDocumentType#linkL#
   oElement#linkL#
     oHTMLElement#linkL#
       oHTMLAnchorElement#linkL#
       oHTMLAppletElement#linkL#
       oHTMLAreaElement#linkL#
       oHTMLBaseElement#linkL#
       oHTMLBaseFontElement#linkL#
       oHTMLBlockquoteElement#linkL#
       oHTMLBodyElement#linkL#
       oHTMLBRElement#linkL#
       oHTMLButtonElement#linkL#
       oHTMLDirectoryElement#linkL#
       oHTMLDivElement#linkL#
       oHTMLDListElement#linkL#
       oHTMLFieldSetElement#linkL#
       oHTMLFontElement#linkL#
       oHTMLFormElement#linkL#
       oHTMLFrameElement#linkL#
       oHTMLFrameSetElement#linkL#
       oHTMLHeadElement#linkL#
       oHTMLHeadingElement#linkL#
       oHTMLHRElement#linkL#
       oHTMLHtmlElement#linkL#
       oHTMLIFrameElement#linkL#
       oHTMLImageElement#linkL#
       oHTMLInputElement#linkL#
       oHTMLIsIndexElement#linkL#
       oHTMLLabelElement#linkL#
       oHTMLLayerElement#linkL#
       oHTMLLegendElement#linkL#
       oHTMLLIElement#linkL#
       oHTMLLinkElement#linkL#
       oHTMLMapElement#linkL#
       oHTMLMenuElement#linkL#
       oHTMLMetaElement#linkL#
       oHTMLModElement#linkL#
       oHTMLObjectElement#linkL#
       oHTMLOListElement#linkL#
       oHTMLOptGroupElement#linkL#
       oHTMLOptionElement#linkL#
       oHTMLParagraphElement#linkL#
       oHTMLParamElement#linkL#
       oHTMLPreElement#linkL#
       oHTMLQuoteElement#linkL#
       oHTMLScriptElement#linkL#
       oHTMLSelectElement#linkL#
       oHTMLStyleElement#linkL#
       oHTMLTableCaptionElement#linkL#
       oHTMLTableCellElement#linkL#
       oHTMLTableColElement#linkL#
       oHTMLTableElement#linkL#
       oHTMLTableRowElement#linkL#
       oHTMLTableSectionElement#linkL#
       oHTMLTextAreaElement#linkL#
       oHTMLTitleElement#linkL#
       oHTMLUListElement#linkL#
 oWindow#linkL#
oNodeList#linkL#
oRange#linkL#

ljbhml'DOM-spec

_CREATED: {2012-02-18}

name::
* McsEngl.ljbhml'DOM-spec@cptIt,
* McsEngl.dom.hml@cptIt,
* McsEngl.hdom@cptIt,
* McsEngl.hmldom@cptIt,
* McsEngl.hdom@cptIt, {2014-11-28}
* McsEngl.htmldom@cptIt568i,
* McsEngl.html-dom@cptIt568i,

_GENERIC:
* DOM#ql:dom@cptIt579#

_DESCRIPTION:
HTML-DOM is a representation of an HTML-DOC in a language-independent OOL.
[hmnSngo.2014-11-28]
===
The Document Object Model (DOM) is a cross-platform and language-independent convention for representing and interacting with objects in HTML, XHTML and XML documents.[1] The nodes of every document are organized in a tree structure, called the DOM tree. Objects in the DOM tree may be addressed and manipulated by using methods on the objects. The public interface of a DOM is specified in its application programming interface (API).
[http://en.wikipedia.org/wiki/Document_Object_Model]
===
The HTML DOM is:
- A standard object model for HTML
- A standard programming interface for HTML
- Platform- and language-independent
- A W3C standard
The HTML DOM defines the objects and properties of all HTML elements, and the methods (interface) to access them.
In other words: The HTML DOM is a standard for how to get, change, add, or delete HTML elements.
[http://www.w3schools.com/htmldom/dom_intro.asp]

Htmldom'Node

name::
* McsEngl.Htmldom'Node@cptIt,
* McsEngl.node-object-of-html-dom@cptIt,

_WHOLE:
* html-doc,

_DESCRIPTION:
In the DOM, HTML documents consist of a set of node objects. The nodes can be accessed with JavaScript or other programming languages. In this tutorial we will use JavaScript.
[http://www.w3schools.com/htmldom/dom_methods.asp]

hmldom'node'DOCUMENT

name::
* McsEngl.hmldom'node'DOCUMENT@cptIt,

The Document of a Node (such as an element) is the Document that the Node's ownerDocument IDL attribute returns. When a Node is in a Document then that Document is always the Node's Document, and the Node's ownerDocument IDL attribute thus always returns that Document.
[http://dev.w3.org/html5/spec/Overview.html#dom-trees]

hmldom'node'HOME_SUBTREE

name::
* McsEngl.hmldom'node'HOME_SUBTREE@cptIt,

A node's home subtree is the subtree rooted at that node's root element. When a node is in a Document, its home subtree is that Document's tree.
[http://dev.w3.org/html5/spec/Overview.html#dom-trees]

hmldom'node.INTER-ELEMENT-WHITESPACE

name::
* McsEngl.hmldom'node.INTER_ELEMENT_WHITESPACE@cptIt,
* McsEngl.html'inter-element-whitespace@cptIt,

The space-characters#ql:html'space_character# are always allowed between elements.
User agents represent these characters between elements in the source markup as text nodes in the DOM.
Empty text nodes and text nodes consisting of just sequences of those characters are considered inter-element whitespace.
[http://dev.w3.org/html5/spec/Overview.html#inter-element-whitespace] 2010-10-21

hmldom'node.ORPHAN

name::
* McsEngl.hmldom'node.ORPHAN@cptIt,
* McsEngl.html'orphan-node@cptIt,

In addition, HTML elements may be orphan nodes (i.e. without a parent node).

For example, creating a td element and storing it in a global variable in a script is conforming, even though td elements are otherwise only supposed to be used inside tr elements.

var data = {
name: "Banana",
cell: document.createElement('td'),
};
[http://dev.w3.org/html5/spec/Overview.html#content-models] 2010-10-21

hmldom'node.TEXT

name::
* McsEngl.hmldom'node.TEXT@cptIt,
* McsEngl.html'text-node@cptIt,

hmldom'node'Child

name::
* McsEngl.hmldom'node'Child@cptIt,

A node can have any number of children
[http://www.w3schools.com/htmldom/dom_nodetree.asp]

hmldom'node'Parent

name::
* McsEngl.hmldom'node'Parent@cptIt,

Every node, except the root, has exactly one parent node
[http://www.w3schools.com/htmldom/dom_nodetree.asp]

hmldom'node'Property

name::
* McsEngl.hmldom'node'Property@cptIt,

The nodeValue Property
The nodeValue property specifies the value of a node.
nodeValue for element nodes is undefined
nodeValue for text nodes is the text itself
nodeValue for attribute nodes is the attribute value
[http://www.w3schools.com/htmldom/dom_nodes_info.asp]

hmldom'node'Sibling

name::
* McsEngl.hmldom'node'Sibling@cptIt,
* McsEngl.brother@cptIt,
* McsEngl.sister@cptIt,

Siblings are nodes with the same parent
[http://www.w3schools.com/htmldom/dom_nodetree.asp]

SPECIFIC
hmldom'node.Attribute

name::
* McsEngl.hmldom'node.Attribute@cptIt,

hmldom'node.Element

name::
* McsEngl.hmldom'node.Element@cptIt,

hmldom'node.Leaf

name::
* McsEngl.hmldom'node.Leaf@cptIt,

A leaf is a node with no children
[http://www.w3schools.com/htmldom/dom_nodetree.asp]

hmldom'node.Root

name::
* McsEngl.hmldom'node.Root@cptIt,

In a node tree, the top node is called the root
[http://www.w3schools.com/htmldom/dom_nodetree.asp]

hmldom'node.Text

name::
* McsEngl.hmldom'node.Text@cptIt,

Htmldom'Node-tree

name::
* McsEngl.Htmldom'Node-tree@cptIt,

_DESCRIPTION:
The HTML DOM views an HTML document as a node-tree.

All the nodes in the tree have relationships to each other.

The HTML DOM Node Tree

The HTML DOM views an HTML document as a tree-structure. The tree structure is called a node-tree.

All nodes can be accessed through the tree. Their contents can be modified or deleted, and new elements can be created.
[http://www.w3schools.com/htmldom/dom_nodetree.asp]

ljbhml'Object.prototype#ql:object.prototype@cptIt#

name::
* McsEngl.ljbhml'Object.prototype@cptIt,

_SPECIFIC:
* oDOMParser#linkL#
* oEventTarget#ql:jsoeventtarget#
* oRange#linkL#

ljbhml'oCSSStyleDelcaration > Object.prototype

name::
* McsEngl.ljbhml'oCSSStyleDelcaration > Object.prototype@cptIt,
* McsEngl.ljsoCSSStyleDeclaration@cptIt,
* McsEngl.ljsostyle@cptIt,

_GENERIC:
> Object.getPrototypeOf(CSSStyleDeclaration.prototype)
Object {}
===
> Object.getPrototypeOf(CSSStyleDeclaration)
function Empty() {}
===
> (document.body.style).__proto__
CSSStyleDeclaration {getPropertyValue: function, removeProperty: function, getPropertyPriority: function, setProperty: function, item: function…}
> (document.body.style).__proto__.__proto__
Object {}

_CODE.LJS:
> toString.call(document.getElementById('id73').style)
"[object CSSStyleDeclaration]"
===
* document.getElementById("id").style.property="value"

jsoCSSStyleDeclaration'member:
// CHROME 369:
* jsstyle.alignContent: ""
* jsstyle.alignItems: ""
* jsstyle.alignSelf: ""
* jsstyle.alignmentBaseline: ""
* jsstyle.backfaceVisibility: ""
* jsstyle.background: ""
* jsstyle.backgroundAttachment: ""
* jsstyle.backgroundBlendMode: ""
* jsstyle.backgroundClip: ""
* jsstyle.backgroundColor: ""
* jsstyle.backgroundImage: ""
* jsstyle.backgroundOrigin: ""
* jsstyle.backgroundPosition: ""
* jsstyle.backgroundPositionX: ""
* jsstyle.backgroundPositionY: ""
* jsstyle.backgroundRepeat: ""
* jsstyle.backgroundRepeatX: ""
* jsstyle.backgroundRepeatY: ""
* jsstyle.backgroundSize: ""
* jsstyle.baselineShift: ""
* jsstyle.border: ""
* jsstyle.borderBottom: ""
* jsstyle.borderBottomColor: ""
* jsstyle.borderBottomLeftRadius: ""
* jsstyle.borderBottomRightRadius: ""
* jsstyle.borderBottomStyle: ""
* jsstyle.borderBottomWidth: ""
* jsstyle.borderCollapse: ""
* jsstyle.borderColor: ""
* jsstyle.borderImage: ""
* jsstyle.borderImageOutset: ""
* jsstyle.borderImageRepeat: ""
* jsstyle.borderImageSlice: ""
* jsstyle.borderImageSource: ""
* jsstyle.borderImageWidth: ""
* jsstyle.borderLeft: ""
* jsstyle.borderLeftColor: ""
* jsstyle.borderLeftStyle: ""
* jsstyle.borderLeftWidth: ""
* jsstyle.borderRadius: ""
* jsstyle.borderRight: ""
* jsstyle.borderRightColor: ""
* jsstyle.borderRightStyle: ""
* jsstyle.borderRightWidth: ""
* jsstyle.borderSpacing: ""
* jsstyle.borderStyle: ""
* jsstyle.borderTop: ""
* jsstyle.borderTopColor: ""
* jsstyle.borderTopLeftRadius: ""
* jsstyle.borderTopRightRadius: ""
* jsstyle.borderTopStyle: ""
* jsstyle.borderTopWidth: ""
* jsstyle.borderWidth: ""
* jsstyle.bottom: ""
* jsstyle.boxShadow: ""
* jsstyle.boxSizing: ""
* jsstyle.bufferedRendering: ""
* jsstyle.captionSide: ""
* jsstyle.clear: ""
* jsstyle.clip: ""
* jsstyle.clipPath: ""
* jsstyle.clipRule: ""
* jsstyle.color: ""
* jsstyle.colorInterpolation: ""
* jsstyle.colorInterpolationFilters: ""
* jsstyle.colorRendering: ""
* jsstyle.content: ""
* jsstyle.counterIncrement: ""
* jsstyle.counterReset: ""
* jsstyle.cssText: ""
* jsstyle.cursor: ""
* jsstyle.direction: ""
* jsstyle.display: ""
* jsstyle.dominantBaseline: ""
* jsstyle.emptyCells: ""
* jsstyle.enableBackground: ""
* jsstyle.fill: ""
* jsstyle.fillOpacity: ""
* jsstyle.fillRule: ""
* jsstyle.filter: ""
* jsstyle.flex: ""
* jsstyle.flexBasis: ""
* jsstyle.flexDirection: ""
* jsstyle.flexFlow: ""
* jsstyle.flexGrow: ""
* jsstyle.flexShrink: ""
* jsstyle.flexWrap: ""
* jsstyle.float: ""
* jsstyle.floodColor: ""
* jsstyle.floodOpacity: ""
* jsstyle.font: ""
* jsstyle.fontFamily: ""
* jsstyle.fontKerning: ""
* jsstyle.fontSize: ""
* jsstyle.fontStretch: ""
* jsstyle.fontStyle: ""
* jsstyle.fontVariant: ""
* jsstyle.fontVariantLigatures: ""
* jsstyle.fontWeight: ""
* jsstyle.glyphOrientationHorizontal: ""
* jsstyle.glyphOrientationVertical: ""
* jsstyle.height: ""
* jsstyle.imageRendering: ""
* jsstyle.justifyContent: ""
* jsstyle.left: ""
* jsstyle.length: 0
* jsstyle.letterSpacing: ""
* jsstyle.lightingColor: ""
* jsstyle.lineHeight: ""
* jsstyle.listStyle: ""
* jsstyle.listStyleImage: ""
* jsstyle.listStylePosition: ""
* jsstyle.listStyleType: ""
* jsstyle.margin: ""
* jsstyle.marginBottom: ""
* jsstyle.marginLeft: ""
* jsstyle.marginRight: ""
* jsstyle.marginTop: ""
* jsstyle.marker: ""
* jsstyle.markerEnd: ""
* jsstyle.markerMid: ""
* jsstyle.markerStart: ""
* jsstyle.mask: ""
* jsstyle.maskType: ""
* jsstyle.maxHeight: ""
* jsstyle.maxWidth: ""
* jsstyle.maxZoom: ""
* jsstyle.minHeight: ""
* jsstyle.minWidth: ""
* jsstyle.minZoom: ""
* jsstyle.objectFit: ""
* jsstyle.objectPosition: ""
* jsstyle.opacity: ""
* jsstyle.order: ""
* jsstyle.orientation: ""
* jsstyle.orphans: ""
* jsstyle.outline: ""
* jsstyle.outlineColor: ""
* jsstyle.outlineOffset: ""
* jsstyle.outlineStyle: ""
* jsstyle.outlineWidth: ""
* jsstyle.overflow: ""
* jsstyle.overflowWrap: ""
* jsstyle.overflowX: ""
* jsstyle.overflowY: ""
* jsstyle.padding: ""
* jsstyle.paddingBottom: ""
* jsstyle.paddingLeft: ""
* jsstyle.paddingRight: ""
* jsstyle.paddingTop: ""
* jsstyle.page: ""
* jsstyle.pageBreakAfter: ""
* jsstyle.pageBreakBefore: ""
* jsstyle.pageBreakInside: ""
* jsstyle.paintOrder: ""
* jsstyle.parentRule: null
* jsstyle.perspective: ""
* jsstyle.perspectiveOrigin: ""
* jsstyle.pointerEvents: ""
* jsstyle.position: ""
* jsstyle.quotes: ""
* jsstyle.resize: ""
* jsstyle.right: ""
* jsstyle.shapeRendering: ""
* jsstyle.size: ""
* jsstyle.speak: ""
* jsstyle.src: ""
* jsstyle.stopColor: ""
* jsstyle.stopOpacity: ""
* jsstyle.stroke: ""
* jsstyle.strokeDasharray: ""
* jsstyle.strokeDashoffset: ""
* jsstyle.strokeLinecap: ""
* jsstyle.strokeLinejoin: ""
* jsstyle.strokeMiterlimit: ""
* jsstyle.strokeOpacity: ""
* jsstyle.strokeWidth: ""
* jsstyle.tabSize: ""
* jsstyle.tableLayout: ""
* jsstyle.textAlign: ""
* jsstyle.textAnchor: ""
* jsstyle.textDecoration: ""
* jsstyle.textIndent: ""
* jsstyle.textLineThroughColor: ""
* jsstyle.textLineThroughMode: ""
* jsstyle.textLineThroughStyle: ""
* jsstyle.textLineThroughWidth: ""
* jsstyle.textOverflow: ""
* jsstyle.textOverlineColor: ""
* jsstyle.textOverlineMode: ""
* jsstyle.textOverlineStyle: ""
* jsstyle.textOverlineWidth: ""
* jsstyle.textRendering: ""
* jsstyle.textShadow: ""
* jsstyle.textTransform: ""
* jsstyle.textUnderlineColor: ""
* jsstyle.textUnderlineMode: ""
* jsstyle.textUnderlineStyle: ""
* jsstyle.textUnderlineWidth: ""
* jsstyle.top: ""
* jsstyle.touchAction: ""
* jsstyle.transform: ""
* jsstyle.transformOrigin: ""
* jsstyle.transformStyle: ""
* jsstyle.transition: ""
* jsstyle.transitionDelay: ""
* jsstyle.transitionDuration: ""
* jsstyle.transitionProperty: ""
* jsstyle.transitionTimingFunction: ""
* jsstyle.unicodeBidi: ""
* jsstyle.unicodeRange: ""
* jsstyle.userZoom: ""
* jsstyle.vectorEffect: ""
* jsstyle.verticalAlign: ""
* jsstyle.visibility: ""
* jsstyle.webkitAnimation: ""
* jsstyle.webkitAnimationDelay: ""
* jsstyle.webkitAnimationDirection: ""
* jsstyle.webkitAnimationDuration: ""
* jsstyle.webkitAnimationFillMode: ""
* jsstyle.webkitAnimationIterationCount: ""
* jsstyle.webkitAnimationName: ""
* jsstyle.webkitAnimationPlayState: ""
* jsstyle.webkitAnimationTimingFunction: ""
* jsstyle.webkitAppRegion: ""
* jsstyle.webkitAppearance: ""
* jsstyle.webkitAspectRatio: ""
* jsstyle.webkitBackfaceVisibility: ""
* jsstyle.webkitBackgroundClip: ""
* jsstyle.webkitBackgroundComposite: ""
* jsstyle.webkitBackgroundOrigin: ""
* jsstyle.webkitBackgroundSize: ""
* jsstyle.webkitBorderAfter: ""
* jsstyle.webkitBorderAfterColor: ""
* jsstyle.webkitBorderAfterStyle: ""
* jsstyle.webkitBorderAfterWidth: ""
* jsstyle.webkitBorderBefore: ""
* jsstyle.webkitBorderBeforeColor: ""
* jsstyle.webkitBorderBeforeStyle: ""
* jsstyle.webkitBorderBeforeWidth: ""
* jsstyle.webkitBorderEnd: ""
* jsstyle.webkitBorderEndColor: ""
* jsstyle.webkitBorderEndStyle: ""
* jsstyle.webkitBorderEndWidth: ""
* jsstyle.webkitBorderFit: ""
* jsstyle.webkitBorderHorizontalSpacing: ""
* jsstyle.webkitBorderImage: ""
* jsstyle.webkitBorderRadius: ""
* jsstyle.webkitBorderStart: ""
* jsstyle.webkitBorderStartColor: ""
* jsstyle.webkitBorderStartStyle: ""
* jsstyle.webkitBorderStartWidth: ""
* jsstyle.webkitBorderVerticalSpacing: ""
* jsstyle.webkitBoxAlign: ""
* jsstyle.webkitBoxDecorationBreak: ""
* jsstyle.webkitBoxDirection: ""
* jsstyle.webkitBoxFlex: ""
* jsstyle.webkitBoxFlexGroup: ""
* jsstyle.webkitBoxLines: ""
* jsstyle.webkitBoxOrdinalGroup: ""
* jsstyle.webkitBoxOrient: ""
* jsstyle.webkitBoxPack: ""
* jsstyle.webkitBoxReflect: ""
* jsstyle.webkitBoxShadow: ""
* jsstyle.webkitClipPath: ""
* jsstyle.webkitColumnBreakAfter: ""
* jsstyle.webkitColumnBreakBefore: ""
* jsstyle.webkitColumnBreakInside: ""
* jsstyle.webkitColumnCount: ""
* jsstyle.webkitColumnGap: ""
* jsstyle.webkitColumnRule: ""
* jsstyle.webkitColumnRuleColor: ""
* jsstyle.webkitColumnRuleStyle: ""
* jsstyle.webkitColumnRuleWidth: ""
* jsstyle.webkitColumnSpan: ""
* jsstyle.webkitColumnWidth: ""
* jsstyle.webkitColumns: ""
* jsstyle.webkitFilter: ""
* jsstyle.webkitFontFeatureSettings: ""
* jsstyle.webkitFontSizeDelta: ""
* jsstyle.webkitFontSmoothing: ""
* jsstyle.webkitHighlight: ""
* jsstyle.webkitHyphenateCharacter: ""
* jsstyle.webkitLineBoxContain: ""
* jsstyle.webkitLineBreak: ""
* jsstyle.webkitLineClamp: ""
* jsstyle.webkitLocale: ""
* jsstyle.webkitLogicalHeight: ""
* jsstyle.webkitLogicalWidth: ""
* jsstyle.webkitMarginAfter: ""
* jsstyle.webkitMarginAfterCollapse: ""
* jsstyle.webkitMarginBefore: ""
* jsstyle.webkitMarginBeforeCollapse: ""
* jsstyle.webkitMarginBottomCollapse: ""
* jsstyle.webkitMarginCollapse: ""
* jsstyle.webkitMarginEnd: ""
* jsstyle.webkitMarginStart: ""
* jsstyle.webkitMarginTopCollapse: ""
* jsstyle.webkitMask: ""
* jsstyle.webkitMaskBoxImage: ""
* jsstyle.webkitMaskBoxImageOutset: ""
* jsstyle.webkitMaskBoxImageRepeat: ""
* jsstyle.webkitMaskBoxImageSlice: ""
* jsstyle.webkitMaskBoxImageSource: ""
* jsstyle.webkitMaskBoxImageWidth: ""
* jsstyle.webkitMaskClip: ""
* jsstyle.webkitMaskComposite: ""
* jsstyle.webkitMaskImage: ""
* jsstyle.webkitMaskOrigin: ""
* jsstyle.webkitMaskPosition: ""
* jsstyle.webkitMaskPositionX: ""
* jsstyle.webkitMaskPositionY: ""
* jsstyle.webkitMaskRepeat: ""
* jsstyle.webkitMaskRepeatX: ""
* jsstyle.webkitMaskRepeatY: ""
* jsstyle.webkitMaskSize: ""
* jsstyle.webkitMaxLogicalHeight: ""
* jsstyle.webkitMaxLogicalWidth: ""
* jsstyle.webkitMinLogicalHeight: ""
* jsstyle.webkitMinLogicalWidth: ""
* jsstyle.webkitPaddingAfter: ""
* jsstyle.webkitPaddingBefore: ""
* jsstyle.webkitPaddingEnd: ""
* jsstyle.webkitPaddingStart: ""
* jsstyle.webkitPerspective: ""
* jsstyle.webkitPerspectiveOrigin: ""
* jsstyle.webkitPerspectiveOriginX: ""
* jsstyle.webkitPerspectiveOriginY: ""
* jsstyle.webkitPrintColorAdjust: ""
* jsstyle.webkitRtlOrdering: ""
* jsstyle.webkitRubyPosition: ""
* jsstyle.webkitTapHighlightColor: ""
* jsstyle.webkitTextCombine: ""
* jsstyle.webkitTextDecorationsInEffect: ""
* jsstyle.webkitTextEmphasis: ""
* jsstyle.webkitTextEmphasisColor: ""
* jsstyle.webkitTextEmphasisPosition: ""
* jsstyle.webkitTextEmphasisStyle: ""
* jsstyle.webkitTextFillColor: ""
* jsstyle.webkitTextOrientation: ""
* jsstyle.webkitTextSecurity: ""
* jsstyle.webkitTextStroke: ""
* jsstyle.webkitTextStrokeColor: ""
* jsstyle.webkitTextStrokeWidth: ""
* jsstyle.webkitTransform: ""
* jsstyle.webkitTransformOrigin: ""
* jsstyle.webkitTransformOriginX: ""
* jsstyle.webkitTransformOriginY: ""
* jsstyle.webkitTransformOriginZ: ""
* jsstyle.webkitTransformStyle: ""
* jsstyle.webkitTransition: ""
* jsstyle.webkitTransitionDelay: ""
* jsstyle.webkitTransitionDuration: ""
* jsstyle.webkitTransitionProperty: ""
* jsstyle.webkitTransitionTimingFunction: ""
* jsstyle.webkitUserDrag: ""
* jsstyle.webkitUserModify: ""
* jsstyle.webkitUserSelect: ""
* jsstyle.webkitWritingMode: ""
* jsstyle.whiteSpace: ""
* jsstyle.widows: ""
* jsstyle.width: ""
* jsstyle.willChange: ""
* jsstyle.wordBreak: ""
* jsstyle.wordSpacing: ""
* jsstyle.wordWrap: ""
* jsstyle.writingMode: ""
* jsstyle.zIndex: ""
* jsstyle.zoom: ""

ljbhml'oDOMParser > Object.prototype

name::
* McsEngl.ljbhml'oDOMParser > Object.prototype@cptIt,
* McsEngl.ljsDOMParser-function@cptIt,
* McsEngl.ljsoDOMParser@cptIt,

_GENERIC:
> Object.getPrototypeOf(DOMParser)
function Empty() {}

_PROPERTY:
Object.getOwnPropertyNames(new DOMParser()).sort()
[]
Object.getOwnPropertyNames((new DOMParser()).__proto__).sort()
["constructor", "parseFromString"]
Object.getOwnPropertyNames((new DOMParser()).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

parseFromString function

name::
* McsEngl.parseFromString function@cptIt,
* McsEngl.ljsparseFromString@cptIt,

_CODE.LJS:
oXhr = new XMLHttpRequest();
oXhr.open('GET', sId1, false);
oXhr.send(null);
if (oXhr.status === 200) {
var oDoc = (new DOMParser()).parseFromString(oXhr.responseText, 'text/html');
oEltDivPopup.innerHTML = oDoc.getElementById(sId2).innerHTML;
}

ljbhml'oHTMLCollection > Object.prototype

name::
* McsEngl.ljbhml'oHTMLCollection > Object.prototype@cptIt,
* McsEngl.ljsoHTMLCollection@cptIt,
* McsEngl.ljsHTMLCollection@cptIt,

_GENERIC:
> Object.getPrototypeOf(HTMLCollection.prototype)
Object {}
> Object.getPrototypeOf(HTMLCollection)
function Empty() {}

_CREATION:
> toString.call(document.getElementsByTagName('div'))"
[object HTMLCollection]"
> toString.call(document.getElementsByTagName('html'))"[object HTMLCollection]"

_MEMBER:
* jsoHTMLCollection:
//CHROME:
> Object.getOwnPropertyNames(document.getElementsByTagName('html')).sort()
["0", "length"]
> Object.getOwnPropertyNames(document.getElementsByTagName('html').__proto__).sort()
["constructor", "item", "namedItem"]
> Object.getOwnPropertyNames(document.getElementsByTagName('html').__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

ljbhml'oNodeList > Object.prototype

name::
* McsEngl.ljbhml'oNodeList > Object.prototype@cptIt,
* McsEngl.ljsNodeList@cptIt,
* McsEngl.ljsoNodeList@cptIt,
* McsEngl.ljs'NodeList@cptIt,

_GENERIC:
> Object.getPrototypeOf(NodeList.prototype)
Object {}
> Object.getPrototypeOf(NodeList)
function Empty() {}

_DESCRIPTION:
The NodeList interface represents an ordered collection of nodes, indexed by number (starting from zero).
A node list is a live collection, which means that changes to the collection it represents are immediately reflected in the list (as opposed to it being a static snapshot).
CAUTION: A node list is not an array
Even though a node list looks like an array, it isn't an array — although you can iterate through it and refer to its members like an array, you can't use Array methods like push or pop on it.
[http://reference.sitepoint.com/javascript/NodeList]

jsfNodeList:

jsoNodeList.MEMBER.CHROME:
> Object.getOwnPropertyNames((document.getElementsByName('body'))).sort()
["length"]
> Object.getOwnPropertyNames((document.getElementsByName('body')).__proto__).sort()
["constructor", "item"]
> Object.getOwnPropertyNames((document.getElementsByName('body')).__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> toString.call(document.childNodes)
"[object NodeList]"
> Object.getOwnPropertyNames(document.childNodes).sort()
["0", "1", "length"]
> Object.getOwnPropertyNames(document.childNodes.__proto__).sort()
["constructor", "item"]
> Object.getOwnPropertyNames(document.childNodes.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

> document.childNodes[0]
<!DOCTYPE html>
> document.childNodes[1]
<html class=?"cls-fullscreen">?…?</html>?
> document.childNodes.item(0)
<!DOCTYPE html>
> document.childNodes.item(1)
<html class=?"cls-fullscreen">?…?</html>?

jsoNodeList'creation:
document.childNodes
===
document.getElementsByName('body')

ljbhml'oRange > Range.prototype > Object.prototype

name::
* McsEngl.ljbhml'oRange > Range.prototype > Object.prototype@cptIt,
* McsEngl.ljso.oRange@cptIt,
* McsEngl.ljso.Range@cptIt,
* McsEngl.ljsRange-object@cptIt,
* McsEngl.ljsoRange@cptIt,
* McsEngl.ljs'html-dom-range@cptIt,
* McsEngl.ljs'Range-interface@cptIt,
* McsEngl.ljs'Range-function@cptIt,

_GENERIC:
> Object.prototype#ql:jsop@cptIt#

_DESCRIPTION:
A Range is an arbitrary part of the content of an HTML document. A Range can start and end at any point, and the start and end point may even be the same (in which case you have an empty Range). The most common Range is a user text selection. As soon as the user has selected (part of) the text on an HTML page, you can convert this selection to a Range. However, you can also define Ranges programmatically.
[http://www.quirksmode.org/dom/range_intro.html]
===
The Range interface represents a fragment of a document that can contain nodes and parts of text nodes in a given document.
A range can be created using the createRange method of the Document object. Range objects can also be retrieved by using the getRangeAt method of the Selection object. There also is the Range() constructor available.
[https://developer.mozilla.org/en-US/docs/Web/API/range]
===
Represents a contiguous part of the document.
Note: The Range object is supported in Internet Explorer from version 9.
The Range object supports properties and methods for several activities. With a Range object:
you can retrieve and modify any part of the document you can get the placement and several other geometrical properties of a contiguous part of the document you can get and modify the selected content of the document
[http://help.dottoro.com/ljxsqnoi.php]

_SUPPORT:
The Range object is supported by Firefox, Opera, Google Chrome, Safari and Internet Explorer from version 9. In older Internet Explorer versions (and in newer ones as well), the TextRange object provides similar functionality.
[http://help.dottoro.com/ljxsqnoi.php]

jsoRange'doing.CREATING

name::
* McsEngl.jsoRange'doing.CREATING@cptIt,

_DESCRIPTION:
A range can be created using the createRange method of the Document object. Range objects can also be retrieved by using the getRangeAt method of the Selection object#ql:jsoselection#. There also is the Range() constructor available.
[https://developer.mozilla.org/en-US/docs/Web/API/range]

_CODE.LJS:
var oRange = new Range();
===
var oRange = document.createRange();
===
getSelection().getRangeAt(0)

document.createRange()

name::
* McsEngl.document.createRange()@cptIt,
* McsEngl.jscreateRange@cptIt,
* McsEngl.ljscreateRange@cptIt,

_CODE.LJS:
var range = document.createRange();
range.setStart(startNode, startOffset);
range.setEnd(endNode, endOffset);
[https://developer.mozilla.org/en-US/docs/Web/API/Document.createRange]

jsoRange'Range.prototype

name::
* McsEngl.jsoRange'Range.prototype@cptIt,
* McsEngl.ljsRange.prototype@cptIt,

jsRange.prototype.CHROME:
> Object.getOwnPropertyNames(Range.prototype).sort()
["jsEND_TO_END", "ljsEND_TO_START", "ljsSTART_TO_END", "ljsSTART_TO_START", "ljscloneContents", "ljscloneRange", "ljscollapse", "ljscollapsed", "ljscommonAncestorContainer", "ljscompareBoundaryPoints", "ljscomparePoint", "ljsconstructor", "ljscreateContextualFragment", "ljsdeleteContents", "ljsdetach", "ljsendContainer", "ljsendOffset", "ljsexpand", "ljsextractContents", "ljsgetBoundingClientRect", "ljsgetClientRects", "ljsinsertNode", "ljsintersectsNode", "ljsisPointInRange", "ljsselectNode", "ljsselectNodeContents", "ljssetEnd", "ljssetEndAfter", "ljssetEndBefore", "ljssetStart", "ljssetStartAfter", "ljssetStartBefore", "ljsstartContainer", "ljsstartOffset", "ljssurroundContents", "ljstoString"]

jsRange.prototype.FF:
> Object.getOwnPropertyNames(Range.prototype).sort()
["jsEND_TO_END", "ljsEND_TO_START", "ljsSTART_TO_END", "ljsSTART_TO_START", "ljscloneContents", "ljscloneRange", "ljscollapse", "ljscollapsed", "ljscommonAncestorContainer", "ljscompareBoundaryPoints", "ljscomparePoint", "ljsconstructor", "ljscreateContextualFragment", "ljsdeleteContents", "ljsdetach", "ljsendContainer", "ljsendOffset", "ljsextractContents", "ljsgetBoundingClientRect", "ljsgetClientRects", "ljsinsertNode", "ljsintersectsNode", "ljsisPointInRange", "ljsselectNode", "ljsselectNodeContents", "ljssetEnd", "ljssetEndAfter", "ljssetEndBefore", "ljssetStart", "ljssetStartAfter", "ljssetStartBefore", "ljsstartContainer", "ljsstartOffset", "ljssurroundContents", "ljstoString"]

jsRange.prototype.EDGE:
[
0: "END_TO_END",
1: "END_TO_START",
2: "START_TO_END",
3: "START_TO_START",
4: "cloneContents",
5: "cloneRange",
6: "collapse",
7: "collapsed",
8: "commonAncestorContainer",
9: "compareBoundaryPoints",
10: "constructor",
11: "createContextualFragment",
12: "deleteContents",
13: "detach",
14: "endContainer",
15: "endOffset",
16: "expand",
17: "extractContents",
18: "getBoundingClientRect",
19: "getClientRects",
20: "insertNode",
21: "selectNode",
22: "selectNodeContents",
23: "setEnd",
24: "setEndAfter",
25: "setEndBefore",
26: "setStart",
27: "setStartAfter",
28: "setStartBefore",
29: "startContainer",
30: "startOffset",
31: "surroundContents",
32: "toString",
length: 33
]

jsoRange.MEMBER:
* jsoRange.END_TO_END,
* jsoRange.END_TO_START,
* jsoRange.START_TO_END,
* jsoRange.START_TO_START,
* jsoRange.cloneContents,
* jsoRange.cloneRange,
* jsoRange.collapse,
* jsoRange.collapsed,
* jsoRange.commonAncestorContainer,
* jsoRange.compareBoundaryPoints,
* jsoRange.comparePoint,
* jsoRange.constructor,
* jsoRange.createContextualFragment,
* jsoRange.deleteContents,
* jsoRange.detach,
* jsoRange.endContainer,
* jsoRange.endOffset,
* jsoRange.extractContents,
* jsoRange.getBoundingClientRect,
* jsoRange.getClientRects,
* jsoRange.insertNode,
* jsoRange.intersectsNode,
* jsoRange.isPointInRange,
* jsoRange.selectNode,
* jsoRange.selectNodeContents,
* jsoRange.setEnd,
* jsoRange.setEndAfter,
* jsoRange.setEndBefore,
* jsoRange.setStart,
* jsoRange.setStartAfter,
* jsoRange.setStartBefore,
* jsoRange.startContainer,
* jsoRange.startOffset,
* jsoRange.surroundContents,
* jsoRange.toString,
===

jsoRange.MEMBER.chrome:
//2016-02-02
Object.getOwnPropertyNames(new Range()).sort()
[]
Object.getOwnPropertyNames(new Range().__proto__).sort()
["jsEND_TO_END", "ljsEND_TO_START", "ljsSTART_TO_END", "ljsSTART_TO_START", "ljscloneContents", "ljscloneRange", "ljscollapse", "ljscollapsed", "ljscommonAncestorContainer", "ljscompareBoundaryPoints", "ljscomparePoint", "ljsconstructor", "ljscreateContextualFragment", "ljsdeleteContents", "ljsdetach", "ljsendContainer", "ljsendOffset", "ljsexpand", "ljsextractContents", "ljsgetBoundingClientRect", "ljsgetClientRects", "ljsinsertNode", "ljsintersectsNode", "ljsisPointInRange", "ljsselectNode", "ljsselectNodeContents", "ljssetEnd", "ljssetEndAfter", "ljssetEndBefore", "ljssetStart", "ljssetStartAfter", "ljssetStartBefore", "ljsstartContainer", "ljsstartOffset", "ljssurroundContents", "ljstoString"]
===
> Object.getOwnPropertyNames(new Range).sort()
["collapsed", "commonAncestorContainer", "endContainer", "endOffset", "startContainer", "startOffset"]
> Object.getOwnPropertyNames(Range.prototype).sort()
["END_TO_END", "END_TO_START", "NODE_AFTER", "NODE_BEFORE", "NODE_BEFORE_AND_AFTER", "NODE_INSIDE", "START_TO_END", "START_TO_START", "cloneContents", "cloneRange", "collapse", "compareBoundaryPoints", "compareNode", "comparePoint", "constructor", "createContextualFragment", "deleteContents", "detach", "expand", "extractContents", "getBoundingClientRect", "getClientRects", "insertNode", "intersectsNode", "isPointInRange", "selectNode", "selectNodeContents", "setEnd", "setEndAfter", "setEndBefore", "setStart", "setStartAfter", "setStartBefore", "surroundContents", "toString"]
===
Object.getOwnPropertyNames(document.createRange()).sort()
["collapsed", "commonAncestorContainer", "endContainer", "endOffset", "startContainer", "startOffset"]
Object.getOwnPropertyNames(document.createRange().__proto__).sort()
["END_TO_END", "END_TO_START", "NODE_AFTER", "NODE_BEFORE", "NODE_BEFORE_AND_AFTER", "NODE_INSIDE", "START_TO_END", "START_TO_START", "cloneContents", "cloneRange", "collapse", "compareBoundaryPoints", "compareNode", "comparePoint", "constructor", "createContextualFragment", "deleteContents", "detach", "expand", "extractContents", "getBoundingClientRect", "getClientRects", "insertNode", "intersectsNode", "isPointInRange", "selectNode", "selectNodeContents", "setEnd", "setEndAfter", "setEndBefore", "setStart", "setStartAfter", "setStartBefore", "surroundContents", "toString"]
Object.getOwnPropertyNames(document.createRange().__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===

jsoRange.MEMBER.firefox:
> Object.getOwnPropertyNames(Range.prototype).sort()
["END_TO_END", "END_TO_START", "START_TO_END", "START_TO_START", "cloneContents", "cloneRange", "collapse", "collapsed", "commonAncestorContainer", "compareBoundaryPoints", "comparePoint", "constructor", "createContextualFragment", "deleteContents", "detach", "endContainer", "endOffset", "extractContents", "getBoundingClientRect", "getClientRects", "insertNode", "intersectsNode", "isPointInRange", "selectNode", "selectNodeContents", "setEnd", "setEndAfter", "setEndBefore", "setStart", "setStartAfter", "setStartBefore", "startContainer", "startOffset", "surroundContents", "toString"]

Range-position-object (tmce):
{
startContainer: startContainer,
startOffset: startOffset,
endContainer: endContainer,
endOffset: endOffset
};

jsEND_TO_END

name::
* McsEngl.jsEND_TO_END@cptIt,

jsEND_TO_START

name::
* McsEngl.jsEND_TO_START@cptIt,

jsSTART_TO_END

name::
* McsEngl.jsSTART_TO_END@cptIt,

jsSTART_TO_START

name::
* McsEngl.jsSTART_TO_START@cptIt,

jscloneContents

name::
* McsEngl.jscloneContents@cptIt,

jscloneRange

name::
* McsEngl.jscloneRange@cptIt,

jscollapse boolean

name::
* McsEngl.jscollapse boolean@cptIt,

_DESCRIPTION:
Returns a Boolean indicating whether the range's start and end points are at the same position.

jscollapsed function

name::
* McsEngl.jscollapsed function@cptIt,

_DESCRIPTION:

jscommonAncestorContainer oNode

name::
* McsEngl.jscommonAncestorContainer oNode@cptIt,

_DESCRIPTION:
Returns the deepest Node that contains the startContainer and endContainer nodes.

jscompareBoundaryPoints

name::
* McsEngl.jscompareBoundaryPoints@cptIt,

jscomparePoint

name::
* McsEngl.jscomparePoint@cptIt,

jsconstructor

name::
* McsEngl.jsconstructor@cptIt,

jscreateContextualFragment

name::
* McsEngl.jscreateContextualFragment@cptIt,

jsdeleteContents

name::
* McsEngl.jsdeleteContents@cptIt,

jsdetach

name::
* McsEngl.jsdetach@cptIt,

jsendContainer

name::
* McsEngl.jsendContainer@cptIt,

_DESCRIPTION:
Returns the Node within which the Range ends.

jsendOffset

name::
* McsEngl.jsendOffset@cptIt,

_DESCRIPTION:
Returns a number representing where in the endContainer the Range ends.

jsexpand

name::
* McsEngl.jsexpand@cptIt,

jsextractContents

name::
* McsEngl.jsextractContents@cptIt,
* McsEngl.jsextractContents@cptIt,

_DESCRIPTION:
extractContents()
Creates a DocumentFragment object, copies the contents of the current Range object into it and removes the contents of current Range from the document tree.
Note: The Range object and its extractContents method are supported in Internet Explorer from version 9.
The DocumentFragment object is a context-free container that is similar to the document object. The DocumentFragment element is useful if you want to create complex HTML content, where you can find, replace, remove or insert elements, and when you are done, the contents can be inserted into the document tree.
The cloneContents method is similar to the extractContents method, it also creates a DocumentFragment object from the contents of a Range object, but it does not remove the contents of the Range from the document tree. To remove the contents of a Range from the document tree, use the deleteContents method.
[http://help.dottoro.com/ljcnmomm.php]

jsgetBoundingClientRect

name::
* McsEngl.jsgetBoundingClientRect@cptIt,

jsgetClientRects

name::
* McsEngl.jsgetClientRects@cptIt,

jsinsertNode

name::
* McsEngl.jsinsertNode@cptIt,

jsintersectsNode

name::
* McsEngl.jsintersectsNode@cptIt,

jsisPointInRange

name::
* McsEngl.jsisPointInRange@cptIt,

jsselectNode

name::
* McsEngl.jsselectNode@cptIt,

jsselectNodeContents

name::
* McsEngl.jsselectNodeContents@cptIt,

jssetEnd

name::
* McsEngl.jssetEnd@cptIt,

jssetEndAfter

name::
* McsEngl.jssetEndAfter@cptIt,

jssetEndBefore

name::
* McsEngl.jssetEndBefore@cptIt,

jssetStart

name::
* McsEngl.jssetStart@cptIt,

jssetStartAfter

name::
* McsEngl.jssetStartAfter@cptIt,

jssetStartBefore

name::
* McsEngl.jssetStartBefore@cptIt,

jsstartContainer oNode

name::
* McsEngl.jsstartContainer oNode@cptIt,

_DESCRIPTION:
Returns the Node within which the Range starts.

jsstartOffset number

name::
* McsEngl.jsstartOffset number@cptIt,

_DESCRIPTION:
Returns a number representing where in the startContainer the Range starts.

jssurroundContents

name::
* McsEngl.jssurroundContents@cptIt,

jstoString

name::
* McsEngl.jstoString@cptIt,

ljbhml'oStyleSheet > Object.prototype

name::
* McsEngl.ljbhml'oStyleSheet > Object.prototype@cptIt,
* McsEngl.ljsStyleSheet@cptIt,
* McsEngl.ljsoStyleSheet@cptIt,

_GENERIC:
> Object.getPrototypeOf(StyleSheet.prototype)
Object {}

_MEMBER.CHROME:
//2015-10-30
> Object.getOwnPropertyNames(StyleSheet.prototype).sort()
["constructor", "disabled", "href", "media", "ownerNode", "parentStyleSheet", "title", "type"]

_MEMBER.FIREFOX:
//2015-10-30
> Object.getOwnPropertyNames(StyleSheet.prototype).sort()
["constructor", "disabled", "href", "media", "ownerNode", "parentStyleSheet", "title", "type"]

ljbhml'oEventTarget > EventTarget.prototype > Object.prototype

name::
* McsEngl.ljbhml'oEventTarget > EventTarget.prototype > Object.prototype@cptIt,
* McsEngl.ljsoEventTarget@cptIt,

_GENERIC:
* Object.prototype#ql:object.prototype@cptIt#

jsoEventTarget'EventTarget-function

name::
* McsEngl.jsoEventTarget'EventTarget-function@cptIt,
* McsEngl.jsEventTarget@cptIt,
* McsEngl.ljsEventTarget@cptIt,
* McsEngl.ljsf.EventTarget@cptIt,
* McsEngl.ljsfEventTarget@cptIt,
* McsEngl.ljs'EventTarget-function@cptIt,

_DESCRIPTION:
Summary
EventTarget is a DOM interface implemented by objects that can receive DOM events and have listeners for them.

Element, document, and window are the most common event targets, but other objects can be event targets too, for example XMLHttpRequest, AudioNode, AudioContext and others.

Many event targets (including elements, documents, and windows) also support setting event handlers via on... properties and attributes.

Methods
EventTarget.addEventListener ()
Register an event handler of a specific event type on the EventTarget.
EventTarget.removeEventListener ()
Removes an event listener from the EventTarget.
EventTarget.dispatchEvent ()
Dispatch an event to this EventTarget.
Specifications

Specification  Status  Comment
DOM  Living Standard  No change.
Document Object Model (DOM) Level 3 Events Specification  Working Draft  A few parameters are now optional (listener), or accepts the null value (useCapture).
Document Object Model (DOM) Level 2 Events Specification  Recommendation  Initial definition.
Browser compatibility

Desktop Mobile
Feature  Chrome  Firefox (Gecko)  Internet Explorer  Opera  Safari (WebKit)
Basic support  1.0  1.0 (1.7 or earlier)  9.0  7  1.0
[https://developer.mozilla.org/en-US/docs/Web/API/EventTarget]

jsoEventTarget'EventTarget.prototype > Object.prototype

name::
* McsEngl.jsoEventTarget'EventTarget.prototype > Object.prototype@cptIt,
* McsEngl.jsEventTarget.prototype@cptIt,
* McsEngl.ljsEventTarget.prototype@cptIt,

_MEMBER.CHROME:
> Object.getOwnPropertyNames(EventTarget.prototype).sort()
["jsaddEventListener", "constructor", "ljsdispatchEvent", "ljsremoveEventListener"]

_SPECIFIC:
* oEventTarget##
* Node.prototype#ql:jsnode.prototype#

jsEventTarget.prototype.addEventListener-function

name::
* McsEngl.jsEventTarget.prototype.addEventListener-function@cptIt,
* McsEngl.jsaddEventListener@cptIt,
* McsEngl.addEventListener.js@cptIt,
* McsEngl.jsaddEventListener@cptIt,

_DESCRIPTION:
The recommended method of event handling by DOM3 standard is to use addEventListener() method.

addEventListener(
event string,
listener (function or an Object implementing EventListener),
useCapture
);

Where useCapture is a boolean value that indicates that the event of the specified type (example: "click" event) to be sent to the designated listener by the designated element during the-capture-phase#ql:ljsevt'capture_phase# (refer to the diagram above). Son that in this example below, the body will receive the notification before the event reaches the button:

document.body.addEventListener("click", function(){alert("body clicked");}, true);
document.getElementById("button").onclick=function(){alert("button2 clicked");
===
You can also use anonymous functions in the W3C model:
element.addEventListener('click',function () {
 this.style.backgroundColor = '#cc0000'
},false)
[http://www.quirksmode.org/js/events_advanced.html]
===
useCapture If not specified, useCapture defaults to false.
[https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener]

_BROWSER_SUPPORT:
Note: The addEventListener() method is not supported in Internet Explorer 8 and earlier versions.
[http://www.w3schools.com/jsref/event_onbeforeunload.asp]

_CODE.LJS:
document.addEventListener():
document.addEventListener("keydown", checkKeydown, false);
function checkKeydown(event){
if(event.altKey==1&&event.keyCode=={YOUR_KEY_CODE_HERE(let's say 13,
13 is the keycode for "Enter")})
{
//do something
//something else
}
}
===
document.addEventListener('DOMContentLoaded', function () {
console.log(tinymce);
// semi-equivalent to jQuery
$( document ).ready(function() {
console.log( "ready!" );
});
===
var button = document.getElementById ("testButton");
if (button.addEventListener) { // all browsers except IE before version 9
button.addEventListener ("mousedown", function () {OnButtonDown (button)}, false);
button.addEventListener ("mouseup", function () {OnButtonUp (button)}, false);
} else {
if (button.attachEvent) { // IE before version 9
button.attachEvent ("onmousedown", function () {OnButtonDown (button)});
button.attachEvent ("onmouseup", function () {OnButtonUp (button)});
}
}

jsEventTarget.prototype.dispatchEvent-function

name::
* McsEngl.jsEventTarget.prototype.dispatchEvent-function@cptIt,
* McsEngl.jsdispatchEvent@cptIt,

_DESCRIPTION:
Triggers an-event on a-target.

_CODE.LJS:
// Events can be created with the Event constructor as follows:
var event = new Event('build');
// Listen for the event.
elem.addEventListener('build', function (e) { ... }, false);
// Dispatch the event.
elem.dispatchEvent(event);
[https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events]

jsEventTarget.prototype.removeEventListener-function

name::
* McsEngl.jsEventTarget.prototype.removeEventListener-function@cptIt,
* McsEngl.jsremoveEventListener@cptIt,
* McsEngl.removeEventListener.js@cptIt,

_DESCRIPTION:
To remove an event handler, use the removeEventListener() method. You can choose which handler to remove, so

element.removeEventListener('click',spyOnUser,false)

removes the second event handler but leaves the first one untouched. Beautiful functionality, and it exactly solves the problem with the traditional model we noted before.

Fortunately removeEventListener() doesn’t give any errors if the event listener you want to remove has not been added to the element, so when in doubt you can always use removeEventListener().
[http://www.quirksmode.org/js/events_advanced.html]

_PARAMETER:
element.removeEventListener(event, function, useCapture)
Parameter  Description
event  Required. A String that specifies the name of the event to remove.
Note: Do not use the "on" prefix. For example, use "click" instead of "onclick".
Tip: For a list of all HTML DOM events, look at our complete HTML DOM Event Object Reference.

function  Required. Specifies the function to remove.

useCapture  Optional. A Boolean value that specifies the event phase to remove the event handler from.
Possible values:
true - Removes the event handler from the capturing phase
false- Default. Removes the event handler from the bubbling phase
Note: If the event handler was attached two times, one with capturing and one bubbling, each must be removed separately.
[http://www.w3schools.com/jsref/met_element_removeeventlistener.asp]

_CODE.LJS:
<!DOCTYPE html>
<html lang="en">
<body>

<div>click to say hi</div>

<script>

var sayHi = function(){console.log('hi')};

//adding event listener using anonymous function
document.body.addEventListener('click',function(){console.log('dude');},false);

//adding event listener using function reference
document.querySelector('div').addEventListener('click',sayHi,false);

//attempt to remove both event listeners, but only the listener added with a funtions reference is removed
document.querySelector('div').removeEventListener('click',sayHi,false);

//this of course does not work as the function passed to removeEventListener is a new and different function
document.body.removeEventListener('click',function(){console.log('dude');},false);

//clicking the div will still invoke the click event attached to the body element, this event was not removed

</script>
</body>
</html>
Anonymous functions added using addEventListener() method simply cannot be removed.
[http://domenlightenment.com/#11.4]

jsoEventTarget'member

name::
* McsEngl.jsoEventTarget'member@cptIt,

jsoEventTarget.member:
* jsoEventTarget'addEventListener, EventTarget.prototype,
* jsoEventTarget'constructor, EventTarget.prototype,
* jsoEventTarget'dispatchEvent, EventTarget.prototype,
* jsoEventTarget'removeEventListener, EventTarget.prototype,

_PROPERTY:
> EventTarget.prototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__.__proto__).sort()
* jsoEventtarget.addEventListener, EventTargetPrototype, firefox,
* jsoEventtarget.constructor, EventTargetPrototype, firefox,
* jsoEventtarget.dispatchEvent, EventTargetPrototype, firefox,
* jsoEventtarget.removeEventListener, EventTargetPrototype, firefox,

> Object.prototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__.__proto__.__proto__).sort()
* jsoEventtarget.__defineGetter__, ObjectPrototype, firefox,
* jsoEventtarget.__defineSetter__, ObjectPrototype, firefox,
* jsoEventtarget.__lookupGetter__, ObjectPrototype, firefox,
* jsoEventtarget.__lookupSetter__, ObjectPrototype, firefox,
* jsoEventtarget.constructor, ObjectPrototype, firefox,
* jsoEventtarget.hasOwnProperty, ObjectPrototype, firefox,
* jsoEventtarget.isPrototypeOf, ObjectPrototype, firefox,
* jsoEventtarget.propertyIsEnumerable, ObjectPrototype, firefox,
* jsoEventtarget.toLocaleString, ObjectPrototype, firefox,
* jsoEventtarget.toSource, ObjectPrototype, firefox,
* jsoEventtarget.toString, ObjectPrototype, firefox,
* jsoEventtarget.unwatch, ObjectPrototype, firefox,
* jsoEventtarget.valueOf, ObjectPrototype, firefox,
* jsoEventtarget.watch, ObjectPrototype, firefox,

ljbhml'oNode > Node.prototype > EventTarget.prototype > Object.prototype

name::
* McsEngl.ljbhml'oNode > Node.prototype > EventTarget.prototype > Object.prototype@cptIt,
* McsEngl.jsoNode@cptIt,
* McsEngl.ljsNode-object@cptIt,
* McsEngl.ljsoNode@cptIt,

_GENERIC:
* Node.prototype,
* EventTarget.prototype,

_GENERIC:
> Object.getPrototypeOf(Node)
function EventTarget#ql:lcpjs'eventtarget#() { [native code] }
===
> typeof Node
"function"
===
> Node.prototype instanceof EventTarget
true
> Node instanceof EventTarget
false

_DESCRIPTION:
> Node.prototype instanceof EventTarget
true
> Node.prototype.__proto__ === EventTarget.prototype
true
> Object.getOwnPropertyNames(EventTarget.prototype).sort()
["addEventListener", "constructor", "dispatchEvent", "removeEventListener"]
> Object.getOwnPropertyNames(Node.prototype.__proto__).sort()
["addEventListener", "constructor", "dispatchEvent", "removeEventListener"]
===
> Object.getOwnPropertyNames(Node.prototype).sort()
["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "appendChild", "cloneNode", "compareDocumentPosition", "constructor", "contains", "hasChildNodes", "insertBefore", "isDefaultNamespace", "isEqualNode", "isSameNode", "lookupNamespaceURI", "lookupPrefix", "normalize", "removeChild", "replaceChild"]
===
The Node object represents a node in the HTML document.
[http://www.w3schools.com/jsref/dom_obj_node.asp]
===
DOM Nodes
According to the DOM, everything in an HTML document is a node.
The DOM says:
- The entire document is a document node
- Every HTML element is an element node
- The text in the HTML elements are text nodes
- Every HTML attribute is an attribute node
- Comments are comment nodes
[http://www.w3schools.com/htmldom/dom_nodes.asp]

jsoNode'doing

name::
* McsEngl.jsoNode'doing@cptIt,

jsoNode'doing.CREATING-NODE

name::
* McsEngl.jsoNode'doing.CREATING-NODE@cptIt,
* McsEngl.ljshnode'creating@cptIt,

_PROPERTY:
* document.createAttribute()
* document.createAttributeNS
* document.createCDATASection()
* document.createDocumentFragment
* document.createElement()#ql:jscreateelement#
* document.createElementNS
* document.createProcessingInstruction,
* document.createTextNode()#ql:lcpJs'document.createTextNode#

jsoNode'doing.INSERTING-NODE

name::
* McsEngl.jsoNode'doing.INSERTING-NODE@cptIt,

_PROPERTY:
* appendChild()#linkL#
* insertBefore()#linkL#

jsoNode'doing.EXTRACTING-STRING

name::
* McsEngl.jsoNode'doing.EXTRACTING-STRING@cptIt,

_PROPERTY:
* innerHTML#linkL#
* outerHTML#ql:js'outerhtml#
* textContent#linkL#

jsoNode'doing.REMOVING-NODE

name::
* McsEngl.jsoNode'doing.REMOVING-NODE@cptIt,

_PROPERTY:
* removeChild()#linkL#

jsoNode'doing.REPLACING-NODE

name::
* McsEngl.jsoNode'doing.REPLACING-NODE@cptIt,

_PROPERTY:
* replaceChild()#linkL#

jsoNode'doing.SEARCHING

name::
* McsEngl.jsoNode'doing.SEARCHING@cptIt,
* McsEngl.ljshnode'searching@cptIt,

_PROPERTY:
parentNode
firstChild
lastChild
nextSibling
previousSibling
firstElementChild
lastElementChild
nextElementChild
previousElementChild
children

jsoNode'member

name::
* McsEngl.jsoNode'member@cptIt,
* McsEngl.ljsoNode'property@cptIt,
* McsEngl.ljshnode'property@cptIt,

jsoNode.MEMBER.FIREFOX:
> > Object.getOwnPropertyNames(Node.prototype).sort()
* ATTRIBUTE_NODE, oNode.ATTRIBUTE_NODE,
* CDATA_SECTION_NODE, oNode.CDATA_SECTION_NODE,
* COMMENT_NODE, oNode.COMMENT_NODE,
* DOCUMENT_FRAGMENT_NODE, oNode.DOCUMENT_FRAGMENT_NODE,
* DOCUMENT_NODE, oNode.DOCUMENT_NODE,
* DOCUMENT_POSITION_CONTAINED_BY, oNode.DOCUMENT_POSITION_CONTAINED_BY,
* DOCUMENT_POSITION_CONTAINS, oNode.DOCUMENT_POSITION_CONTAINS,
* DOCUMENT_POSITION_DISCONNECTED, oNode.DOCUMENT_POSITION_DISCONNECTED,
* DOCUMENT_POSITION_FOLLOWING, oNode.DOCUMENT_POSITION_FOLLOWING,
* DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, oNode.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC,
* DOCUMENT_POSITION_PRECEDING, oNode.DOCUMENT_POSITION_PRECEDING,
* DOCUMENT_TYPE_NODE, oNode.DOCUMENT_TYPE_NODE,
* ELEMENT_NODE, oNode.ELEMENT_NODE,
* ENTITY_NODE, oNode.ENTITY_NODE,
* ENTITY_REFERENCE_NODE, oNode.ENTITY_REFERENCE_NODE,
* NOTATION_NODE, oNode.NOTATION_NODE,
* PROCESSING_INSTRUCTION_NODE, oNode.PROCESSING_INSTRUCTION_NODE,
* TEXT_NODE, oNode.TEXT_NODE,
* appendChild, oNode.appendChild,
* baseURI, oNode.baseURI,
* childNodes, oNode.childNodes,
* cloneNode, oNode.cloneNode,
* compareDocumentPosition, oNode.compareDocumentPosition,
* constructor, oNode.constructor,
* contains, oNode.contains,
* firstChild, oNode.firstChild,
* hasAttributes, oNode.hasAttributes,
* hasChildNodes, oNode.hasChildNodes,
* insertBefore, oNode.insertBefore,
* isDefaultNamespace, oNode.isDefaultNamespace,
* isEqualNode, oNode.isEqualNode,
* lastChild, oNode.lastChild,
* localName, oNode.localName,
* lookupNamespaceURI, oNode.lookupNamespaceURI,
* lookupPrefix, oNode.lookupPrefix,
* namespaceURI, oNode.namespaceURI,
* nextSibling, oNode.nextSibling,
* nodeName, oNode.nodeName,
* nodeType, oNode.nodeType,
* nodeValue, oNode.nodeValue,
* normalize, oNode.normalize,
* ownerDocument, oNode.ownerDocument,
* parentElement, oNode.parentElement,
* parentNode, oNode.parentNode,
* prefix, oNode.prefix,
* previousSibling, oNode.previousSibling,
* removeChild, oNode.removeChild,
* replaceChild, oNode.replaceChild,
* textContent, oNode.textContent,

===
oNode.prototype:
===
> CHROME:
Object.getOwnPropertyNames(Node.prototype).sort()
"ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "appendChild", "cloneNode", "compareDocumentPosition", "constructor", "contains", "hasChildNodes", "insertBefore", "isDefaultNamespace", "isEqualNode", "isSameNode", "lookupNamespaceURI", "lookupPrefix", "normalize", "removeChild", "replaceChild"]


Object.getOwnPropertyNames(Element.prototype.__proto__).sort()
["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "appendChild", "cloneNode", "compareDocumentPosition", "constructor", "contains", "hasChildNodes", "insertBefore", "isDefaultNamespace", "isEqualNode", "isSameNode", "lookupNamespaceURI", "lookupPrefix", "normalize", "removeChild", "replaceChild"]
===

> NodePrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__).sort()
* oNode.ATTRIBUTE_NODE, NodePrototype, firefox,
* oNode.CDATA_SECTION_NODE, NodePrototype, firefox,
* oNode.COMMENT_NODE, NodePrototype, firefox,
* oNode.DOCUMENT_FRAGMENT_NODE, NodePrototype, firefox,
* oNode.DOCUMENT_NODE, NodePrototype, firefox,
* oNode.DOCUMENT_POSITION_CONTAINED_BY, NodePrototype, firefox,
* oNode.DOCUMENT_POSITION_CONTAINS, NodePrototype, firefox,
* oNode.DOCUMENT_POSITION_DISCONNECTED, NodePrototype, firefox,
* oNode.DOCUMENT_POSITION_FOLLOWING, NodePrototype, firefox,
* oNode.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, NodePrototype, firefox,
* oNode.DOCUMENT_POSITION_PRECEDING, NodePrototype, firefox,
* oNode.DOCUMENT_TYPE_NODE, NodePrototype, firefox,
* oNode.ELEMENT_NODE, NodePrototype, firefox,
* oNode.ENTITY_NODE, NodePrototype, firefox,
* oNode.ENTITY_REFERENCE_NODE, NodePrototype, firefox,
* oNode.NOTATION_NODE, NodePrototype, firefox,
* oNode.PROCESSING_INSTRUCTION_NODE, NodePrototype, firefox,
* oNode.TEXT_NODE, NodePrototype, firefox,
* oNode.appendChild, NodePrototype, firefox,
* oNode.baseURI, NodePrototype, firefox,
* oNode.childNodes, NodePrototype, firefox,
* oNode.cloneNode, NodePrototype, firefox,
* oNode.compareDocumentPosition, NodePrototype, firefox,
* oNode.constructor, NodePrototype, firefox,
* oNode.contains, NodePrototype, firefox,
* oNode.firstChild, NodePrototype, firefox,
* oNode.hasAttributes, NodePrototype, firefox,
* oNode.hasChildNodes, NodePrototype, firefox,
* oNode.insertBefore, NodePrototype, firefox,
* oNode.isDefaultNamespace, NodePrototype, firefox,
* oNode.isEqualNode, NodePrototype, firefox,
* lastChild, NodePrototype, firefox,
* oNode.localName, NodePrototype, firefox,
* oNode.lookupNamespaceURI, NodePrototype, firefox,
* oNode.lookupPrefix, NodePrototype, firefox,
* oNode.namespaceURI, NodePrototype, firefox,
* oNode.nextSibling, NodePrototype, firefox,
* oNode.nodeName, NodePrototype, firefox,
* oNode.nodeType, NodePrototype, firefox,
* oNode.nodeValue, NodePrototype, firefox,
* oNode.normalize, NodePrototype, firefox,
* oNode.ownerDocument, NodePrototype, firefox,
* oNode.parentElement, NodePrototype, firefox,
* oNode.parentNode, NodePrototype, firefox,
* oNode.prefix, NodePrototype, firefox,
* oNode.previousSibling, NodePrototype, firefox,
* oNode.removeChild, NodePrototype, firefox,
* oNode.replaceChild, NodePrototype, firefox,
* oNode.textContent, NodePrototype, firefox,

> EventTargetPrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__.__proto__).sort()
* oNode.addEventListener, EventTargetPrototype, firefox,
* oNode.constructor, EventTargetPrototype, firefox,
* oNode.dispatchEvent, EventTargetPrototype, firefox,
* oNode.removeEventListener, EventTargetPrototype, firefox,

> ObjectPrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__.__proto__.__proto__).sort()
* oNode.__defineGetter__, ObjectPrototype, firefox,
* oNode.__defineSetter__, ObjectPrototype, firefox,
* oNode.__lookupGetter__, ObjectPrototype, firefox,
* oNode.__lookupSetter__, ObjectPrototype, firefox,
* oNode.constructor, ObjectPrototype, firefox,
* oNode.hasOwnProperty, ObjectPrototype, firefox,
* oNode.isPrototypeOf, ObjectPrototype, firefox,
* oNode.propertyIsEnumerable, ObjectPrototype, firefox,
* oNode.toLocaleString, ObjectPrototype, firefox,
* oNode.toSource, ObjectPrototype, firefox,
* oNode.toString, ObjectPrototype, firefox,
* oNode.unwatch, ObjectPrototype, firefox,
* oNode.valueOf, ObjectPrototype, firefox,
* oNode.watch, ObjectPrototype, firefox,

_SPECIFIC: lcpJs'node.inheritedNo:
Object.getOwnPropertyNames(Node).sort()
["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "arguments", "caller", "length", "name", "prototype", "toString"]

_SPECIFIC: lcpJs'node.inherited:
> Object.getOwnPropertyNames(Object.getPrototypeOf(Node) ).sort()//EventTarget
["arguments", "caller", "length", "name", "prototype", "toString"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(Object.getPrototypeOf(Node)) ).sort()//Function.prototype
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Node))) ).sort()//Object.prototype
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
> getMemberInherited(Node).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "apply", "bind", "call", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "valueOf"]
===
> Object.getOwnPropertyNames(Node.__proto__).sort()
["arguments", "caller", "length", "name", "prototype", "toString"]
===
> Object.getOwnPropertyNames(Node.prototype).sort()
["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "appendChild", "cloneNode", "compareDocumentPosition", "constructor", "contains", "hasChildNodes", "insertBefore", "isDefaultNamespace", "isEqualNode", "isSameNode", "isSupported", "lookupNamespaceURI", "lookupPrefix", "normalize", "removeChild", "replaceChild"]

_SPECIFIC:
appendChild()
childNodes
cloneNode()
compareDocumentPosition()
contains()
firstChild
hasChildNodes()
insertBefore()
isEqualNode()
lastChild
nextSibling
nodeName
nodeType
nodeValue
parentNode
previousSibling
removeChild()
replaceChild()

jsoNode'method

name::
* McsEngl.jsoNode'method@cptIt,

_SPECIFIC:
Node Methods:
appendChild()
cloneNode()
compareDocumentPosition()
contains()
hasChildNodes()
insertBefore()
isEqualNode()
removeChild()
replaceChild()
[http://domenlightenment.com/#1]

jsoNode'method.NO

name::
* McsEngl.jsoNode'method.NO@cptIt,

_SPECIFIC:
Node Properties:
childNodes
firstChild
lastChild
nextSibling
nodeName
nodeType
nodeValue
parentNode
previousSibling
[http://domenlightenment.com/#1]

jsoNode'Node-function

name::
* McsEngl.jsoNode'Node-function@cptIt,
* McsEngl.HtmlDom'NODE@cptIt,
* McsEngl.ljshnode@cptIt, {2014-03-02}
* McsEngl.ljsf.Node@cptIt,
* McsEngl.ljsfNode@cptIt,
* McsEngl.ljsNode@cptIt,
* McsEngl.ljsNode-function@cptIt,
* McsEngl.ljs'dom-node@cptIt,
* McsEngl.ljs'hnode@cptIt,
* McsEngl.ljs'html'node@cptIt,
* McsEngl.ljs'node@cptIt,

jsoNode'Node.prototype > EventTarget.prototype#ql:jseventtarget.prototype# > Object.prototype#ql:jsobject.prototype#

name::
* McsEngl.jsoNode'Node.prototype > EventTarget.prototype@cptIt,
* McsEngl.jsNode.prototype@cptIt,
* McsEngl.ljsNode.prototype@cptIt,

_SPECIFIC:
* oNode,
* CharacterData.prototype#ql:jsCharacterData.prototype# > Node.prototype#ql:jsNode.prototype#,
* Document.prototype#ql:jsdocument.prototype# > Node.prototype#ql:jsNode.prototype#,
* DocumentFragment.prototype
* Element.prototype

jsNode.prototype.CHROME:
//2015-11-14
> Object.getOwnPropertyNames(Node.prototype).sort()
["jsATTRIBUTE_NODE", "ljsCDATA_SECTION_NODE", "ljsCOMMENT_NODE", "ljsDOCUMENT_FRAGMENT_NODE", "ljsDOCUMENT_NODE", "ljsDOCUMENT_POSITION_CONTAINED_BY", "ljsDOCUMENT_POSITION_CONTAINS", "ljsDOCUMENT_POSITION_DISCONNECTED", "ljsDOCUMENT_POSITION_FOLLOWING", "ljsDOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "ljsDOCUMENT_POSITION_PRECEDING", "ljsDOCUMENT_TYPE_NODE", "ljsELEMENT_NODE", "ljsENTITY_NODE", "ljsENTITY_REFERENCE_NODE", "ljsNOTATION_NODE", "ljsPROCESSING_INSTRUCTION_NODE", "ljsTEXT_NODE", "ljsappendChild", "ljsbaseURI", "ljschildNodes", "ljscloneNode", "ljscompareDocumentPosition", "ljsconstructor", "ljscontains", "ljsfirstChild", "ljshasChildNodes", "ljsinsertBefore", "ljsisDefaultNamespace", "ljsisEqualNode", "ljsisSameNode", "ljslastChild", "ljslookupNamespaceURI", "ljslookupPrefix", "nextSibling", "ljsnodeName", "ljsnodeType", "ljsnodeValue", "ljsnormalize", "ljsownerDocument", "ljsparentElement", "ljsparentNode", "ljspreviousSibling", "ljsremoveChild", "ljsreplaceChild", "ljstextContent"]

jsNode.prototype.FF:
> Object.getOwnPropertyNames(Node.prototype).sort()
["jsATTRIBUTE_NODE", "ljsCDATA_SECTION_NODE", "ljsCOMMENT_NODE", "ljsDOCUMENT_FRAGMENT_NODE", "ljsDOCUMENT_NODE", "ljsDOCUMENT_POSITION_CONTAINED_BY", "ljsDOCUMENT_POSITION_CONTAINS", "ljsDOCUMENT_POSITION_DISCONNECTED", "ljsDOCUMENT_POSITION_FOLLOWING", "ljsDOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "ljsDOCUMENT_POSITION_PRECEDING", "ljsDOCUMENT_TYPE_NODE", "ljsELEMENT_NODE", "ljsENTITY_NODE", "ljsENTITY_REFERENCE_NODE", "ljsNOTATION_NODE", "ljsPROCESSING_INSTRUCTION_NODE", "ljsTEXT_NODE", "ljsappendChild", "ljsbaseURI", "ljschildNodes", "ljscloneNode", "ljscompareDocumentPosition", "ljsconstructor", "ljscontains", "ljsfirstChild", "ljshasChildNodes", "ljsinsertBefore", "ljsisDefaultNamespace", "ljsisEqualNode", "ljslastChild", "ljslocalName", "ljslookupNamespaceURI", "ljslookupPrefix", "ljsnamespaceURI", "nextSibling", "ljsnodeName", "ljsnodeType", "ljsnodeValue", "ljsnormalize", "ljsownerDocument", "ljsparentElement", "ljsparentNode", "ljsprefix", "ljspreviousSibling", "ljsremoveChild", "ljsreplaceChild", "ljstextContent"]

jsNode.prototype.appendChild()

name::
* McsEngl.jsNode.prototype.appendChild()@cptIt,
* McsEngl.jsappendChild@cptIt,
* McsEngl.ljsappendChild@cptIt,
* McsEngl.ljs'appendChild@cptIt,
* McsEngl.ljs'appendChild.hnode-method@cptIt,

_CODE.LJS:
oNode.appendChild(oNodeIn)
===
var newElem = document.createElement ("div");
newElem.innerHTML = "sample text";
newElem.style.color = "red";
var container = document.getElementById ("container");
container.appendChild (newElem);
[]

jsNode.prototype.ATTRIBUTE-NODE number (2)

name::
* McsEngl.jsNode.prototype.ATTRIBUTE-NODE number (2)@cptIt,

jsNode.prototype.childNodes oNodeList#ql:jsonodelist#

name::
* McsEngl.jsNode.prototype.childNodes oNodeList@cptIt,
* McsEngl.jschildNodes@cptIt,
* McsEngl.ljschildNodes@cptIt,
* McsEngl.ljs'childNodes.hnode-methodNo@cptIt,
* McsEngl.ljs'childNodes@cptIt,

_CODE.LJS:
> toString.call(document.getElementById('id99').childNodes)
"[object NodeList]"
===
<p>Hi, <strong>cody</strong> welcome!</p>

<script>
var pElement = document.querySelector('p');
console.log(pElement.childNodes.length); //logs 3
console.log(pElement.firstChild.data); // is text node or 'Hi, '
console.log(pElement.firstChild.nextSibling); // is Element node or <strong>
console.log(pElement.lastChild.data); ?// is text node or ' welcome!'
</script>
[http://domenlightenment.com/#7.7]

jsNode.prototype.cloneNode-function

name::
* McsEngl.jsNode.prototype.cloneNode-function@cptIt,
* McsEngl.jscloneNode@cptIt,
* McsEngl.ljs'cloneNode.hnode-method@cptIt,

_PARAMETER:
deep  Boolean  Optional. Default is false
true if you want to clone the node, its attributes, and its descendants
false if you want to clone only the node and its attributes
[http://www.w3schools.com/jsref/met_node_clonenode.asp]

jsNode.prototype.compareDocumentPosition()

name::
* McsEngl.jsNode.prototype.compareDocumentPosition()@cptIt,
* McsEngl.jscompareDocumentPosition@cptIt,
* McsEngl.ljs'compareDocumentPosition.hnode-method@cptIt,

jsNode.prototype.contains()

name::
* McsEngl.jsNode.prototype.contains()@cptIt,
* McsEngl.jscontains@cptIt,
* McsEngl.ljs'contains.hnode-method@cptIt,

_CODE.LJS:
// is <body> inside <html lang="en"> ?
var inside = document.querySelector('html').contains(document.querySelector('body'));
console.log(inside); //logs true
[http://domenlightenment.com/#1.17]

jsNode.prototype.firstChild oNode

name::
* McsEngl.jsNode.prototype.firstChild oNode@cptIt,
* McsEngl.jsfirstChild@cptIt,
* McsEngl.ljs'firstChild.hnode-methodNo@cptIt,

jsNode.prototype.hasChildNodes()

name::
* McsEngl.jsNode.prototype.hasChildNodes()@cptIt,
* McsEngl.jshasChildNodes@cptIt,
* McsEngl.ljs'hasChildNodes.hnode-method@cptIt,

jsNode.prototype.insertBefore()

name::
* McsEngl.jsNode.prototype.insertBefore()@cptIt,
* McsEngl.jsinsertBefore@cptIt,
* McsEngl.ljs'insertBefore.hnode-method@cptIt,

jsNode.prototype.isEqualNode()

name::
* McsEngl.jsNode.prototype.isEqualNode()@cptIt,
* McsEngl.jsisEqualNode@cptIt,
* McsEngl.ljs'isEqualNode.hnode-method@cptIt,

jsNode.prototype.lastChild oNode

name::
* McsEngl.jsNode.prototype.lastChild oNode@cptIt,
* McsEngl.jslastChild@cptIt,
* McsEngl.ljs'lastChild.hnode-methodNo@cptIt,

jsNode.prototype.nextSibling oNode

name::
* McsEngl.jsNode.prototype.nextSibling oNode@cptIt,
* McsEngl.jsnextSibling@cptIt,
* McsEngl.ljsnextSibling@cptIt,
* McsEngl.ljs'nextSibling.hnode-methodNo@cptIt,

jsNode.prototype.nodeName string

name::
* McsEngl.jsNode.prototype.nodeName string@cptIt,
* McsEngl.jsnodeName@cptIt,

_CODE.LJS:
> document.body.nodeName
"BODY"

_SPECIFIC:
* the tagname for element nodes, in uppercase
* the name of the attribute for attribute nodes
- document.createAttribute("class").nodeName "class"
* "#text" for text nodes
* "#comment" for comment nodes
* "#document" for document nodes
* "#document-fragment"
* "html" document.doctype.nodeName

name::
* McsEngl.ljsnodeName@cptIt,
* McsEngl.ljs'nodeName@cptIt,

_DESCRIPTION:
nodeName  Returns the tagname of an element (in uppercase)

_CODE.LJS:
>>> console.log(document.querySelector('html').nodeName);
>>> HTML
===
> document.body.nodeName === 'body'
false
> document.body.nodeName === 'BODY'
true
===
> document.nodeName
"#document"
===
> document.createTextNode('text').nodeName
"#text"
> document.createAttribute('attr').nodeName
"attr"

ljbhml'oNode.oCharacterData.oText.oCDATASection (4)

name::
* McsEngl.ljbhml'oNode.oCharacterData.oText.oCDATASection (4)@cptIt,
* McsEngl.ljsCDATASection@cptIt,
* McsEngl.ljshtml'CDATASection@cptIt,
* McsEngl.ljsoCDATASection@cptIt,
* McsEngl.ljshnode.CDATA-SECTION-NODE@cptIt,

_DESCRIPTION:
Node.CDATA_SECTION_NODE  4  A CDATASection. Removed in DOM4 specification.
[https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType]

_GENERIC:
> typeof CDATASection
"function"
> Object.getPrototypeOf(CDATASection)
function Text() { [native code] }

ljbhml'oENTITY (6)

name::
* McsEngl.ljbhml'oENTITY (6)@cptIt,
* McsEngl.ljsoENTITY@cptIt,

_DESCRIPTION:
Node.ENTITY_NODE  6  An XML <!ENTITY ...> node. Removed in DOM4 specification.
[https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType]

_GENERIC:
> Object.getPrototypeOf(Entity)
function Node() { [native code] }

_CODE.LJS:
> Element.ENTITY_NODE
6

ljbhml'oENTITY_REFERENCE (5)

name::
* McsEngl.ljbhml'oENTITY_REFERENCE (5)@cptIt,

_DESCRIPTION:
Node.ENTITY_REFERENCE_NODE  5  An XML Entity Reference node. Removed in DOM4 specification.
[https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType]

_GENERIC:
> typeof Entity
"function"
> Object.getPrototypeOf(Entity)
function Node() { [native code] }

_CODE.LJS:
> Element.ENTITY_REFERENCE_NODE
5

jsNode.prototype.nodeType number

name::
* McsEngl.jsNode.prototype.nodeType number@cptIt,
* McsEngl.jsnodeType@cptIt,
* McsEngl.ljsnodeType@cptIt,

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType,

_SPECIFIC:
* 1 oHTMLElement, "P", ELEMENT_NODE, document.createElement('p').nodeType 1
* 3 oText, "#text", TEXT_NODE, document.createTextNode('text').nodeType 3
* 8 oComment, "#comment", COMMENT_NODE
* 9 oDocument, "#document", DOCUMENT_NODE
* 10 oDocumentType#ql:jsodocumenttype#, "html", DOCUMENT_TYPE_NODE
* 11 oDocumentFragment#ql:jsoDocumentFragment#, "#document-fragment", DOCUMENT_FRAGMENT_NODE
===
* 7 oProcessingInstruction, PROCESSING_INSTRUCTION_NODE = 7
=== deprecated
The following constants have been deprecated and should not be used anymore.
Constant  Value  Description
Node.ATTRIBUTE_NODE  2  An Attribute of an Element. The element attributes are no longer implementing the Node interface in DOM4 specification.
Node.CDATA_SECTION_NODE  4  A CDATASection. Removed in DOM4 specification.
Node.ENTITY_REFERENCE_NODE  5  An XML Entity Reference node. Removed in DOM4 specification.
Node.ENTITY_NODE  6  An XML <!ENTITY ...> node. Removed in DOM4 specification.
Node.NOTATION_NODE  12  An XML <!NOTATION ...> node. Removed in DOM4 specification.
[https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType]

jsNode.prototype.nodeValue

name::
* McsEngl.jsNode.prototype.nodeValue@cptIt,
* McsEngl.jsnodeValue@cptIt,
* McsEngl.ljsnodeValue@cptIt,
* McsEngl.ljs'nodeValue@cptIt,

_DESCRIPTION:
The Node.nodeValue property returns or sets the value of the current node.
Syntax
value = node.nodeValue;
value is a string containing the value of the current node, if any.
Notes
For the document itself, nodeValue returns null.
For text, comment, and CDATA nodes, nodeValue returns the content of the node.
For attribute nodes, the value of the attribute is returned.

The following table shows the return values for different elements:
Attr      value of attribute
CDATASection    content of the CDATA Section
Comment      content of the comment
Document      null
DocumentFragment    null
DocumentType    null
Element      null
NamedNodeMap    null
EntityReference    null
Notation      null
ProcessingInstruction  entire content excluding the target
Text      content of the text node
When nodeValue is defined to be null, setting it has no effect.
[https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeValue]

_DESCRIPTION:
The value depends on the type of the node.
The following table contains the possible values:
String, the value of the node  
In the case of Attribute nodes. In Internet Explorer, the type of the value can also be Boolean (e.g. checked) and number (e.g. colSpan) and the value is always null for certain event attributes (e.g. onload), regardless of whether it is specified.
String, the contents of the node  
In the case of Text, CDATASection and Comment nodes.
String, the entire content excluding the target  
In the case of ProcessingInstruction nodes.
null  
In the case of Element, Document, DocumentFragment, DocumentType, EntityReference, Entity and Notation nodes.
Default: this property has no default value.
[http://help.dottoro.com/ljdtoche.php]
===
Read-only property.
Returns the node value.
Syntax:
document.getElementById("elementID").nodeValue
document.all.elementID.nodeValue // IE only
[http://www.java2s.com/Code/JavaScriptReference/Javascript-Properties/nodeValueSyntaxandNote.htm]
===
> toString.call(document.body.nodeValue)
"[object Window]"

_CODE.LJS:
<head>
<script type="text/javascript">
function GetNodeInfo () {
var div = document.getElementById ("myDiv");
var commentNode = div.firstChild;
var message = "";
message += "The name of the node: " + commentNode.nodeName + "\n"; //#comment
message += "The type of the node: " + commentNode.nodeType + "\n"; //8
message += "The value of the node: " + commentNode.nodeValue; //this text is not...
alert (message);
}
</script>
</head>
<body>
<div id="myDiv"><!-- this text is not rendered --></div>
<button onclick="GetNodeInfo ()">Get node info!</button>
</body>
[http://help.dottoro.com/ljdtoche.php]

jsNode.prototype.NOTATION-NODE number (12)

name::
* McsEngl.jsNode.prototype.NOTATION-NODE number (12)@cptIt,
* McsEngl.jsNOTATION-NODE@cptIt,
* McsEngl.ljshnode.NOTATION-NODE@cptIt,

_GENERIC:
> typeof Entity
"function"
> Object.getPrototypeOf(Notation)
function Node() { [native code] }

jsNode.prototype.parentNode oNode

name::
* McsEngl.jsNode.prototype.parentNode oNode@cptIt,
* McsEngl.jsparentNode@cptIt,
* McsEngl.ljs'parentNode.hnode-methodNo@cptIt,

jsNode.prototype.previousSibling oNode

name::
* McsEngl.jsNode.prototype.previousSibling oNode@cptIt,
* McsEngl.jspreviousSibling@cptIt,
* McsEngl.ljs'previousSibling.hnode-methodNo@cptIt,

jsNode.prototype.ownerDocument oDocument

name::
* McsEngl.jsNode.prototype.ownerDocument oDocument@cptIt,
* McsEngl.jsownerDocument@cptIt,

_DESCRIPTION:
The Node.ownerDocument read-only property returns the top-level document object for this node.
Syntax
document = element.ownerDocument
document is the document object parent of the current element.
Example
// given a node "p", get the top-level HTML child
// of the document object
var d = p.ownerDocument;
var html = d.documentElement;
Notes
The document object returned by this property is the main object with which all the child nodes in the actual HTML document are created. If this property is used on a node that is itself a document, the result is null.
[https://developer.mozilla.org/en-US/docs/Web/API/Node/ownerDocument]

jsNode.prototype.removeChild()

name::
* McsEngl.jsNode.prototype.removeChild()@cptIt,
* McsEngl.jsremoveChild@cptIt,
* McsEngl.ljs'removeChild.hnode-method@cptIt,

jsNode.prototype.replaceChild()

name::
* McsEngl.jsNode.prototype.replaceChild()@cptIt,
* McsEngl.jsreplaceChild@cptIt,
* McsEngl.ljs'replaceChild.hnode-method@cptIt,

jsNode.prototype.textContent string

name::
* McsEngl.jsNode.prototype.textContent string@cptIt,
* McsEngl.jstextContent@cptIt,
* McsEngl.ljs'textContent@cptIt,

_DESCRIPTION:
The Node.textContent property represents the text content of a node and its descendants.

Syntax
var text = element.textContent;
element.textContent = "this is some sample text";
Description
textContent returns null if the element is a document, a document type, or a notation. To grab all of the text and CDATA data for the whole document, one could use document.documentElement.textContent.
If the node is a CDATA section, a comment, a processing instruction, or a text node, textContent returns the text inside this node (the nodeValue).
For other node types, textContent returns the concatenation of the textContent attribute value of every child node, excluding comments and processing instruction nodes. This is an empty string if the node has no children.
Setting this property on a node removes all of its children and replaces them with a single text node with the given value.
Differences from innerText

Internet Explorer introduced element.innerText. The intention is similar but with the following differences:

While textContent gets the content of all elements, including <script> and <style> elements, the IE-specific property innerText does not.
innerText is aware of style and will not return the text of hidden elements, whereas textContent will.
As innerText is aware of CSS styling, it will trigger a reflow, whereas textContent will not.
Unlike textContent, altering innerText in Internet Explorer (up to version 11 inclusive) not just removes child nodes from the element, but also permanently destroys all descendant text nodes (so it is impossible to insert the nodes again into any other element or into the same element anymore).
Differences from innerHTML

innerHTML returns the HTML as its name indicates. Quite often, in order to retrieve or write text within an element, people use innerHTML. textContent should be used instead. Because the text is not parsed as HTML, it's likely to have better performance. Moreover, this avoids an XSS attack vector.
[https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent]

_CODE.LJS:
<!DOCTYPE html>
<html lang="en">
<body>
<h1> Dude</h2>
<p>you <strong>rock!</strong></p>
<script>

console.log(document.body.textContent); //logs 'Dude you rock!' with some added white space

</script>
</body>
</html>

...
When textContent is used to set the text contained within a node it will remove all child nodes first, replacing them with a single Text node. In the code below I replace all the nodes inside of the <div> element with a single Text node.

live code: http://jsfiddle.net/domenlightenment/m766T
<!DOCTYPE html>
<html lang="en">
<body>
<div>
<h1> Dude</h2>
<p>you <strong>rock!</strong></p>
</div>
<script>

document.body.textContent = 'You don\'t rock!'
console.log(document.querySelector('div').textContent); //logs 'You don't rock!'

</script>
</body>
</html>

...
textContent returns the contents from <script> and <style> elements
[http://domenlightenment.com/#7.8]

jsoNode'tree

name::
* McsEngl.jsoNode'tree@cptIt,
* McsEngl.ljsoNode'node-tree@cptIt,

_DESCRIPTION:
Node-tree is the whole-part structure of nodes of a-html-document.
[hmnSngo.2014-11-29]
===
Objects implementing the Document, DocumentFragment#ql:jshnode.documentfragment_function#, DocumentType, Element, Text, ProcessingInstruction, or Comment interface (simply called nodes) participate in a tree, simply named the node tree.
[http://dom.spec.whatwg.org/#concept-node-tree]

jsoNode'ancestor-node

name::
* McsEngl.jsoNode'ancestor-node@cptIt,
* McsEngl.ljs'ancestor-hnode-of-hnode@cptIt,

_DESCRIPTION:
ancestor
An ancestor node of any node A is any node above A in a tree model, where "above" means "toward the root."
[http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/DOM3-Core.html#glossary-role-glossary]

jsoNode'child-node

name::
* McsEngl.jsoNode'child-node@cptIt,
* McsEngl.ljsoNode'decendantNext@cptIt,
* McsEngl.ljsoNode'next-decendant@cptIt,
* McsEngl.ljs'child-node-of-oNode@cptIt,

_CODE.LJS:
var oNode;
oNode.appendChild();
oNode.hasChildNodes();
oNode.removeChild();
oNode.replaceChild()
var o = oNode.childNodes;
var o = oNode.firstChild;
var o = oNode.lastChild;

jsoNode'decendant-node

name::
* McsEngl.jsoNode'decendant-node@cptIt,
* McsEngl.ljs'decendant-hnode-of-hnode@cptIt,

jsoNode'parent-node

name::
* McsEngl.jsoNode'parent-node@cptIt,
* McsEngl.ljsNode'ancestorNext@cptIt,
* McsEngl.ljsNode'next-ancestor@cptIt,
* McsEngl.ljs'ancestor-hnode-of-hnode@cptIt,

_CODE.LJS:
var oNode = oNode.parentNode;

jsoNode'sibling-node

name::
* McsEngl.jsoNode'sibling-node@cptIt,

_DESCRIPTION:
sibling
Two nodes are siblings if they have the same parent node.
[http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/DOM3-Core.html#glossary-role-glossary]

_CODE.LJS:
var oNode1 = oNode.nextSibling;
var oNode2 = oNode.previousSibling;

jsoNode'type

name::
* McsEngl.jsoNode'type@cptIt,

_DESCRIPTION:
node . nodeType
Returns the type of node, represented by a number from the following list:

_SPECIFIC:
01. oHTMLElement
02. oAttr
03. oText, '#text'
04. oCDATASection, '#cdata'
05. ENTITY_REFERENCE_NODE
06. ENTITY_NODE
07. oProcessingInstruction, '#pi'
08. oComment, '#comment'
09. oHTMLDocument
10. oDocumentType, '#doctype'
11. oDocumentFragment, '#document-fragment'
12. NOTATION_NODE
16. DOCUMENT_POSITION_CONTAINED_BY
32. DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC

SPECIFIC

* jshnode.specific,

_SPECIFIC:
* CharacterData
* Document
* Element
===
Objects implementing the Document, DocumentFragment#ql:jshnode.documentfragment_function#, DocumentType, Element, Text, ProcessingInstruction, or Comment interface (simply called nodes) participate in a tree, simply named the node tree.
[http://dom.spec.whatwg.org/#concept-node-tree]
===
The most common (I'm not highlighting all of them in the list below) types of nodes (i.e. nodeType/node classifications) one encounters when working with HTML documents are listed below.
DOCUMENT_NODE (e.g. window.document)
ELEMENT_NODE (e.g. <body>, <a>, <p>, <script>, <style>, <html>, <h1> etc...)
ATTRIBUTE_NODE (e.g. class="funEdges")
TEXT_NODE (e.g. text characters in an html document including carriage returns and white space)
DOCUMENT_FRAGMENT_NODE (e.g. document.createDocumentFragment())
DOCUMENT_TYPE_NODE (e.g. <!DOCTYPE html>)
I've listed the node types above formatted (all uppercase with _ separating words) exactly as the constant property is written in the JavaScript browser environment as a property of the Node object. These Node properties are constant values and are used to store numeric code values which map to a specific type of node object. For example in the following code example, Node.ELEMENT_NODE is equal to 1. And 1 is the code value used to identify element nodes.
...
for(var key in Node){
console.log(key,' = '+Node[key]);
};

/* the above code logs to the console the following
ELEMENT_NODE = 1
ATTRIBUTE_NODE = 2
TEXT_NODE = 3
CDATA_SECTION_NODE = 4
ENTITY_REFERENCE_NODE = 5
ENTITY_NODE = 6
PROCESSING_INSTRUCTION_NODE = 7
COMMENT_NODE = 8
DOCUMENT_NODE = 9
DOCUMENT_TYPE_NODE = 10
DOCUMENT_FRAGMENT_NODE = 11
NOTATION_NODE = 12
DOCUMENT_POSITION_DISCONNECTED = 1
DOCUMENT_POSITION_PRECEDING = 2
DOCUMENT_POSITION_FOLLOWING = 4
DOCUMENT_POSITION_CONTAINS = 8
DOCUMENT_POSITION_CONTAINED_BY = 16
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 32 */
[http://domenlightenment.com/#1]

ljbhml'oAttr (type2) > Attr.prototype > Node.prototype (deprecated DOM4)

name::
* McsEngl.ljbhml'oAttr (type2) > Attr.prototype > Node.prototype (deprecated DOM4)@cptIt,
* McsEngl.ljsoAttr@cptIt,
* McsEngl.ljsf.Attr@cptIt,
* McsEngl.ljsfAttr@cptIt,

_GENERIC:
> Object.getPrototypeOf(Attr)
function Node() { [native code] }
> Object.getPrototypeOf(document.createAttribute('att'))
Attr {... }
__proto__: Node

_DESCRIPTION:
Warning: In DOM Core 1, 2 and 3, Attr inherited from Node. This is no longer the case in DOM4. In order to bring the implementation of Attr up to specification, work is underway to change it to no longer inherit from Node. You should not be using any Node properties or methods on Attr objects. Starting in Gecko 7.0 (Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4), the ones that are going to be removed output warning messages to the console. You should revise your code accordingly.
[https://developer.mozilla.org/en-US/docs/Web/API/Attr]
===
Attr
No longer inherits from Node and therefore completely changed.
[http://dom.spec.whatwg.org/#dom-core]

jsoAttr'creating

name::
* McsEngl.jsoAttr'creating@cptIt,
* McsEngl.ljscreateAttribute@cptIt,

_CODE.LJS:
===
> var oA = document.createAttribute("class")
undefined
> oA
class=""
> oA.nodeName
"class"
> oA.nodeType
2
> oA.nodeValue
'Attr.nodeValue' is deprecated. Please use 'value' instead.
> oA.value
""
===
//Create a class attribute, with the value "democlass", and insert it to an H1 element:
var att=document.createAttribute("class");
att.value="democlass";
document.getElementsByTagName("H1")[0].setAttributeNode(att);
[http://www.w3schools.com/jsref/met_document_createattribute.asp]
===

jsoAttr'member

name::
* McsEngl.jsoAttr'member@cptIt,

jsoAttr.MEMBER.CHROME:
> Object.getOwnPropertyNames(document.createAttribute("class")).sort()
* jsoAttr.baseURI,
* jsoAttr.childNodes,
* jsoAttr.firstChild,
* jsoAttr.lastChild,
* jsoAttr.localName,
* jsoAttr.name,
* jsoAttr.namespaceURI,
* jsoAttr.nextSibling,
* jsoAttr.nodeName,
* jsoAttr.nodeType,
* jsoAttr.nodeValue, => deprecated for 'value'
* jsoAttr.ownerDocument,
* jsoAttr.ownerElement,
* jsoAttr.parentElement,
* jsoAttr.parentNode,
* jsoAttr.prefix,
* jsoAttr.previousSibling,
* jsoAttr.specified,
* jsoAttr.textContent,
* jsoAttr.value,

> FIREFOX:
Object.getOwnPropertyNames(document.createAttribute("class")).sort()
[]

jsoAttr'Attr-function

name::
* McsEngl.jsoAttr'Attr-function@cptIt,
* McsEngl.ljsAttr@cptIt,
* McsEngl.ljsfAttr@cptIt,

jsfAttr.prototype:
> FIREFOX:
Object.getOwnPropertyNames(Attr.prototype).sort()
["constructor", "localName", "name", "namespaceURI", "ownerElement", "prefix", "specified", "value"]
> CHROME:
Object.getOwnPropertyNames(Attr.prototype).sort()
["constructor"]

jsoAttr'Attr.prototype > Node.prototype

name::
* McsEngl.jsoAttr'Attr.prototype > Node.prototype@cptIt,
* McsEngl.ljsAttr.prototype@cptIt,

_MEMBER.CHROME:
> Object.getOwnPropertyNames(Attr.prototype).sort()
["constructor", "ljslocalName", "ljsname", "ljsnamespaceURI", "ljsnodeValue", "ljsownerElement", "ljsprefix", "ljsspecified", "ljstextContent", "ljsvalue"]

_MEMBER.FF:
> Object.getOwnPropertyNames(Attr.prototype).sort()
["constructor", "ljslocalName", "ljsname", "ljsnamespaceURI", "ljsownerElement", "ljsprefix", "ljsspecified", "ljsvalue"]

ljbhml'oCharacterData > CharacterData.prototype > Node.prototype ...

name::
* McsEngl.ljbhml'oCharacterData > CharacterData.prototype > Node.prototype ...@cptIt,
* McsEngl.ljsoCharacterData@cptIt,
* McsEngl.ljs'CharacterData@cptIt,

_GENERIC:
> typeof CharacterData
"function"
> Object.getPrototypeOf(CharacterData)
function Node() { [native code] }

_DESCRIPTION:
The CharacterData abstract interface represents a Node object that contains characters. This is an abstract interface, meaning there aren't any object of type CharacterData: it is implemented by other interfaces, like Text, Comment, or ProcessingInstruction which aren't abstract.
[https://developer.mozilla.org/en/docs/Web/API/CharacterData]

oCharacterData'CharacterData.prototype

name::
* McsEngl.oCharacterData'CharacterData.prototype@cptIt,
* McsEngl.jsCharacterData.prototype@cptIt,
* McsEngl.ljsCharacterData.prototype@cptIt,

jsCharacterData.prototype.CHROME:
> Object.getOwnPropertyNames(CharacterData.prototype).sort()
["jsappendData", "ljsconstructor", "ljsdata", "ljsdeleteData", "ljsinsertData", "ljslength", "ljsnextElementSibling", "ljspreviousElementSibling", "ljsremove", "ljsreplaceData", "ljssubstringData"]

jsCharacterData.prototype.FF:
> Object.getOwnPropertyNames(CharacterData.prototype).sort()
["jsappendData", "ljsconstructor", "ljsdata", "ljsdeleteData", "ljsinsertData", "ljslength", "ljsnextElementSibling", "ljspreviousElementSibling", "ljsremove", "ljsreplaceData", "ljssubstringData"]

_SPECIFIC:
* Comment.prototype##
* ProcessingInstruction.prototype##
* Text.prototype##

ljbhml'oComment (type8) > Comment.prototype > CharacterData.prototype > Node.prototype

name::
* McsEngl.ljbhml'oComment (type8) > Comment.prototype > CharacterData.prototype > Node.prototype@cptIt,
* McsEngl.ljsoComment@cptIt,
* McsEngl.ljs'comment-node@cptIt,
* McsEngl.ljs'comment-object@cptIt,
* McsEngl.ljshnode.COMMENT-NODE@cptIt,
* McsEngl.ljs'Comment-dom-object@cptIt,

* McsEngl.ljsoCmt@cptIt,

_GENERIC:
> typeof Comment
"function"
> Object.getPrototypeOf(Comment)
function CharacterData() { [native code] }

_CODE.LJS:
> var oComment = document.createComment("text")
undefined
> oComment.nodeName
> "#comment"
> oComment.nodeType8
> oComment.nodeValue
"text"

jsoComment'Comment.prototype

name::
* McsEngl.jsoComment'Comment.prototype@cptIt,
* McsEngl.ljsComment.prototype@cptIt,

jsComment.prototype.CHROME:
> Object.getOwnPropertyNames(Comment.prototype).sort()
["constructor"]

jsComment.prototype.FF:
> Object.getOwnPropertyNames(Comment.prototype).sort()
["constructor"]

jsoComment'member

name::
* McsEngl.jsoComment'member@cptIt,

jsoComment.CHROME:
> Object.getOwnPropertyNames(document.createComment("text")).sort()
[]

jsoComment.FF:
> Object.getOwnPropertyNames(document.createComment("text")).sort()
[]

ljbhml'oProcessingInstruction (type7) > CharacterData.prototype > Node.prototype

name::
* McsEngl.ljbhml'oProcessingInstruction (type7) > CharacterData.prototype > Node.prototype@cptIt,
* McsEngl.ljsoProcessingInstruction@cptIt,
* McsEngl.ljshnode.PROCESSING-INSTRUCTION-NODE@cptIt,

_GENERIC:
> typeof ProcessingInstruction
"function"
> Object.getPrototypeOf(ProcessingInstruction)
function CharacterData() { [native code] }
> Object.getPrototypeOf(ProcessingInstruction.prototype)
CharacterData {}

_DESCRIPTION:
ProcessingInstruction nodes have an associated target.
The target attribute must return the target.
[http://dom.spec.whatwg.org/#processinginstruction]
===
ProcessingInstructions nodes in HTML
Since ProcessingInstruction is an XML construct, it's only reasonable to judge its behavior in terms of XML (either on HTML pages in XHTML mode1, or pure XML). The behavioral variations of browsers in HTML mode2 are documented here for interest and reference, but the support summary table above does not consider this behavior (ie. if the interface works fully in XML then it's considered to be fully supported, with no notes).

Internet Explorer 5.5 in HTML sees processing instructions as Element nodes with the name ! (exactly as it sees comments); consequently it inherits from Node as an Element.

Internet Explorer 6 and 7 in HTML see processing instructions (and XML Prologs) as Comment nodes3.

Firefox in HTML mode and Safari in HTML mode cannot see processing instructions at all.

Opera 9.5 in HTML mode still treats an XML Prolog as a ProcessingInstruction node.
[http://reference.sitepoint.com/javascript/ProcessingInstruction]

ProcessingInstruction.prototype

name::
* McsEngl.ProcessingInstruction.prototype@cptIt,
* McsEngl.ljsProcessingInstruction.prototype@cptIt,

jsProcessingInstruction.prototype.CHROME:
> Object.getOwnPropertyNames(ProcessingInstruction.prototype).sort()
["constructor", "sheet", "target"]

jsProcessingInstruction.prototype.FF:
> Object.getOwnPropertyNames(ProcessingInstruction.prototype).sort()
["constructor", "target"]

ljbhml'oText (type3) > Text.prototype > CharacterData.prototype > Node.prototype

name::
* McsEngl.ljbhml'oText (type3) > Text.prototype > CharacterData.prototype > Node.prototype@cptIt,
* McsEngl.ljsoText@cptIt,
* McsEngl.ljs'htext@cptIt,
* McsEngl.ljs'html'text-node@cptIt,

* McsEngl.ljsotxt@cptIt,

_GENERIC:
* Text.prototype > CharacterData.prototype > Node.prototype > EventTarget.prototype > Object.prototype
===
> typeof Text
"function"
> Object.getPrototypeOf(Text)
function CharacterData() { [native code] }

_DESCRIPTION:
Text in an HTML document is represented by instances of the Text() constructor function, which produces text nodes. When an HTML document is parsed the text mixed in among the elements of an HTML page are converted to text nodes.
[http://domenlightenment.com/#7.1]
===
Don't forget that white space and text characters in the DOM are typically represented by a text node. This of course means that carriage returns are considered text nodes.
[http://domenlightenment.com/#7.3]

_CODE.LJS:
> var oText = document.createTextNode("text")
undefined
> oText.nodeName
"#text"
> oText.nodeType
3
> oText.nodeValue
"text"
===
<!DOCTYPE html>
<html lang="en">
<body>

<p id="p1"></p><p id="p2"></p>

<script>
console.log(document.querySelector('#p1').nextSibling) //logs <p id="p2"></p>
</script>
</body>
</html>
===
<!DOCTYPE html>
<html lang="en">
<body>

<p id="p1"></p>
<p id="p2"></p>

<script>
console.log(document.querySelector('#p1').nextSibling) //logs#text
</script>
</body>
</html>

jsoText'GENERIC

name::
* McsEngl.jsoText'GENERIC@cptIt,

_CODE.LJS:
>> var o = document.createTextNode('textnode')
> Object.getPrototypeOf(o)Text {splitText: function, getDestinationInsertionPoints: function, substringData: function, appendData: function, insertData: function…}
>> Object.getOwnPropertyNames(o.__proto__).sort()
["constructor", "getDestinationInsertionPoints", "splitText"]
= Object.getOwnPropertyNames(Text.prototype).sort()
["constructor", "getDestinationInsertionPoints", "splitText"]
>> Object.getPrototypeOf(Text.prototype)
CharacterData {substringData: function, appendData: function, insertData: function, deleteData: function, replaceData: function…}
>>Object.getPrototypeOf(CharacterData.prototype)
Node {insertBefore: function, replaceChild: function, removeChild: function, appendChild: function, hasChildNodes: function…}
>>Object.getPrototypeOf(Node.prototype)
EventTarget {addEventListener: function, removeEventListener: function, dispatchEvent: function}

jsoText'creating

name::
* McsEngl.jsoText'creating@cptIt,

_CODE.LJS:
> var oText = document.createTextNode("text")
undefined
> oText.nodeName
"#text"
> oText.nodeType
3
> oText.nodeValue
"text"
===
var textNode = document.createTextNode('Hi');
console.log(textNode, textNode.nodeType); //logs "Hi" 3, and 3 indicates a text node

jsoText'member

name::
* McsEngl.jsoText'member@cptIt,
* McsEngl.ljsoText'member@cptIt,

_DESCRIPTION:
The code above concludes that the Text() constructor function constructs the text node but keep in mind that Text inherits from CharacterData, Node#ql:js'hnode#, and Object#ql:js'oo#.
[http://domenlightenment.com/#7.1]

jsoText.MEMBER.CHROME:
> Object.getOwnPropertyNames(document.createTextNode("a string")).sort()
* jsoText.baseURI,
* jsoText.childNodes,
* jsoText.data,
* jsoText.firstChild,
* jsoText.lastChild,
* jsoText.length,
* jsoText.localName,
* jsoText.namespaceURI,
* jsoText.nextElementSibling,
* jsoText.nextSibling,
* jsoText.nodeName,
* jsoText.nodeType,
* jsoText.nodeValue,
* jsoText.ownerDocument,
* jsoText.parentElement,
* jsoText.parentNode,
* jsoText.previousElementSibling,
* jsoText.previousSibling,
* jsoText.textContent,
* jsoText.wholeText,

> Text.prototype:
Object.getOwnPropertyNames(document.createTextNode("a string").__proto__).sort()
* jsoText.constructor,
* jsoText.getDestinationInsertionPoints,
* jsoText.replaceWholeText,
* jsoText.splitText,

> CharacterData.prototype:
Object.getOwnPropertyNames(document.createTextNode("a string").__proto__.__proto__).sort()
["appendData", "constructor", "deleteData", "insertData", "remove", "replaceData", "substringData"]
> Node.prototype:
Object.getOwnPropertyNames(document.createTextNode("a string").__proto__.__proto__.__proto__).sort()
["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "appendChild", "cloneNode", "compareDocumentPosition", "constructor", "contains", "hasChildNodes", "insertBefore", "isDefaultNamespace", "isEqualNode", "isSameNode", "lookupNamespaceURI", "lookupPrefix", "normalize", "removeChild", "replaceChild"]
===
//OWN
["baseURI", "childNodes", "data", "firstChild", "lastChild", "length", "localName", "namespaceURI", "nextElementSibling", "nextSibling", "nodeName", "nodeType", "nodeValue", "ownerDocument", "parentElement", "parentNode", "prefix", "previousElementSibling", "previousSibling", "textContent", "wholeText"]
//INHERITED
["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "addEventListener", "appendChild", "appendData()", "cloneNode", "compareDocumentPosition", "contains", "deleteData()", "dispatchEvent", "hasChildNodes", "insertBefore", "insertData()", "isDefaultNamespace", "isEqualNode", "isSameNode", "isSupported", "lookupNamespaceURI", "lookupPrefix", "normalize", "remove", "removeChild", "removeEventListener", "replaceChild", "replaceData", "replaceWholeText", "splitText", "substringData()"]

jsoText.nodeName

name::
* McsEngl.jsoText.nodeName@cptIt,

_CODE.LJS:
> oTxt.nodeName
"#text"

jsoText.splitText-function

name::
* McsEngl.jsoText.splitText-function@cptIt,
* McsEngl.ljssplitText@cptIt,
* McsEngl.ljs'splitText@cptIt,

_DESCRIPTION:
When splitText() is called on a Text node it will alter the text node its being called on (leaving the text up to the offset) and return a new Text node that contains the text split off from the orginal text based on the offset. In the code below the text node Hey Yo! is split after Hey and Hey is left in the DOM while Yo! is turned into a new text node are returned by the splitText() method.

live code: http://jsfiddle.net/domenlightenment/Tz5ce
<!DOCTYPE html>
<html lang="en">
<body>

<p>Hey Yo!</p>

<script>

//returns a new text node, taken from the DOM
console.log(document.querySelector('p').firstChild.splitText(4).data); //logs Yo!

//What remains in the DOM...
console.log(document.querySelector('p').firstChild.textContent); //logs Hey

</script>
</body>
</html>
[http://domenlightenment.com/#7.11]

jsoText'Text-function

name::
* McsEngl.jsoText'Text-function@cptIt,
* McsEngl.ljsfText@cptIt,

jsoText'Text.prototype

name::
* McsEngl.jsoText'Text.prototype@cptIt,
* McsEngl.ljsText.prototype@cptIt,

jsText.prototype.CHROME:
> Object.getOwnPropertyNames(Text.prototype).sort()
["constructor", "ljsgetDestinationInsertionPoints", "ljssplitText", "ljswholeText"]

jsText.prototype.FF:
> Object.getOwnPropertyNames(Text.prototype).sort()
["constructor", "ljssplitText", "ljswholeText"]

ljbhml'oDocument > Document.prototype > Node.prototype ...

name::
* McsEngl.ljbhml'oDocument > Document.prototype > Node.prototype ...@cptIt,
* McsEngl.ljsoDocument@cptIt,
* McsEngl.ljsDocument-object@cptIt,
* McsEngl.ljs'Document-function@cptIt,
* McsEngl.ljsoDoc@cptIt,

_DESCRIPTION:
An-object of the-Document-function.
[hmnSngo.2016-03-17]

_GENERIC:
> typeof Document
"function"
===
// this is wrong
> Object.getPrototypeOf(Document)
function Node()#ql:js'node# { [native code] }
===
> Document instanceof Node
false

jsoDocument'Document-function

name::
* McsEngl.jsoDocument'Document-function@cptIt,
* McsEngl.ljsDocument-function@cptIt,
* McsEngl.ljsf.Document@cptIt,
* McsEngl.ljsfDocument@cptIt,

jsoDocument'Document.prototype > Node.prototype ...

name::
* McsEngl.jsoDocument'Document.prototype > Node.prototype ...@cptIt,
* McsEngl.jsDocument.prototype@cptIt,
* McsEngl.ljbDocument.prototype@cptIt,
* McsEngl.ljsDocument.prototype@cptIt,

jsDocument.prototype.CHROME:
//2015-11-14
> Object.getOwnPropertyNames(Document.prototype).sort()
0: "ljbURL"
1: "ljbactiveElement"
2: "ljbadoptNode"
3: "ljbanchors"
4: "ljbapplets"
5: "ljbbody"
6: "ljbcaretRangeFromPoint"
7: "ljbcharacterSet"
8: "ljbcharset"
9: "ljbchildElementCount"
10: "ljbchildren"
11: "ljbclose"
12: "ljbcompatMode"
13: "ljbconstructor"
14: "ljbcontentType"
15: "ljbcookie"
16: "ljbcreateAttribute"
17: "ljbcreateAttributeNS"
18: "ljbcreateCDATASection"
19: "ljbcreateComment"
20: "ljbcreateDocumentFragment"
21: "ljbcreateElement"
22: "ljbcreateElementNS"
23: "ljbcreateEvent"
24: "ljbcreateExpression"
25: "ljbcreateNSResolver"
26: "ljbcreateNodeIterator"
27: "ljbcreateProcessingInstruction"
28: "ljbcreateRange"
29: "ljbcreateTextNode"
30: "ljbcreateTreeWalker"
31: "ljbcurrentScript"
32: "ljbdefaultCharset"
33: "ljbdefaultView"
34: "ljbdesignMode"
35: "ljbdir"
36: "ljbdoctype"
37: "ljbdocumentElement"
38: "ljbdocumentURI"
39: "ljbdomain"
40: "ljbelementFromPoint"
41: "ljbelementsFromPoint"
42: "ljbembeds"
43: "ljbevaluate"
44: "ljbexecCommand"
45: "ljbexitPointerLock"
46: "ljbfirstElementChild"
47: "ljbfonts"
48: "ljbforms"
49: "ljbgetCSSCanvasContext"
50: "ljbgetElementById"
51: "ljbgetElementsByClassName"
52: "ljbgetElementsByName"
53: "ljbgetElementsByTagName"
54: "ljbgetElementsByTagNameNS"
55: "ljbgetSelection"
56: "ljbhasFocus"
57: "ljbhead"
58: "ljbhidden"
59: "ljbimages"
60: "ljbimplementation"
61: "ljbimportNode"
62: "ljbinputEncoding"
63: "ljblastElementChild"
64: "ljblastModified"
65: "ljblinks"
66: "ljbonabort"
67: "ljbonautocomplete"
68: "ljbonautocompleteerror"
69: "ljbonbeforecopy"
70: "ljbonbeforecut"
71: "ljbonbeforepaste"
72: "ljbonblur"
73: "ljboncancel"
74: "ljboncanplay"
75: "ljboncanplaythrough"
76: "ljbonchange"
77: "ljbonclick"
78: "ljbonclose"
79: "ljboncontextmenu"
80: "ljboncopy"
81: "ljboncuechange"
82: "ljboncut"
83: "ljbondblclick"
84: "ljbondrag"
85: "ljbondragend"
86: "ljbondragenter"
87: "ljbondragleave"
88: "ljbondragover"
89: "ljbondragstart"
90: "ljbondrop"
91: "ljbondurationchange"
92: "ljbonemptied"
93: "ljbonended"
94: "ljbonerror"
95: "ljbonfocus"
96: "ljboninput"
97: "ljboninvalid"
98: "ljbonkeydown"
99: "ljbonkeypress"
100: "ljbonkeyup"
101: "ljbonload"
102: "ljbonloadeddata"
103: "ljbonloadedmetadata"
104: "ljbonloadstart"
105: "ljbonmousedown"
106: "ljbonmouseenter"
107: "ljbonmouseleave"
108: "ljbonmousemove"
109: "ljbonmouseout"
110: "ljbonmouseover"
111: "ljbonmouseup"
112: "ljbonmousewheel"
113: "ljbonpaste"
114: "ljbonpause"
115: "ljbonplay"
116: "ljbonplaying"
117: "ljbonpointerlockchange"
118: "ljbonpointerlockerror"
119: "ljbonprogress"
120: "ljbonratechange"
121: "ljbonreadystatechange"
122: "ljbonreset"
123: "ljbonresize"
124: "ljbonscroll"
125: "ljbonsearch"
126: "ljbonseeked"
127: "ljbonseeking"
128: "ljbonselect"
129: "ljbonselectionchange"
130: "ljbonselectstart"
131: "ljbonshow"
132: "ljbonstalled"
133: "ljbonsubmit"
134: "ljbonsuspend"
135: "ljbontimeupdate"
136: "ljbontoggle"
137: "ljbonvolumechange"
138: "ljbonwaiting"
139: "ljbonwebkitfullscreenchange"
140: "ljbonwebkitfullscreenerror"
141: "ljbonwheel"
142: "ljbopen"
143: "ljborigin"
144: "ljbplugins"
145: "ljbpointerLockElement"
146: "ljbpreferredStylesheetSet"
147: "ljbqueryCommandEnabled"
148: "ljbqueryCommandIndeterm"
149: "ljbqueryCommandState"
150: "ljbqueryCommandSupported"
151: "ljbqueryCommandValue"
152: "ljbquerySelector"
153: "ljbquerySelectorAll"
154: "ljbreadyState"
155: "ljbreferrer"
156: "ljbregisterElement"
157: "ljbrootElement"
158: "ljbscripts"
159: "ljbscrollingElement"
160: "ljbselectedStylesheetSet"
161: "ljbstyleSheets"
162: "ljbtitle"
163: "ljbvisibilityState"
164: "ljbwebkitCancelFullScreen"
165: "ljbwebkitCurrentFullScreenElement"
166: "ljbwebkitExitFullscreen"
167: "ljbwebkitFullscreenElement"
168: "ljbwebkitFullscreenEnabled"
169: "ljbwebkitHidden"
170: "ljbwebkitIsFullScreen"
171: "ljbwebkitVisibilityState"
172: "ljbwrite"
173: "ljbwriteln"
174: "ljbxmlEncoding"
175: "ljbxmlStandalone"
176: "ljbxmlVersion"

jsDocument.prototype.FF:
> Object.getOwnPropertyNames(Document.prototype).sort()
["jsURL", "ljsactiveElement", "ljsadoptNode", "ljscaretPositionFromPoint", "ljscharacterSet", "ljschildElementCount", "ljschildren", "ljscompatMode", "ljsconstructor", "ljscontentType", "ljscreateAttribute", "ljscreateAttributeNS", "ljscreateCDATASection", "ljscreateComment", "ljscreateDocumentFragment", "ljscreateElement", "ljscreateElementNS", "ljscreateEvent", "ljscreateExpression", "ljscreateNSResolver", "ljscreateNodeIterator", "ljscreateProcessingInstruction", "ljscreateRange", "ljscreateTextNode", "ljscreateTreeWalker", "ljscurrentScript", "ljsdefaultView", "ljsdir", "ljsdoctype", "ljsdocumentElement", "ljsdocumentURI", "ljselementFromPoint", "ljsenableStyleSheetsForSet", "ljsevaluate", "ljsfirstElementChild", "ljsfonts", "ljsgetElementById", "ljsgetElementsByClassName", "ljsgetElementsByTagName", "ljsgetElementsByTagNameNS", "ljshasFocus", "ljshidden", "ljsimplementation", "ljsimportNode", "ljsinputEncoding", "ljslastElementChild", "ljslastModified", "ljslastStyleSheetSet", "ljsmozCancelFullScreen", "ljsmozExitPointerLock", "ljsmozFullScreen", "ljsmozFullScreenElement", "ljsmozFullScreenEnabled", "ljsmozHidden", "ljsmozPointerLockElement", "ljsmozSetImageElement", "ljsmozVisibilityState", "ljsonabort", "ljsonafterscriptexecute", "ljsonbeforescriptexecute", "ljsonblur", "ljsoncanplay", "ljsoncanplaythrough", "ljsonchange", "ljsonclick", "ljsoncontextmenu", "ljsoncopy", "ljsoncut", "ljsondblclick", "ljsondrag", "ljsondragend", "ljsondragenter", "ljsondragleave", "ljsondragover", "ljsondragstart", "ljsondrop", "ljsondurationchange", "ljsonemptied", "ljsonended", "ljsonerror", "ljsonfocus", "ljsoninput", "ljsoninvalid", "ljsonkeydown", "ljsonkeypress", "ljsonkeyup", "ljsonload", "ljsonloadeddata", "ljsonloadedmetadata", "ljsonloadstart", "ljsonmousedown", "ljsonmouseenter", "ljsonmouseleave", "ljsonmousemove", "ljsonmouseout", "ljsonmouseover", "ljsonmouseup", "ljsonmozfullscreenchange", "ljsonmozfullscreenerror", "ljsonmozpointerlockchange", "ljsonmozpointerlockerror", "ljsonpaste", "ljsonpause", "ljsonplay", "ljsonplaying", "ljsonprogress", "ljsonratechange", "ljsonreadystatechange", "ljsonreset", "ljsonresize", "ljsonscroll", "ljsonseeked", "ljsonseeking", "ljsonselect", "ljsonshow", "ljsonstalled", "ljsonsubmit", "ljsonsuspend", "ljsontimeupdate", "ljsonvolumechange", "ljsonwaiting", "ljsonwheel", "ljspreferredStyleSheetSet", "ljsquerySelector", "ljsquerySelectorAll", "ljsreadyState", "ljsreferrer", "ljsreleaseCapture", "ljsselectedStyleSheetSet", "ljsstyleSheetSets", "ljsstyleSheets", "ljstitle", "ljsvisibilityState"]

ljbDocument.prototype.doctype oDocumentType#ql:jsodocumenttype#

name::
* McsEngl.ljbDocument.prototype.doctype oDocumentType@cptIt,
* McsEngl.jsdoctype@cptIt,
* McsEngl.ljsdoctype@cptIt,
* McsEngl.ljs'doctype@cptIt,

_DESCRIPTION:
Represents a Document Type Definition (DTD).
The DTD can be specified with the !DOCTYPE element in HTML and XML documents. With the doctype object, type declarations like entities, notations and the name of the DTD can be retrieved, furthermore the DTD can be specified for a XML documents (see the createDocumentType method).
Note: In Internet Explorer, the doctype object is not supported in HTML documents only in XML documents. The document.doctype property always returns null in that browser.
[http://help.dottoro.com/ljlsvbgj.php]
===
document.doctype refers to <!DOCTYPE>
[http://domenlightenment.com/#2.5]
===
> document.doctype instanceof DocumentType
true

ljbDocument.prototype.activeElement

name::
* McsEngl.ljbDocument.prototype.activeElement@cptIt,
* McsEngl.jsactiveElement@cptIt,
* McsEngl.ljsactiveElement@cptIt,
* McsEngl.ljs'activeElement@cptIt,

_DESCRIPTION:
Returns the currently focused element, that is, the element that will get keystroke events if the user types any. This attribute is read only.

Often this will return an <input> or <textarea> object, if it has the text selection at the time. If so, you can get more detail by using the element's selectionStart and selectionEnd properties. Other times the focused element might be a <select> element (menu) or an <input> element, of type button, checkbox or radio.

Note: On Mac, elements that aren't text input elements tend not to get focus assigned to them.
Typically a user can press the tab key to move the focus around the page among focusable elements, and use the space bar to activate it (press a button, choose a radio).

Do not confuse focus with a selection over the document, consisting mostly of static text nodes. See window.getSelection() for that.

When there is no selection, the active element is the page's <body> or null.

Note: This attribute is part of the in-development HTML 5 specification.
[https://developer.mozilla.org/en-US/docs/Web/API/Document/activeElement]
===
I just made an extension that does exactly this. I found that after
the user right clicks in a textarea, document.activeElement will point
to that textarea. So you just need a content script injected into all
relevant pages containing something along the lines of:

chrome.extension.onRequest.addListener(function(request) {
if (request.text)
document.activeElement.value += request.text;
});

Of course, if you want to get fancy you can use node.selectionStart
and node.selectionEnd to insert the text at the cursor, but you get
the idea.

ljbDocument.prototype.characterSet string

name::
* McsEngl.ljbDocument.prototype.characterSet string@cptIt,
* McsEngl.ljscharacterSet@cptIt,

_CODE:
> toString.call(document.characterSet)
"[object String]"
> document.characterSet
"UTF-8"

ljbDocument.prototype.createDocumentFragment-function

name::
* McsEngl.ljbDocument.prototype.createDocumentFragment-function@cptIt,
* McsEngl.ljscreateDocumentFragment@cptIt,

_DESCRIPTION:
Definition and Usage
The createDocumentFragment() method creates a imaginary Node object, with all the properties and methods of the Node object.

The createDocumentFragment() method is usefull when you want to extract parts of your document, change, add, or delete, some of the content, and insert it back to your document.

You can also use the document's Document object to perform these changes, but to prevent destroying the document structure, it can be safer to extraxt only parts of the document, make the changes, and insert the part back to the document.

Note: Nodes being appended to the document fragment, from the document, will be removed from the document.

Browser Support
Method          
createDocumentFragment()  Yes  Yes  Yes  Yes  Yes

Syntax
document.createDocumentFragment()
Parameters
None
Technical Details
Return Value:  A DocumentFragment object, representing the created DocumentFragment node
DOM Version  Core Level 1 Document Object
[http://www.w3schools.com/jsref/met_document_createdocumentfragment.asp]

ljbDocument.prototype.createElement-function

name::
* McsEngl.ljbDocument.prototype.createElement-function@cptIt,
* McsEngl.jscreateElement@cptIt,
* McsEngl.ljscreateElement@cptIt,
* McsEngl.ljs'createElement@cptIt,

_CODE.LJS:
> var oh = document.createElement("html")
undefined
> oh
<html></html>
===
var q=document.createElement("ul");
q.style.cssFloat="left";
q.style.paddingRight="0.5em";
===
> toString.call(document.createElement('style'))
"[object HTMLStyleElement]"

ljbDocument.prototype.createEvent-function

name::
* McsEngl.ljbDocument.prototype.createEvent-function@cptIt,
* McsEngl.ljscreateEvent@cptIt,

_ADDRESS.WPG:
* http://help.dottoro.com/ljnxhosf.php,

_CODE.LJS:
var clickEvent = document.createEvent ("MouseEvent");

Supported by objects:
document, XMLDocument

ljbDocument.prototype.createRange-function

name::
* McsEngl.ljbDocument.prototype.createRange-function@cptIt,
* McsEngl.ljscreateRange@cptIt,

ljbDocument.prototype.dir string

name::
* McsEngl.ljbDocument.prototype.dir string@cptIt,
* McsEngl.ljsdir@cptIt,

_DESCRIPTION:
The dir property sets or returns the value of the-dir-attribute#ql:htmlatt.dir# of an element.

The dir attribute specifies the text-direction (reading order) of the element's content.

Tip: You can also use the style.direction property to set or return the text direction of an element.

Browser Support
Property          
dir  Yes  Yes  Yes  Yes  Yes
Syntax
Return the dir property:

HTMLElementObject.dir
Set the dir property:

HTMLElementObject.dir="ltr|rtl|auto"
Property Values
Value  Description
ltr  Default. Left-to-right text direction
rtl  Right-to-left text direction
auto  Let the browser figure out the text direction, based on the content (only recommended if the text direction is unknown)
[http://www.w3schools.com/jsref/prop_html_dir.asp]

ljbDocument.prototype.documentElement oHTMLHtmlElement

name::
* McsEngl.ljbDocument.prototype.documentElement oHTMLHtmlElement@cptIt,
* McsEngl.ljsdocumentElement@cptIt,
* McsEngl.jsdocumentElement@cptIt,
* McsEngl.ljs'documentElement@cptIt,

_GENERIC:
> Object.getPrototypeOf(document.documentElement) === HTMLHtmlElement.prototype
true
> toString.call(document.documentElement)
"[object HTMLHtmlElement]"

_DESCRIPTION:
document.documentElement refers to <html lang="en">
[http://domenlightenment.com/#2.5]
===
There are two special properties that allow access to the full document:
document.documentElement - The full document
document.body - The body of the document
[http://www.w3schools.com/js/js_htmldom_navigation.asp]

ljbDocument.prototype.execCommand-function

name::
* McsEngl.ljbDocument.prototype.execCommand-function@cptIt,
* McsEngl.jsexecCommand@cptIt,
* McsEngl.ljs'execCommand@cptIt,
* McsEngl.ljsexecCommand@cptIt,

_DESCRIPTION:
This is for 'design mode' where the browser effectively turns the document into an editor. The execCommand API originated with IE and was later added to HTML5. Exactly which commands are supported, as well as their behavior varies across browsers. Clipboard access is considered a security risk.
[http://stackoverflow.com/a/1817913]

_SYNTAX:
object.execCommand (commandIdentifier, userInterface, value);
- value: Required in Firefox and Opera, optional in Internet Explorer, Google Chrome and Safari. Specifies a parameter value for the command. The possible values depend on the command. Use null if no value is needed.
[http://help.dottoro.com/ljcvtcaw.php]

_RESOURCE:
* COMMANDS: http://help.dottoro.com/larpvnhw.php,
* jscmdNtv.2D-Position:
o) Support: IE,
o) Description: Enables or disables moving absolute and relative positioned elements by dragging.
o) Value: Boolean that indicates whether the move of positioned elements are allowed.

* jscmdNtv.backColor:
o) Support: IE, FF, OP, SF, CH,
o) Description: Sets the background color of the current selection in Internet Explorer, Google Chrome and Safari and the background color of the editable region that contains the selection (or the caret) in Firefox and Opera.
To change the background color of the selection in Firefox and Opera, use the hiliteColor command.
o) Value: String that specifies the color.

* jscmdNtv.bold:
o) Support: IE, FF, OP, SF, CH,
o) Description: Toggles the bold state of the current selection.
It uses the strong element in Internet Explorer and the b element in other browsers to make text bold.
o) Value: Omitted.

* jscmdNtv.clearAuthenticationCache:
o) Support: IE,
o) Description: Deletes all authentication credentials from the browser's cache.
o) Value: Omitted.

* jscmdNtv.contentReadOnly:
o) Support: FF, OP,
o) Description: Makes the document editable or read-only.
o) Value: Boolean.

* jscmdNtv.copy:
o) Support: IE, FF, SF-5,
o) Description: Copies the current selection to the clipboard.
The UniversalXPConnect privilege is required for this command in Firefox.
o) Value: Omitted.

* jscmdNtv.createBookmark:
o) Support: IE,
o) Description: Inserts the current selection into a named anchor element (bookmark), or returns the name
of a bookmark anchor for the current selection.
o) Value: String that specifies the name of the anchor.

* jscmdNtv.createLink:
o) Support: IE, FF, OP, SF, CH,
o) Description: Inserts the current selection into an anchor element and specifies the href property of the anchor.
o) Value: String that specifies the URL of the anchor. Required in Firefox, Opera, Google Chrome and Safari, and optional in Internet Explorer. If no value is specified, this command displays a dialog box for the URL in Internet Explorer.

* jscmdNtv.cut:
o) Support: IE, FF, SF-5,
o) Description: Cuts the current selection from the document and copies it to the clipboard.
The UniversalXPConnect privilege is required for this command in Firefox.
o) Value: Omitted.

* jscmdNtv.decreaseFontSize:
o) Support: FF, OP,
o) Description: Inserts the current selection into a small element.
o) Value: Omitted.

* jscmdNtv.delete:
o) Support: IE, FF, OP, SF, CH,
o) Description: Deletes the current selection from the document.
o) Value: Omitted.

* jscmdNtv.enableInlineTableEditing:
o) Support: FF,
o) Description: Specifies whether inserting and deleting table rows and columns are allowed.
o) Value: Boolean.

* jscmdNtv.enableObjectResizing:
o) Support: FF,
o) Description: Specifies whether resizing objects is allowed.
o) Value: Boolean.

* jscmdNtv.fontName:
o) Support: IE, FF, OP, SF, CH,
o) Description: Specifies a font family name for the current selection.
o) Value: String that specifies the font name.

* jscmdNtv.fontSize:
o) Support: IE, FF, OP, SF, CH,
o) Description: Specifies a font size for the current selection.
o) Value: Integer between 1 and 7.

* jscmdNtv.foreColor:
o) Support: IE, FF, OP, SF, CH,
o) Description: Specifies a font color for the current selection.
o) Value: String that specifies the color.

* jscmdNtv.formatBlock:
o) Support: IE, FF, OP, SF, CH,
o) Description: Inserts the current selection into a block element.
o) Value:
String that specifies the name of the element.
In Internet Explorer, the name of the element must be placed between tag delimiters (such as "<H1>").
Firefox, Opera, Google Chrome and Safari support all block elements, Internet Explorer supports only the h1 - h6, address and pre elements.


* jscmdNtv.heading:
o) Support: FF,
o) Description: Inserts the current selection into the specified heading element (h1 - h6).
o) Value: String that specifies the name of the element.

* jscmdNtv.hiliteColor:
o) Support: FF, OP, SF, CH,
o) Description: Sets the background color of the current selection. In Internet Explorer, use the BackColor command instead.
o) Value: String that specifies the color.

* jscmdNtv.increaseFontSize:
o) Support: FF, OP,
o) Description: Inserts the current selection into a big element.
o) Value: Omitted.

* jscmdNtv.indent:
o) Support: IE, FF, OP, SF, CH,
o) Description: Indents the block element where the current selection is located.
o) Value: Omitted.

* jscmdNtv.insertBrOnReturn:
o) Support: FF,
o) Description: Specifies whether the Enter key inserts a br element.
o) Value: Boolean.

* jscmdNtv.insertButton:
o) Support: IE,
o) Description: Replaces the current selection with a button element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertFieldset:
o) Support: IE,
o) Description: Replaces the current selection with a fieldset element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertHorizontalRule:
o) Support: IE, FF, OP, SF, CH,
o) Description: Inserts a horizontal rule element in place of the current selection or at the carret position.
In Internet Explorer, if no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertHTML:
o) Support: FF, OP, SF, CH,
o) Description: Inserts an HTML formatted content in place of the current selection or at the carret position.
o) Value: String that specifies the HTML formatted content.

* jscmdNtv.insertIFrame:
o) Support: IE,
o) Description: Replaces the current selection with an iframe element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertImage:
o) Support: IE, FF, OP, SF, CH,
o) Description: Inserts an img element in place of the current selection or at the carret position.
In Internet Explorer, if no content is selected, this command has no effect.
o) Value: String that specifies the src property of the newly added element or null.

* jscmdNtv.insertInputButton:
o) Support: IE,
o) Description: Replaces the current selection with an input:button element.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertInputCheckbox:
o) Support: IE,
o) Description: Replaces the current selection with a input:checkbox element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertInputFileUpload:
o) Support: IE,
o) Description: Replaces the current selection with a input:file element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertInputHidden:
o) Support: IE,
o) Description: Replaces the current selection with an input:hidden element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertInputImage:
o) Support: IE,
o) Description: Replaces the current selection with an input:image element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertInputPassword:
o) Support: IE,
o) Description: Replaces the current selection with an input:password element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertInputRadio:
o) Support: IE,
o) Description: Replaces the current selection with an input:radio element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertInputReset:
o) Support: IE,
o) Description: Replaces the current selection with an input:reset element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertInputSubmit:
o) Support: IE,
o) Description: Replaces the current selection with an input:search element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertInputText:
o) Support: IE,
o) Description: Replaces the current selection with an input:text element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertMarquee:
o) Support: IE,
o) Description: Replaces the current selection with a marquee element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertOrderedList:
o) Support: IE, FF, OP, SF, CH,
o) Description: Creates or removes an ordered list based on the current selection or carret position.
In Internet Explorer, if no content is selected, this command has no effect.
o) Value: Omitted.

* jscmdNtv.insertParagraph:
o) Support: IE, FF, OP, SF, CH,
o) Description: Inserts a p element in place of the current selection or at the carret position.
In Internet Explorer, if no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertSelectDropdown:
o) Support: IE,
o) Description: Replaces the current selection with a drop-down select element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertSelectListbox:
o) Support: IE,
o) Description: Replaces the current selection with an listbox select element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertTextArea:
o) Support: IE,
o) Description: Replaces the current selection with a textarea element.
If no content is selected, this command has no effect.
o) Value: String that specifies the id property of the newly added element or null.

* jscmdNtv.insertUnorderedList:
o) Support: IE, FF, OP, SF, CH,
o) Description: Creates or removes an unordered list based on the current selection or carret position.
In Internet Explorer, if no content is selected, this command has no effect.
o) Value: Omitted.

* jscmdNtv.italic:
o) Support: IE, FF, OP, SF, CH,
o) Description: Toggles the italic state of the current selection.
It uses the em element in Internet Explorer and the i element in other browsers to make text italic.
o) Value: Omitted.

* jscmdNtv.justifyCenter:
o) Support: IE, FF, OP, SF, CH,
o) Description: Centers the text content of the block element where the current selection is located.
o) Value: Omitted.

* jscmdNtv.justifyFull:
o) Support: IE, FF, OP, SF, CH,
o) Description: Justifies the text content of the block element where the current selection is located.
o) Value: Omitted.

* jscmdNtv.justifyLeft:
o) Support: IE, FF, OP, SF, CH,
o) Description: Aligns the text content of the block element where the current selection is located to the left.
o) Value: Omitted.

* jscmdNtv.justifyRight:
o) Support: IE, FF, OP, SF, CH,
o) Description: Aligns the text content of the block element where the current selection is located to the right.
o) Value: Omitted.

* jscmdNtv.liveResize:
o) Support: IE,
o) Description: Enables or disables whether the appearance of an element should be updated continuously during a resizing or moving operation.
o) Value: Boolean that indicates whether the appearance of an element should be updated continuously.

* jscmdNtv.multipleSelection:
o) Support: IE,
o) Description: Enables or disables multiple selection for a select element.
See Example 3.
o) Value: Boolean that indicates whether multiple selection is allowed.

* jscmdNtv.outdent:
o) Support: IE, OP, SF, CH,
o) Description: Outdents the block element where the current selection is located.
o) Value: Omitted.

* jscmdNtv.overWrite:
o) Support: IE,
o) Description: Toggles the text-entry mode between insert and overwrite.
o) Value: Boolean. If true, the text-entry is in overwrite mode.

* jscmdNtv.paste:
o) Support: IE, FF,
o) Description: Inserts the contents of the clipboard in place of the current selection or at the carret position.
The UniversalXPConnect privilege is required for this command in Firefox.
o) Value: Omitted.

* jscmdNtv.print:
o) Support: IE, SF, CH,
o) Description: Opens the print dialog.
o) Value: Omitted.

* jscmdNtv.redo:
o) Support: IE, OP, SF, CH,
o) Description: Redoes the previous undo action.
o) Value: Omitted.

* jscmdNtv.refresh:
o) Support: IE,
o) Description: Refreshes the contents of the current document.
o) Value: Omitted.

* jscmdNtv.removeFormat:
o) Support: IE, FF, OP, SF, CH,
o) Description: Removes all formatting from the current selection.
o) Value: Omitted.

* jscmdNtv.saveAs:
o) Support: IE,
o) Description: Opens the Save As dialog box so the user can save the current document to a file.
o) Value: String that specifies the path and the name of the file to save, or null.

* jscmdNtv.selectAll:
o) Support: IE, FF, OP, SF, CH,
o) Description: Selects all contents within the editable region.
o) Value: Omitted.

* jscmdNtv.strikeThrough:
o) Support: IE, FF, OP, SF, CH,
o) Description: Toggles the current selection between strike through and normal.
It uses the s element to make text strike through.
o) Value: Omitted.

* jscmdNtv.styleWithCSS:
o) Support: FF, OP, SF, CH,
o) Description: Specifies whether CSS or HTML formatting should be generated by the execCommand method into the document.
o) Value: Boolean. If true, the execCommand method generates CSS formatting.

* jscmdNtv.subscript:
o) Support: IE, FF, OP, SF, CH,
o) Description: Toggles the current selection between subscript and normal type.
It uses the sub element to make text subscript.
o) Value: Omitted.

* jscmdNtv.superscript:
o) Support: IE, FF, OP, SF, CH,
o) Description: Toggles the current selection between superscript and normal type.
It uses the sup element to make text superscript.
o) Value: Omitted.

* jscmdNtv.underline:
o) Support: IE, FF, OP, SF, CH,
o) Description: Toggles the current selection between underlined and normal.
It uses the u element to make text underlined.
o) Value: Omitted.

* jscmdNtv.undo:
o) Support: IE, OP, SF, CH,
o) Description: Undoes the previous action.
o) Value: Omitted.

* jscmdNtv.unlink:
o) Support: IE, FF, OP, SF, CH,
o) Description: Removes the anchor link from the current selection.
o) Value: Omitted.

* jscmdNtv.unselect:
o) Support: IE, OP, SF, CH,
o) Description: Clears the current selection.
o) Value: Omitted.

* jscmdNtv.useCSS:
o) Support: FF, OP,
o) Description: Deprecated, use the styleWithCSS command instead. Specifies whether CSS or HTML formatting should be used for the generated content.
o) Value: Boolean.
[http://help.dottoro.com/larpvnhw.php]

ljbDocument.prototype.getElementById-function

name::
* McsEngl.ljbDocument.prototype.getElementById-function@cptIt,
* McsEngl.ljsgetElementById@cptIt,
* McsEngl.ljs'getElementById@cptIt,

_DEFINITION:
* Accesses the first element with the specified id
[http://www.w3schools.com/jsref/dom_obj_document.asp]
Finds an element in the document with a given id-attribute.

_CODE.LJS:
document.getElementById("htmldom").href

_SPEED:
Going back to the jQuery library, most of us are aware that both getElementById("identifier") and $("#identifier") can be used to query an element on a page by its ID.

Did you know however that getElementById() on its own is significantly faster by a high order of magnitude? Take a look at this jsPerf test to see results on a per-browser level: http://jsperf.com/getelementbyid-vs-jquery-id. Now of course, we have to keep in mind that jQuery (and Sizzle - its selector engine) are doing a lot more behind the scenes to optimize our query (and that a jQuery object, not just a DOM node is returned).
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#facadepatternjavascript]

ljbDocument.prototype.getElementsByClassName-function

name::
* McsEngl.ljbDocument.prototype.getElementsByClassName-function@cptIt,
* McsEngl.ljbgetElementsByClassName@cptIt,
* McsEngl.ljb'getElementsByClassName@cptIt,

_CODE.LJB:
//Get all elements that have a class of 'test'
document.getElementsByClassName('test');
//Get all elements that have both the 'red' and 'test' classes
document.getElementsByClassName('red test');
//Get all elements that have a class of 'test', inside of an element that has the ID of 'main'
document.getElementById('main').getElementsByClassName('test');
[https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName]

ljbDocument.prototype.getElementsByName-function

name::
* McsEngl.ljbDocument.prototype.getElementsByName-function@cptIt,
* McsEngl.ljsgetElementsByName@cptIt,
* McsEngl.ljs'getElementsByName@cptIt,

_DESCRIPTION:
The getElementsByName() method accesses all elements with the specified name.
Syntax
document.getElementsByName(name)

Parameter  Description
name  Required. The name of the element you want to access/manipulate

_CODE.LJS:
Example

Alert the number of elements with a specific name:
<html>
<head>
<script type="text/javascript">
function getElements()
{
var x=document.getElementsByName("x");
alert(x.length);
}
</script>
</head>
<body>

<input name="x" type="text" size="20" /><br />
<input name="x" type="text" size="20" /><br />
<input name="x" type="text" size="20" /><br /><br />
<input type="button" onclick="getElements()" value="How many elements named 'x'?" />

</body>
</html>
[http://www.w3schools.com/jsref/met_doc_getelementsbyname.asp]

ljbDocument.prototype.getElementsByTagName-function

name::
* McsEngl.ljbDocument.prototype.getElementsByTagName-function@cptIt,
* McsEngl.ljsgetElementsByTagName@cptIt,
* McsEngl.ljs'getElementsByTagName@cptIt,

_GENERIC:
> toString.call(document.getElementsByName('body'))
"[object NodeList#ql:jsonodelist'member#]"
> toString.call(document.getElementsByTagName('body'))
"[object HTMLCollection]"
===
toString.call(document.querySelectorAll("#mydiv"))
"[object NodeList]"

_CODE.LJS:
var aTag = menuItems[no].getElementsByTagName('a')[0];
===
document.getElementsByTagName():
var s = document.getElementsByTagName('script')[0];

ljbDocument.prototype.onmousewheel

name::
* McsEngl.ljbDocument.prototype.onmousewheel@cptIt,
* McsEngl.ljsonmousewheel@cptIt,

DOMMouseScroll

name::
* McsEngl.DOMMouseScroll@cptIt,
* McsEngl.ljsDOMMouseScroll@cptIt,

_DESCRIPTION:
DOMMouseScroll event
Browser support: FF
Occurs when the mouse wheel rolls.
To get the distance that the mouse wheel rolled, use the detail event property.
In Internet Explorer, Opera, Google Chrome and Safari, use the onmousewheel event and the wheelDelta event property instead.
Note: the onmousewheel and DOMMouseScroll events are also fired on elements that have no scrollbar or when the contents are not scrolled. If you would like to receive a notification when the contents of an element are scrolled, use the onscroll event.
[http://help.dottoro.com/ljqeknfl.php]

ljbDocument.prototype.querySelector-function

name::
* McsEngl.ljbDocument.prototype.querySelector-function@cptIt,
* McsEngl.ljsquerySelector@cptIt,
* McsEngl.ljs'querySelector@cptIt,
* McsEngl.jsoHmlDoc.querySelector@cptIt,

_DESCRIPTION:
finds the FIRST element with this tag.
[hmnSngo.2013-10-21]

_CODE.LJS:
var ul = document.querySelector('ul');
ul.insertBefore(li,ul.firstChild);
[http://domenlightenment.com/#1.8]
===
//Get the first element in the document with class="example":
document.querySelector(".example");
//Get the first <p> element in the document with class="example":
document.querySelector("p.example");
===
//Get the first <p> element in the document:
document.querySelector("p");
===
//Change the text of an element with id="demo":
document.querySelector("#demo").innerHTML = "Hello World!";
===
//Get the first <p> element in the document where the parent is a <div> element.
document.querySelector("div > p");
===
//Get the first <a> element in the document that has a "target" attribute:
document.querySelector("a[target]");
===
//This example demonstrates how multiple selectors work.
//Assume that you have two elements: a <h2> and a <h3> element.
//The following code will add a background color to the first <h2> element in the document:
<h2>A h2 element</h2>
<h3>A h3 element</h3>
document.querySelector("h2, h3").style.backgroundColor = "red";

//However, if the <h3> element was placed before the <h2> element in the document. The <h3> //element is the one that will get the red background color.
<h3>A h3 element</h3>
<h2>A h2 element</h2>
document.querySelector("h2, h3").style.backgroundColor = "red";

ljbDocument.prototype.querySelectorAll-function

name::
* McsEngl.ljbDocument.prototype.querySelectorAll-function@cptIt,
* McsEngl.ljsquerySelectorAll@cptIt,
* McsEngl.ljs'querySelectorAll@cptIt,
* McsEngl.jsoHmlDoc.querySelectorAll@cptIt,

_CODE.LJS:
var matches = document.querySelectorAll("div.note, div.alert");
===
document.querySelectorAll('#idTitle2aP1 a[href="#idTitle2aP1"])
===
document.querySelectorAll('#idCnrBodCntDiv a')
===
document.querySelectorAll('#idCnrBodCntDiv *[id]')
===
document.querySelectorAll('ul#idTocTabNamesUl li')
===
document.querySelectorAll("#idTocTri li > a")
===
document.querySelectorAll('.clsTreeUl');
===
//logs true, because they are exactly idential
var input = document.querySelectorAll('input');
console.log(input[0].isEqualNode(input[1]));

ljbDocument.prototype.querySelectorAll

name::
* McsEngl.ljbDocument.prototype.querySelectorAll@cptIt,
* McsEngl.ljbquerySelectorAll-Document.prototype@cptIt,
* McsEngl.querySelectorAll-Document.prototype@cptIt,

_DESCRIPTION:
elementList = document.querySelectorAll(selectors);
where
elementList is a non-live NodeList of element objects.
selectors is a string containing one or more CSS selectors separated by commas.
[https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll]

_CODE.LJB:
var x = document.querySelectorAll(".example");
x[0].style.backgroundColor = "red";
//The querySelectorAll() method returns all elements in the document that matches a specified CSS selector(s), as a static NodeList object.
//The NodeList object represents a collection of nodes. The nodes can be accessed by index numbers. The index starts at 0.
[https://www.w3schools.com/jsref/met_document_queryselectorall.asp]

===
aUl = document.querySelectorAll('.clsTreeUl');
document.querySelectorAll('#idPginfPathP a,#idTabCntSrcOl a')
Array.prototype.slice.call(document.querySelectorAll('#idTocPathP a')).forEach(function (oEltIn, nIndex, array) {
Array.prototype.slice.call(document.querySelectorAll("#idTocTri li > a")).forEach(function (oEltIn, nIndex, array) {
Array.prototype.slice.call(document.querySelectorAll('ul#idTocTabNamesUl li')).forEach(function (oEltIn, nIndex, array) {
Array.prototype.slice.call(document.querySelectorAll('#idCnrMainPgcntDiv *[id]')).forEach(function (oEltIn, nIndex, array) {

ljbDocument.prototype.readyState string

name::
* McsEngl.ljbDocument.prototype.readyState string@cptIt,
* McsEngl.jsreadyState@cptIt,
* McsEngl.ljbreadeState-Document.prototype@cptIt,

_DESCRIPTION:
Summary
The Document.readyState property of a document describes the loading state of the document.

Values
The readyState of a document can be one of following:
loading
The document is still loading.
interactive
The document has finished loading and the document has been parsed but sub-resources such as images, stylesheets and frames are still loading. The state indicates that the DOMContentLoaded event has been fired.
complete
The document and all sub-resources have finished loading. The state indicates that the load event has been fired.
When the value of this property changes a readystatechange event fires on the document object.

Different states of readiness
switch (document.readyState) {
case "loading":
// The document is still loading.
break;
case "interactive":
// The document has finished loading. We can now access the DOM elements.
var span = document.createElement("span");
span.textContent = "A <span> element.";
document.body.appendChild(span);
break;
case "complete":
// The page is fully loaded.
console.log("The first CSS rule is: " + document.styleSheets[0].cssRules[0].cssText);
break;
}
[https://developer.mozilla.org/en-US/docs/Web/API/Document/readyState]

ljbDocument.prototype.URL string

name::
* McsEngl.ljbDocument.prototype.URL string@cptIt,
* McsEngl.ljbURL-Document.prototype@cptIt,

_CODE:
> document.URL
"http://localhost/dWstSgm/dPgm/dPgmWpg/"
> typeof document.URL
"string"

jsoDocument'doing.CREATING

name::
* McsEngl.jsoDocument'doing.CREATING@cptIt,

_CODE.LJS:
> document.implementation.createDocument('','')
#document
> document.implementation.createDocument('','') instanceof HTMLDocument
false
> document.implementation.createDocument('','') instanceof Document
true

jsoDocument'member

name::
* McsEngl.jsoDocument'member@cptIt,

jsoDocument.member.FIREFOX:
> Object.getOwnPropertyNames(document.implementation.createDocument('','')).sort()
["jslocation"]

ljbhml'oHTMLDocument (document type9) > HTMLDocument.prototype > Document.prototype#ql:jsdocument.prototype# > Node.prototype#ql:jsNode.prototype#

name::
* McsEngl.ljbhml'oHTMLDocument (document type9) > HTMLDocument.prototype > Document.prototype@cptIt,
* McsEngl.jsdocument@cptIt,
* McsEngl.ljsoHTMLDocument@cptIt,
* McsEngl.document-object.html-dom@cptIt,
* McsEngl.ljs'document@cptIt,
* McsEngl.ljs'document-object@cptIt,
* McsEngl.ljs'dom-tree@cptIt, {2013-10-18}
* McsEngl.ljs'hdocument@cptIt,
* McsEngl.ljs'html'document-object@cptIt,
* McsEngl.ljsdocument@cptIt,
* McsEngl.ljsdocument-object@cptIt,
* McsEngl.ljshdocument@cptIt,
* McsEngl.ljs'document@cptIt,
* McsEngl.ljso.document@cptIt,
* McsEngl.ljsodocument@cptIt,

* McsEngl.ljbodoc@cptIt,
* McsEngl.oHmlDoc@cptIt,
* McsEngl.ljsoHmlDoc@cptIt, {2015-10-29}
* McsEngl.ljsodoc@cptIt,

_WHOLE:
* js-window-object#ql:js'window#

_ADDRESS.WPG:
* http://www.w3schools.com/jsref/dom_obj_document.asp

_DESCRIPTION:
The HTML DOM Document
In the HTML DOM object model, the document object represents your web page.
The document object is the owner of all other objects in your web page.
If you want to access objects in an HTML page, you always start with accessing the document object.
[http://www.w3schools.com/js/js_htmldom_document.asp]
===
Each HTML document that gets loaded into a window becomes a document object. The document contains the content of the page.
[http://www.tutorialspoint.com/javascript/javascript_html_dom.htm]
===
Το αντικείμενο document έπεται του window στην ιεραρχία αντικειμένων της JavaScript. Ένα αντικείμενο document δημιουργείται όταν ένα έγγραφο ιστοσελίδας (HTML) φορτώνεται στο παράθυρο ενός προγράμματος περιήγησης στο Διαδίκτυο.
[Λιακέας, Η γλώσσα JavaScript. 2002, 221]

ljsodoc'member

name::
* McsEngl.ljsodoc'member@cptIt,

ljbodoc.member:
// Object.getOwnPropertyNames(document).sort()
["jQuery203032046009973909120.8311142069305457", "location"]
// Object.getOwnPropertyNames(document.__proto__).sort()
["alinkColor", "all", "bgColor", "captureEvents", "clear", "constructor", "fgColor", "linkColor", "releaseEvents", "vlinkColor"]

ljsodoc'GENERIC

name::
* McsEngl.ljsodoc'GENERIC@cptIt,

_GENERIC:
document > HTMLDocument.prototype > Document.prototype > Node.prototype > EventTarget.prototype > Object.prototype
===
> toString.call(document)
"[object HTMLDocument]"
===
> typeof document
"object"
===
> document#ql:jshdocument# instanceof HTMLDocument
true

> document instanceof Document
true
> document instanceof Node
true
> document instanceof EventTarget
true
> document instanceof Object
true
===
Object.getPrototypeOf(document)
HTMLDocument {open: function, close: function, write: function, writeln: function, clear: function…}

jsoHmlDoc'HTMLDocument-function

name::
* McsEngl.jsoHmlDoc'HTMLDocument-function@cptIt,
* McsEngl.HTMLDocument-function@cptIt,
* McsEngl.ljsf.HTMLDocument@cptIt,
* McsEngl.ljsfHTMLDocument@cptIt,
* McsEngl.ljsHTMLDocument@cptIt,

_GENERIC:
> typeof HTMLDocument
"function"
===
> Object.getPrototypeOf(HTMLDocument)
function Document() { [native code] }

_INSTANCE:
> Object.getOwnPropertyNames(HTMLDocument.prototype).sort()
["captureEvents", "clear", "close", "constructor", "open", "releaseEvents", "write", "writeln"]

jsoHmlDoc'HTMLDocument.prototype > Document.prototype

name::
* McsEngl.jsoHmlDoc'HTMLDocument.prototype > Document.prototype@cptIt,
* McsEngl.ljsHTMLDocument.prototype@cptIt,

jsHTMLDocument.prototype.CHROME:
> Object.getOwnPropertyNames(HTMLDocument.prototype).sort()
["alinkColor", "all", "bgColor", "captureEvents", "clear", "constructor", "fgColor", "linkColor", "releaseEvents", "vlinkColor"]

jsHTMLDocument.prototype.FF:
> Object.getOwnPropertyNames(HTMLDocument.prototype).sort()
["jsalinkColor", "ljsall", "ljsanchors", "ljsapplets", "ljsbgColor", "ljsbody", "ljscaptureEvents", "ljsclear", "ljsclose", "ljsconstructor", "ljscookie", "ljsdesignMode", "ljsdomain", "ljsembeds", "ljsexecCommand", "ljsfgColor", "ljsforms", "ljsgetElementsByName", "ljsgetItems", "ljsgetSelection", "ljshead", "ljsimages", "ljslinkColor", "ljslinks", "ljsopen", "ljsplugins", "ljsqueryCommandEnabled", "ljsqueryCommandIndeterm", "ljsqueryCommandState", "ljsqueryCommandSupported", "ljsqueryCommandValue", "ljsreleaseEvents", "ljsscripts", "ljsvlinkColor", "ljswrite", "ljswriteln"]

document.createTreeWalker(root, nodesToShow, filter, entityExpandBol):

Time to break down the 4 parameters:
1. root: The root node to begin searching the document tree using.
2. nodesToShow: The type of nodes that should be visited by TreeWalker.
3. filter (or null): Reference to custom function (NodeFilter object) to filter the nodes returned. Enter null for none.
4. entityExpandBol: Boolean parameter specifying whether entity references should be expanded.
[http://www.javascriptkit.com/dhtmltutors/treewalker.shtml]

jsoHmlDoc.anchors array

name::
* McsEngl.jsoHmlDoc.anchors array@cptIt,
* McsEngl.ljsanchors@cptIt,
* McsEngl.ljs'anchors@cptIt,

_CODE.LJS:
> document.anchors
[]

_CODE.HML:
<body>

<a name="html">HTML Tutorial</a><br />
<a name="css">CSS Tutorial</a><br />
<a name="xml">XML Tutorial</a>

<p>innerHTML of the first anchor:
<script type="text/javascript">
document.write(document.anchors[0].innerHTML);
</script>
</p>

</body>

jsoHmlDoc.body oHTMLBodyElement

name::
* McsEngl.jsoHmlDoc.body oHTMLBodyElement@cptIt,
* McsEngl.ljsbody@cptIt,
* McsEngl.ljs'body@cptIt,

_GENERIC:
> toString.call(document.body)"
[object HTMLBodyElement]"

jsoHmlDoc.constructor-function

name::
* McsEngl.jsoHmlDoc.constructor-function@cptIt,
* McsEngl.ljs'constructor.document@cptIt,

_CODE.LJS:
document.constructor
function HTMLDocument() { [native code] }

jsoHmlDoc.createTextNode()

name::
* McsEngl.jsoHmlDoc.createTextNode()@cptIt,
* McsEngl.ljscreateTextNode@cptIt,
* McsEngl.ljs'createTextNode@cptIt,

_CODE.LJS:
var elP=document.createElement("p");
elP.style.fontSize=18;
var txtNode1 = document.createTextNode("SORRY: ");
var elBR=document.createElement("br");
var txtNode2 = document.createTextNode("This file has no HEADING elements.!!");
elP.appendChild(txtNode1);
elP.appendChild(elBR);
elP.appendChild(txtNode2);

jsoHmlDoc.createRange()

name::
* McsEngl.jsoHmlDoc.createRange()@cptIt,
* McsEngl.document.createRange@cptIt,
* McsEngl.ljscreateRange@cptIt,

_CODE.LJS:
var range = document.createRange();
range.setStart(startNode, startOffset);
range.setEnd(endNode, endOffset);
[https://developer.mozilla.org/en-US/docs/Web/API/Document.createRange]

jsoHmlDoc.baseURI string

name::
* McsEngl.jsoHmlDoc.baseURI string@cptIt,
* McsEngl.ljsbaseURI@cptIt,

_CODE.LJS:
> document.baseURI
"file:///D:/File1a/tinymceDev407/tinymce.dev.html"

jsoHmlDoc.defaultView

name::
* McsEngl.jsoHmlDoc.defaultView@cptIt,
* McsEngl.ljsdefaultView@cptIt,

_CODE.LJS:
document.defaultView === window
true
===
> toString.call(document.defaultView)
"[object Window]"

jsoHmlDoc.designMode

name::
* McsEngl.jsoHmlDoc.designMode@cptIt,
* McsEngl.ljsdesignMode@cptIt,
* McsEngl.ljs'designMode@cptIt,

_DESCRIPTION:
designMode Property
Sets or gets a value that indicates whether the document can be edited.

VALUES:
String that specifies or receives one of the following values.
On
Document can be edited.
Off | Inherit
Default. Document cannot be edited.

Remarks

You can use the designMode property to put Windows Internet Explorer into a mode so that you can edit the current document.

While the browser is in design mode, objects enter a UI-activated state when the user presses ENTER, clicks an object that has focus, or double-clicks the object. Objects that are UI-activated have their own window in the document. You can modify the UI only when the object is in a UI-activated state.

You cannot execute script when the value of the designMode property is set to On.
[http://msdn.microsoft.com/en-us/library/ms533720.aspx]

Differences between designMode and contentEditable April 20, 2008
Filed under: ajax,javascript — nagoon97 @ 2:32 pm
Tags: ajax, contenteditable, designmode, editor, firefox, ie, javascript, safari, ttw, wysiwyg

To make a web page editable, IE provides two methods. One of them is setting document.designMode = “on”, which can only be applied to the entire document. And the other method is setting contentEditable = “true”, which can be applied to any HTML elements. The good part of the first method is that the same syntax can also be used for Firefox, which is why I prefer using the method. According to the document located at http://msdn2.microsoft.com/en-us/library/ms537837(VS.85).aspx, setting document.designMode = “on” and document.body.contentEditable = “true” are supposed to have exactly the same effect.
[http://nagoon97.wordpress.com/2008/04/20/differences-between-designmode-and-contenteditable/]

jsoHmlDoc.lastModified string

name::
* McsEngl.jsoHmlDoc.lastModified string@cptIt,
* McsEngl.ljslastModified@cptIt,
* McsEngl.ljs'lastModified@cptIt,

_GENERIC:
> toString.call(document.lastModified)"
[object String]"

_CODE.LJS:
> document.lastModified
"10/20/2013 18:05:24"

jsoHmlDoc.styleSheets oStyleSheetList

name::
* McsEngl.jsoHmlDoc.styleSheets oStyleSheetList@cptIt,
* McsEngl.ljsstyleSheets@cptIt,
* McsEngl.ljs'styleSheets@cptIt,

_DESCRIPTION:
document.styleSheets gives access to a list of all style sheet objects (aka CSSStylesheet) explicitly linked (i.e. <link>) or embedded (i.e. <style>) in an HTML document.
[http://domenlightenment.com/#9.2]

_CODE.LJS:
> document.styleSheets
StyleSheetList {0: CSSStyleSheet, length: 1, item: function}
0: CSSStyleSheet
cssRules: CSSRuleList
disabled: false
href: "http://localhost/pgmHtml/js/skins/lightgray/skin.css"
media: MediaList
ownerNode: link
ownerRule: null
parentStyleSheet: null
rules: CSSRuleList
title: null
type: "text/css"
__proto__: CSSStyleSheet
length: 1
__proto__: StyleSheetList

jsoHmlDoc.title string

name::
* McsEngl.jsoHmlDoc.title string@cptIt,
* McsEngl.ljstitle@cptIt,
* McsEngl.ljs'title.document-methodNo@cptIt,

_DESCRIPTION:
U can use document.title to access the title of the page & window.location.host gives you the URL of the current page whereas location.href will give you the complete URL.

_CODE.LJS:
> document.title
"PgmSgm 0.0.1"

jsoHmlDoc.URL string

name::
* McsEngl.jsoHmlDoc.URL string@cptIt,
* McsEngl.ljsURL@cptIt,
* McsEngl.ljssURL@cptIt,
* McsEngl.ljs'URL@cptIt,

_CODE.LJS:
> document.URL
"http://synagonism.net/"
===
>>> document.URL
"file:///D:/pgmWEB/pgmJS/DOM/test.html"

jsoHmlDoc.write-function

name::
* McsEngl.jsoHmlDoc.write-function@cptIt,
* McsEngl.ljswrite@cptIt,
* McsEngl.ljs'write.document-method@cptIt,
* McsEngl.ljs'write-method-of-document@cptIt,

_CODE.LJS:
<p>Base URL is:
<script type="text/javascript">
document.write(from another function);
</script>
</p>
===
<body>

<script type="text/javascript">
document.write("<h1>Hello World!</h1>");
</script>

</body>

jsoHmlDoc'member

name::
* McsEngl.jsoHmlDoc'member@cptIt,
* McsEngl.ljsoHmlDoc.member@cptIt,
* McsEngl.ljsoHTMLDocument'member@cptIt,

jsoHTMLDocument.member.FIREFOX:
> Object.getOwnPropertyNames(document).sort()
["closure_lm_579871", "f", "location"]

jsoHTMLDocument.member.CHROME:
//2016-03-05
> Object.getOwnPropertyNames(document).sort()
["location"]
> Object.getOwnPropertyNames(HTMLDocument.prototype).sort()
["alinkColor", "all", "bgColor", "captureEvents", "clear", "constructor", "fgColor", "linkColor", "releaseEvents", "vlinkColor"]
> Object.getOwnPropertyNames(document.__proto__).sort()
["alinkColor", "all", "bgColor", "captureEvents", "clear", "constructor", "fgColor", "linkColor", "releaseEvents", "vlinkColor"]
===
//2015-11-20
> Object.getOwnPropertyNames(document).sort()
["location", "pwpevt_1a4ii5mkg"]
> Object.getOwnPropertyNames(document).sort()
Array[153]

SPECIFIC

name::
* McsEngl.ljsoHmlDoc.specific@cptIt,
* McsEngl.ljsodoc.specific@cptIt,
* McsEngl.ljsodocument.specific@cptIt,

> document
#document
<!DOCTYPE html>
<html class="mce-fullscreen">
<head>…</head>
<body class="mce-fullscreen">…</body>
</html>

ljbhml'oDocumentFragment (type11 Frt) > DocumentFragment.prototype > Node.prototype

name::
* McsEngl.ljbhml'oDocumentFragment (type11 Frt) > DocumentFragment.prototype > Node.prototype@cptIt,
* McsEngl.jsoDocumentFragment@cptIt,
* McsEngl.ljsoDocumentFragment@cptIt,
* McsEngl.ljs'DocumentFragment@cptIt,
* McsEngl.ljs'document-fragment@cptIt,
* McsEngl.ljs'html'document-fragment-object@cptIt,

* McsEngl.jsoFrt@cptIt,
* McsEngl.ljsoFrt@cptIt,

_GENERIC:
> Object.getPrototypeOf(new DocumentFragment()) === DocumentFragment.prototype
true
> Object.getPrototypeOf(new DocumentFragment())
DocumentFragment {}
===
> Object.getPrototypeOf(DocumentFragment)
function Node() { [native code] }

_DESCRIPTION:
One of the lessor known but incredibly useful gems within JavaScript is the DocumentFragment. DocumentFragments allow developers to place child elements onto an arbitrary node-like parent, allowing for node-like interactions without a true root node. Doing so allows developers to produce structure without doing so within the visible DOM -- an increase of speed is the true advantage. Let me show you how DocumentFragments are used!

DocumentFragment Example
Let's start with a UL with which we'll inject LI's to:

<ul id="list"></ul>
DOM injections and modifications are taxing, so the fewer the interactions the better; that's where the DocumentFragment comes in. The first step is creating the DocumentFragment:

// Create the fragment
var frag = document.createDocumentFragment();
This DocumentFragment act like a pseudo-DOM node -- think of it as a virtual UL element, in this case. Now it's time to add elements:

// Create numerous list items, add to fragment
for(var x = 0; x < 10; x++) {
 var li = document.createElement("li");
 li.innerHTML = "List item " + x;
 frag.appendChild(li);
}
Elements can be added to the DocumentFragment just as you could a normal DOM node. Once the tree of DOM nodes is ready to hit the page, simply place the DocumentFragement into its parent (or other DOM placement functions):

// Mass-add the fragment nodes to the list
listNode.appendChild(frag);
Using DocumentFragments is faster than repeated single DOM node injection and allows developers to perform DOM node operations (like adding events) on new elements instead of mass-injection via innerHTML. Keep DocumentFragment close by when performing lots of DOM operations -- it could speed up your app considerably!
[http://davidwalsh.name/documentfragment]
===
The creation and use of a DocumentFragment node provides a light weight document DOM that is external to the live DOM tree. Think of a DocumentFragment as an empty document template that acts just like the live DOM tree, but only lives in memory, and its child nodes can easily be manipulated in memory and then appended to the live DOM.
[http://domenlightenment.com/#8.1]
===
You might wonder what is the advantage to using a documentFragment over simply creating (via createElement()) a <div> in memory and working within this <div> to create a DOM structure. The follow are the differences.

A document fragment may contain any kind of node (except <body> or <html>) where as an element may not
The document fragment itself, is not added to the DOM when you append a fragment. The contents of the node are. As opposed to appending an element node in which the element itself is part of the appending.
When a document fragment is appended to the DOM it transfers from the document fragment to the place its appended. Its no longer in memory in the place you created it. This is not true for element nodes that are temperately used to contained nodes briefly and then are moved to the live DOM.
[http://domenlightenment.com/#8.2]

jsoDocumetFragment'creating

name::
* McsEngl.jsoDocumetFragment'creating@cptIt,

_DESCRIPTION:
Methods that return the object:
•  Range.cloneContents ( )
•  Range.createContextualFragment (HTMLtext)
+  object.createDocumentFragment ( )
•  Range.extractContents ( )
[http://help.dottoro.com/ljedicfj.php]

_CODE.LJS:
document.createDocumentFragment()
===
var o = new DocumentFragment()

jsoDocumentFragment'DocumentFragment-function

name::
* McsEngl.jsoDocumentFragment'DocumentFragment-function@cptIt,
* McsEngl.ljsDocumentFragment@cptIt,

_GENERIC:
> typeof DocumentFragment
"function"

DocumentFragment.prototype

name::
* McsEngl.DocumentFragment.prototype@cptIt,
* McsEngl.ljsDocumentFragment.prototype@cptIt,

jsDocumentFragment.prototype.CHROME:
> //2015-11-16
> Object.getOwnPropertyNames(DocumentFragment.prototype).sort()
["childElementCount", "children", "constructor", "firstElementChild", "getElementById", "lastElementChild", "querySelector", "querySelectorAll"]

jsDocumentFragment.prototype.FF:
>

jsoDocumentFragment'member

name::
* McsEngl.jsoDocumentFragment'member@cptIt,

jsoDocumentFragment.MEMBER.CHROME:
> 2015-11-14:
> var o = new DocumentFragment()
undefined
> Object.getOwnPropertyNames(o)
[]
> DocumentFragment.prototype: Object.getOwnPropertyNames(o.__proto__)
["children", "firstElementChild", "lastElementChild", "childElementCount", "getElementById", "querySelector", "querySelectorAll", "constructor"]
> Node: Object.getOwnPropertyNames(o.__proto__.__proto__)
["nodeType", "nodeName", "baseURI", "ownerDocument", "parentNode", "parentElement", "childNodes", "firstChild", "lastChild", "previousSibling", "nextSibling", "nodeValue", "textContent", "hasChildNodes", "normalize", "cloneNode", "isEqualNode", "compareDocumentPosition", "contains", "lookupPrefix", "lookupNamespaceURI", "isDefaultNamespace", "insertBefore", "appendChild", "replaceChild", "removeChild", "isSameNode", "ELEMENT_NODE", "ATTRIBUTE_NODE", "TEXT_NODE", "CDATA_SECTION_NODE", "ENTITY_REFERENCE_NODE", "ENTITY_NODE", "PROCESSING_INSTRUCTION_NODE", "COMMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_TYPE_NODE", "DOCUMENT_FRAGMENT_NODE", "NOTATION_NODE", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "constructor"]
===
> 42.0.2311.90 m
> Object.getOwnPropertyNames(document.createDocumentFragment()).sort() ["childElementCount", "children", "firstElementChild", "lastElementChild", "localName", "namespaceURI", "nodeName", "nodeType", "nodeValue", "parentElement", "textContent"]
> Object.getOwnPropertyNames(document.createDocumentFragment().__proto__).sort()
["constructor", "getElementById", "querySelector", "querySelectorAll"]
===
> Object.getOwnPropertyNames(new DocumentFragment).sort()
["baseURI", "childElementCount", "childNodes", "children", "firstChild", "firstElementChild", "lastChild", "lastElementChild", "localName", "namespaceURI", "nextSibling", "nodeName", "nodeType", "nodeValue", "ownerDocument", "parentElement", "parentNode", "previousSibling", "textContent"]
> DocumentFragment.prototype:
Object.getOwnPropertyNames((new DocumentFragment).__proto__).sort()
["constructor", "getElementById", "querySelector", "querySelectorAll"]
> Node.prototype:
Object.getOwnPropertyNames((new DocumentFragment).__proto__.__proto__).sort()
["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "appendChild", "cloneNode", "compareDocumentPosition", "constructor", "contains", "hasChildNodes", "insertBefore", "isDefaultNamespace", "isEqualNode", "isSameNode", "lookupNamespaceURI", "lookupPrefix", "normalize", "removeChild", "replaceChild"]
> EventTarget.prototype:
Object.getOwnPropertyNames((new DocumentFragment).__proto__.__proto__.__proto__).sort()
["addEventListener", "constructor", "dispatchEvent", "removeEventListener"]

jsoDocumentFragment.nodeName:
> document.createDocumentFragment().nodeName
"#document-fragment"
> (new DocumentFragment).nodeName
"#document-fragment"

ljbhml'oDocumentType (type10) > DocumentType.prototype > Node.prototype

name::
* McsEngl.ljbhml'oDocumentType (type10) > DocumentType.prototype > Node.prototype@cptIt,
* McsEngl.ljsoDocumentType@cptIt,
* McsEngl.ljs'document-type@cptIt,
* McsEngl.ljs'html'document-type-object@cptIt,
* McsEngl.ljsoDtp@cptIt,

_GENERIC:
> typeof DocumentType
"function"
> Object.getPrototypeOf(DocumentType)
function Node() { [native code] }

_DESCRIPTION:
A DocumentType node e.g. <!DOCTYPE html> for HTML5 documents.
[https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType]
===
DocumentType nodes are simply known as doctypes.

Doctypes have an associated name, public ID, and system ID.

When a doctype is created, its name is always given. Unless explicitly given when a doctype is created, its public ID and system ID are the empty string.

The name attribute must return the name.

The publicId attribute must return the public ID.

The systemId attribute must return the system ID.
[http://dom.spec.whatwg.org/#documenttype]

_CODE.HML:
<!DOCTYPE html>
===
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

_CODE.LJS:
> document.doctype
<!DOCTYPE html>
===
> document.doctype.nodeName
"html"

DocumentType-function

name::
* McsEngl.ljsDocumentType@cptIt,

DocumentType.prototype

name::
* McsEngl.DocumentType.prototype@cptIt,
* McsEngl.ljsDocumentType.prototype@cptIt,

jsDocumentType.prototype.CHROME:
//2015-11-16
> Object.getOwnPropertyNames(DocumentType.prototype).sort()
["constructor", "name", "publicId", "remove", "systemId"]

jsDocumentType.prototype.FF:
> //FIREFOX 2014-12-07
> Object.getOwnPropertyNames(DocumentType.prototype).sort()
["constructor", "internalSubset", "name", "publicId", "remove", "systemId"]

ljbhml'oElement > Element.prototype > Node.prototype

name::
* McsEngl.ljbhml'oElement > Element.prototype > Node.prototype@cptIt,
* McsEngl.ljsElement@cptIt,
* McsEngl.ljsElement-object@cptIt,
* McsEngl.ljsoElement@cptIt,
* McsEngl.ljs'html'Element-node@cptIt,
* McsEngl.ljsoElt@cptIt,

_GENERIC:
> Object.getPrototypeOf(Element)
function Node()#ql:jsonode# { [native code] }

jsoElement'Element-function

name::
* McsEngl.jsoElement'Element-function@cptIt,
* McsEngl.ljsElement-function@cptIt,

jsoElement'Element.prototype > Node.prototype#ql:jsnode.prototype# > EventTarget.prototype#ql:jseventtarget.prototype# > Object.prototype#ql:jsobject.prototype#

name::
* McsEngl.jsoElement'Element.prototype > Node.prototype@cptIt,
* McsEngl.Element.prototype@cptIt,
* McsEngl.jsElement.prototype@cptIt,

_SPECIFIC:
* oElement##
* HTMLElement.prototype##

jsElement.prototype.CHROME:
> Object.getOwnPropertyNames(Element.prototype).sort()
["animate", "ljsattributes", "ljschildElementCount", "ljschildren", "ljsclassList", "ljsclassName", "ljsclientHeight", "ljsclientLeft", "ljsclientTop", "ljsclientWidth", "ljsclosest", "ljsconstructor", "ljscreateShadowRoot", "ljsfirstElementChild", "ljsgetAttribute", "ljsgetAttributeNS", "ljsgetAttributeNode", "ljsgetAttributeNodeNS", "ljsgetBoundingClientRect", "ljsgetClientRects", "ljsgetDestinationInsertionPoints", "ljsgetElementsByClassName", "ljsgetElementsByTagName", "ljsgetElementsByTagNameNS", "ljshasAttribute", "ljshasAttributeNS", "ljshasAttributes", "ljsid", "ljsinnerHTML", "ljsinsertAdjacentElement", "ljsinsertAdjacentHTML", "ljsinsertAdjacentText", "ljslastElementChild", "ljslocalName", "ljsmatches", "ljsnamespaceURI", "ljsnextElementSibling", "ljsoffsetHeight", "ljsoffsetLeft", "ljsoffsetParent", "ljsoffsetTop", "ljsoffsetWidth", "ljsonbeforecopy", "ljsonbeforecut", "ljsonbeforepaste", "ljsoncopy", "ljsoncut", "ljsonpaste", "ljsonsearch", "ljsonselectstart", "ljsonwebkitfullscreenchange", "ljsonwebkitfullscreenerror", "ljsonwheel", "ljsouterHTML", "ljsprefix", "ljspreviousElementSibling", "ljsquerySelector", "ljsquerySelectorAll", "ljsremove", "ljsremoveAttribute", "ljsremoveAttributeNS", "ljsremoveAttributeNode", "ljsrequestPointerLock", "ljsscrollHeight", "ljsscrollIntoView", "ljsscrollIntoViewIfNeeded", "ljsscrollLeft", "ljsscrollTop", "ljsscrollWidth", "ljssetAttribute", "ljssetAttributeNS", "ljssetAttributeNode", "ljssetAttributeNodeNS", "ljsshadowRoot", "ljstagName", "ljswebkitMatchesSelector", "ljswebkitRequestFullScreen", "ljswebkitRequestFullscreen"]

jsElement.prototype.FF:
> Object.getOwnPropertyNames(Element.prototype).sort()
["attributes", "ljschildElementCount", "ljschildren", "ljsclassList", "ljsclassName", "ljsclientHeight", "ljsclientLeft", "ljsclientTop", "ljsclientWidth", "ljsclosest", "ljsconstructor", "ljsfirstElementChild", "ljsgetAttribute", "ljsgetAttributeNS", "ljsgetAttributeNode", "ljsgetAttributeNodeNS", "ljsgetBoundingClientRect", "ljsgetClientRects", "ljsgetElementsByClassName", "ljsgetElementsByTagName", "ljsgetElementsByTagNameNS", "ljshasAttribute", "ljshasAttributeNS", "ljshasAttributes", "ljsid", "ljsinnerHTML", "ljsinsertAdjacentHTML", "ljslastElementChild", "ljsmatches", "ljsmozMatchesSelector", "ljsmozRequestFullScreen", "ljsmozRequestPointerLock", "ljsnextElementSibling", "ljsonwheel", "ljsouterHTML", "ljspreviousElementSibling", "ljsquerySelector", "ljsquerySelectorAll", "ljsreleaseCapture", "ljsremove", "ljsremoveAttribute", "ljsremoveAttributeNS", "ljsremoveAttributeNode", "ljsscroll", "ljsscrollBy", "ljsscrollHeight", "ljsscrollIntoView", "ljsscrollLeft", "ljsscrollLeftMax", "ljsscrollTo", "ljsscrollTop", "ljsscrollTopMax", "ljsscrollWidth", "ljssetAttribute", "ljssetAttributeNS", "ljssetAttributeNode", "ljssetAttributeNodeNS", "ljssetCapture", "ljstagName"]

jsElement.prototype.children HTMLCollection

name::
* McsEngl.jsElement.prototype.children HTMLCollection@cptIt,
* McsEngl.jschildren@cptIt,
* McsEngl.ljs'children@cptIt,

_CODE.LJS:
> toString.call(document.getElementById('id99').children)
"[object HTMLCollection]"
===
<p>
<!-- comment -->
<strong>Hi</strong> Who's <em>there</em>!
</p>

<script>

var ulElement = document.querySelector('p').children;

//logs a list/array of all immediate child element nodes
console.log(ulElement); //logs [strong, em]

</script>
===
document.querySelector('div').children[4].scrollIntoView(true);

jsElement.prototype.classList DOMTokenList

name::
* McsEngl.jsElement.prototype.classList DOMTokenList@cptIt,
* McsEngl.ljsclassList@cptIt,
* McsEngl.ljs'classList@cptIt,
* McsEngl.classList-ljb@cptIt,

_DESCRIPTION:
Using the classList property available on element nodes we can access a list (i.e. DOMTokenList) of class attribute values that is much easier to work with than a space-delimited string value returned from the className property. In the code below I contrast the use of classList with className.
[http://domenlightenment.com/#3.8]

_CODE:
elem.classList.add("first");
elem.classList.add("second");
elem.classList.add("third");
is equal

elem.classList.add("first","second","third");
[http://stackoverflow.com/a/14432191]
===
> toString.call(document.getElementById('id99').classList)
"[object DOMTokenList]"
===
elm.classList.add('cat');
elm.classList.remove('dog');
elm.classList.toggle('grow');//replaces previous with 'grow'
elm.classList.contains('brown')

jsElement.prototype.className String

name::
* McsEngl.jsElement.prototype.className String@cptIt,
* McsEngl.ljs'className@cptIt,
* McsEngl.ljsclassName@cptIt,

_CODE.LJS:
> document.getElementById('mce_36').className
"mce-widget mce-btn mce-first"
===
oEltIn.className.match(/(^| )clsClicked( |$)/)
===
x.className.indexOf("w3-show") == -1

jsoElement.id string

name::
* McsEngl.jsoElement.id string@cptIt,
* McsEngl.ljsid@cptIt,

_DESCRIPTION:
Sets or retrieves a unique identifier for the object.
The value of the id property must be unique within the entire document. Only alphanumeric characters and the underscore (_) character can be used for the string and the first character must be a letter.
You can assign style settings to the object with the id property (#id {color:red;}). See Example 1 for details.
The value of the id property can be used for the href property. In that case, the element is the target of the link. See the page for the href property or Example 2 for details.
Or you can use the identifier in the htmlFor property of the label element to attach information to controls.
Use the getElementById method to access the element with the specified id. It is a fast method to find an element in the document.
[http://help.dottoro.com/ljwedlrb.php]

jsoElement.nextElementSibling oElement

name::
* McsEngl.jsoElement.nextElementSibling oElement@cptIt,
* McsEngl.ljsnextElementSibling@cptIt,

_DESCRIPTION:
Browser support:
IE9, FF3.5,
Returns a reference to the next child element of the current element's parent.
Note: The nextElementSibling property is supported in Firefox from version 3.5 and Internet Explorer from version 9.
The next sibling node and the next sibling element can be different. A node is an element node if it's nodeType is 1 (Node.ELEMENT_NODE). Text nodes and comment nodes are not element nodes. If you need the next sibling node of an element, use the nextSibling property.
The children collection contains all child elements of an element in source order. If you want to iterate through the child elements of an element, you can also use it.
Note: The children collection also contains the child comment nodes in Internet Explorer before version 9. In other browsers, it only contains the element nodes.
Similarly to the nextElementSibling property, the previousElementSibling property returns the previous sibling element of an element, furthermore the firstElementChild and lastElementChild properties return the first and last child element of an element.
[http://help.dottoro.com/ljkmadao.php]

jsoElement'member

name::
* McsEngl.jsoElement'member@cptIt,
* McsEngl.ljsoElt'member@cptIt,
* McsEngl.ljsoElt'property@cptIt,

jsoElement.MEMBER.FIREFOX:
> Object.getOwnPropertyNames(Element.prototype).sort()
* jsoElement.attributes, attributes,
* jsoElement.childElementCount, childElementCount,
* jsoElement.children, children,
* jsoElement.classList, classList,
* jsoElement.className, className,
* jsoElement.clientHeight, clientHeight,
* jsoElement.clientLeft, clientLeft,
* jsoElement.clientTop, clientTop,
* jsoElement.clientWidth, clientWidth,
* jsoElement.constructor, constructor,
* jsoElement.firstElementChild, firstElementChild,
* jsoElement.getAttribute, getAttribute,
* jsoElement.getAttributeNS, getAttributeNS,
* jsoElement.getAttributeNode, getAttributeNode,
* jsoElement.getAttributeNodeNS, getAttributeNodeNS,
* jsoElement.getBoundingClientRect, getBoundingClientRect,
* jsoElement.getClientRects, getClientRects,
* jsoElement.getElementsByClassName, getElementsByClassName,
* jsoElement.getElementsByTagName, getElementsByTagName,
* jsoElement.getElementsByTagNameNS, getElementsByTagNameNS,
* jsoElement.hasAttribute, hasAttribute,
* jsoElement.hasAttributeNS, hasAttributeNS,
* jsoElement.id, id,
* jsoElement.innerHTML, .innerHTML,
* jsoElement.insertAdjacentHTML, .insertAdjacentHTML,
* jsoElement.lastElementChild, lastElementChild,
* jsoElement.mozMatchesSelector, mozMatchesSelector,
* jsoElement.mozRequestFullScreen, mozRequestFullScreen,
* jsoElement.mozRequestPointerLock, mozRequestPointerLock,
* jsoElement.nextElementSibling, nextElementSibling,
* jsoElement.onwheel, onwheel,
* jsoElement.outerHTML, outerHTML,
* jsoElement.previousElementSibling, previousElementSibling,
* jsoElement.querySelector, querySelector,
* jsoElement.querySelectorAll, querySelectorAll,
* jsoElement.releaseCapture, releaseCapture,
* jsoElement.remove, remove,
* jsoElement.removeAttribute, removeAttribute,
* jsoElement.removeAttributeNS, removeAttributeNS,
* jsoElement.removeAttributeNode, removeAttributeNode,
* jsoElement.scrollHeight, scrollHeight,
* jsoElement.scrollIntoView, scrollIntoView,
* jsoElement.scrollLeft, scrollLeft,
* jsoElement.scrollLeftMax, scrollLeftMax,
* jsoElement.scrollTop, scrollTop,
* jsoElement.scrollTopMax, scrollTopMax,
* jsoElement.scrollWidth, scrollWidth,
* jsoElement.setAttribute, setAttribute,
* jsoElement.setAttributeNS, setAttributeNS,
* jsoElement.setAttributeNode, setAttributeNode,
* jsoElement.setAttributeNodeNS, setAttributeNodeNS,
* jsoElement.setCapture, setCapture,
* jsoElement.tagName, tagName,
> Object.getOwnPropertyNames(Element.prototype.__proto__).sort()
["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "appendChild", "baseURI", "childNodes", "cloneNode", "compareDocumentPosition", "constructor", "contains", "firstChild", "hasAttributes", "hasChildNodes", "insertBefore", "isDefaultNamespace", "isEqualNode", "lastChild", "localName", "lookupNamespaceURI", "lookupPrefix", "namespaceURI", "nextSibling", "nodeName", "nodeType", "nodeValue", "normalize", "ownerDocument", "parentElement", "parentNode", "prefix", "previousSibling", "removeChild", "replaceChild", "textContent"]
===
Object.getOwnPropertyNames(Element).sort()
["ALLOW_KEYBOARD_INPUT", "arguments", "caller", "length", "name", "prototype", "toString"]
===
getMemberInherited(Element).sort()
["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "apply", "bind", "call", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "valueOf"]

phoElement.prototype:
> CHROME:
Object.getOwnPropertyNames(Element.prototype).sort()
"jsanimate", "ljsblur", "ljsclosest", "ljsconstructor", "ljscreateShadowRoot", "ljsfocus", "ljsgetAttribute", "ljsgetAttributeNS", "ljsgetAttributeNode", "ljsgetAttributeNodeNS", "ljsgetBoundingClientRect", "ljsgetClientRects", "ljsgetDestinationInsertionPoints", "ljsgetElementsByClassName", "ljsgetElementsByTagName", "ljsgetElementsByTagNameNS", "ljshasAttribute", "ljshasAttributeNS", "ljshasAttributes", "ljsinsertAdjacentElement", "ljsinsertAdjacentHTML", "ljsinsertAdjacentText", "ljsmatches", "ljsquerySelector", "ljsquerySelectorAll", "ljsremove", "ljsremoveAttribute", "ljsremoveAttributeNS", "ljsremoveAttributeNode", "ljsrequestPointerLock", "ljsscrollIntoView", "ljsscrollIntoViewIfNeeded", "ljssetAttribute", "ljssetAttributeNS", "ljssetAttributeNode", "ljssetAttributeNodeNS", "ljswebkitMatchesSelector", "ljswebkitRequestFullScreen", "ljswebkitRequestFullscreen"
===
> ElementPrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__).sort()
* jsoElt.attributes, ElementPrototype, firefox,
* jsoElt.childElementCount, ElementPrototype, firefox,
* jsoElt.children, ElementPrototype, firefox,
* jsoElt.classList, ElementPrototype, firefox,
* jsoElt.clientHeight, ElementPrototype, firefox,
* jsoElt.clientLeft, ElementPrototype, firefox,
* jsoElt.clientTop, ElementPrototype, firefox,
* jsoElt.clientWidth, ElementPrototype, firefox,
* jsoElt.constructor, ElementPrototype, firefox,
* jsoElt.firstElementChild, ElementPrototype, firefox,
* jsoElt.getAttribute, ElementPrototype, firefox,
* jsoElt.getAttributeNS, ElementPrototype, firefox,
* jsoElt.getAttributeNode, ElementPrototype, firefox,
* jsoElt.getAttributeNodeNS, ElementPrototype, firefox,
* jsoElt.getBoundingClientRect, ElementPrototype, firefox,
* jsoElt.getClientRects, ElementPrototype, firefox,
* jsoElt.getElementsByClassName, ElementPrototype, firefox,
* jsoElt.getElementsByTagName, ElementPrototype, firefox,
* jsoElt.getElementsByTagNameNS, ElementPrototype, firefox,
* jsoElt.hasAttribute, ElementPrototype, firefox,
* jsoElt.hasAttributeNS, ElementPrototype, firefox,
* jsoElt.id, ElementPrototype, firefox,
* jsoElt.innerHTML, ElementPrototype, firefox,
* jsoElt.insertAdjacentHTML, ElementPrototype, firefox,
* jsoElt.lastElementChild, ElementPrototype, firefox,
* jsoElt.mozMatchesSelector, ElementPrototype, firefox,
* jsoElt.mozRequestFullScreen, ElementPrototype, firefox,
* jsoElt.mozRequestPointerLock, ElementPrototype, firefox,
* jsoElt.nextElementSibling, ElementPrototype, firefox,
* jsoElt.onwheel, ElementPrototype, firefox,
* jsoElt.outerHTML, ElementPrototype, firefox,
* jsoElt.previousElementSibling, ElementPrototype, firefox,
* jsoElt.querySelector, ElementPrototype, firefox,
* jsoElt.querySelectorAll, ElementPrototype, firefox,
* jsoElt.releaseCapture, ElementPrototype, firefox,
* jsoElt.remove, ElementPrototype, firefox,
* jsoElt.removeAttribute, ElementPrototype, firefox,
* jsoElt.removeAttributeNS, ElementPrototype, firefox,
* jsoElt.removeAttributeNode, ElementPrototype, firefox,
* jsoElt.scrollHeight, ElementPrototype, firefox,
* jsoElt.scrollIntoView, ElementPrototype, firefox,
* jsoElt.scrollLeft, ElementPrototype, firefox,
* jsoElt.scrollLeftMax, ElementPrototype, firefox,
* jsoElt.scrollTop, ElementPrototype, firefox,
* jsoElt.scrollTopMax, ElementPrototype, firefox,
* jsoElt.scrollWidth, ElementPrototype, firefox,
* jsoElt.setAttribute, ElementPrototype, firefox,
* jsoElt.setAttributeNS, ElementPrototype, firefox,
* jsoElt.setAttributeNode, ElementPrototype, firefox,
* jsoElt.setAttributeNodeNS, ElementPrototype, firefox,
* jsoElt.setCapture, ElementPrototype, firefox,
* jsoElt.tagName, ElementPrototype, firefox,

> NodePrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__).sort()
* jsoElt.ATTRIBUTE_NODE, NodePrototype, firefox,
* jsoElt.CDATA_SECTION_NODE, NodePrototype, firefox,
* jsoElt.COMMENT_NODE, NodePrototype, firefox,
* jsoElt.DOCUMENT_FRAGMENT_NODE, NodePrototype, firefox,
* jsoElt.DOCUMENT_NODE, NodePrototype, firefox,
* jsoElt.DOCUMENT_POSITION_CONTAINED_BY, NodePrototype, firefox,
* jsoElt.DOCUMENT_POSITION_CONTAINS, NodePrototype, firefox,
* jsoElt.DOCUMENT_POSITION_DISCONNECTED, NodePrototype, firefox,
* jsoElt.DOCUMENT_POSITION_FOLLOWING, NodePrototype, firefox,
* jsoElt.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, NodePrototype, firefox,
* jsoElt.DOCUMENT_POSITION_PRECEDING, NodePrototype, firefox,
* jsoElt.DOCUMENT_TYPE_NODE, NodePrototype, firefox,
* jsoElt.ELEMENT_NODE, NodePrototype, firefox,
* jsoElt.ENTITY_NODE, NodePrototype, firefox,
* jsoElt.ENTITY_REFERENCE_NODE, NodePrototype, firefox,
* jsoElt.NOTATION_NODE, NodePrototype, firefox,
* jsoElt.PROCESSING_INSTRUCTION_NODE, NodePrototype, firefox,
* jsoElt.TEXT_NODE, NodePrototype, firefox,
* jsoElt.appendChild, NodePrototype, firefox,
* jsoElt.baseURI, NodePrototype, firefox,
* jsoElt.childNodes, NodePrototype, firefox,
* jsoElt.cloneNode, NodePrototype, firefox,
* jsoElt.compareDocumentPosition, NodePrototype, firefox,
* jsoElt.constructor, NodePrototype, firefox,
* jsoElt.contains, NodePrototype, firefox,
* jsoElt.firstChild, NodePrototype, firefox,
* jsoElt.hasAttributes, NodePrototype, firefox,
* jsoElt.hasChildNodes, NodePrototype, firefox,
* jsoElt.insertBefore, NodePrototype, firefox,
* jsoElt.isDefaultNamespace, NodePrototype, firefox,
* jsoElt.isEqualNode, NodePrototype, firefox,
* jsoElt.lastChild, NodePrototype, firefox,
* jsoElt.localName, NodePrototype, firefox,
* jsoElt.lookupNamespaceURI, NodePrototype, firefox,
* jsoElt.lookupPrefix, NodePrototype, firefox,
* jsoElt.namespaceURI, NodePrototype, firefox,
* jsoElt.nextSibling, NodePrototype, firefox,
* jsoElt.nodeName, NodePrototype, firefox,
* jsoElt.nodeType, NodePrototype, firefox,
* jsoElt.nodeValue, NodePrototype, firefox,
* jsoElt.normalize, NodePrototype, firefox,
* jsoElt.ownerDocument, NodePrototype, firefox,
* jsoElt.parentElement, NodePrototype, firefox,
* jsoElt.parentNode, NodePrototype, firefox,
* jsoElt.prefix, NodePrototype, firefox,
* jsoElt.previousSibling, NodePrototype, firefox,
* jsoElt.removeChild, NodePrototype, firefox,
* jsoElt.replaceChild, NodePrototype, firefox,
* jsoElt.textContent, NodePrototype, firefox,

> EventTargetPrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__.__proto__).sort()
* jsoElt.addEventListener, EventTargetPrototype, firefox,
* jsoElt.constructor, EventTargetPrototype, firefox,
* jsoElt.dispatchEvent, EventTargetPrototype, firefox,
* jsoElt.removeEventListener, EventTargetPrototype, firefox,

> ObjectPrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__.__proto__.__proto__).sort()
* jsoElt.__defineGetter__, ObjectPrototype, firefox,
* jsoElt.__defineSetter__, ObjectPrototype, firefox,
* jsoElt.__lookupGetter__, ObjectPrototype, firefox,
* jsoElt.__lookupSetter__, ObjectPrototype, firefox,
* jsoElt.constructor, ObjectPrototype, firefox,
* jsoElt.hasOwnProperty, ObjectPrototype, firefox,
* jsoElt.isPrototypeOf, ObjectPrototype, firefox,
* jsoElt.propertyIsEnumerable, ObjectPrototype, firefox,
* jsoElt.toLocaleString, ObjectPrototype, firefox,
* jsoElt.toSource, ObjectPrototype, firefox,
* jsoElt.toString, ObjectPrototype, firefox,
* jsoElt.unwatch, ObjectPrototype, firefox,
* jsoElt.valueOf, ObjectPrototype, firefox,
* jsoElt.watch, ObjectPrototype, firefox,

jsoElement.attributes (oNamedNodeMap)

name::
* McsEngl.jsoElement.attributes (oNamedNodeMap)@cptIt,
* McsEngl.ljsattributes@cptIt,

_DESCRIPTION:
Firefox has it as member. All specific HTMLElements have it as member both Chrome, firefox.
[hmnSngo.2015-04-04]

_CODE.LJS:
> FIREFOX
> var o=document.createElement('p')
undefined
> Object.getPrototypeOf(o.attributes)
NamedNodeMap
> Object.getOwnPropertyNames(o.attributes).sort()
[]
Object.getOwnPropertyNames(o.attributes.__proto__).sort()
["constructor", "getNamedItem", "getNamedItemNS", "item", "length", "removeNamedItem", "removeNamedItemNS", "setNamedItem", "setNamedItemNS"]

> Object.getOwnPropertyNames(Element.prototype).sort()
["attributes", "childElementCount", "children", "classList", "className", "clientHeight", "clientLeft", "clientTop", "clientWidth", "closest", "constructor", "firstElementChild", "getAttribute", "getAttributeNS", "getAttributeNode", "getAttributeNodeNS", "getBoundingClientRect", "getClientRects", "getElementsByClassName", "getElementsByTagName", "getElementsByTagNameNS", "hasAttribute", "hasAttributeNS", "hasAttributes", "id", "innerHTML", "insertAdjacentHTML", "lastElementChild", "matches", "mozMatchesSelector", "mozRequestFullScreen", "mozRequestPointerLock", "nextElementSibling", "onwheel", "outerHTML", "previousElementSibling", "querySelector", "querySelectorAll", "releaseCapture", "remove", "removeAttribute", "removeAttributeNS", "removeAttributeNode", "scroll", "scrollBy", "scrollHeight", "scrollIntoView", "scrollLeft", "scrollLeftMax", "scrollTo", "scrollTop", "scrollTopMax", "scrollWidth", "setAttribute", "setAttributeNS", "setAttributeNode", "setAttributeNodeNS", "setCapture", "tagName"]
> CHROME
> var o=document.createElement('P')
undefined
> Object.getOwnPropertyNames(o).sort()
Array[132][0 … 99]0: "accessKey"1: "align"2: "attributes"

jsoElement.clientHeight number

name::
* McsEngl.jsoElement.clientHeight number@cptIt,
* McsEngl.ljsclientHeight@cptIt,
* McsEngl.ljs'clientHeight@cptIt,

_DESCRIPTION:
The clientWidth and clientHeight properties return a total size of an element by adding together the content of the element and its padding excluding the border sizes. In the code below I use these two properties to get the height and width of an element including padding but excluding borders.
[http://domenlightenment.com/#5.5]

jsoElement.clientWidth number

name::
* McsEngl.jsoElement.clientWidth number@cptIt,
* McsEngl.ljsclientWidth@cptIt,
* McsEngl.ljs'clientWidth@cptIt,

_DESCRIPTION:
The clientWidth and clientHeight properties return a total size of an element by adding together the content of the element and its padding excluding the border sizes. In the code below I use these two properties to get the height and width of an element including padding but excluding borders.
[http://domenlightenment.com/#5.5]

jsoElement.getAttribute-function

name::
* McsEngl.jsoElement.getAttribute-function@cptIt,
* McsEngl.ljsgetAttribute@cptIt,

_CHARACTERISTIC:
* INPUT: string name of attribute.
* OUTPUT: string value of attribute.

_CODE.LJS:
var string = document.getElementsByTagName("H1")[0].getAttribute("class");

jsoElement.removeAttribute-function

name::
* McsEngl.jsoElement.removeAttribute-function@cptIt,
* McsEngl.ljsoHelt'attribute'removeAttribute()@cptIt,
* McsEngl.ljsremoveAttribute@cptIt,
* McsEngl.ljs'removeAttribute@cptIt,
* McsEngl.ljs'Attribute-Remove@cptIt,

_CODE.LJS:
document.body.removeAttribute("id");

_CODE.LJS: REMOVES-ATTRIBUTE-OF-MANY-ELEMENTS:
var menuItems = tocElDivToc.getElementsByTagName('a');
for(var no=0;no<menuItems.length;no++){
menuItems[no].removeAttribute("class");
}

ljbhml'oHTMLElement (type1) > HTMLElement.prototype > Element.prototype > Node.prototype

name::
* McsEngl.ljbhml'oHTMLElement (type1) > HTMLElement.prototype > Element.prototype > Node.prototype@cptIt,
* McsEngl.ljbhtmlelt@cptIt,
* McsEngl.ljshelement@cptIt,
* McsEngl.ljsHTMLElement-object@cptIt,
* McsEngl.ljsoHTMLElement@cptIt,
* McsEngl.ljs'element@cptIt,
* McsEngl.ljs'elm@cptIt,
* McsEngl.ljs'DomElement@cptIt,
* McsEngl.ljs'Dom-Element@cptIt,
* McsEngl.ljs'HTMLElement@cptIt,
* McsEngl.ljs'code.HTML-ELEMENT@cptIt,
* McsEngl.ljs'elm@cptIt,
* McsEngl.ljs'element-doing@cptIt,
* McsEngl.ljs.ex.element.html@cptIt,
* McsEngl.ljs'html'element-object@cptIt,
* McsEngl.jsoElt@cptIt,
* McsEngl.ljsoHmlElt@cptIt, {2015-10-29}
* McsEngl.ljsoHElt@cptIt, {2014-11-11}
* McsEngl.ljsoHelt@cptIt,
* McsEngl.ljshelt@cptIt,
* McsEngl.ljs'helt@cptIt,

_GENERIC:
typeof HTMLElement
"function"
===
Object.getPrototypeOf(HTMLElement)
function Element()#ql:jselement# { [native code] }
===
* js-node-object#ql:js'html'node_object#

_ADDRESS.WPG:
* http://www.w3schools.com/jsref/dom_obj_all.asp,

_DESCRIPTION:
Definition and Usage
The Element object represents an element in the HTML document.

The Element object can have child nodes of type Element, Text, Comment, CDATASection, ProcessingInstruction, and EntityReference.

The Element object can have attributes, which have the node type Attr.

Note: The Element object can also use the properties and methods of the Node object.
[http://www.w3schools.com/jsref/dom_obj_element.asp]
===
we obtain an element object using getElementById,
===
HTMLElement Object
The collections, properties, methods, and events below can be used on all HTML elements.

jsoHmlElt'attribute

name::
* McsEngl.jsoHmlElt'attribute@cptIt,

_CODE.LJS:
//_GET_ATTRIBUTE:
document.getElementById("idWebpage_path").getAttribute('class')==="classTocExpand"
===
//_REMOVE_ATTRIBUTE:
elmSpan.removeAttribute('class');

jsoHmlElt'attribute'Attr-object

name::
* McsEngl.jsoHmlElt'attribute'Attr-object@cptIt,
* McsEngl.ljs'helt'attribute@cptIt,
* McsEngl.ljs'setAttribute-method@cptIt,

_DESCRIPTION:
The ATTRIBUTE_NODE is not actually part of a tree but listed for historical reasons. In this book I do not provide a chapter on attribute nodes and instead discuss them in the Element node chapter given that attributes nodes are sub-like nodes of element nodes with no particiipation in the actual DOM tree structure. Be aware the ATTRIBUTE_NODE is being depreciated in DOM 4.
[http://domenlightenment.com/#1]
===
Definition and Usage

The Attr object represents an attribute in the HTML document.

An attribute always belongs to an element object.

Note: The Attr object can also use the properties and methods of the Node object.

Browser Support


The Attr object is supported in all major browsers.

Attr Object Properties

The "DOM" column indicates in which DOM Level the property was introduced.

Property  Description  DOM
isId  Returns true if the attribute is of type ID, otherwise it returns false  3
name  Returns the name of the attribute  1
ownerElement  Returns the element this attribute belongs to  2
schemaTypeInfo  Returns the type information of the attribute  3
specified  Returns true if the attribute has been specified, otherwise it returns false  1
value  Sets or returns the value of the attribute  1
[http://www.w3schools.com/jsref/dom_obj_attr.asp]

_CODE.LJS:
elmPpath.setAttribute('title', "© 2010-2013 Kaseluris.Nikos.1959");
===
elmDivSplitter.id = 'idDivSplitter';
===
elmUl.style.display = 'block';

jsoHmlElt'attribute'enumerating

name::
* McsEngl.jsoHmlElt'attribute'enumerating@cptIt,

_CODE.LJS:
<a href='#' title="title" data-foo="dataFoo" class="yes" style="margin:0;" foo="boo"></a>

<script>

var atts = document.querySelector('a').attributes;

for(var i=0; i< atts.length; i++){
 console.log(atts[i].nodeName +'='+ atts[i].nodeValue);
}
[http://domenlightenment.com/#3.5]

jsoHmlElt'attribute'setAttribute()

name::
* McsEngl.jsoHmlElt'attribute'setAttribute()@cptIt,
* McsEngl.ljssetAttribute@cptIt,
* McsEngl.ljs'setAttribute@cptIt,

_DESCRIPTION:
Remember, it's setAttribute(String, String), so if you wanna calculate the value for each Z-index and have it stored as an integer, you'll have to do, for example:
document.getElementById("Example Element").setAttribute("Z-index", ""+Zvalue);
[http://forum.codecall.net/topic/59176-setting-z-index-differently-for-list-items/]

_CODE.LJS: ONE-ELEMENT:
elmPpath.setAttribute('style','white-space:nowrap;overflow:hidden;text-indent:0;margin:20px 0 0 10px;');
====
newlink = document.createElement('a');
newlink.setAttribute('class', 'signature');
newlink.setAttribute('href', 'showSignature(xyz)');

_CODE.LJS: FIRST-ELEMENT-OF-LIST:
tocElDivToc.getElementsByTagName("ul")[0].setAttribute('id','idTocTree');

_CODE.LJS: ALL-ELEMENTS (JQUERY):
$(tocElDivToc).find("ul").attr('id','idTocTree');

jsoHmlElt'attribute.class

name::
* McsEngl.jsoHmlElt'attribute.class@cptIt,
* McsEngl.ljsoHelt'class-attribute@cptIt,

_CODE.LJS: _CODE.JQUERY:
// get reference to DOM element
var el = document.querySelector(".main-content");

//----Adding a class------

/* jQuery: jqo.addClass */
$(el).addClass("someClass");

/* native equivalent */
el.classList.add("someClass");

//----Removing a class-----

/* jQuery: jqo.removeClass */
$(el).removeClass("someClass");

/* native equivalent */
el.classList.remove("someClass");

//----Does it have class---

/* jQuery: jqo.hasClass */
if($(el).hasClass("someClass"))

/* native equivalent */
if(el.classList.contains("someClass"))
[http://www.leebrimelow.com/native-methods-jquery/]

===
elem.className += 'class'

jsoHmlElt'attribute.id

name::
* McsEngl.jsoHmlElt'attribute.id@cptIt,
* McsEngl.ljs'helt'member.id@cptIt,
* McsEngl.ljs'id@cptIt,

_DESCRIPTION:
Sets or returns the id of an element  Yes

jsoHmlElt'attribute.title

name::
* McsEngl.jsoHmlElt'attribute.title@cptIt,
* McsEngl.ljs'helt'member.title@cptIt,
* McsEngl.ljs'title@cptIt,

_DEFINITION:
title  Sets or returns the title attribute of an element  Yes

_CODE.LJS:
Example 1

Return the title attribute of the body element:
<html>
<body id="myid" title="mytitle">

<script type="text/javascript">
x=document.getElementsByTagName('body')[0];
document.write("Body title: " + x.title);
document.write("<br />");
document.write("An alternate way: ");
document.write(document.getElementById('myid').title);
</script>

</body>
</html>

Output:
Body title: mytitle
An alternate way: mytitle

jsoHmlElt'child

name::
* McsEngl.jsoHmlElt'child@cptIt,

_CODE.LJS:
elmSpliterBarDiv.append(elmSpliterBarButonDiv);
===
elmSpliterLeftDiv.insertBefore(elmPpath, elmSpliterLeftDiv.firstChild);
tocTreeLIs[nI].insertBefore(elmSpan, aTag);
===
elmSpan = elmUl.parentNode.firstChild;

_CODE.JQUERY:
mychilds = elmDivSplitter.children(),

jsoHmlElt'insertBefore()

name::
* McsEngl.jsoHmlElt'insertBefore()@cptIt,
* McsEngl.ljsoHelt.insertBefore@cptIt,
* McsEngl.ljs'insertBefore@cptIt,

_ADDRESS.WPG:
* http://www.w3schools.com/jsref/dom_obj_all.asp

_DESCRIPTION:
* Inserts a new child element before an existing child element

* The insertBefore method behaves similarly to the appendChild method, except that you can define before which object to insert the new object. The insertBefore method has two parameter: the child object and the brother object:

fatherObj.insertBefore(childObj, brotherObj)

_CODE.LJS:
elBody.insertBefore(tocElDivToc,elBody.firstChild);

jsoHmlElt'lastChild

name::
* McsEngl.jsoHmlElt'lastChild@cptIt,
* McsEngl.ljs'lastChild@cptIt,

_DESCRIPTION
lastChild  Returns the last child of an element

jsoHmlElt'removeChild()

name::
* McsEngl.jsoHmlElt'removeChild()@cptIt,
* McsEngl.lcpJs'removeChild@cptIt,

_CODE.LJS:
function deleteNode(element){
var elem=document.getElementById(elementId);
while( elem.hasChildNodes() ) {
elem.removeChild( elem.lastChild );
}
}

JavaScript: removeChild HOWTO I experienced a small issue this morning when trying to remove all the children from a <td> using the following:

// cells[i] is a td in a table
var kids = cells[i].childNodes;
for (j=0; j < kids.length; j++) {
cells[j].removeChild(kids[j]);
}

This (for some reason) doesn't work. So, in the interest of helping others and getting picked up by Google, here's the solution (actually found via Google).

while (cells[i].childNodes[0]) {
cells[i].removeChild(cells[i].childNodes[0]);
}

HTH! Posted in The Web at Jun 10 2003, 10:38:38 AM MDT 8 Comments
Comments:

I recall running into this once before, and IIRC it also works if you iterate backwards:
<code>for (j=kids.length; j >= 0; j--) ....</code>
or something like that.

Posted by Lance on June 10, 2003 at 12:20 PM MDT#
thanks! you saved my day!
[http://raibledesigns.com/rd/entry/javascript_removechild_howto]

jsoHmlElt'class

name::
* McsEngl.jsoHmlElt'class@cptIt,

_CODE.LJB:
// check if has class
oLiIn.className.match(/(^| )clsTreeUlCollapsed( |$)/),
document.getElementById("idMetaWebpage_path").getAttribute('class') === 'clsTocExpand')
x.className.indexOf("w3-show") == -1)

// add class
oEltIn.classList.add('clsTabActive');
x.className += " w3-show";

//remove class
document.querySelector('.clsTabActive').classList.remove('clsTabActive');

//set class
oEltDivTab2Content.setAttribute('class', 'clsTabContent');

jsoHmlElt'content

name::
* McsEngl.jsoHmlElt'content@cptIt,

_CODE.LJS:
sHcnt = elm.innerHTML;

_CODE.JQUERY:
* jqo.html:
$('#idPopup').html("");
===
jqelt.html('<span><br />»</span>');

jsoHmlElt.innerText

name::
* McsEngl.jsoHmlElt.innerText@cptIt,
* McsEngl.ljs'innerText@cptIt,
* McsEngl.ljs'textContent@cptIt,
* McsEngl.ljsinnerText@cptIt,

_CODE.LJS:
innerText: function(el) {
return (typeof(el.innerText) != 'undefined') ? el.innerText :
(typeof(el.textContent) != 'undefined') ? el.textContent :
el.innerHTML.replace(/<[^>]+>/g, '');
}

jsoHmlElt'doing.CREATING

name::
* McsEngl.jsoHmlElt'doing.CREATING@cptIt,
* McsEngl.ljsoHelt'creating@cptIt,
* McsEngl.ljs'helt'creating@cptIt,

_CODE.LJS:
elmPpath = document.createElement("p"),

_CODE.JQUERY:
elmSpliterBarDiv = $('<div></div>'),

jsoHmlElt'doing.INSERTING

name::
* McsEngl.jsoHmlElt'doing.INSERTING@cptIt,
* McsEngl.ljsoHelt'inserting@cptIt,
* McsEngl.ljs'helt'inserting@cptIt,

_SPECIFIC:
* inserting element
* inserting html
* inserting text

jsoHmlElt'inserting.ELEMENT.AFTER

name::
* McsEngl.jsoHmlElt'inserting.ELEMENT.AFTER@cptIt,

_CODE.LJS:
function insertAfter(referenceNode, newNode) {
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

_CODE.JQUERY:
eltSpliterBarDiv.insertAfter(eltSpliterLeftDiv);

jsoHmlElt'inserting.ELEMENT.APPEND

name::
* McsEngl.jsoHmlElt'inserting.ELEMENT.APPEND@cptIt,

_CODE.LJS:
* appendChild:
inserts a child-node-object at the end of childs:
document.querySelector('p').appendChild(elementNode);
===
/* CRAPPY native equivalent */
document.body.innerHTML += "<div id='myDiv'><img src='im.gif'/></div>";

/* MUCH BETTER native equivalent */
var frag = document.createDocumentFragment();

var myDiv = document.createElement("div");
myDiv.id = "myDiv";

var im = document.createElement("img");
im.src = "im.gif";

myDiv.appendChild(im);
frag.appendChild(myDiv);

document.body.appendChild(frag);
[http://www.leebrimelow.com/native-methods-jquery/]

_CODE.JQUERY:
/* jQuery */
$(document.body).append("<div id='myDiv'><img src='im.gif'/></div>");

jsoHmlElt'inserting.ELEMENT.BEFORE

name::
* McsEngl.jsoHmlElt'inserting.ELEMENT.BEFORE@cptIt,

_COCE.JS:
* jsinsertBefore:
* lcpJs'insertBefore: inserts a child-node-object before another node-object.
oElt.insertBefore(oEltNew, oEltOld)
===
oEltSpliterLeftDiv.insertBefore(oEltPPath, oEltSpliterLeftDiv.firstChild);
===
var text1 = document.createTextNode('1');
var li = document.createElement('li');
li.appendChild(text1);
//select the ul in the document
var ul = document.querySelector('ul');
ul.insertBefore(li,ul.firstChild);
[http://domenlightenment.com/#1.8]

jsoHmlElt'inserting.HTML

name::
* McsEngl.jsoHmlElt'inserting.HTML@cptIt,

ljb'insertAdjacentHTML

name::
* McsEngl.ljb'insertAdjacentHTML@cptIt,

_DESCRIPTION:
Avaliable to all modern browser except Firefox is insertAdjacentElement() and insertAdjacentText()
[http://domenlightenment.com/#1.8]

_CODE.LJS:
<!DOCTYPE html>
<html lang="en">
<body><i id="elm">how</i>

<script>

var elm = document.getElementById('elm');

elm.insertAdjacentHTML('beforebegin', '<span>Hey-</span>');
elm.insertAdjacentHTML('afterbegin', '<span>dude-</span>');
elm.insertAdjacentHTML('beforeend', '<span>-are</span>');
elm.insertAdjacentHTML('afterend', '<span>-you?</span>');

console.log(document.body.innerHTML);
/* logs
<span>Hey-</span><i id="A"><span>dude-</span>how<span>-are</span></i><span>-you?</span>
*/

</script>
</body>
</html>
[http://domenlightenment.com/#1.8]

jsoHmlElt'doing.REPLACING

name::
* McsEngl.jsoHmlElt'doing.REPLACING@cptIt,
* McsEngl.ljs'helt'replacing@cptIt,

_SPECIFIC:
* replacing-content-of-element
* replacing-element

jsoHmlElt'doing'replacing.CONTENT

name::
* McsEngl.jsoHmlElt'doing'replacing.CONTENT@cptIt,

_CODE.LJS:
//create a text node and update the div#C with the text node
document.getElementById('C').textContent = 'dude';
[http://domenlightenment.com/#1.8]

jsoHmlElt'innerHTML

name::
* McsEngl.jsoHmlElt'innerHTML@cptIt,
* McsEngl.ljs'innerHTML@cptIt,
* McsEngl.ljsalgo.Set-Text-In-Element@cptIt,
* McsEngl.ljs'Set-Text-In-Element@cptIt,

_DESCRIPTION:
innerHTML invokes a heavy & expensive HTML parser where as text node generation is trivial thus use the innerHTML & friends sparingly
[http://domenlightenment.com/#1.8]
===
Changing HTML using DIV

The HTML contained within a set of <DIV> tags can be dynamically changed.

For example:

<div id="DivExample">
Hello World
</div>

all the HTML enclosed between the <DIV> and </DIV> can be replaced dynamically using the Javascript:

<script type="text/javascript">
document.getElementById('DivExample').innerHTML="Good Afternoon";
</script>

In this way it can be changed to any valid html combination.
[http://www.cryer.co.uk/resources/javascript/script4.htm]

lcpJs'ex.innerHTML:
 var elExpAll=document.createElement("a");
 elExpAll.innerHTML="ExpandAll";
===
<p id="id1">hello my name is <em>Tim</em>!</p>
<input type="button" value="get Value"
onclick="alert(document.getElementById('id1').innerHTML)" />
=>alert: hello my name is <em>Tim</em>!

jsoHmlElt'doing.replacing.ELEMENT

name::
* McsEngl.jsoHmlElt'doing.replacing.ELEMENT@cptIt,

jsoHmlElt'outerHTML

name::
* McsEngl.jsoHmlElt'outerHTML@cptIt,
* McsEngl.jsouterHTML@cptIt,
* McsEngl.ljs'outerHTML@cptIt,
* McsEngl.ljs'ex.outerHTML@cptIt,

_DESCRIPTION:
- gives the-html of en-element including opening and closing tags.
- Replaces an element with string-element we provide.

_CODE.LJS:
> document.getElementById('id72').outerHTML
"<div id="id72" class="clsHover clsBtn clsFirst" tabindex="-1" role="button" aria-labeledby="id72" aria-label="Bold">
<button role="presentation" type="button" tabindex="-1">
<i class="clsIco clsI-bold"></i>
</button>
</div>"
> document.getElementById('id72').innerHTML
"<button role="presentation" type="button" tabindex="-1">
<i class="clsIco clsI-bold"></i>
</button>"
===
// HTML:
// <div id="d"><p>Content</p><p>Further Elaborated</p></div>

d = document.getElementById("d");
dump(d.outerHTML);

// the string '<div id="d"><p>Content</p><p>Further Elaborated</p></div>'
// is dumped to the console window
[https://developer.mozilla.org/en-US/docs/Web/API/Element.outerHTML]
===
//create a div element and text node to replace <span id="B"></div> (notice span#B is replaced)
document.getElementById('B').outerHTML = '<div id="B" class="new">Whats Shaking</div>'
[http://domenlightenment.com/#1.8]
===
<p id="id1">hello my name is <em>Tim</em>!</p>
<input type="button" value="get Value"
onclick="alert(document.getElementById('id1').outerHTML)" />
=>alert: <p id="id1">hello my name is <em>Tim</em>!</p>

jsoHmlElt'doing.SEARCHING

name::
* McsEngl.jsoHmlElt'doing.SEARCHING@cptIt,
* McsEngl.ljsalgo.Find-Element@cptIt,
* McsEngl.ljs'elm'finding@cptIt,
* McsEngl.ljs'helt'searching@cptIt,
* McsEngl.ljs'Find-Element@cptIt,
* McsEngl.ljs'ex.Get-Element@cptIt,
* McsEngl.ljs'Get-Element@cptIt,

_CODE.LJS:
The most common methods for getting a reference to a single element node are:
querySelector()
getElementById()
[http://domenlightenment.com/#4.1]

===
//all of the methods below create/select the same list of <li> elements from the DOM
console.log(document.querySelectorAll('li'));
console.log(document.getElementsByTagName('li'));
console.log(document.getElementsByClassName('liClass'));
[http://domenlightenment.com/#4.2]

===
ARRAY-OF-CHILD-OF-PARENT:
var menuItems = document.getElementById(treeId).getElementsByTagName('LI');
FIND-ELEMENTS-INSIDE-OTHER:
var listone = document.getElementById("listone").getElementsByTagName("li");

jsoHmlElt'searching.CLASS

name::
* McsEngl.jsoHmlElt'searching.CLASS@cptIt,

_CODE.LJS:
_CLASS:
document.getElementsByClassName('test');
document.getElementsByClassName('red test');
===
/* native equivalent */
document.querySelectorAll(".my-class")

/* FASTER native equivalent */
document.getElementsByClassName("my-class")

_CODE.JQUERY:
$(".my-class")

jsoHmlElt'searching.CSS-SELECTOR

name::
* McsEngl.jsoHmlElt'searching.CSS-SELECTOR@cptIt,

_CODE.LJS:
/----Get by CSS selector----------
/* native equivalent */
document.querySelectorAll(".my-class li:first-child")

_CODE.JQUERY:
$(".my-class li:first-child")

jsoHmlElt'searching.FIRST

name::
* McsEngl.jsoHmlElt'searching.FIRST@cptIt,

_CODE.LJS:
FIND-FIRST-ELEMENT:
if(tocElDivCntnt.getElementsByTagName("h1")){
tocElDivCntnt.getElementsByTagName("h1")[0].id="h5o-1";
===
/* native equivalent */
document.querySelector(".my-class")

_CODE.JQUERY:
//----Get first by CSS selector----
$(".my-class").get(0)

jsoHmlElt'searching.ID

name::
* McsEngl.jsoHmlElt'searching.ID@cptIt,

_CODE.LJS:
document.getElementById("idWebpage_path")
===
var elem = document.getElementById("para1");

jsoHmlElt'searching.JQUERY

name::
* McsEngl.jsoHmlElt'searching.JQUERY@cptIt,

_CODE.JQUERY:
//----Get all divs on page---------
$("div")

//----Get all by CSS class---------
$(".my-class")

//----Get first by CSS selector----
$(".my-class").get(0)

//----Get first by CSS selector----
$(".my-class").get(0)

jsoHmlElt'searching.LAST

name::
* McsEngl.jsoHmlElt'searching.LAST@cptIt,

jsoHmlElt'searching.TAG-NAME

name::
* McsEngl.jsoHmlElt'searching.TAG-NAME@cptIt,

_CODE.LJS:
aTag = tocTreeLIs[nI].getElementsByTagName('a')[0];

_CODE.JQUERY:
/* jQuery */
$("div")
===
$(elmSpliterLeftDiv).find("a").each(
function () {})

jsoHmlElt'event

name::
* McsEngl.jsoHmlElt'event@cptIt,

_DESCRIPTION:
HTMLElement Object Events:
Event      Description          W3C
lcpJs'onblur    When an element loses focus      Yes
lcpJs'onclick    When a mouseclick on an element    Yes
lcpJs'ondblclick    When a mouse-doubleclick on an element  Yes
lcpJs'onfocus    When an element gets focus      Yes
lcpJs'onkeydown    When a keyboard key is pressed    Yes
lcpJs'onkeypress    When a keyboard key is pressed or held down  Yes
lcpJs'onkeyup                Yes
lcpJs'onmousedown              Yes
lcpJs'onmousemove              Yes
lcpJs'onmouseout                Yes
lcpJs'onmouseover                Yes
lcpJs'onmouseup                Yes
lcpJs'onresize                Yes

jsoHmlElt'event.clicking

name::
* McsEngl.jsoHmlElt'event.clicking@cptIt,
* McsEngl.lcpJs'ex.ELEMENT-CLICKED@cptIt,
* McsEngl.lcpJs'ex.MouseClickOnElement@cptIt,

_CODE.LJS:
<html>
<head>
<script type="text/javascript">
function whichElement(e)
{
var targ
if (!e) var e = window.event
if (e.target) targ = e.target
else if (e.srcElement) targ = e.srcElement
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode
var tname
tname=targ.tagName
alert("You clicked on a " + tname + " element.")
}
</script>
</head>

<body onmousedown="whichElement(event)">

<h2>This is a header</h2>
<p>This is a paragraph</p>
<img border="0" src="ball16.gif" alt="Ball">

</body>
</html>
[http://www.w3schools.com/jsref/event_onmousedown.asp]

jsoHmlElt'HTMLElement-function

name::
* McsEngl.jsoHmlElt'HTMLElement-function@cptIt,
* McsEngl.ljsf.HTMLElement@cptIt,
* McsEngl.ljsfHTMLElement@cptIt,

_GENERIC:
typeof HTMLElement
"function"

jsoHmlElt'HTMLElement.prototype > Element.prototype#ql:jselement.prototype# > Node.prototype#ql:jsnode.prototype# > EventTarget.prototype#ql:jseventtarget.prototype# > Object.prototype-#ql:jsobject.prototype#

name::
* McsEngl.jsoHmlElt'HTMLElement.prototype > Element.prototype@cptIt,
* McsEngl.HTMLElement.prototype@cptIt,
* McsEngl.jsHTMLElement.prototype@cptIt,
* McsEngl.ljbHTMLElement.prototype@cptIt,

jsHTMLElement.prototype.CHROME:
> Object.getOwnPropertyNames(HTMLElement.prototype).sort()
["jsaccessKey", "ljsblur", "ljsclick", "ljsconstructor", "ljscontentEditable", "ljsdataset", "ljsdir", "ljsdraggable", "ljsfocus", "ljshidden", "ljsinnerText", "ljsisContentEditable", "ljslang", "ljsoffsetHeight", "ljsoffsetLeft", "ljsoffsetParent", "ljsoffsetTop", "ljsoffsetWidth", "ljsonabort", "ljsonautocomplete", "ljsonautocompleteerror", "ljsonblur", "ljsoncancel", "ljsoncanplay", "ljsoncanplaythrough", "ljsonchange", "ljsonclick", "ljsonclose", "ljsoncontextmenu", "ljsoncuechange", "ljsondblclick", "ljsondrag", "ljsondragend", "ljsondragenter", "ljsondragleave", "ljsondragover", "ljsondragstart", "ljsondrop", "ljsondurationchange", "ljsonemptied", "ljsonended", "ljsonerror", "ljsonfocus", "ljsoninput", "ljsoninvalid", "ljsonkeydown", "ljsonkeypress", "ljsonkeyup", "ljsonload", "ljsonloadeddata", "ljsonloadedmetadata", "ljsonloadstart", "ljsonmousedown", "ljsonmouseenter", "ljsonmouseleave", "ljsonmousemove", "ljsonmouseout", "ljsonmouseover", "ljsonmouseup", "ljsonmousewheel", "ljsonpause", "ljsonplay", "ljsonplaying", "ljsonprogress", "ljsonratechange", "ljsonreset", "ljsonresize", "ljsonscroll", "ljsonseeked", "ljsonseeking", "ljsonselect", "ljsonshow", "ljsonstalled", "ljsonsubmit", "ljsonsuspend", "ljsontimeupdate", "ljsontoggle", "ljsonvolumechange", "ljsonwaiting", "ljsouterText", "ljsspellcheck", "ljsstyle", "ljstabIndex", "ljstitle", "ljstranslate", "ljswebkitdropzone"]

jsHTMLElement.prototype.FF:
> Object.getOwnPropertyNames(HTMLElement.prototype).sort()
["accessKey", "ljsaccessKeyLabel", "ljsblur", "ljsclick", "ljsconstructor", "ljscontentEditable", "ljscontextMenu", "ljsdataset", "ljsdir", "ljsdraggable", "ljsfocus", "ljshidden", "ljsisContentEditable", "ljsitemId", "ljsitemProp", "ljsitemRef", "ljsitemScope", "ljsitemType", "ljsitemValue", "ljslang", "ljsoffsetHeight", "ljsoffsetLeft", "ljsoffsetParent", "ljsoffsetTop", "ljsoffsetWidth", "ljsonabort", "ljsonblur", "ljsoncanplay", "ljsoncanplaythrough", "ljsonchange", "ljsonclick", "ljsoncontextmenu", "ljsoncopy", "ljsoncut", "ljsondblclick", "ljsondrag", "ljsondragend", "ljsondragenter", "ljsondragleave", "ljsondragover", "ljsondragstart", "ljsondrop", "ljsondurationchange", "ljsonemptied", "ljsonended", "ljsonerror", "ljsonfocus", "ljsoninput", "ljsoninvalid", "ljsonkeydown", "ljsonkeypress", "ljsonkeyup", "ljsonload", "ljsonloadeddata", "ljsonloadedmetadata", "ljsonloadstart", "ljsonmousedown", "ljsonmouseenter", "ljsonmouseleave", "ljsonmousemove", "ljsonmouseout", "ljsonmouseover", "ljsonmouseup", "ljsonmozfullscreenchange", "ljsonmozfullscreenerror", "ljsonmozpointerlockchange", "ljsonmozpointerlockerror", "ljsonpaste", "ljsonpause", "ljsonplay", "ljsonplaying", "ljsonprogress", "ljsonratechange", "ljsonreset", "ljsonresize", "ljsonscroll", "ljsonseeked", "ljsonseeking", "ljsonselect", "ljsonshow", "ljsonstalled", "ljsonsubmit", "ljsonsuspend", "ljsontimeupdate", "ljsonvolumechange", "ljsonwaiting", "ljsproperties", "ljsspellcheck", "ljsstyle", "ljstabIndex", "ljstitle"]

jsHTMLElement.prototype.accessKey

name::
* McsEngl.jsHTMLElement.prototype.accessKey@cptIt,
* McsEngl.jsaccessKey@cptIt,

jsHTMLElement.prototype.blur-function

name::
* McsEngl.jsHTMLElement.prototype.blur-function@cptIt,
* McsEngl.jsblur@cptIt,

_DESCRIPTION:
The HTMLElement.blur() method removes keyboard focus from the current element.
[https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/blur]

jsHTMLElement.prototype.

name::
* McsEngl.jsHTMLElement.prototype.@cptIt,
* McsEngl.js@cptIt,

click", "constructor", "contentEditable", "dataset", "dir", "draggable",

jsHTMLElement.prototype.contentEditable string

name::
* McsEngl.jsHTMLElement.prototype.contentEditable string@cptIt,
* McsEngl.jscontentEditable@cptIt,
* McsEngl.ljscontentEditable@cptIt,

_DESCRIPTION:
The HTMLElement.contentEditable property is used to indicate whether or not the element is editable. This enumerated attribute can have the following values:
"true" indicates that the element is contenteditable.
"false" indicates that the element cannot be edited.
"inherit" indicates that the element inherits its parent's editable status.
You can use the HTMLElement.isContentEditable property to test the computed Boolean value of this property.
[https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/contentEditable]

jsHTMLElement.prototype.elementFromPoint Function

name::
* McsEngl.jsHTMLElement.prototype.elementFromPoint Function@cptIt,
* McsEngl.ljselementFromPoint@cptIt,
* McsEngl.ljs'elementFromPoint@cptIt,

_CODE.LJS:
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div#id1{height:50px;width:50px;background-color:red;
position:absolute;top:50px;left:50px;}
div#id2{height:50px;width:50px;background-color:blue;
position:absolute;top:70px;left:70px;}
</style>
</head>
<body>

<div id="id1"></div>
<div id="id2"></div>

<script>

console.log(document.elementFromPoint(70,70)); //logs <div id="id2">

</script>
</body>
</html>
[http://domenlightenment.com/#5.6]

jsHTMLElement.prototype.getBoundingClientRect Function

name::
* McsEngl.jsHTMLElement.prototype.getBoundingClientRect Function@cptIt,
* McsEngl.jsgetBoundingClientRect@cptIt,
* McsEngl.ljs'getBoundingClientRect@cptIt,

_CODE.LJS:
<!DOCTYPE html>
<html lang="en">
<head>
<style>
body{margin:0;}
div{height:50px;width:50px;background-color:red;border:10px solid gray;margin:100px;}
</style>
</head>
<body>

<div></div>

<script>

var divEdges = document.querySelector('div').getBoundingClientRect();

console.log(divEdges.top, divEdges.right, divEdges.bottom, divEdges.left); //logs '100 170 170 100'
//170 = 100margin+10border+50width+10border
</script>
</body>
</html>
[http://domenlightenment.com/#5.1]

jsHTMLElement.prototype.normalize Function

name::
* McsEngl.jsHTMLElement.prototype.normalize Function@cptIt,
* McsEngl.ljsnormalize@cptIt,
* McsEngl.ljs'normalize@cptIt,

_DESCRIPTION:
Sibling Text nodes are typically only encountered when text is programaticly added to the DOM. To eliminate sibling Text nodes that contain no Element nodes we can use normalize(). This will concatenate sibling text nodes in the DOM into a single Text node. In the code below I create sibling text, append it to the DOM, then normalize it.

live code: http://jsfiddle.net/domenlightenment/LG9WR
<!DOCTYPE html>
<html lang="en">
<body>
<div></div>
<script>

var pElementNode = document.createElement('p');
var textNodeHi = document.createTextNode('Hi');
var textNodeCody = document.createTextNode('Cody');

pElementNode.appendChild(textNodeHi);
pElementNode.appendChild(textNodeCody);

document.querySelector('div').appendChild(pElementNode);

console.log(document.querySelector('p').childNodes.length); //logs 2

document.querySelector('div').normalize(); //combine our sibling text nodes

console.log(document.querySelector('p').childNodes.length); //logs 1

</script>
</body>
</html>
[http://domenlightenment.com/#7.10]

jsHTMLElement.prototype.offsetHeight Number

name::
* McsEngl.jsHTMLElement.prototype.offsetHeight Number@cptIt,
* McsEngl.ljsoffsetHeight@cptIt,
* McsEngl.ljs'offsetHeight@cptIt,

_CODE.LJS:
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{height:30px;width:30px;background-color:red;
border:10px solid gray;padding:20px;}
</style>
</head>
<body>

<div></div>

<script>

var div = document.querySelector('div').getBoundingClientRect();

console.log(div.height, div.width); //logs 90 90
//90= 10border + 20padding + 30content + 20padding + 10border = 90
console.log(document.querySelector('div').offsetHeight);//90px

</script>
</body>
</html>
[http://domenlightenment.com/#5.4]

jsHTMLElement.prototype.offsetLeft Number

name::
* McsEngl.jsHTMLElement.prototype.offsetLeft Number@cptIt,
* McsEngl.ljsoffsetLeft@cptIt,
* McsEngl.ljs'offsetLeft@cptIt,

_CODE.LJS:
<!DOCTYPE html>
<html lang="en">
<head>
<style>
body{margin:0;}
#blue{height:100px;width:200px;background-color:blue;
border:10px solid gray; padding:50px;margin:20px;}
#red{height:50px;width:50px;background-color:red;
border:10px solid gray;}
</style>
</head>
<body>

<div id="blue"><div id="red"></div></div>

<script>

var div = document.querySelector('#red');

console.log(div.offsetLeft); //logs 70 = 20margin+50padding+10border
console.log(div.offsetTop); //logs 70
console.log(div.offsetParent); //logs <body>
</script>
[http://domenlightenment.com/#5.1]

jsHTMLElement.prototype.offsetParent HTMLElement

name::
* McsEngl.jsHTMLElement.prototype.offsetParent HTMLElement@cptIt,
* McsEngl.ljsoffsetParent@cptIt,
* McsEngl.ljs'offsetParent@cptIt,

_DESCRIPTION:
Returns a reference to the closest ancestor element in the DOM hierarchy from which the position of the current element is calculated.
Note that the offsetParent element is not always the same as the parentElement in the document hierarchy. If the position style property of an element is set to 'absolute', 'relative' or 'static', then the element is the offsetParent of its child elements.
Use the offsetLeft and offsetTop properties to retrieve the position of the top-left corner of an object relative to the top-left corner of its offset parent object.
[http://help.dottoro.com/ljetdvkl.php]

_CODE.LJS:
> toString.call(document.getElementById('id99').offsetParent)
"[object HTMLDivElement]"
===
<!DOCTYPE html>
<html lang="en">
<head>
<style>
body{margin:0;}
#blue{height:100px;width:200px;background-color:blue;
border:10px solid gray; padding:50px;margin:20px;}
#red{height:50px;width:50px;background-color:red;
border:10px solid gray;}
</style>
</head>
<body>

<div id="blue"><div id="red"></div></div>

<script>

var div = document.querySelector('#red');

console.log(div.offsetLeft); //logs 70 = 20margin+50padding+10border
console.log(div.offsetTop); //logs 70
console.log(div.offsetParent); //logs <body>
</script>
...
IF div#blue 'position:absolute;'
THEN offsetParent = div#blue
[http://domenlightenment.com/#5.1]

jsHTMLElement.prototype.offsetTop Number

name::
* McsEngl.jsHTMLElement.prototype.offsetTop Number@cptIt,
* McsEngl.ljsoffsetTop@cptIt,
* McsEngl.ljs'offsetTop@cptIt,

_CODE.LJS:
<!DOCTYPE html>
<html lang="en">
<head>
<style>
body{margin:0;}
#blue{height:100px;width:200px;background-color:blue;
border:10px solid gray; padding:50px;margin:20px;}
#red{height:50px;width:50px;background-color:red;
border:10px solid gray;}
</style>
</head>
<body>

<div id="blue"><div id="red"></div></div>

<script>

var div = document.querySelector('#red');

console.log(div.offsetLeft); //logs 70 = 20margin+50padding+10border
console.log(div.offsetTop); //logs 70
console.log(div.offsetParent); //logs <body>
</script>
[http://domenlightenment.com/#5.1]

jsHTMLElement.prototype.offsetWidth Number

name::
* McsEngl.jsHTMLElement.prototype.offsetWidth Number@cptIt,
* McsEngl.ljsoffsetWidth@cptIt,
* McsEngl.ljs'offsetWidth@cptIt,

_CODE.LJS:
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{height:30px;width:30px;background-color:red;
border:10px solid gray;padding:20px;}
</style>
</head>
<body>

<div></div>

<script>

var div = document.querySelector('div').getBoundingClientRect();

console.log(div.height, div.width); //logs 90 90
//90= 10border + 20padding + 30content + 20padding + 10border = 90
console.log(document.querySelector('div').offsetWidth);//90px

</script>
</body>
</html>
[http://domenlightenment.com/#5.4]

jsHTMLElement.prototype.querySelector Function

name::
* McsEngl.jsHTMLElement.prototype.querySelector Function@cptIt,
* McsEngl.ljsquerySelector@cptIt,

_CODE.LJS:
$("body div#firstElem")
===
document.querySelector("body div#firstElem")
[http://subinsb.com/jquery-to-javascript]

jsHTMLElement.prototype.scrollIntoView Function

name::
* McsEngl.jsHTMLElement.prototype.scrollIntoView Function@cptIt,
* McsEngl.ljsscrollIntoView@cptIt,
* McsEngl.ljs'scrollIntoView@cptIt,

_CODE.LJS:
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{height:130px;width:130px; overflow:auto;}
p{background-color:red;}
</style>
</head>
<body>

<div>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
</div>

<script>

//select <p>5</p> and scroll that element into view, I pass children '4' because its a zero index array-like structure
document.querySelector('div').children[4].scrollIntoView(true);

</script>
</body>
</html>

jsoHelt.scrollIntoViewIfNeeded:
//only in chrome.
//in firefox 'scrollIntoView' works like 'scrollIntoViewIfNeeded'
if (oElt.scrollIntoViewIfNeeded) {
oElt.scrollIntoViewIfNeeded();
} else {
oElt.scrollIntoView();
}

jsHTMLElement.prototype.setAttribute Function

name::
* McsEngl.jsHTMLElement.prototype.setAttribute Function@cptIt,
* McsEngl.ljssetAttribute@cptIt,
* McsEngl.ljs'setAttribute@cptIt,

_CODE.LJS:
div.setAttribute('id','bar');
[http://domenlightenment.com/#6.5]

jsHTMLElement.prototype.tagName String

name::
* McsEngl.jsHTMLElement.prototype.tagName String@cptIt,
* McsEngl.ljstagName@cptIt,
* McsEngl.ljs'tagName@cptIt,

_DESCRIPTION:
lcpJs'tagName  Returns the tagname of an element as a string (in uppercase)  Yes
===
Using the tagName property we can access the name of an element. The tagName property returns the same value that using nodeName would return. Both return the value in uppercase regardless of the case in the source HTML document.
[http://domenlightenment.com/#3.4]

jsoHmlElt'member (property)

name::
* McsEngl.jsoHmlElt'member (property)@cptIt,
* McsEngl.ljsoHelt'member@cptIt,
* McsEngl.ljs'helt'member@cptIt,
* McsEngl.ljs'helt'property@cptIt,

=== _NOTES:
===
like document, 'element' IS an html-element.
[hmnSngo.2013-10-22]

jsoHTMLElement.MEMBER.FIREFOX: 2014-12-07:
> Object.getOwnPropertyNames(HTMLElement.prototype).sort()
* jsoHTMLElement.accessKey, accessKey,
* jsoHTMLElement.accessKeyLabel, accessKeyLabel,
* jsoHTMLElement.blur, blur,
* jsoHTMLElement.className, className,
* jsoHTMLElement.click, click,
* jsoHTMLElement.constructor, constructor,
* jsoHTMLElement.contentEditable, contentEditable,
* jsoHTMLElement.contextMenu, contextMenu,
* jsoHTMLElement.dataset, dataset,
* jsoHTMLElement.dir, dir,
* jsoHTMLElement.draggable, draggable,
* jsoHTMLElement.focus, focus,
* jsoHTMLElement.hidden, hidden,
* jsoHTMLElement.isContentEditable, isContentEditable,
* jsoHTMLElement.itemId, itemId,
* jsoHTMLElement.itemProp, itemProp,
* jsoHTMLElement.itemRef, itemRef,
* jsoHTMLElement.itemScope, itemScope,
* jsoHTMLElement.itemType, itemType,
* jsoHTMLElement.itemValue, itemValue,
* jsoHTMLElement.lang, lang,
* jsoHTMLElement.offsetHeight, offsetHeight,
* jsoHTMLElement.offsetLeft, offsetLeft,
* jsoHTMLElement.offsetParent, offsetParent,
* jsoHTMLElement.offsetTop, offsetTop,
* jsoHTMLElement.offsetWidth, offsetWidth,
* jsoHTMLElement.onabort, onabort,
* jsoHTMLElement.onblur, onblur,
* jsoHTMLElement.oncanplay, oncanplay,
* jsoHTMLElement.oncanplaythrough, oncanplaythrough,
* jsoHTMLElement.onchange, onchange,
* jsoHTMLElement.onclick, onclick,
* jsoHTMLElement.oncontextmenu, oncontextmenu,
* jsoHTMLElement.oncopy, oncopy,
* jsoHTMLElement.oncut, oncut,
* jsoHTMLElement.ondblclick, ondblclick,
* jsoHTMLElement.ondrag, ondrag,
* jsoHTMLElement.ondragend, ondragend,
* jsoHTMLElement.ondragenter, ondragenter,
* jsoHTMLElement.ondragleave, ondragleave,
* jsoHTMLElement.ondragover, ondragover,
* jsoHTMLElement.ondragstart, ondragstart,
* jsoHTMLElement.ondrop, ondrop,
* jsoHTMLElement.ondurationchange, ondurationchange,
* jsoHTMLElement.onemptied, onemptied,
* jsoHTMLElement.onended, onended,
* jsoHTMLElement.onerror, onerror,
* jsoHTMLElement.onfocus, onfocus,
* jsoHTMLElement.oninput, oninput,
* jsoHTMLElement.oninvalid, oninvalid,
* jsoHTMLElement.onkeydown, onkeydown,
* jsoHTMLElement.onkeypress, onkeypress,
* jsoHTMLElement.onkeyup, onkeyup,
* jsoHTMLElement.onload, onload,
* jsoHTMLElement.onloadeddata, onloadeddata,
* jsoHTMLElement.onloadedmetadata, onloadedmetadata,
* jsoHTMLElement.onloadstart, onloadstart,
* jsoHTMLElement.onmousedown, onmousedown,
* jsoHTMLElement.onmouseenter, onmouseenter,
* jsoHTMLElement.onmouseleave, onmouseleave,
* jsoHTMLElement.onmousemove, onmousemove,
* jsoHTMLElement.onmouseout, onmouseout,
* jsoHTMLElement.onmouseover, onmouseover,
* jsoHTMLElement.onmouseup, onmouseup,
* jsoHTMLElement.onmozfullscreenchange, onmozfullscreenchange,
* jsoHTMLElement.onmozfullscreenerror, onmozfullscreenerror,
* jsoHTMLElement.onmozpointerlockchange, onmozpointerlockchange,
* jsoHTMLElement.onmozpointerlockerror, onmozpointerlockerror,
* jsoHTMLElement.onpaste, onpaste,
* jsoHTMLElement.onpause, onpause,
* jsoHTMLElement.onplay, onplay,
* jsoHTMLElement.onplaying, onplaying,
* jsoHTMLElement.onprogress, onprogress,
* jsoHTMLElement.onratechange, onratechange,
* jsoHTMLElement.onreset, onreset,
* jsoHTMLElement.onscroll, onscroll,
* jsoHTMLElement.onseeked, onseeked,
* jsoHTMLElement.onseeking, onseeking,
* jsoHTMLElement.onselect, onselect,
* jsoHTMLElement.onshow, onshow,
* jsoHTMLElement.onstalled, onstalled,
* jsoHTMLElement.onsubmit, onsubmit,
* jsoHTMLElement.onsuspend, onsuspend,
* jsoHTMLElement.ontimeupdate, ontimeupdate,
* jsoHTMLElement.onvolumechange, onvolumechange,
* jsoHTMLElement.onwaiting, onwaiting,
* jsoHTMLElement.properties, properties,
* jsoHTMLElement.spellcheck, spellcheck,
* jsoHTMLElement.style,
* jsoHTMLElement.tabIndex, tabIndex,
* jsoHTMLElement.title, title,

jsoHmlElt'property.INHERITED

name::
* McsEngl.jsoHmlElt'property.INHERITED@cptIt,

jsoHTMLElement.prototype.CHROME:
Object.getOwnPropertyNames(HTMLElement.prototype).sort()
["click", "constructor"]

jsoHTMLElement.prototype.FIREFOX (211):
> HTMLSpanElement:
OWN: Object.getOwnPropertyNames(document.createElement('span')).sort()
[]
> HTMLSpanElementPrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__).sort()
["constructor"]
> HTMLElementPrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__).sort()
* jsoHelt.accessKey, HTMLElementPrototype, firefox,
* jsoHelt.accessKeyLabel, HTMLElementPrototype, firefox,
* jsoHelt.blur, HTMLElementPrototype, firefox,
* jsoHelt.className, HTMLElementPrototype, firefox,
* jsoHelt.click, HTMLElementPrototype, firefox,
* jsoHelt.constructor, HTMLElementPrototype, firefox,
* jsoHelt.contentEditable, HTMLElementPrototype, firefox,
* jsoHelt.contextMenu, HTMLElementPrototype, firefox,
* jsoHelt.dataset, HTMLElementPrototype, firefox,
* jsoHelt.dir, HTMLElementPrototype, firefox,
* jsoHelt.draggable, HTMLElementPrototype, firefox,
* jsoHelt.focus, HTMLElementPrototype, firefox,
* jsoHelt.hidden, HTMLElementPrototype, firefox,
* jsoHelt.isContentEditable, HTMLElementPrototype, firefox,
* jsoHelt.itemId, HTMLElementPrototype, firefox,
* jsoHelt.itemProp, HTMLElementPrototype, firefox,
* jsoHelt.itemRef, HTMLElementPrototype, firefox,
* jsoHelt.itemScope, HTMLElementPrototype, firefox,
* jsoHelt.itemType, HTMLElementPrototype, firefox,
* jsoHelt.itemValue, HTMLElementPrototype, firefox,
* jsoHelt.lang, HTMLElementPrototype, firefox,
* jsoHelt.offsetHeight, HTMLElementPrototype, firefox,
* jsoHelt.offsetLeft, HTMLElementPrototype, firefox,
* jsoHelt.offsetParent, HTMLElementPrototype, firefox,
* jsoHelt.offsetTop, HTMLElementPrototype, firefox,
* jsoHelt.offsetWidth, HTMLElementPrototype, firefox,
* jsoHelt.onabort, HTMLElementPrototype, firefox,
* jsoHelt.onblur, HTMLElementPrototype, firefox,
* jsoHelt.oncanplay, HTMLElementPrototype, firefox,
* jsoHelt.oncanplaythrough, HTMLElementPrototype, firefox,
* jsoHelt.onchange, HTMLElementPrototype, firefox,
* jsoHelt.onclick, HTMLElementPrototype, firefox,
* jsoHelt.oncontextmenu, HTMLElementPrototype, firefox,
* jsoHelt.oncopy, HTMLElementPrototype, firefox,
* jsoHelt.oncut, HTMLElementPrototype, firefox,
* jsoHelt.ondblclick, HTMLElementPrototype, firefox,
* jsoHelt.ondrag, HTMLElementPrototype, firefox,
* jsoHelt.ondragend, HTMLElementPrototype, firefox,
* jsoHelt.ondragenter, HTMLElementPrototype, firefox,
* jsoHelt.ondragleave, HTMLElementPrototype, firefox,
* jsoHelt.ondragover, HTMLElementPrototype, firefox,
* jsoHelt.ondragstart, HTMLElementPrototype, firefox,
* jsoHelt.ondrop, HTMLElementPrototype, firefox,
* jsoHelt.ondurationchange, HTMLElementPrototype, firefox,
* jsoHelt.onemptied, HTMLElementPrototype, firefox,
* jsoHelt.onended, HTMLElementPrototype, firefox,
* jsoHelt.onerror, HTMLElementPrototype, firefox,
* jsoHelt.onfocus, HTMLElementPrototype, firefox,
* jsoHelt.oninput, HTMLElementPrototype, firefox,
* jsoHelt.oninvalid, HTMLElementPrototype, firefox,
* jsoHelt.onkeydown, HTMLElementPrototype, firefox,
* jsoHelt.onkeypress, HTMLElementPrototype, firefox,
* jsoHelt.onkeyup, HTMLElementPrototype, firefox,
* jsoHelt.onload, HTMLElementPrototype, firefox,
* jsoHelt.onloadeddata, HTMLElementPrototype, firefox,
* jsoHelt.onloadedmetadata, HTMLElementPrototype, firefox,
* jsoHelt.onloadstart, HTMLElementPrototype, firefox,
* jsoHelt.onmousedown, HTMLElementPrototype, firefox,
* jsoHelt.onmouseenter, HTMLElementPrototype, firefox,
* jsoHelt.onmouseleave, HTMLElementPrototype, firefox,
* jsoHelt.onmousemove, HTMLElementPrototype, firefox,
* jsoHelt.onmouseout, HTMLElementPrototype, firefox,
* jsoHelt.onmouseover, HTMLElementPrototype, firefox,
* jsoHelt.onmouseup, HTMLElementPrototype, firefox,
* jsoHelt.onmozfullscreenchange, HTMLElementPrototype, firefox,
* jsoHelt.onmozfullscreenerror, HTMLElementPrototype, firefox,
* jsoHelt.onmozpointerlockchange, HTMLElementPrototype, firefox,
* jsoHelt.onmozpointerlockerror, HTMLElementPrototype, firefox,
* jsoHelt.onpaste, HTMLElementPrototype, firefox,
* jsoHelt.onpause, HTMLElementPrototype, firefox,
* jsoHelt.onplay, HTMLElementPrototype, firefox,
* jsoHelt.onplaying, HTMLElementPrototype, firefox,
* jsoHelt.onprogress, HTMLElementPrototype, firefox,
* jsoHelt.onratechange, HTMLElementPrototype, firefox,
* jsoHelt.onreset, HTMLElementPrototype, firefox,
* jsoHelt.onscroll, HTMLElementPrototype, firefox,
* jsoHelt.onseeked, HTMLElementPrototype, firefox,
* jsoHelt.onseeking, HTMLElementPrototype, firefox,
* jsoHelt.onselect, HTMLElementPrototype, firefox,
* jsoHelt.onshow, HTMLElementPrototype, firefox,
* jsoHelt.onstalled, HTMLElementPrototype, firefox,
* jsoHelt.onsubmit, HTMLElementPrototype, firefox,
* jsoHelt.onsuspend, HTMLElementPrototype, firefox,
* jsoHelt.ontimeupdate, HTMLElementPrototype, firefox,
* jsoHelt.onvolumechange, HTMLElementPrototype, firefox,
* jsoHelt.onwaiting, HTMLElementPrototype, firefox,
* jsoHelt.properties, HTMLElementPrototype, firefox,
* jsoHelt.spellcheck, HTMLElementPrototype, firefox,
* jsoHelt.style, HTMLElementPrototype, firefox,
* jsoHelt.tabIndex, HTMLElementPrototype, firefox,
* jsoHelt.title, HTMLElementPrototype, firefox,

> ElementPrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__).sort()
* jsoHelt.attributes, ElementPrototype, firefox,
* jsoHelt.childElementCount, ElementPrototype, firefox,
* jsoHelt.children, ElementPrototype, firefox,
* jsoHelt.classList, ElementPrototype, firefox,
* jsoHelt.clientHeight, ElementPrototype, firefox,
* jsoHelt.clientLeft, ElementPrototype, firefox,
* jsoHelt.clientTop, ElementPrototype, firefox,
* jsoHelt.clientWidth, ElementPrototype, firefox,
* jsoHelt.constructor, ElementPrototype, firefox,
* jsoHelt.firstElementChild, ElementPrototype, firefox,
* jsoHelt.getAttribute, ElementPrototype, firefox,
* jsoHelt.getAttributeNS, ElementPrototype, firefox,
* jsoHelt.getAttributeNode, ElementPrototype, firefox,
* jsoHelt.getAttributeNodeNS, ElementPrototype, firefox,
* jsoHelt.getBoundingClientRect, ElementPrototype, firefox,
* jsoHelt.getClientRects, ElementPrototype, firefox,
* jsoHelt.getElementsByClassName, ElementPrototype, firefox,
* jsoHelt.getElementsByTagName, ElementPrototype, firefox,
* jsoHelt.getElementsByTagNameNS, ElementPrototype, firefox,
* jsoHelt.hasAttribute, ElementPrototype, firefox,
* jsoHelt.hasAttributeNS, ElementPrototype, firefox,
* jsoHelt.id, ElementPrototype, firefox,
* jsoHelt.innerHTML, ElementPrototype, firefox,
* jsoHelt.insertAdjacentHTML, ElementPrototype, firefox,
* jsoHelt.lastElementChild, ElementPrototype, firefox,
* jsoHelt.mozMatchesSelector, ElementPrototype, firefox,
* jsoHelt.mozRequestFullScreen, ElementPrototype, firefox,
* jsoHelt.mozRequestPointerLock, ElementPrototype, firefox,
* jsoHelt.nextElementSibling, ElementPrototype, firefox,
* jsoHelt.onwheel, ElementPrototype, firefox,
* jsoHelt.outerHTML, ElementPrototype, firefox,
* jsoHelt.previousElementSibling, ElementPrototype, firefox,
* jsoHelt.querySelector, ElementPrototype, firefox,
* jsoHelt.querySelectorAll, ElementPrototype, firefox,
* jsoHelt.releaseCapture, ElementPrototype, firefox,
* jsoHelt.remove, ElementPrototype, firefox,
* jsoHelt.removeAttribute, ElementPrototype, firefox,
* jsoHelt.removeAttributeNS, ElementPrototype, firefox,
* jsoHelt.removeAttributeNode, ElementPrototype, firefox,
* jsoHelt.scrollHeight, ElementPrototype, firefox,
* jsoHelt.scrollIntoView, ElementPrototype, firefox,
* jsoHelt.scrollLeft, ElementPrototype, firefox,
* jsoHelt.scrollLeftMax, ElementPrototype, firefox,
* jsoHelt.scrollTop, ElementPrototype, firefox,
* jsoHelt.scrollTopMax, ElementPrototype, firefox,
* jsoHelt.scrollWidth, ElementPrototype, firefox,
* jsoHelt.setAttribute, ElementPrototype, firefox,
* jsoHelt.setAttributeNS, ElementPrototype, firefox,
* jsoHelt.setAttributeNode, ElementPrototype, firefox,
* jsoHelt.setAttributeNodeNS, ElementPrototype, firefox,
* jsoHelt.setCapture, ElementPrototype, firefox,
* jsoHelt.tagName, ElementPrototype, firefox,

> NodePrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__).sort()
* jsoHelt.ATTRIBUTE_NODE, NodePrototype, firefox,
* jsoHelt.CDATA_SECTION_NODE, NodePrototype, firefox,
* jsoHelt.COMMENT_NODE, NodePrototype, firefox,
* jsoHelt.DOCUMENT_FRAGMENT_NODE, NodePrototype, firefox,
* jsoHelt.DOCUMENT_NODE, NodePrototype, firefox,
* jsoHelt.DOCUMENT_POSITION_CONTAINED_BY, NodePrototype, firefox,
* jsoHelt.DOCUMENT_POSITION_CONTAINS, NodePrototype, firefox,
* jsoHelt.DOCUMENT_POSITION_DISCONNECTED, NodePrototype, firefox,
* jsoHelt.DOCUMENT_POSITION_FOLLOWING, NodePrototype, firefox,
* jsoHelt.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, NodePrototype, firefox,
* jsoHelt.DOCUMENT_POSITION_PRECEDING, NodePrototype, firefox,
* jsoHelt.DOCUMENT_TYPE_NODE, NodePrototype, firefox,
* jsoHelt.ELEMENT_NODE, NodePrototype, firefox,
* jsoHelt.ENTITY_NODE, NodePrototype, firefox,
* jsoHelt.ENTITY_REFERENCE_NODE, NodePrototype, firefox,
* jsoHelt.NOTATION_NODE, NodePrototype, firefox,
* jsoHelt.PROCESSING_INSTRUCTION_NODE, NodePrototype, firefox,
* jsoHelt.TEXT_NODE, NodePrototype, firefox,
* jsoHelt.appendChild, NodePrototype, firefox,
* jsoHelt.baseURI, NodePrototype, firefox,
* jsoHelt.childNodes, NodePrototype, firefox,
* jsoHelt.cloneNode, NodePrototype, firefox,
* jsoHelt.compareDocumentPosition, NodePrototype, firefox,
* jsoHelt.constructor, NodePrototype, firefox,
* jsoHelt.contains, NodePrototype, firefox,
* jsoHelt.firstChild, NodePrototype, firefox,
* jsoHelt.hasAttributes, NodePrototype, firefox,
* jsoHelt.hasChildNodes, NodePrototype, firefox,
* jsoHelt.insertBefore, NodePrototype, firefox,
* jsoHelt.isDefaultNamespace, NodePrototype, firefox,
* jsoHelt.isEqualNode, NodePrototype, firefox,
* jsoHelt.lastChild, NodePrototype, firefox,
* jsoHelt.localName, NodePrototype, firefox,
* jsoHelt.lookupNamespaceURI, NodePrototype, firefox,
* jsoHelt.lookupPrefix, NodePrototype, firefox,
* jsoHelt.namespaceURI, NodePrototype, firefox,
* jsoHelt.nextSibling, NodePrototype, firefox,
* jsoHelt.nodeName, NodePrototype, firefox,
* jsoHelt.nodeType#ql:jsonode.nodetype#, NodePrototype, firefox,
* jsoHelt.nodeValue, NodePrototype, firefox,
* jsoHelt.normalize, NodePrototype, firefox,
* jsoHelt.ownerDocument, NodePrototype, firefox,
* jsoHelt.parentElement, NodePrototype, firefox,
* jsoHelt.parentNode, NodePrototype, firefox,
* jsoHelt.prefix, NodePrototype, firefox,
* jsoHelt.previousSibling, NodePrototype, firefox,
* jsoHelt.removeChild, NodePrototype, firefox,
* jsoHelt.replaceChild, NodePrototype, firefox,
* jsoHelt.textContent, NodePrototype, firefox,

> EventTargetPrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__.__proto__).sort()
* jsoHelt.addEventListener, EventTargetPrototype, firefox,
* jsoHelt.constructor, EventTargetPrototype, firefox,
* jsoHelt.dispatchEvent, EventTargetPrototype, firefox,
* jsoHelt.removeEventListener, EventTargetPrototype, firefox,

> ObjectPrototype:
Object.getOwnPropertyNames(document.createElement('span').__proto__.__proto__.__proto__.__proto__.__proto__.__proto__).sort()
* jsoHelt.__defineGetter__, ObjectPrototype, firefox,
* jsoHelt.__defineSetter__, ObjectPrototype, firefox,
* jsoHelt.__lookupGetter__, ObjectPrototype, firefox,
* jsoHelt.__lookupSetter__, ObjectPrototype, firefox,
* jsoHelt.constructor, ObjectPrototype, firefox,
* jsoHelt.hasOwnProperty, ObjectPrototype, firefox,
* jsoHelt.isPrototypeOf, ObjectPrototype, firefox,
* jsoHelt.propertyIsEnumerable, ObjectPrototype, firefox,
* jsoHelt.toLocaleString, ObjectPrototype, firefox,
* jsoHelt.toSource, ObjectPrototype, firefox,
* jsoHelt.toString, ObjectPrototype, firefox,
* jsoHelt.unwatch, ObjectPrototype, firefox,
* jsoHelt.valueOf, ObjectPrototype, firefox,
* jsoHelt.watch, ObjectPrototype, firefox,

_SPECIFIC.FIREFOX (211):
* jsoHelt.__defineGetter__, Object.prototype, Firefox,
* jsoHelt.__defineSetter__, Object.prototype, Firefox,
* jsoHelt.__lookupGetter__, Object.prototype, Firefox,
* jsoHelt.__lookupSetter__, Object.prototype, Firefox,
* jsoHelt.accessKey, HTMLElement.prototype, Firefox,
* jsoHelt.accessKeyLabel, HTMLElement.prototype, Firefox,
* jsoHelt.addEventListener, EventTarget.prototype, Firefox,
* jsoHelt.appendChild, Node.prototype, Firefox,
* jsoHelt.ATTRIBUTE_NODE, Node.prototype, Firefox,
* jsoHelt.attributes, Element.prototype, Firefox,
* jsoHelt.baseURI, Node.prototype, Firefox,
* jsoHelt.blur, HTMLElement.prototype, Firefox,
* jsoHelt.CDATA_SECTION_NODE, Node.prototype, Firefox,
* jsoHelt.childElementCount, Element.prototype, Firefox,
* jsoHelt.childNodes, Node.prototype, Firefox,
* jsoHelt.children, Element.prototype, Firefox,
* jsoHelt.classList, Element.prototype, Firefox,
* jsoHelt.className, HTMLElement.prototype, Firefox,
* jsoHelt.click, HTMLElement.prototype, Firefox,
* jsoHelt.clientHeight, Element.prototype, Firefox,
* jsoHelt.clientLeft, Element.prototype, Firefox,
* jsoHelt.clientTop, Element.prototype, Firefox,
* jsoHelt.clientWidth, Element.prototype, Firefox,
* jsoHelt.cloneNode, Node.prototype, Firefox,
* jsoHelt.COMMENT_NODE, Node.prototype, Firefox,
* jsoHelt.compareDocumentPosition, Node.prototype, Firefox,
* jsoHelt.constructor, constructor.prototype, Firefox,
* jsoHelt.constructor, Element.prototype, Firefox,
* jsoHelt.constructor, EventTarget.prototype, Firefox,
* jsoHelt.constructor, HTMLElement.prototype, Firefox,
* jsoHelt.constructor, Node.prototype, Firefox,
* jsoHelt.constructor, Object.prototype, Firefox,
* jsoHelt.contains, Node.prototype, Firefox,
* jsoHelt.contentEditable, HTMLElement.prototype, Firefox,
* jsoHelt.contextMenu, HTMLElement.prototype, Firefox,
* jsoHelt.dataset, HTMLElement.prototype, Firefox,
* jsoHelt.dir, HTMLElement.prototype, Firefox,
* jsoHelt.dispatchEvent, EventTarget.prototype, Firefox,
* jsoHelt.DOCUMENT_FRAGMENT_NODE, Node.prototype, Firefox,
* jsoHelt.DOCUMENT_NODE, Node.prototype, Firefox,
* jsoHelt.DOCUMENT_POSITION_CONTAINED_BY, Node.prototype, Firefox,
* jsoHelt.DOCUMENT_POSITION_CONTAINS, Node.prototype, Firefox,
* jsoHelt.DOCUMENT_POSITION_DISCONNECTED, Node.prototype, Firefox,
* jsoHelt.DOCUMENT_POSITION_FOLLOWING, Node.prototype, Firefox,
* jsoHelt.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, Node.prototype, Firefox,
* jsoHelt.DOCUMENT_POSITION_PRECEDING, Node.prototype, Firefox,
* jsoHelt.DOCUMENT_TYPE_NODE, Node.prototype, Firefox,
* jsoHelt.draggable, HTMLElement.prototype, Firefox,
* jsoHelt.ELEMENT_NODE, Node.prototype, Firefox,
* jsoHelt.ENTITY_NODE, Node.prototype, Firefox,
* jsoHelt.ENTITY_REFERENCE_NODE, Node.prototype, Firefox,
* jsoHelt.firstChild, Node.prototype, Firefox,
* jsoHelt.firstElementChild, Element.prototype, Firefox,
* jsoHelt.focus, HTMLElement.prototype, Firefox,
* jsoHelt.getAttribute, Element.prototype, Firefox,
* jsoHelt.getAttributeNode, Element.prototype, Firefox,
* jsoHelt.getAttributeNodeNS, Element.prototype, Firefox,
* jsoHelt.getAttributeNS, Element.prototype, Firefox,
* jsoHelt.getBoundingClientRect, Element.prototype, Firefox,
* jsoHelt.getClientRects, Element.prototype, Firefox,
* jsoHelt.getElementsByClassName, Element.prototype, Firefox,
* jsoHelt.getElementsByTagName, Element.prototype, Firefox,
* jsoHelt.getElementsByTagNameNS, Element.prototype, Firefox,
* jsoHelt.hasAttribute, Element.prototype, Firefox,
* jsoHelt.hasAttributeNS, Element.prototype, Firefox,
* jsoHelt.hasAttributes, Node.prototype, Firefox,
* jsoHelt.hasChildNodes, Node.prototype, Firefox,
* jsoHelt.hasOwnProperty, Object.prototype, Firefox,
* jsoHelt.hidden, HTMLElement.prototype, Firefox,
* jsoHelt.id, Element.prototype, Firefox,
* jsoHelt.innerHTML, Element.prototype, Firefox,
* jsoHelt.insertAdjacentHTML, Element.prototype, Firefox,
* jsoHelt.insertBefore, Node.prototype, Firefox,
* jsoHelt.isContentEditable, HTMLElement.prototype, Firefox,
* jsoHelt.isDefaultNamespace, Node.prototype, Firefox,
* jsoHelt.isEqualNode, Node.prototype, Firefox,
* jsoHelt.isPrototypeOf, Object.prototype, Firefox,
* jsoHelt.itemId, HTMLElement.prototype, Firefox,
* jsoHelt.itemProp, HTMLElement.prototype, Firefox,
* jsoHelt.itemRef, HTMLElement.prototype, Firefox,
* jsoHelt.itemScope, HTMLElement.prototype, Firefox,
* jsoHelt.itemType, HTMLElement.prototype, Firefox,
* jsoHelt.itemValue, HTMLElement.prototype, Firefox,
* jsoHelt.lang, HTMLElement.prototype, Firefox,
* jsoHelt.lastChild, Node.prototype, Firefox,
* jsoHelt.lastElementChild, Element.prototype, Firefox,
* jsoHelt.localName, Node.prototype, Firefox,
* jsoHelt.lookupNamespaceURI, Node.prototype, Firefox,
* jsoHelt.lookupPrefix, Node.prototype, Firefox,
* jsoHelt.mozMatchesSelector, Element.prototype, Firefox,
* jsoHelt.mozRequestFullScreen, Element.prototype, Firefox,
* jsoHelt.mozRequestPointerLock, Element.prototype, Firefox,
* jsoHelt.namespaceURI, Node.prototype, Firefox,
* jsoHelt.nextElementSibling, Element.prototype, Firefox,
* jsoHelt.nextSibling, Node.prototype, Firefox,
* jsoHelt.nodeName, Node.prototype, Firefox, (> document.body.nodeName "BODY")
* jsoHelt.nodeType, Node.prototype, Firefox,
* jsoHelt.nodeValue, Node.prototype, Firefox,
* jsoHelt.normalize, Node.prototype, Firefox,
* jsoHelt.NOTATION_NODE, Node.prototype, Firefox,
* jsoHelt.offsetHeight, HTMLElement.prototype, Firefox,
* jsoHelt.offsetLeft, HTMLElement.prototype, Firefox,
* jsoHelt.offsetParent, HTMLElement.prototype, Firefox,
* jsoHelt.offsetTop, HTMLElement.prototype, Firefox,
* jsoHelt.offsetWidth, HTMLElement.prototype, Firefox,
* jsoHelt.onabort, HTMLElement.prototype, Firefox,
* jsoHelt.onblur, HTMLElement.prototype, Firefox,
* jsoHelt.oncanplay, HTMLElement.prototype, Firefox,
* jsoHelt.oncanplaythrough, HTMLElement.prototype, Firefox,
* jsoHelt.onchange, HTMLElement.prototype, Firefox,
* jsoHelt.onclick, HTMLElement.prototype, Firefox,
* jsoHelt.oncontextmenu, HTMLElement.prototype, Firefox,
* jsoHelt.oncopy, HTMLElement.prototype, Firefox,
* jsoHelt.oncut, HTMLElement.prototype, Firefox,
* jsoHelt.ondblclick, HTMLElement.prototype, Firefox,
* jsoHelt.ondrag, HTMLElement.prototype, Firefox,
* jsoHelt.ondragend, HTMLElement.prototype, Firefox,
* jsoHelt.ondragenter, HTMLElement.prototype, Firefox,
* jsoHelt.ondragleave, HTMLElement.prototype, Firefox,
* jsoHelt.ondragover, HTMLElement.prototype, Firefox,
* jsoHelt.ondragstart, HTMLElement.prototype, Firefox,
* jsoHelt.ondrop, HTMLElement.prototype, Firefox,
* jsoHelt.ondurationchange, HTMLElement.prototype, Firefox,
* jsoHelt.onemptied, HTMLElement.prototype, Firefox,
* jsoHelt.onended, HTMLElement.prototype, Firefox,
* jsoHelt.onerror, HTMLElement.prototype, Firefox,
* jsoHelt.onfocus, HTMLElement.prototype, Firefox,
* jsoHelt.oninput, HTMLElement.prototype, Firefox,
* jsoHelt.oninvalid, HTMLElement.prototype, Firefox,
* jsoHelt.onkeydown, HTMLElement.prototype, Firefox,
* jsoHelt.onkeypress, HTMLElement.prototype, Firefox,
* jsoHelt.onkeyup, HTMLElement.prototype, Firefox,
* jsoHelt.onload, HTMLElement.prototype, Firefox,
* jsoHelt.onloadeddata, HTMLElement.prototype, Firefox,
* jsoHelt.onloadedmetadata, HTMLElement.prototype, Firefox,
* jsoHelt.onloadstart, HTMLElement.prototype, Firefox,
* jsoHelt.onmousedown, HTMLElement.prototype, Firefox,
* jsoHelt.onmouseenter, HTMLElement.prototype, Firefox,
* jsoHelt.onmouseleave, HTMLElement.prototype, Firefox,
* jsoHelt.onmousemove, HTMLElement.prototype, Firefox,
* jsoHelt.onmouseout, HTMLElement.prototype, Firefox,
* jsoHelt.onmouseover, HTMLElement.prototype, Firefox,
* jsoHelt.onmouseup, HTMLElement.prototype, Firefox,
* jsoHelt.onmozfullscreenchange, HTMLElement.prototype, Firefox,
* jsoHelt.onmozfullscreenerror, HTMLElement.prototype, Firefox,
* jsoHelt.onmozpointerlockchange, HTMLElement.prototype, Firefox,
* jsoHelt.onmozpointerlockerror, HTMLElement.prototype, Firefox,
* jsoHelt.onpaste, HTMLElement.prototype, Firefox,
* jsoHelt.onpause, HTMLElement.prototype, Firefox,
* jsoHelt.onplay, HTMLElement.prototype, Firefox,
* jsoHelt.onplaying, HTMLElement.prototype, Firefox,
* jsoHelt.onprogress, HTMLElement.prototype, Firefox,
* jsoHelt.onratechange, HTMLElement.prototype, Firefox,
* jsoHelt.onreset, HTMLElement.prototype, Firefox,
* jsoHelt.onscroll, HTMLElement.prototype, Firefox,
* jsoHelt.onseeked, HTMLElement.prototype, Firefox,
* jsoHelt.onseeking, HTMLElement.prototype, Firefox,
* jsoHelt.onselect, HTMLElement.prototype, Firefox,
* jsoHelt.onshow, HTMLElement.prototype, Firefox,
* jsoHelt.onstalled, HTMLElement.prototype, Firefox,
* jsoHelt.onsubmit, HTMLElement.prototype, Firefox,
* jsoHelt.onsuspend, HTMLElement.prototype, Firefox,
* jsoHelt.ontimeupdate, HTMLElement.prototype, Firefox,
* jsoHelt.onvolumechange, HTMLElement.prototype, Firefox,
* jsoHelt.onwaiting, HTMLElement.prototype, Firefox,
* jsoHelt.onwheel, Element.prototype, Firefox,
* jsoHelt.outerHTML, Element.prototype, Firefox,
* jsoHelt.ownerDocument, Node.prototype, Firefox,
* jsoHelt.parentElement, Node.prototype, Firefox,
* jsoHelt.parentNode, Node.prototype, Firefox,
* jsoHelt.prefix, Node.prototype, Firefox,
* jsoHelt.previousElementSibling, Element.prototype, Firefox,
* jsoHelt.previousSibling, Node.prototype, Firefox,
* jsoHelt.PROCESSING_INSTRUCTION_NODE, Node.prototype, Firefox,
* jsoHelt.properties, HTMLElement.prototype, Firefox,
* jsoHelt.propertyIsEnumerable, Object.prototype, Firefox,
* jsoHelt.querySelector, Element.prototype, Firefox,
* jsoHelt.querySelectorAll, Element.prototype, Firefox,
* jsoHelt.releaseCapture, Element.prototype, Firefox,
* jsoHelt.remove, Element.prototype, Firefox,
* jsoHelt.removeAttribute, Element.prototype, Firefox,
* jsoHelt.removeAttributeNode, Element.prototype, Firefox,
* jsoHelt.removeAttributeNS, Element.prototype, Firefox,
* jsoHelt.removeChild, Node.prototype, Firefox,
* jsoHelt.removeEventListener, EventTarget.prototype, Firefox,
* jsoHelt.replaceChild, Node.prototype, Firefox,
* jsoHelt.scrollHeight, Element.prototype, Firefox,
* jsoHelt.scrollIntoView#ql:jsohelt.scrollintoview#, Element.prototype, Firefox,
* jsoHelt.scrollLeft, Element.prototype, Firefox,
* jsoHelt.scrollLeftMax, Element.prototype, Firefox,
* jsoHelt.scrollTop, Element.prototype, Firefox,
* jsoHelt.scrollTopMax, Element.prototype, Firefox,
* jsoHelt.scrollWidth, Element.prototype, Firefox,
* jsoHelt.setAttribute, Element.prototype, Firefox,
* jsoHelt.setAttributeNode, Element.prototype, Firefox,
* jsoHelt.setAttributeNodeNS, Element.prototype, Firefox,
* jsoHelt.setAttributeNS, Element.prototype, Firefox,
* jsoHelt.setCapture, Element.prototype, Firefox,
* jsoHelt.spellcheck, HTMLElement.prototype, Firefox,
* jsoHelt.style, HTMLElement.prototype, Firefox,
* jsoHelt.tabIndex, HTMLElement.prototype, Firefox,
* jsoHelt.tagName, Element.prototype, Firefox,
* jsoHelt.TEXT_NODE, Node.prototype, Firefox,
* jsoHelt.textContent, Node.prototype, Firefox,
* jsoHelt.title, HTMLElement.prototype, Firefox,
* jsoHelt.toLocaleString, Object.prototype, Firefox,
* jsoHelt.toSource, Object.prototype, Firefox,
* jsoHelt.toString, Object.prototype, Firefox,
* jsoHelt.unwatch, Object.prototype, Firefox,
* jsoHelt.valueOf, Object.prototype, Firefox,
* jsoHelt.watch, Object.prototype, Firefox,

_SPECIFIC:
* ALLOW_KEYBOARD_INPUT, Element.prototype,
* ATTRIBUTE_NODE, Node.prototype,
* CDATA_SECTION_NODE, Node.prototype,
* COMMENT_NODE, Node.prototype,
* DOCUMENT_FRAGMENT_NODE, Node.prototype,
* DOCUMENT_NODE, Node.prototype,
* DOCUMENT_POSITION_CONTAINED_BY, Node.prototype,
* DOCUMENT_POSITION_CONTAINS, Node.prototype,
* DOCUMENT_POSITION_DISCONNECTED, Node.prototype,
* DOCUMENT_POSITION_FOLLOWING, Node.prototype,
* DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, Node.prototype,
* DOCUMENT_POSITION_PRECEDING, Node.prototype,
* DOCUMENT_TYPE_NODE, Node.prototype,
* ELEMENT_NODE, Node.prototype,
* ENTITY_NODE, Node.prototype,
* ENTITY_REFERENCE_NODE, Node.prototype,
* NOTATION_NODE, Node.prototype,
* PROCESSING_INSTRUCTION_NODE, Node.prototype,
* TEXT_NODE, Node.prototype,
* __defineGetter__, Object.prototype,
* __defineSetter__, Object.prototype,
* __lookupGetter__, Object.prototype,
* __lookupSetter__, Object.prototype,
* __proto__, Object.prototype,
* addEventListener, EventTarget.prototype,
* animate, Element.prototype,
* appendChild, Node.prototype,
* blur, Element.prototype,
* click, HTMLElement.prototype,
* cloneNode, Node.prototype,
* compareDocumentPosition, Node.prototype,
* constructor, Element.prototype,
* constructor, EventTarget.prototype,
* constructor, HTMLElement.prototype,
* constructor, Node.prototype,
* constructor, Object.prototype,
* contains, Node.prototype,
* createShadowRoot, Element.prototype,
* dispatchEvent, EventTarget.prototype,
* focus, Element.prototype,
* getAttribute, Element.prototype,
* getAttributeNS, Element.prototype,
* getAttributeNode, Element.prototype,
* getAttributeNodeNS, Element.prototype,
* getBoundingClientRect, Element.prototype,
* getClientRects, Element.prototype,
* getDestinationInsertionPoints, Element.prototype,
* getElementsByClassName, Element.prototype,
* getElementsByTagName, Element.prototype,
* getElementsByTagNameNS, Element.prototype,
* hasAttribute, Element.prototype,
* hasAttributeNS, Element.prototype,
* hasAttributes, Element.prototype,
* hasChildNodes, Node.prototype,
* hasOwnProperty, Object.prototype,
* insertAdjacentElement, Element.prototype,
* insertAdjacentHTML, Element.prototype,
* insertAdjacentText, Element.prototype,
* insertBefore, Node.prototype,
* isDefaultNamespace, Node.prototype,
* isEqualNode, Node.prototype,
* isPrototypeOf, Object.prototype,
* isSameNode, Node.prototype,
* lookupNamespaceURI, Node.prototype,
* lookupPrefix, Node.prototype,
* matches, Element.prototype,
* normalize, Node.prototype,
* propertyIsEnumerable, Object.prototype,
* querySelector, Element.prototype,
* querySelectorAll, Element.prototype,
* remove, Element.prototype,
* removeAttribute, Element.prototype,
* removeAttributeNS, Element.prototype,
* removeAttributeNode, Element.prototype,
* removeChild, Node.prototype,
* removeEventListener, EventTarget.prototype,
* replaceChild, Node.prototype,
* scrollByLines, Element.prototype,
* scrollByPages, Element.prototype,
* scrollIntoView, Element.prototype,
* scrollIntoViewIfNeeded, Element.prototype,
* setAttribute, Element.prototype,
* setAttributeNS, Element.prototype,
* setAttributeNode, Element.prototype,
* setAttributeNodeNS, Element.prototype,
* toLocaleString, Object.prototype,
* toString, Object.prototype,
* valueOf, Object.prototype,
* webkitMatchesSelector, Element.prototype,
* webkitRequestFullScreen, Element.prototype,
* webkitRequestFullscreen, Element.prototype,
* webkitRequestPointerLock, Element.prototype,

jsoHTMLElement.member.CHROME:
> 2015-05-11:
> Object.getOwnPropertyNames(document.createElement('p')).sort()Array[122]
> HTMLParagraphElement.prototype
Object.getOwnPropertyNames(document.createElement('p').__proto__).sort()["constructor"]
> HTMLElement.prototype
Object.getOwnPropertyNames(document.createElement('p').__proto__.__proto__).sort()["click", "constructor"]
> Element.prototype: Object.getOwnPropertyNames(document.createElement('p').__proto__.__proto__.__proto__).sort()["animate", "blur", "closest", "constructor", "createShadowRoot", "focus", "getAttribute", "getAttributeNS", "getAttributeNode", "getAttributeNodeNS", "getBoundingClientRect", "getClientRects", "getDestinationInsertionPoints", "getElementsByClassName", "getElementsByTagName", "getElementsByTagNameNS", "hasAttribute", "hasAttributeNS", "hasAttributes", "id", "innerHTML", "insertAdjacentElement", "insertAdjacentHTML", "insertAdjacentText", "matches", "querySelector", "querySelectorAll", "remove", "removeAttribute", "removeAttributeNS", "removeAttributeNode", "requestPointerLock", "scrollIntoView", "scrollIntoViewIfNeeded", "setAttribute", "setAttributeNS", "setAttributeNode", "setAttributeNodeNS", "webkitMatchesSelector", "webkitRequestFullScreen", "webkitRequestFullscreen"]
> Node.prototype: Object.getOwnPropertyNames(document.createElement('p').__proto__.__proto__.__proto__.__proto__).sort()["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "appendChild", "baseURI", "childNodes", "cloneNode", "compareDocumentPosition", "constructor", "contains", "firstChild", "hasChildNodes", "insertBefore", "isDefaultNamespace", "isEqualNode", "isSameNode", "lastChild", "lookupNamespaceURI", "lookupPrefix", "nextSibling", "normalize", "ownerDocument", "parentNode", "previousSibling", "removeChild", "replaceChild"]Object.getOwnPropertyNames(document.createElement('p').__proto__.__proto__.__proto__.__proto__.__proto__).sort()["addEventListener", "constructor", "dispatchEvent", "removeEventListener"]
> Object.prototype: Object.getOwnPropertyNames(document.createElement('p').__proto__.__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

jsoHmlElt'property.INHERITED.NO

name::
* McsEngl.jsoHmlElt'property.INHERITED.NO@cptIt,

jsoHmlElt'property.METHOD

name::
* McsEngl.jsoHmlElt'property.METHOD@cptIt,

_DESCRIPTION:
HTMLElement Object Methods:
Method    Description  W3C
lcpJs'appendChild()  Adds a new child element to the end of the list of children of the element  Yes
lcpJs'blur()    Removes focus from an element  Yes
lcpJs'click()    Executes a click on an element  Yes
lcpJs'cloneNode()  Clones an element  Yes
lcpJs'focus()    Gives focus to an element  Yes
lcpJs'getAttribute()  Returns the value of an attribute  Yes
lcpJs'getElementsByTagName()  Accesses all elements with a specified tagname  Yes
lcpJs'hasChildNodes()  Returns whether an element has any child elements  Yes
insertBefore()  Inserts a new child element before an existing child element  Yes
lcpJs'item()    Returns an element based on its index within the document tree  Yes
normalize()  Puts all text nodes underneath this element (including attributes) into a "normal" form where only structure (e.g., elements, comments, processing instructions, CDATA sections, and entity references) separates Text nodes, i.e., there are neither adjacent Text nodes nor empty Text nodes  Yes
removeAttribute()  Removes a specified attribute from an element  Yes
removeChild()  Removes a child element  Yes
lcpJs'replaceChild()  Replace a child element  Yes
setAttribute()  Adds a new attribute to an element  Yes
toString()  Converts an element to a string  Yes

jsoHmlElt'property.METHOD.NO

name::
* McsEngl.jsoHmlElt'property.METHOD.NO@cptIt,
* McsEngl.lcpJs'helt'property-nonmethod@cptIt,

_SPECIFIC:
* accessKey
* attributes
* childNodes
* className
* clientHeight
* clientWidth
* dir
* firstChild
* id
* innerHTML
* lang
* lastChild
* namespaceURI
* nextSibling
* nodeName
* nodeType
* nodeValue
* offsetHeight
* offsetWidth
* offsetLeft
* offsetParent
* offsetTop
* ownerDocument
* parentNode
* previousSibling
* scrollHeight
* scrollLeft
* scrollTop
* scrollWidth
* style
* tabIndex
* tagName
* textContent
* title
[http://www.w3schools.com/jsref/dom_obj_all.asp]

HTMLElement Object Collections:
W3C: W3C Standard.
Collection    Description          W3C
lcpJs'attributes[]  Returns an array of the attributes of an element  Yes
childNodes[]  Returns an array of child nodes for an element  Yes

HTMLElement Object Properties:
Property  Description  W3C
lcpJs'accessKey  Sets or returns an accesskey for an element  Yes
lcpJs'className  Sets or returns the class attribute of an element  Yes
lcpJs'clientHeight  Returns the viewable height of the content on a page (not including borders, margins, or scrollbars)  Yes
lcpJs'clientWidth  Returns the viewable width of the content on a page (not including borders, margins, or scrollbars)  Yes
lcpJs'dir  Sets or returns the text direction of an element  Yes
lcpJs'disabled  Sets or returns the disabled attribute of an element  Yes
lcpJs'firstChild  Returns the first child of an element  Yes
lcpJs'height  Sets or returns the height attribute of an element  Yes
lcpJs'id  Sets or returns the id of an element  Yes
innerHTML  Sets or returns the HTML contents (+text) of an element  Yes
lcpJs'lang  Sets or returns the language code for an element  Yes
lastChild  Returns the last child of an element  Yes
lcpJs'length    Yes
lcpJs'nextSibling  Returns the element immediately following an element  Yes
nodeName    Returns the tagname of an element (in uppercase)  Yes
lcpJs'nodeType  Returns the type of the element  Yes
lcpJs'nodeValue  Returns the value of the element  Yes
lcpJs'offsetHeight  Returns the height of an element, including borders and padding if any, but not margins  No
lcpJs'offsetLeft  Returns the horizontal offset position of the current element relative to its offset container  Yes
lcpJs'offsetParent  Returns the offset container of an element  Yes
lcpJs'offsetTop  Returns the vertical offset position of the current element relative to its offset container  Yes
lcpJs'offsetWidth  Returns the width of an element, including borders and padding if any, but not margins  No
lcpJs'ownerDocument  Returns the root element (document object) for an element  Yes
lcpJs'parentNode  Returns the parent node of an element  Yes
lcpJs'previousSibling  Returns the element immediately before an element  Yes
lcpJs'scrollHeight  Returns the entire height of an element (including areas hidden with scrollbars)  Yes
lcpJs'scrollLeft  Returns the distance between the actual left edge of an element and its left edge currently in view  Yes
lcpJs'scrollTop  Returns the distance between the actual top edge of an element and its top edge currently in view  Yes
lcpJs'scrollWidth  Returns the entire width of an element (including areas hidden with scrollbars)  Yes
style  Sets or returns the style attribute of an element  Yes
lcpJs'tabIndex  Sets or returns the tab order of an element  Yes
* tagName  Returns the tagname of an element as a string (in uppercase)  Yes
lcpJs'title  Sets or returns the title attribute of an element  Yes
lcpJs'width  Sets or returns the width attribute of an element  Yes

jsoHmlElt'name

name::
* McsEngl.jsoHmlElt'name@cptIt,

_CODE.LJS:
oElt.tagName === 'UL'

jsoHmlElt'parent

name::
* McsEngl.jsoHmlElt'parent@cptIt,

_CODE.LJS:
oEltParent = oElt.parentNode.parentNode;

jsoHmlElt'size

name::
* McsEngl.jsoHmlElt'size@cptIt,
* McsEngl.ljsoffsetWidth@cptIt,

_DESCRIPTION:
* border+padding+content: offsetWidth##
* padding+content: clientWidth##
===
> document.getElementById('idSpliterLeftDiv').offsetWidth
251
> document.getElementById('idSpliterLeftDiv').clientWidth
233

> $('#idSpliterLeftDiv').width()
251

jqo.offset():
$(document.body).offset()
Object {top: 0, left: 0}
===
document.body.offsetTop
0
document.body.offsetLeft
0

jqo.width():
> $('#idSpliterLeftDiv').width()
251
> document.getElementById('idSpliterLeftDiv').offsetWidth
251
> window.innerWidth

jsoHmlElt.height

name::
* McsEngl.jsoHmlElt.height@cptIt,
* McsEngl.ljsheight@cptIt,

_CODE.LJS:
oEltSpliterLeftDiv.style.height = window.innerHeight + 'px';
===
<div id="MyDiv" style="overflow: hidden">
content<br>content<br>content<br>
content<br>content<br>content<br>
content<br>content<br>content<br>
</div>
<button type="button" onclick="GetHeight();">Get Height</button>
function GetHeight() {
var oDiv = document.getElementById("MyDiv");
var sOriginalOverflow = oDiv.style.overflow;
var sOriginalHeight = oDiv.style.height;
oDiv.style.overflow = "";
oDiv.style.height = "";
var height = oDiv.offsetHeight;
oDiv.style.height = sOriginalHeight;
oDiv.style.overflow = sOriginalOverflow;
alert("Real height is " + height);
}
[http://jsfiddle.net/yahavbr/7Lbz9/]

jsoHmlElt.width

name::
* McsEngl.jsoHmlElt.width@cptIt,
* McsEngl.ljswidth@cptIt,

_CODE.LJS:
oEltSpliterLeftDiv.style.width = window.innerWidth + 'px';

jsoHmlElt'style

name::
* McsEngl.jsoHmlElt'style@cptIt,
* McsEngl.ljs'style@cptIt,
* McsEngl.ljsoHelt'style-code@cptIt,

_ADDRESS.WPG:
* http://www.w3schools.com/jsref/dom_obj_style.asp

_DEFINITION:
The Style object can be accessed from the document or from the elements to which that style is applied.
Syntax for using the Style object properties:
document.getElementById("id").style.property="value"
===
style  Sets or returns the style attribute of an element  Yes(W3C)
===
Definition and Usage
The visibility property sets whether or not an element should be visible.
Syntax
Object.style.visibility=visible|hidden|collapse
Possible Values
Value  Description
visible  Default. The element box is visible
hidden  The element box is not visible, but still affects layout.
collapse  When used on a row or column, the element will not be visible. The space of the invisible element is used by the row or column for other content. Note: collapse is identical to hidden if not used on rows or columns

_CODE.LJS:
Background properties
W3C: W3C Standard.
Property  Description  W3C
* lcpJs'style.background:  Sets or returns all the background properties in one declaration  Yes
* lcpJs'style.backgroundAttachment:  Sets or returns whether a background-image is fixed or scrolls with the page  Yes
* lcpJs'style.backgroundColor:  Sets or returns the background-color of an element  Yes
* lcpJs'style.backgroundImage:  Sets or returns the background-image for an element  Yes
* lcpJs'style.backgroundPosition:  Sets or returns the starting position of a background-image  Yes
* lcpJs'style.backgroundRepeat:  Sets or returns how to repeat (tile) a background-image  Yes

Border/Outline properties
Property  Description  W3C
* lcpJs'style.border:  Sets or returns border-width, border-style, and border-color in one declaration  Yes
* lcpJs'style.borderBottom:  Sets or returns all the borderBottom* properties in one declaration  Yes
* lcpJs'style.borderBottomColor:  Sets or returns the color of the bottom border  Yes
* lcpJs'style.borderBottomStyle:  Sets or returns the style of the bottom border  Yes
* lcpJs'style.borderBottomWidth:  Sets or returns the width of the bottom border  Yes
* lcpJs'style.borderColor:  Sets or returns the color of an element's border (can have up to four values)  Yes
* lcpJs'style.borderLeft:  Sets or returns all the borderLeft* properties in one declaration  Yes
* lcpJs'style.borderLeftColor:  Sets or returns the color of the left border  Yes
* lcpJs'style.borderLeftStyle:  Sets or returns the style of the left border  Yes
* lcpJs'style.borderLeftWidth:  Sets or returns the width of the left border  Yes
* lcpJs'style.borderRight:  Sets or returns all the borderRight* properties in one declaration  Yes
* lcpJs'style.borderRightColor:  Sets or returns the color of the right border  Yes
* lcpJs'style.borderRightStyle:  Sets or returns the style of the right border  Yes
* lcpJs'style.borderRightWidth:  Sets or returns the width of the right border  Yes
* lcpJs'style.borderStyle:  Sets or returns the style of an element's border (can have up to four values)  Yes
* lcpJs'style.borderTop:  Sets or returns all the borderTop* properties in one declaration  Yes
* lcpJs'style.borderTopColor:  Sets or returns the color of the top border  Yes
* lcpJs'style.borderTopStyle:  Sets or returns the style of the top border  Yes
* lcpJs'style.borderTopWidth:  Sets or returns the width of the top border  Yes
* lcpJs'style.borderWidth:  Sets or returns the width of an element's border (can have up to four values)  Yes
* lcpJs'style.outline:  Sets or returns all the outline properties in one declaration  Yes
* lcpJs'style.outlineColor:  Sets or returns the color of the outline around a element  Yes
* lcpJs'style.outlineStyle:  Sets or returns the style of the outline around an element  Yes
* lcpJs'style.outlineWidth:  Sets or returns the width of the outline around an element  Yes

Generated Content Properties
Property  Description  W3C
* lcpJs'style.content:  Sets or returns the generated content before or after the element  Yes
* lcpJs'style.counterIncrement:  Sets or returns the list of counters and increment values  Yes
* lcpJs'style.counterReset:  Sets or returns the list of counters and their initial values  Yes

List properties
Property  Description  W3C
* lcpJs'style.listStyle:  Sets or returns list-style-image, list-style-position, and list-style-type in one declaration  Yes
* lcpJs'style.listStyleImage:  Sets or returns an image as the list-item marker  Yes
* lcpJs'style.listStylePosition:  Sets or returns the position of the list-item marker  Yes
* lcpJs'style.listStyleType:  Sets or returns the list-item marker type  Yes

Margin/Padding properties
Property  Description  W3C
* lcpJs'style.margin:  Sets or returns the margins of an element (can have up to four values)  Yes
* lcpJs'style.marginBottom:  Sets or returns the bottom margin of an element  Yes
* lcpJs'style.marginLeft:  Sets or returns the left margin of an element  Yes
* lcpJs'style.marginRight:  Sets or returns the right margin of an element  Yes
* lcpJs'style.marginTop:  Sets or returns the top margin of an element  Yes
* lcpJs'style.padding:  Sets or returns the padding of an element (can have up to four values)  Yes
* lcpJs'style.paddingBottom:  Sets or returns the bottom padding of an element  Yes
* lcpJs'style.paddingLeft:  Sets or returns the left padding of an element  Yes
* lcpJs'style.paddingRight:  Sets or returns the right padding of an element  Yes
* lcpJs'style.paddingTop:  Sets or returns the top padding of an element  Yes

Misc properties
Property  Description  W3C
* lcpJs'style.cssText:  Sets or returns the contents of a style declaration as a string  Yes

Positioning/Layout properties
Property  Description  W3C
* lcpJs'style.bottom:  Sets or returns the bottom position of a positioned element  Yes
* lcpJs'style.clear:  Sets or returns the position of the element relative to floating objects  Yes
* lcpJs'style.clip:  Sets or returns which part of a positioned element is visible  Yes
* lcpJs'style.cssFloat:  Sets or returns the horizontal alignment of an object  Yes
* lcpJs'style.cursor:  Sets or returns the type of cursor to display for the mouse pointer  Yes
* lcpJs'style.display:  Sets or returns an element's display type  Yes
* lcpJs'style.height:  Sets or returns the height of an element  Yes
* lcpJs'style.left:  Sets or returns the left position of a positioned element  Yes
* lcpJs'style.maxHeight:  Sets or returns the maximum height of an element  Yes
* lcpJs'style.maxWidth:  Sets or returns the maximum width of an element  Yes
* lcpJs'style.minHeight:  Sets or returns the minimum height of an element  Yes
* lcpJs'style.minWidth:  Sets or returns the minimum width of an element  Yes
* lcpJs'style.overflow:  Sets or returns what to do with content that renders outside the element box  Yes
* lcpJs'style.position:  Sets or returns the type of positioning method used for an element (static, relative, absolute or fixed)  Yes
* lcpJs'style.right:  Sets or returns the right position of a positioned element  Yes
* lcpJs'style.top:  Sets or returns the top position of a positioned element  Yes
* lcpJs'style.verticalAlign:  Sets or returns the vertical alignment of the content in an element  Yes
* lcpJs'style.visibility:  Sets or returns whether an element should be visible  Yes
* lcpJs'style.width:  Sets or returns the width of an element  Yes
* lcpJs'style.zIndex:  Sets or returns the stack order of a positioned element  Yes

Printing properties
Property  Description  W3C
* lcpJs'style.orphans:  Sets or returns the minimum number of lines for an element that must be visible at the bottom of a page  Yes
* lcpJs'style.pageBreakAfter:  Sets or returns the page-break behavior after an element  Yes
* lcpJs'style.pageBreakBefore:  Sets or returns the page-break behavior before an element  Yes
* lcpJs'style.pageBreakInside:  Sets or returns the page-break behavior inside an element  Yes
* lcpJs'style.widows:  Sets or returns the minimum number of lines for an element that must be visible at the top of a page  Yes

Table properties
Property  Description  W3C
* lcpJs'style.borderCollapse:  Sets or returns whether the table border should be collapsed into a single border, or not  Yes
* lcpJs'style.borderSpacing:  Sets or returns the space between cells in a table  Yes
* lcpJs'style.captionSide:  Sets or returns the position of the table caption  Yes
* lcpJs'style.emptyCells:  Sets or returns whether to show the border and background of empty cells, or not  Yes
* lcpJs'style.tableLayout:  Sets or returns the way to lay out table cells, rows, and columns  Yes

Text properties
Property  Description  W3C
* lcpJs'style.color:  Sets or returns the color of the text  Yes
* lcpJs'style.direction:  Sets or returns the text direction  Yes
* lcpJs'style.font:  Sets or returns font-style, font-variant, font-weight, font-size, line-height, and font-family in one declaration  Yes
* lcpJs'style.fontFamily:  Sets or returns the font face for text  Yes
* lcpJs'style.fontSize:  Sets or returns the font size of the text  Yes
* lcpJs'style.fontSizeAdjust:  Sets or returns the font aspect value  Yes
* lcpJs'style.fontStyle:  Sets or returns whether the style of the font is normal, italic or oblique  Yes
* lcpJs'style.fontVariant:  Sets or returns whether the font should be displayed in small capital letters  Yes
* lcpJs'style.fontWeight:  Sets or returns the boldness of the font  Yes
* lcpJs'style.letterSpacing:  Sets or returns the space between characters in a text  Yes
* lcpJs'style.lineHeight:  Sets or returns the distance between lines in a text  Yes
* lcpJs'style.quotes:  Sets or returns the type of quotation marks for embedded quotations  Yes
* lcpJs'style.textAlign:  Sets or returns the horizontal alignment of text  Yes
* lcpJs'style.textDecoration:  Sets or returns the decoration of a text  Yes
* lcpJs'style.textIndent:  Sets or returns the indentation of the first line of text  Yes
* lcpJs'style.textShadow:  Sets or returns the shadow effect of a text  Yes
* lcpJs'style.textTransform:  Sets or returns the case of a text  Yes
* lcpJs'style.unicodeBidi:  Sets or returns whether the text should be overridden to support multiple languages in the same document  Yes
* lcpJs'style.whiteSpace:  Sets or returns how to handle tabs, line breaks and whitespace in a text  Yes
* lcpJs'style.wordSpacing:  Sets or returns the spacing between words in a text  Yes
[http://www.w3schools.com/jsref/dom_obj_style.asp]
===
lcpJs'style.fontFamily:
<SPAN STYLE="color:purple" onMouseOver="this.style.fontFamily = 'Courier'"
onMouseOut="this.style.fontFamily = 'Arial'">
Mouse over this paragraph and see how the font family
changes to size Courier. Mouse out and see it changing
to Arial. This is a good way to emphasize the paragraph
currently being read. See how the browser reflows the page
as if this paragraph was originally written with the current
font family.
</SPAN>
===
lcpJs'style.height:
top_helperDiv.style.top = 0;
top_helperDiv.style.height = "" + (y - cursorHeight) + "px";
top_helperDiv.style.visibility = "visible";
===
lcpJs'style.top:
top_helperDiv.style.top = 0;
top_helperDiv.style.height = "" + (y - cursorHeight) + "px";
top_helperDiv.style.visibility = "visible";
===
lcpJs'style.visibility:
* visible:
top_helperDiv.style.top = 0;
top_helperDiv.style.height = "" + (y - cursorHeight) + "px";
top_helperDiv.style.visibility = "visible";

jsoHmlElt.style object > oCSSStyleDeclaration

name::
* McsEngl.jsoHmlElt.style object > oCSSStyleDeclaration@cptIt,
* McsEngl.cssppt'javascript-syntax@cptIt,
* McsEngl.jsstyle@cptIt,
* McsEngl.ljsoHTMLElement.style@cptIt,
* McsEngl.ljsostyleHTMLElement@cptIt,
* McsEngl.ljsstyle@cptIt,
* McsEngl.ljs'style-member@cptIt,
* McsEngl.ljs'css-property@cptIt,

_GENERIC:
> document.createElement('span').style.constructor
function CSSStyleDeclaration()
===
> typeof document.createElement('span').style
"object"
> toString.call(document.body.style)
"[object CSSStyleDeclaration]"
===
> Object.getPrototypeOf(document.createElement('span').style)
CSSStyleDeclaration {}

jsstyle.MEMBER.CHROME:
Object.getOwnPropertyNames(document.createElement('span').style).sort()
Array[369]
* ljsstyle.alignContent, chrome,
* ljsstyle.alignItems, chrome,
* ljsstyle.alignSelf, chrome,
* ljsstyle.alignmentBaseline, chrome,
* ljsstyle.backfaceVisibility, chrome,
* ljsstyle.background, chrome,
* ljsstyle.backgroundAttachment, chrome,
* ljsstyle.backgroundBlendMode, chrome,
* ljsstyle.backgroundClip, chrome,
* ljsstyle.backgroundColor, chrome,
* ljsstyle.backgroundImage, chrome,
* ljsstyle.backgroundOrigin, chrome,
* ljsstyle.backgroundPosition, chrome,
* ljsstyle.backgroundPositionX, chrome,
* ljsstyle.backgroundPositionY, chrome,
* ljsstyle.backgroundRepeat, chrome,
* ljsstyle.backgroundRepeatX, chrome,
* ljsstyle.backgroundRepeatY, chrome,
* ljsstyle.backgroundSize, chrome,
* ljsstyle.baselineShift, chrome,
* ljsstyle.border, chrome,
* ljsstyle.borderBottom, chrome,
* ljsstyle.borderBottomColor, chrome,
* ljsstyle.borderBottomLeftRadius, chrome,
* ljsstyle.borderBottomRightRadius, chrome,
* ljsstyle.borderBottomStyle, chrome,
* ljsstyle.borderBottomWidth, chrome,
* ljsstyle.borderCollapse, chrome,
* ljsstyle.borderColor, chrome,
* ljsstyle.borderImage, chrome,
* ljsstyle.borderImageOutset, chrome,
* ljsstyle.borderImageRepeat, chrome,
* ljsstyle.borderImageSlice, chrome,
* ljsstyle.borderImageSource, chrome,
* ljsstyle.borderImageWidth, chrome,
* ljsstyle.borderLeft, chrome,
* ljsstyle.borderLeftColor, chrome,
* ljsstyle.borderLeftStyle, chrome,
* ljsstyle.borderLeftWidth, chrome,
* ljsstyle.borderRadius, chrome,
* ljsstyle.borderRight, chrome,
* ljsstyle.borderRightColor, chrome,
* ljsstyle.borderRightStyle, chrome,
* ljsstyle.borderRightWidth, chrome,
* ljsstyle.borderSpacing, chrome,
* ljsstyle.borderStyle, chrome,
* ljsstyle.borderTop, chrome,
* ljsstyle.borderTopColor, chrome,
* ljsstyle.borderTopLeftRadius, chrome,
* ljsstyle.borderTopRightRadius, chrome,
* ljsstyle.borderTopStyle, chrome,
* ljsstyle.borderTopWidth, chrome,
* ljsstyle.borderWidth, chrome,
* ljsstyle.bottom, chrome,
* ljsstyle.boxShadow, chrome,
* ljsstyle.boxSizing, chrome,
* ljsstyle.bufferedRendering, chrome,
* ljsstyle.captionSide, chrome,
* ljsstyle.clear, chrome,
* ljsstyle.clip, chrome,
* ljsstyle.clipPath, chrome,
* ljsstyle.clipRule, chrome,
* ljsstyle.color, chrome,
* ljsstyle.colorInterpolation, chrome,
* ljsstyle.colorInterpolationFilters, chrome,
* ljsstyle.colorRendering, chrome,
* ljsstyle.content, chrome,
* ljsstyle.counterIncrement, chrome,
* ljsstyle.counterReset, chrome,
* ljsstyle.cssText, chrome,
* ljsstyle.cursor, chrome,
* ljsstyle.direction, chrome,
* ljsstyle.display, chrome,
* ljsstyle.dominantBaseline, chrome,
* ljsstyle.emptyCells, chrome,
* ljsstyle.enableBackground, chrome,
* ljsstyle.fill, chrome,
* ljsstyle.fillOpacity, chrome,
* ljsstyle.fillRule, chrome,
* ljsstyle.filter, chrome,
* ljsstyle.flex, chrome,
* ljsstyle.flexBasis, chrome,
* ljsstyle.flexDirection, chrome,
* ljsstyle.flexFlow, chrome,
* ljsstyle.flexGrow, chrome,
* ljsstyle.flexShrink, chrome,
* ljsstyle.flexWrap, chrome,
* ljsstyle.float, chrome,
* ljsstyle.floodColor, chrome,
* ljsstyle.floodOpacity, chrome,
* ljsstyle.font, chrome,
* ljsstyle.fontFamily, chrome,
* ljsstyle.fontKerning, chrome,
* ljsstyle.fontSize, chrome,
* ljsstyle.fontStretch, chrome,
* ljsstyle.fontStyle, chrome,
* ljsstyle.fontVariant, chrome,
* ljsstyle.fontVariantLigatures, chrome,
* ljsstyle.fontWeight, chrome,
* ljsstyle.glyphOrientationHorizontal, chrome,
* ljsstyle.glyphOrientationVertical, chrome,
* ljsstyle.height, chrome,
* ljsstyle.imageRendering, chrome,
* ljsstyle.justifyContent, chrome,
* ljsstyle.left, chrome,
* ljsstyle.length, chrome,
* ljsstyle.letterSpacing, chrome,
* ljsstyle.lightingColor, chrome,
* ljsstyle.lineHeight, chrome,
* ljsstyle.listStyle, chrome,
* ljsstyle.listStyleImage, chrome,
* ljsstyle.listStylePosition, chrome,
* ljsstyle.listStyleType, chrome,
* ljsstyle.margin, chrome,
* ljsstyle.marginBottom, chrome,
* ljsstyle.marginLeft, chrome,
* ljsstyle.marginRight, chrome,
* ljsstyle.marginTop, chrome,
* ljsstyle.marker, chrome,
* ljsstyle.markerEnd, chrome,
* ljsstyle.markerMid, chrome,
* ljsstyle.markerStart, chrome,
* ljsstyle.mask, chrome,
* ljsstyle.maskType, chrome,
* ljsstyle.maxHeight, chrome,
* ljsstyle.maxWidth, chrome,
* ljsstyle.maxZoom, chrome,
* ljsstyle.minHeight, chrome,
* ljsstyle.minWidth, chrome,
* ljsstyle.minZoom, chrome,
* ljsstyle.objectFit, chrome,
* ljsstyle.objectPosition, chrome,
* ljsstyle.opacity, chrome,
* ljsstyle.order, chrome,
* ljsstyle.orientation, chrome,
* ljsstyle.orphans, chrome,
* ljsstyle.outline, chrome,
* ljsstyle.outlineColor, chrome,
* ljsstyle.outlineOffset, chrome,
* ljsstyle.outlineStyle, chrome,
* ljsstyle.outlineWidth, chrome,
* ljsstyle.overflow, chrome,
* ljsstyle.overflowWrap, chrome,
* ljsstyle.overflowX, chrome,
* ljsstyle.overflowY, chrome,
* ljsstyle.padding, chrome,
* ljsstyle.paddingBottom, chrome,
* ljsstyle.paddingLeft, chrome,
* ljsstyle.paddingRight, chrome,
* ljsstyle.paddingTop, chrome,
* ljsstyle.page, chrome,
* ljsstyle.pageBreakAfter, chrome,
* ljsstyle.pageBreakBefore, chrome,
* ljsstyle.pageBreakInside, chrome,
* ljsstyle.paintOrder, chrome,
* ljsstyle.parentRule, chrome,
* ljsstyle.perspective, chrome,
* ljsstyle.perspectiveOrigin, chrome,
* ljsstyle.pointerEvents, chrome,
* ljsstyle.position, chrome,
* ljsstyle.quotes, chrome,
* ljsstyle.resize, chrome,
* ljsstyle.right, chrome,
* ljsstyle.shapeRendering, chrome,
* ljsstyle.size, chrome,
* ljsstyle.speak, chrome,
* ljsstyle.src, chrome,
* ljsstyle.stopColor, chrome,
* ljsstyle.stopOpacity, chrome,
* ljsstyle.stroke, chrome,
* ljsstyle.strokeDasharray, chrome,
* ljsstyle.strokeDashoffset, chrome,
* ljsstyle.strokeLinecap, chrome,
* ljsstyle.strokeLinejoin, chrome,
* ljsstyle.strokeMiterlimit, chrome,
* ljsstyle.strokeOpacity, chrome,
* ljsstyle.strokeWidth, chrome,
* ljsstyle.tabSize, chrome,
* ljsstyle.tableLayout, chrome,
* ljsstyle.textAlign, chrome,
* ljsstyle.textAnchor, chrome,
* ljsstyle.textDecoration, chrome,
* ljsstyle.textIndent, chrome,
* ljsstyle.textLineThroughColor, chrome,
* ljsstyle.textLineThroughMode, chrome,
* ljsstyle.textLineThroughStyle, chrome,
* ljsstyle.textLineThroughWidth, chrome,
* ljsstyle.textOverflow, chrome,
* ljsstyle.textOverlineColor, chrome,
* ljsstyle.textOverlineMode, chrome,
* ljsstyle.textOverlineStyle, chrome,
* ljsstyle.textOverlineWidth, chrome,
* ljsstyle.textRendering, chrome,
* ljsstyle.textShadow, chrome,
* ljsstyle.textTransform, chrome,
* ljsstyle.textUnderlineColor, chrome,
* ljsstyle.textUnderlineMode, chrome,
* ljsstyle.textUnderlineStyle, chrome,
* ljsstyle.textUnderlineWidth, chrome,
* ljsstyle.top, chrome,
* 299, chrome,
* ljsstyle.touchAction, chrome,
* ljsstyle.transform, chrome,
* ljsstyle.transformOrigin, chrome,
* ljsstyle.transformStyle, chrome,
* ljsstyle.transition, chrome,
* ljsstyle.transitionDelay, chrome,
* ljsstyle.transitionDuration, chrome,
* ljsstyle.transitionProperty, chrome,
* ljsstyle.transitionTimingFunction, chrome,
* ljsstyle.unicodeBidi, chrome,
* ljsstyle.unicodeRange, chrome,
* ljsstyle.userZoom, chrome,
* ljsstyle.vectorEffect, chrome,
* ljsstyle.verticalAlign, chrome,
* ljsstyle.visibility, chrome,
* ljsstyle.webkitAnimation, chrome,
* ljsstyle.webkitAnimationDelay, chrome,
* ljsstyle.webkitAnimationDirection, chrome,
* ljsstyle.webkitAnimationDuration, chrome,
* ljsstyle.webkitAnimationFillMode, chrome,
* ljsstyle.webkitAnimationIterationCount, chrome,
* ljsstyle.webkitAnimationName, chrome,
* ljsstyle.webkitAnimationPlayState, chrome,
* ljsstyle.webkitAnimationTimingFunction, chrome,
* ljsstyle.webkitAppRegion, chrome,
* ljsstyle.webkitAppearance, chrome,
* ljsstyle.webkitAspectRatio, chrome,
* ljsstyle.webkitBackfaceVisibility, chrome,
* ljsstyle.webkitBackgroundClip, chrome,
* ljsstyle.webkitBackgroundComposite, chrome,
* ljsstyle.webkitBackgroundOrigin, chrome,
* ljsstyle.webkitBackgroundSize, chrome,
* ljsstyle.webkitBorderAfter, chrome,
* ljsstyle.webkitBorderAfterColor, chrome,
* ljsstyle.webkitBorderAfterStyle, chrome,
* ljsstyle.webkitBorderAfterWidth, chrome,
* ljsstyle.webkitBorderBefore, chrome,
* ljsstyle.webkitBorderBeforeColor, chrome,
* ljsstyle.webkitBorderBeforeStyle, chrome,
* ljsstyle.webkitBorderBeforeWidth, chrome,
* ljsstyle.webkitBorderEnd, chrome,
* ljsstyle.webkitBorderEndColor, chrome,
* ljsstyle.webkitBorderEndStyle, chrome,
* ljsstyle.webkitBorderEndWidth, chrome,
* ljsstyle.webkitBorderFit, chrome,
* ljsstyle.webkitBorderHorizontalSpacing, chrome,
* ljsstyle.webkitBorderImage, chrome,
* ljsstyle.webkitBorderRadius, chrome,
* ljsstyle.webkitBorderStart, chrome,
* ljsstyle.webkitBorderStartColor, chrome,
* ljsstyle.webkitBorderStartStyle, chrome,
* ljsstyle.webkitBorderStartWidth, chrome,
* ljsstyle.webkitBorderVerticalSpacing, chrome,
* ljsstyle.webkitBoxAlign, chrome,
* ljsstyle.webkitBoxDecorationBreak, chrome,
* ljsstyle.webkitBoxDirection, chrome,
* ljsstyle.webkitBoxFlex, chrome,
* ljsstyle.webkitBoxFlexGroup, chrome,
* ljsstyle.webkitBoxLines, chrome,
* ljsstyle.webkitBoxOrdinalGroup, chrome,
* ljsstyle.webkitBoxOrient, chrome,
* ljsstyle.webkitBoxPack, chrome,
* ljsstyle.webkitBoxReflect, chrome,
* ljsstyle.webkitBoxShadow, chrome,
* ljsstyle.webkitClipPath, chrome,
* ljsstyle.webkitColumnBreakAfter, chrome,
* ljsstyle.webkitColumnBreakBefore, chrome,
* ljsstyle.webkitColumnBreakInside, chrome,
* ljsstyle.webkitColumnCount, chrome,
* ljsstyle.webkitColumnGap, chrome,
* ljsstyle.webkitColumnRule, chrome,
* ljsstyle.webkitColumnRuleColor, chrome,
* ljsstyle.webkitColumnRuleStyle, chrome,
* ljsstyle.webkitColumnRuleWidth, chrome,
* ljsstyle.webkitColumnSpan, chrome,
* ljsstyle.webkitColumnWidth, chrome,
* ljsstyle.webkitColumns, chrome,
* ljsstyle.webkitFilter, chrome,
* ljsstyle.webkitFontFeatureSettings, chrome,
* ljsstyle.webkitFontSizeDelta, chrome,
* ljsstyle.webkitFontSmoothing, chrome,
* ljsstyle.webkitHighlight, chrome,
* ljsstyle.webkitHyphenateCharacter, chrome,
* ljsstyle.webkitLineBoxContain, chrome,
* ljsstyle.webkitLineBreak, chrome,
* ljsstyle.webkitLineClamp, chrome,
* ljsstyle.webkitLocale, chrome,
* ljsstyle.webkitLogicalHeight, chrome,
* ljsstyle.webkitLogicalWidth, chrome,
* ljsstyle.webkitMarginAfter, chrome,
* ljsstyle.webkitMarginAfterCollapse, chrome,
* ljsstyle.webkitMarginBefore, chrome,
* ljsstyle.webkitMarginBeforeCollapse, chrome,
* ljsstyle.webkitMarginBottomCollapse, chrome,
* ljsstyle.webkitMarginCollapse, chrome,
* ljsstyle.webkitMarginEnd, chrome,
* ljsstyle.webkitMarginStart, chrome,
* ljsstyle.webkitMarginTopCollapse, chrome,
* ljsstyle.webkitMask, chrome,
* ljsstyle.webkitMaskBoxImage, chrome,
* 368, chrome,
* ljsstyle.webkitMaskBoxImageOutset, chrome,
* ljsstyle.webkitMaskBoxImageRepeat, chrome,
* ljsstyle.webkitMaskBoxImageSlice, chrome,
* ljsstyle.webkitMaskBoxImageSource, chrome,
* ljsstyle.webkitMaskBoxImageWidth, chrome,
* ljsstyle.webkitMaskClip, chrome,
* ljsstyle.webkitMaskComposite, chrome,
* ljsstyle.webkitMaskImage, chrome,
* ljsstyle.webkitMaskOrigin, chrome,
* ljsstyle.webkitMaskPosition, chrome,
* ljsstyle.webkitMaskPositionX, chrome,
* ljsstyle.webkitMaskPositionY, chrome,
* ljsstyle.webkitMaskRepeat, chrome,
* ljsstyle.webkitMaskRepeatX, chrome,
* ljsstyle.webkitMaskRepeatY, chrome,
* ljsstyle.webkitMaskSize, chrome,
* ljsstyle.webkitMaxLogicalHeight, chrome,
* ljsstyle.webkitMaxLogicalWidth, chrome,
* ljsstyle.webkitMinLogicalHeight, chrome,
* ljsstyle.webkitMinLogicalWidth, chrome,
* ljsstyle.webkitPaddingAfter, chrome,
* ljsstyle.webkitPaddingBefore, chrome,
* ljsstyle.webkitPaddingEnd, chrome,
* ljsstyle.webkitPaddingStart, chrome,
* ljsstyle.webkitPerspective, chrome,
* ljsstyle.webkitPerspectiveOrigin, chrome,
* ljsstyle.webkitPerspectiveOriginX, chrome,
* ljsstyle.webkitPerspectiveOriginY, chrome,
* ljsstyle.webkitPrintColorAdjust, chrome,
* ljsstyle.webkitRtlOrdering, chrome,
* ljsstyle.webkitRubyPosition, chrome,
* ljsstyle.webkitTapHighlightColor, chrome,
* ljsstyle.webkitTextCombine, chrome,
* ljsstyle.webkitTextDecorationsInEffect, chrome,
* ljsstyle.webkitTextEmphasis, chrome,
* ljsstyle.webkitTextEmphasisColor, chrome,
* ljsstyle.webkitTextEmphasisPosition, chrome,
* ljsstyle.webkitTextEmphasisStyle, chrome,
* ljsstyle.webkitTextFillColor, chrome,
* ljsstyle.webkitTextOrientation, chrome,
* ljsstyle.webkitTextSecurity, chrome,
* ljsstyle.webkitTextStroke, chrome,
* ljsstyle.webkitTextStrokeColor, chrome,
* ljsstyle.webkitTextStrokeWidth, chrome,
* ljsstyle.webkitTransform, chrome,
* ljsstyle.webkitTransformOrigin, chrome,
* ljsstyle.webkitTransformOriginX, chrome,
* ljsstyle.webkitTransformOriginY, chrome,
* ljsstyle.webkitTransformOriginZ, chrome,
* ljsstyle.webkitTransformStyle, chrome,
* ljsstyle.webkitTransition, chrome,
* ljsstyle.webkitTransitionDelay, chrome,
* ljsstyle.webkitTransitionDuration, chrome,
* ljsstyle.webkitTransitionProperty, chrome,
* ljsstyle.webkitTransitionTimingFunction, chrome,
* ljsstyle.webkitUserDrag, chrome,
* ljsstyle.webkitUserModify, chrome,
* ljsstyle.webkitUserSelect, chrome,
* ljsstyle.webkitWritingMode, chrome,
* ljsstyle.whiteSpace, chrome,
* ljsstyle.widows, chrome,
* ljsstyle.width, chrome,
* ljsstyle.willChange, chrome,
* ljsstyle.wordBreak, chrome,
* ljsstyle.wordSpacing, chrome,
* ljsstyle.wordWrap, chrome,
* ljsstyle.writingMode, chrome,
* ljsstyle.zIndex, chrome,
* ljsstyle.zoom, chrome,
[2014-07-29]
===
> 2015-05-02:
document.body.style
CSSStyleDeclaration {parentRule: null, length: 0, cssText: "", alignContent: "", alignItems: ""…}
alignContent: "" alignItems: "" alignSelf: "" alignmentBaseline: "" all: "" backfaceVisibility: "" background: "" backgroundAttachment: "" backgroundBlendMode: "" backgroundClip: "" backgroundColor: "" backgroundImage: "" backgroundOrigin: "" backgroundPosition: "" backgroundPositionX: "" backgroundPositionY: "" backgroundRepeat: "" backgroundRepeatX: "" backgroundRepeatY: "" backgroundSize: "" baselineShift: "" border: "" borderBottom: "" borderBottomColor: "" borderBottomLeftRadius: "" borderBottomRightRadius: "" borderBottomStyle: "" borderBottomWidth: "" borderCollapse: "" borderColor: "" borderImage: "" borderImageOutset: "" borderImageRepeat: "" borderImageSlice: "" borderImageSource: "" borderImageWidth: "" borderLeft: "" borderLeftColor: "" borderLeftStyle: "" borderLeftWidth: "" borderRadius: "" borderRight: "" borderRightColor: "" borderRightStyle: "" borderRightWidth: "" borderSpacing: "" borderStyle: "" borderTop: "" borderTopColor: "" borderTopLeftRadius: "" borderTopRightRadius: "" borderTopStyle: "" borderTopWidth: "" borderWidth: "" bottom: "" boxShadow: "" boxSizing: "" bufferedRendering: "" captionSide: "" clear: "" clip: "" clipPath: "" clipRule: "" color: "" colorInterpolation: "" colorInterpolationFilters: "" colorRendering: "" content: "" counterIncrement: "" counterReset: "" cssText: "" cursor: "" direction: "" display: "" dominantBaseline: "" emptyCells: "" enableBackground: "" fill: "" fillOpacity: "" fillRule: "" filter: "" flex: "" flexBasis: "" flexDirection: "" flexFlow: "" flexGrow: "" flexShrink: "" flexWrap: "" float: "" floodColor: "" floodOpacity: "" font: "" fontFamily: "" fontKerning: "" fontSize: "" fontStretch: "" fontStyle: "" fontVariant: "" fontVariantLigatures: "" fontWeight: "" glyphOrientationHorizontal: "" glyphOrientationVertical: "" height: "" imageRendering: "" isolation: "" justifyContent: "" left: "" length: 0letterSpacing: "" lightingColor: "" lineHeight: "" listStyle: "" listStyleImage: "" listStylePosition: "" listStyleType: "" margin: "" marginBottom: "" marginLeft: "" marginRight: "" marginTop: "" marker: "" markerEnd: "" markerMid: "" markerStart: "" mask: "" maskType: "" maxHeight: "" maxWidth: "" maxZoom: "" minHeight: "" minWidth: "" minZoom: "" mixBlendMode: "" objectFit: "" objectPosition: "" opacity: "" order: "" orientation: "" orphans: "" outline: "" outlineColor: "" outlineOffset: "" outlineStyle: "" outlineWidth: "" overflow: "" overflowWrap: "" overflowX: "" overflowY: "" padding: "" paddingBottom: "" paddingLeft: "" paddingRight: "" paddingTop: "" page: "" pageBreakAfter: "" pageBreakBefore: "" pageBreakInside: "" paintOrder: "" parentRule: nullperspective: "" perspectiveOrigin: "" pointerEvents: "" position: "" quotes: "" resize: "" right: "" shapeImageThreshold: "" shapeMargin: "" shapeOutside: "" shapeRendering: "" size: "" speak: "" src: "" stopColor: "" stopOpacity: "" stroke: "" strokeDasharray: "" strokeDashoffset: "" strokeLinecap: "" strokeLinejoin: "" strokeMiterlimit: "" strokeOpacity: "" strokeWidth: "" tabSize: "" tableLayout: "" textAlign: "" textAnchor: "" textDecoration: "" textIndent: "" textOverflow: "" textRendering: "" textShadow: "" textTransform: "" top: "" touchAction: "" transform: "" transformOrigin: "" transformStyle: "" transition: "" transitionDelay: "" transitionDuration: "" transitionProperty: "" transitionTimingFunction: "" unicodeBidi: "" unicodeRange: "" userZoom: "" vectorEffect: "" verticalAlign: "" visibility: "" webkitAnimation: "" webkitAnimationDelay: "" webkitAnimationDirection: "" webkitAnimationDuration: "" webkitAnimationFillMode: "" webkitAnimationIterationCount: "" webkitAnimationName: "" webkitAnimationPlayState: "" webkitAnimationTimingFunction: "" webkitAppRegion: "" webkitAppearance: "" webkitBackfaceVisibility: "" webkitBackgroundClip: "" webkitBackgroundComposite: "" webkitBackgroundOrigin: "" webkitBackgroundSize: "" webkitBorderAfter: "" webkitBorderAfterColor: "" webkitBorderAfterStyle: "" webkitBorderAfterWidth: "" webkitBorderBefore: "" webkitBorderBeforeColor: "" webkitBorderBeforeStyle: "" webkitBorderBeforeWidth: "" webkitBorderEnd: "" webkitBorderEndColor: "" webkitBorderEndStyle: "" webkitBorderEndWidth: "" webkitBorderHorizontalSpacing: "" webkitBorderImage: "" webkitBorderRadius: "" webkitBorderStart: "" webkitBorderStartColor: "" webkitBorderStartStyle: "" webkitBorderStartWidth: "" webkitBorderVerticalSpacing: "" webkitBoxAlign: "" webkitBoxDecorationBreak: "" webkitBoxDirection: "" webkitBoxFlex: "" webkitBoxFlexGroup: "" webkitBoxLines: "" webkitBoxOrdinalGroup: "" webkitBoxOrient: "" webkitBoxPack: "" webkitBoxReflect: "" webkitBoxShadow: "" webkitClipPath: "" webkitColumnBreakAfter: "" webkitColumnBreakBefore: "" webkitColumnBreakInside: "" webkitColumnCount: "" webkitColumnGap: "" webkitColumnRule: "" webkitColumnRuleColor: "" webkitColumnRuleStyle: "" webkitColumnRuleWidth: "" webkitColumnSpan: "" webkitColumnWidth: "" webkitColumns: "" webkitFilter: "" webkitFontFeatureSettings: "" webkitFontSizeDelta: "" webkitFontSmoothing: "" webkitHighlight: "" webkitHyphenateCharacter: "" webkitLineBoxContain: "" webkitLineBreak: "" webkitLineClamp: "" webkitLocale: "" webkitLogicalHeight: "" webkitLogicalWidth: "" webkitMarginAfter: "" webkitMarginAfterCollapse: "" webkitMarginBefore: "" webkitMarginBeforeCollapse: "" webkitMarginBottomCollapse: "" webkitMarginCollapse: "" webkitMarginEnd: "" webkitMarginStart: "" webkitMarginTopCollapse: "" webkitMask: "" webkitMaskBoxImage: "" webkitMaskBoxImageOutset: "" webkitMaskBoxImageRepeat: "" webkitMaskBoxImageSlice: "" webkitMaskBoxImageSource: "" webkitMaskBoxImageWidth: "" webkitMaskClip: "" webkitMaskComposite: "" webkitMaskImage: "" webkitMaskOrigin: "" webkitMaskPosition: "" webkitMaskPositionX: "" webkitMaskPositionY: "" webkitMaskRepeat: "" webkitMaskRepeatX: "" webkitMaskRepeatY: "" webkitMaskSize: "" webkitMaxLogicalHeight: "" webkitMaxLogicalWidth: "" webkitMinLogicalHeight: "" webkitMinLogicalWidth: "" webkitPaddingAfter: "" webkitPaddingBefore: "" webkitPaddingEnd: "" webkitPaddingStart: "" webkitPerspective: "" webkitPerspectiveOrigin: "" webkitPerspectiveOriginX: "" webkitPerspectiveOriginY: "" webkitPrintColorAdjust: "" webkitRtlOrdering: "" webkitRubyPosition: "" webkitTapHighlightColor: "" webkitTextCombine: "" webkitTextDecorationsInEffect: "" webkitTextEmphasis: "" webkitTextEmphasisColor: "" webkitTextEmphasisPosition: "" webkitTextEmphasisStyle: "" webkitTextFillColor: "" webkitTextOrientation: "" webkitTextSecurity: "" webkitTextStroke: "" webkitTextStrokeColor: "" webkitTextStrokeWidth: "" webkitTransform: "" webkitTransformOrigin: "" webkitTransformOriginX: "" webkitTransformOriginY: "" webkitTransformOriginZ: "" webkitTransformStyle: "" webkitTransition: "" webkitTransitionDelay: "" webkitTransitionDuration: "" webkitTransitionProperty: "" webkitTransitionTimingFunction: "" webkitUserDrag: "" webkitUserModify: "" webkitUserSelect: "" webkitWritingMode: "" whiteSpace: "" widows: "" width: "" willChange: "" wordBreak: "" wordSpacing: "" wordWrap: "" writingMode: "" x: "" y: "" zIndex: "" zoom: ""
__proto__: CSSStyleDeclaration

jsstyle.MEMBER.FIREFOX (277):
* jsstyle.MozAnimation, Firefox,
* jsstyle.MozAnimationDelay, Firefox,
* jsstyle.MozAnimationDirection, Firefox,
* jsstyle.MozAnimationDuration, Firefox,
* jsstyle.MozAnimationFillMode, Firefox,
* jsstyle.MozAnimationIterationCount, Firefox,
* jsstyle.MozAnimationName, Firefox,
* jsstyle.MozAnimationPlayState, Firefox,
* jsstyle.MozAnimationTimingFunction, Firefox,
* jsstyle.MozAppearance, Firefox,
* jsstyle.MozBackfaceVisibility, Firefox,
* jsstyle.MozBackgroundInlinePolicy, Firefox,
* jsstyle.MozBinding, Firefox,
* jsstyle.MozBorderBottomColors, Firefox,
* jsstyle.MozBorderEnd, Firefox,
* jsstyle.MozBorderEndColor, Firefox,
* jsstyle.MozBorderEndStyle, Firefox,
* jsstyle.MozBorderEndWidth, Firefox,
* jsstyle.MozBorderImage, Firefox,
* jsstyle.MozBorderLeftColors, Firefox,
* jsstyle.MozBorderRightColors, Firefox,
* jsstyle.MozBorderStart, Firefox,
* jsstyle.MozBorderStartColor, Firefox,
* jsstyle.MozBorderStartStyle, Firefox,
* jsstyle.MozBorderStartWidth, Firefox,
* jsstyle.MozBorderTopColors, Firefox,
* jsstyle.MozBoxAlign, Firefox,
* jsstyle.MozBoxDirection, Firefox,
* jsstyle.MozBoxFlex, Firefox,
* jsstyle.MozBoxOrdinalGroup, Firefox,
* jsstyle.MozBoxOrient, Firefox,
* jsstyle.MozBoxPack, Firefox,
* jsstyle.MozBoxSizing, Firefox,
* jsstyle.MozColumnCount, Firefox,
* jsstyle.MozColumnFill, Firefox,
* jsstyle.MozColumnGap, Firefox,
* jsstyle.MozColumnRule, Firefox,
* jsstyle.MozColumnRuleColor, Firefox,
* jsstyle.MozColumnRuleStyle, Firefox,
* jsstyle.MozColumnRuleWidth, Firefox,
* jsstyle.MozColumnWidth, Firefox,
* jsstyle.MozColumns, Firefox,
* jsstyle.MozFloatEdge, Firefox,
* jsstyle.MozFontFeatureSettings, Firefox,
* jsstyle.MozFontLanguageOverride, Firefox,
* jsstyle.MozForceBrokenImageIcon, Firefox,
* jsstyle.MozHyphens, Firefox,
* jsstyle.MozImageRegion, Firefox,
* jsstyle.MozMarginEnd, Firefox,
* jsstyle.MozMarginStart, Firefox,
* jsstyle.MozOrient, Firefox,
* jsstyle.MozOutlineRadius, Firefox,
* jsstyle.MozOutlineRadiusBottomleft, Firefox,
* jsstyle.MozOutlineRadiusBottomright, Firefox,
* jsstyle.MozOutlineRadiusTopleft, Firefox,
* jsstyle.MozOutlineRadiusTopright, Firefox,
* jsstyle.MozPaddingEnd, Firefox,
* jsstyle.MozPaddingStart, Firefox,
* jsstyle.MozPerspective, Firefox,
* jsstyle.MozPerspectiveOrigin, Firefox,
* jsstyle.MozStackSizing, Firefox,
* jsstyle.MozTabSize, Firefox,
* jsstyle.MozTextAlignLast, Firefox,
* jsstyle.MozTextDecorationColor, Firefox,
* jsstyle.MozTextDecorationLine, Firefox,
* jsstyle.MozTextDecorationStyle, Firefox,
* jsstyle.MozTextSizeAdjust, Firefox,
* jsstyle.MozTransform, Firefox,
* jsstyle.MozTransformOrigin, Firefox,
* jsstyle.MozTransformStyle, Firefox,
* jsstyle.MozTransition, Firefox,
* jsstyle.MozTransitionDelay, Firefox,
* jsstyle.MozTransitionDuration, Firefox,
* jsstyle.MozTransitionProperty, Firefox,
* jsstyle.MozTransitionTimingFunction, Firefox,
* jsstyle.MozUserFocus, Firefox,
* jsstyle.MozUserInput, Firefox,
* jsstyle.MozUserModify, Firefox,
* jsstyle.MozUserSelect, Firefox,
* jsstyle.MozWindowShadow, Firefox,
* jsstyle.alignContent, Firefox,
* jsstyle.alignItems, Firefox,
* jsstyle.alignSelf, Firefox,
* jsstyle.all, Firefox,
* jsstyle.animation, Firefox,
* jsstyle.animationDelay, Firefox,
* jsstyle.animationDirection, Firefox,
* jsstyle.animationDuration, Firefox,
* jsstyle.animationFillMode, Firefox,
* jsstyle.animationIterationCount, Firefox,
* jsstyle.animationName, Firefox,
* jsstyle.animationPlayState, Firefox,
* jsstyle.animationTimingFunction, Firefox,
* jsstyle.backfaceVisibility, Firefox,
* jsstyle.background, Firefox,
* jsstyle.backgroundAttachment, Firefox,
* jsstyle.backgroundBlendMode, Firefox,
* jsstyle.backgroundClip, Firefox,
* jsstyle.backgroundColor, Firefox,
* jsstyle.backgroundImage, Firefox,
* jsstyle.backgroundOrigin, Firefox,
* jsstyle.backgroundPosition, Firefox,
* jsstyle.backgroundRepeat, Firefox,
* jsstyle.backgroundSize, Firefox,
* jsstyle.border, Firefox,
* jsstyle.borderBottom, Firefox,
* jsstyle.borderBottomColor, Firefox,
* jsstyle.borderBottomLeftRadius, Firefox,
* jsstyle.borderBottomRightRadius, Firefox,
* jsstyle.borderBottomStyle, Firefox,
* jsstyle.borderBottomWidth, Firefox,
* jsstyle.borderCollapse, Firefox,
* jsstyle.borderColor, Firefox,
* jsstyle.borderImage, Firefox,
* jsstyle.borderImageOutset, Firefox,
* jsstyle.borderImageRepeat, Firefox,
* jsstyle.borderImageSlice, Firefox,
* jsstyle.borderImageSource, Firefox,
* jsstyle.borderImageWidth, Firefox,
* jsstyle.borderLeft, Firefox,
* jsstyle.borderLeftColor, Firefox,
* jsstyle.borderLeftStyle, Firefox,
* jsstyle.borderLeftWidth, Firefox,
* jsstyle.borderRadius, Firefox,
* jsstyle.borderRight, Firefox,
* jsstyle.borderRightColor, Firefox,
* jsstyle.borderRightStyle, Firefox,
* jsstyle.borderRightWidth, Firefox,
* jsstyle.borderSpacing, Firefox,
* jsstyle.borderStyle, Firefox,
* jsstyle.borderTop, Firefox,
* jsstyle.borderTopColor, Firefox,
* jsstyle.borderTopLeftRadius, Firefox,
* jsstyle.borderTopRightRadius, Firefox,
* jsstyle.borderTopStyle, Firefox,
* jsstyle.borderTopWidth, Firefox,
* jsstyle.borderWidth, Firefox,
* jsstyle.bottom, Firefox,
* jsstyle.boxShadow, Firefox,
* jsstyle.boxSizing, Firefox,
* jsstyle.captionSide, Firefox,
* jsstyle.clear, Firefox,
* jsstyle.clip, Firefox,
* jsstyle.clipPath, Firefox,
* jsstyle.clipRule, Firefox,
* jsstyle.color, Firefox,
* jsstyle.colorInterpolation, Firefox,
* jsstyle.colorInterpolationFilters, Firefox,
* jsstyle.constructor, Firefox,
* jsstyle.content, Firefox,
* jsstyle.counterIncrement, Firefox,
* jsstyle.counterReset, Firefox,
* jsstyle.cssFloat, Firefox,
* jsstyle.cursor, Firefox,
* jsstyle.direction, Firefox,
* jsstyle.display, Firefox,
* jsstyle.dominantBaseline, Firefox,
* jsstyle.emptyCells, Firefox,
* jsstyle.fill, Firefox,
* jsstyle.fillOpacity, Firefox,
* jsstyle.fillRule, Firefox,
* jsstyle.filter, Firefox,
* jsstyle.flex, Firefox,
* jsstyle.flexBasis, Firefox,
* jsstyle.flexDirection, Firefox,
* jsstyle.flexFlow, Firefox,
* jsstyle.flexGrow, Firefox,
* jsstyle.flexShrink, Firefox,
* jsstyle.flexWrap, Firefox,
* jsstyle.floodColor, Firefox,
* jsstyle.floodOpacity, Firefox,
* jsstyle.font, Firefox,
* jsstyle.fontFamily, Firefox,
* jsstyle.fontSize, Firefox,
* jsstyle.fontSizeAdjust, Firefox,
* jsstyle.fontStretch, Firefox,
* jsstyle.fontStyle, Firefox,
* jsstyle.fontVariant, Firefox,
* jsstyle.fontWeight, Firefox,
* jsstyle.height, Firefox,
* jsstyle.imageOrientation, Firefox,
* jsstyle.imageRendering, Firefox,
* jsstyle.imeMode, Firefox,
* jsstyle.justifyContent, Firefox,
* jsstyle.left, Firefox,
* jsstyle.letterSpacing, Firefox,
* jsstyle.lightingColor, Firefox,
* jsstyle.lineHeight, Firefox,
* jsstyle.listStyle, Firefox,
* jsstyle.listStyleImage, Firefox,
* jsstyle.listStylePosition, Firefox,
* jsstyle.listStyleType, Firefox,
* jsstyle.margin, Firefox,
* jsstyle.marginBottom, Firefox,
* jsstyle.marginLeft, Firefox,
* jsstyle.marginRight, Firefox,
* jsstyle.marginTop, Firefox,
* jsstyle.marker, Firefox,
* jsstyle.markerEnd, Firefox,
* jsstyle.markerMid, Firefox,
* jsstyle.markerOffset, Firefox,
* jsstyle.markerStart, Firefox,
* jsstyle.marks, Firefox,
* jsstyle.mask, Firefox,
* jsstyle.maxHeight, Firefox,
* jsstyle.maxWidth, Firefox,
* jsstyle.minHeight, Firefox,
* jsstyle.minWidth, Firefox,
* jsstyle.opacity, Firefox,
* jsstyle.order, Firefox,
* jsstyle.orphans, Firefox,
* jsstyle.outline, Firefox,
* jsstyle.outlineColor, Firefox,
* jsstyle.outlineOffset, Firefox,
* jsstyle.outlineStyle, Firefox,
* jsstyle.outlineWidth, Firefox,
* jsstyle.overflow, Firefox,
* jsstyle.overflowX, Firefox,
* jsstyle.overflowY, Firefox,
* jsstyle.padding, Firefox,
* jsstyle.paddingBottom, Firefox,
* jsstyle.paddingLeft, Firefox,
* jsstyle.paddingRight, Firefox,
* jsstyle.paddingTop, Firefox,
* jsstyle.page, Firefox,
* jsstyle.pageBreakAfter, Firefox,
* jsstyle.pageBreakBefore, Firefox,
* jsstyle.pageBreakInside, Firefox,
* jsstyle.paintOrder, Firefox,
* jsstyle.perspective, Firefox,
* jsstyle.perspectiveOrigin, Firefox,
* jsstyle.pointerEvents, Firefox,
* jsstyle.position, Firefox,
* jsstyle.quotes, Firefox,
* jsstyle.resize, Firefox,
* jsstyle.right, Firefox,
* jsstyle.shapeRendering, Firefox,
* jsstyle.size, Firefox,
* jsstyle.stopColor, Firefox,
* jsstyle.stopOpacity, Firefox,
* jsstyle.stroke, Firefox,
* jsstyle.strokeDasharray, Firefox,
* jsstyle.strokeDashoffset, Firefox,
* jsstyle.strokeLinecap, Firefox,
* jsstyle.strokeLinejoin, Firefox,
* jsstyle.strokeMiterlimit, Firefox,
* jsstyle.strokeOpacity, Firefox,
* jsstyle.strokeWidth, Firefox,
* jsstyle.tableLayout, Firefox,
* jsstyle.textAlign, Firefox,
* jsstyle.textAnchor, Firefox,
* jsstyle.textDecoration, Firefox,
* jsstyle.textIndent, Firefox,
* jsstyle.textOverflow, Firefox,
* jsstyle.textRendering, Firefox,
* jsstyle.textShadow, Firefox,
* jsstyle.textTransform, Firefox,
* jsstyle.top, Firefox,
* jsstyle.transform, Firefox,
* jsstyle.transformOrigin, Firefox,
* jsstyle.transformStyle, Firefox,
* jsstyle.transition, Firefox,
* jsstyle.transitionDelay, Firefox,
* jsstyle.transitionDuration, Firefox,
* jsstyle.transitionProperty, Firefox,
* jsstyle.transitionTimingFunction, Firefox,
* jsstyle.unicodeBidi, Firefox,
* jsstyle.vectorEffect, Firefox,
* jsstyle.verticalAlign, Firefox,
* jsstyle.visibility, Firefox,
* jsstyle.whiteSpace, Firefox,
* jsstyle.widows, Firefox,
* jsstyle.width, Firefox,
* jsstyle.wordBreak, Firefox,
* jsstyle.wordSpacing, Firefox,
* jsstyle.wordWrap, Firefox,
* jsstyle.zIndex, Firefox,
===
Object.getOwnPropertyNames(document.createElement('span').style).sort()
[]
Object.getOwnPropertyNames(document.createElement('span').style.__proto__).sort()
["MozAnimation", "MozAnimationDelay", "MozAnimationDirection", "MozAnimationDuration", "MozAnimationFillMode", "MozAnimationIterationCount", "MozAnimationName", "MozAnimationPlayState", "MozAnimationTimingFunction", "MozAppearance", "MozBackfaceVisibility", "MozBackgroundInlinePolicy", "MozBinding", "MozBorderBottomColors", "MozBorderEnd", "MozBorderEndColor", "MozBorderEndStyle", "MozBorderEndWidth", "MozBorderImage", "MozBorderLeftColors", "MozBorderRightColors", "MozBorderStart", "MozBorderStartColor", "MozBorderStartStyle", "MozBorderStartWidth", "MozBorderTopColors", "MozBoxAlign", "MozBoxDirection", "MozBoxFlex", "MozBoxOrdinalGroup", "MozBoxOrient", "MozBoxPack", "MozBoxSizing", "MozColumnCount", "MozColumnFill", "MozColumnGap", "MozColumnRule", "MozColumnRuleColor", "MozColumnRuleStyle", "MozColumnRuleWidth", "MozColumnWidth", "MozColumns", "MozFloatEdge", "MozFontFeatureSettings", "MozFontLanguageOverride", "MozForceBrokenImageIcon", "MozHyphens", "MozImageRegion", "MozMarginEnd", "MozMarginStart", "MozOrient", "MozOutlineRadius", "MozOutlineRadiusBottomleft", "MozOutlineRadiusBottomright", "MozOutlineRadiusTopleft", "MozOutlineRadiusTopright", "MozPaddingEnd", "MozPaddingStart", "MozPerspective", "MozPerspectiveOrigin", "MozStackSizing", "MozTabSize", "MozTextAlignLast", "MozTextDecorationColor", "MozTextDecorationLine", "MozTextDecorationStyle", "MozTextSizeAdjust", "MozTransform", "MozTransformOrigin", "MozTransformStyle", "MozTransition", "MozTransitionDelay", "MozTransitionDuration", "MozTransitionProperty", "MozTransitionTimingFunction", "MozUserFocus", "MozUserInput", "MozUserModify", "MozUserSelect", "MozWindowShadow", "alignContent", "alignItems", "alignSelf", "all", "animation", "animationDelay", "animationDirection", "animationDuration", "animationFillMode", "animationIterationCount", "animationName", "animationPlayState", "animationTimingFunction", "backfaceVisibility", "background", "backgroundAttachment", "backgroundBlendMode", "backgroundClip", "backgroundColor", "backgroundImage", "backgroundOrigin", "backgroundPosition", "backgroundRepeat", "backgroundSize", "border", "borderBottom", "borderBottomColor", "borderBottomLeftRadius", "borderBottomRightRadius", "borderBottomStyle", "borderBottomWidth", "borderCollapse", "borderColor", "borderImage", "borderImageOutset", "borderImageRepeat", "borderImageSlice", "borderImageSource", "borderImageWidth", "borderLeft", "borderLeftColor", "borderLeftStyle", "borderLeftWidth", "borderRadius", "borderRight", "borderRightColor", "borderRightStyle", "borderRightWidth", "borderSpacing", "borderStyle", "borderTop", "borderTopColor", "borderTopLeftRadius", "borderTopRightRadius", "borderTopStyle", "borderTopWidth", "borderWidth", "bottom", "boxShadow", "boxSizing", "captionSide", "clear", "clip", "clipPath", "clipRule", "color", "colorInterpolation", "colorInterpolationFilters", "constructor", "content", "counterIncrement", "counterReset", "cssFloat", "cursor", "direction", "display", "dominantBaseline", "emptyCells", "fill", "fillOpacity", "fillRule", "filter", "flex", "flexBasis", "flexDirection", "flexFlow", "flexGrow", "flexShrink", "flexWrap", "floodColor", "floodOpacity", "font", "fontFamily", "fontSize", "fontSizeAdjust", "fontStretch", "fontStyle", "fontVariant", "fontWeight", "height", "imageOrientation", "imageRendering", "imeMode", "justifyContent", "left", "letterSpacing", "lightingColor", "lineHeight", "listStyle", "listStyleImage", "listStylePosition", "listStyleType", "margin", "marginBottom", "marginLeft", "marginRight", "marginTop", "marker", "markerEnd", "markerMid", "markerOffset", "markerStart", "marks", "mask", "maxHeight", "maxWidth", "minHeight", "minWidth", "opacity", "order", "orphans", "outline", "outlineColor", "outlineOffset", "outlineStyle", "outlineWidth", "overflow", "overflowX", "overflowY", "padding", "paddingBottom", "paddingLeft", "paddingRight", "paddingTop", "page", "pageBreakAfter", "pageBreakBefore", "pageBreakInside", "paintOrder", "perspective", "perspectiveOrigin", "pointerEvents", "position", "quotes", "resize", "right", "shapeRendering", "size", "stopColor", "stopOpacity", "stroke", "strokeDasharray", "strokeDashoffset", "strokeLinecap", "strokeLinejoin", "strokeMiterlimit", "strokeOpacity", "strokeWidth", "tableLayout", "textAlign", "textAnchor", "textDecoration", "textIndent", "textOverflow", "textRendering", "textShadow", "textTransform", "top", "transform", "transformOrigin", "transformStyle", "transition", "transitionDelay", "transitionDuration", "transitionProperty", "transitionTimingFunction", "unicodeBidi", "vectorEffect", "verticalAlign", "visibility", "whiteSpace", "widows", "width", "wordBreak", "wordSpacing", "wordWrap", "zIndex"]

_CODE.LJS:
<div style="background-color:red;height:100px;width:100px;"></div>

<script>
var divStyle = document.querySelector('div').style;
//logs CSSStyleDeclaration {0="background-color", ...}
console.log(divStyle);
[http://domenlightenment.com/#6.1]
===

divStyle.backgroundColor = 'red';
divStyle.border = '1px solid black';
divStyle.width = '100px';
divStyle.height = '100px';
===
//set
divStyle.setProperty('background-color','red');
divStyle.setProperty('border','1px solid black');
divStyle.setProperty('width','100px');
divStyle.setProperty('height','100px');

//get
console.log(divStyle.getPropertyValue('background-color'));
console.log(divStyle.getPropertyValue('border','1px solid black'));
console.log(divStyle.getPropertyValue('width','100px'));
console.log(divStyle.getPropertyValue('height','100px'));

/*remove
divStyle.removeProperty('background-color');
divStyle.removeProperty('border');
divStyle.removeProperty('width');
divStyle.removeProperty('height');
*/

</script>
</body>
</html>
Notes
Take notice that the property name is passed to the setProperty() and getPropertyValue() method using the css property name including a hyphen (e.g. background-color not backgroundColor).
[http://domenlightenment.com/#6.2]
===
divStyle.cssText = 'background-color:red;border:1px solid black;height:100px;width:100px;';
//set using setAttribute
div.setAttribute('style','background-color:red;border:1px solid black;height:100px;width:100px;');
//get using getAttribute
console.log(div.getAttribute('style'));
//remove
div.removeAttribute('style');
[http://domenlightenment.com/#6.3]

jsstyle.userSelect:
s.userSelect = "none";
s.webkitUserSelect = "none";
s.MozUserSelect = "none";
style['-khtml-user-select'] = 'none';
style['-webkit-user-select'] = 'none';

jsstyle.width:
> document.getElementById('idSpliterLeftDiv').style.width
"200px"

jsstyle'CssProperty_equivalence

name::
* McsEngl.jsstyle'CssProperty_equivalence@cptIt,

_DESCRIPTION:
> 'camel-case'.replace(/-(\D)/g, function (a, b) {return b.toUpperCase()})
"camelCase"
> 'camelCase'.replace(/[A-Z]/g, function (a){return '-' + a.toLowerCase();});
"camel-case"
CSS Property    JavaScript style Property
background      background
background-attachment  backgroundAttachment
background-color    backgroundColor
background-image    backgroundImage
background-position  backgroundPosition
background-repeat    backgroundRepeat
border      border
border-bottom    borderBottom
border-bottom-color    borderBottomColor
border-bottom-style    borderBottomStyle
border-bottom-width  borderBottomWidth
border-color    borderColor
border-left      borderLeft
border-left-color    borderLeftColor
border-left-style    borderLeftStyle
border-left-width    borderLeftWidth
border-right      borderRight
border-right-color    borderRightColor
border-right-style    borderRightStyle
border-right-width    borderRightWidth
border-style      borderStyle
border-top      borderTop
border-top-color    borderTopColor
border-top-style    borderTopStyle
border-top-width    borderTopWidth
border-width    borderWidth
clear      clear
clip        clip
color      color
cursor      cursor
display      display
filter      filter
font        font
font-family      fontFamily
font-size      fontSize
font-variant      fontVariant
font-weight      fontWeight
height      height
left        left
letter-spacing    letterSpacing
line-height      lineHeight
list-style      listStyle
list-style-image    listStyleImage
list-style-position    listStylePosition
list-style-type    listStyleType
margin      margin
margin-bottom    marginBottom
margin-left      marginLeft
margin-right    marginRight
margin-top      marginTop
overflow      overflow
padding      padding
padding-bottom    paddingBottom
padding-left      paddingLeft
padding-right    paddingRight
padding-top      paddingTop
page-break-after    pageBreakAfter
page-break-before    pageBreakBefore
position      position
float      styleFloat
text-align      textAlign
text-decoration    textDecoration
text-decoration: blink  textDecorationBlink
text-decoration: line-through textDecorationLineThrough
text-decoration: none  textDecorationNone
text-decoration: overline  textDecorationOverline
text-decoration: underline  textDecorationUnderline
text-indent      textIndent
text-transform    textTransform
top        top
vertical-align    verticalAlign
visibility      visibility
width      width
z-index      zIndex
[http://domenlightenment.com/#6.2]

jsoHmlElt'align

name::
* McsEngl.jsoHmlElt'align@cptIt,
* McsEngl.ljs'align@cptIt,

_CODE.LJS:
document.getElementById("myframe").align="left";

jsoHmlElt'css

name::
* McsEngl.jsoHmlElt'css@cptIt,
* McsEngl.ljsalgo.css@cptIt,
* McsEngl.ljscss@cptIt,

_CODE.LJS:
// get reference to a DOM element
var el = document.querySelector(".main-content");

//----Setting multiple CSS properties----

/* jQuery */
$(el).css({
background: "#FF0000",
"box-shadow": "1px 1px 5px 5px red",
width: "100px",
height: "100px",
display: "block"
});

/* native equivalent */
el.style.background = "#FF0000";
el.style.width = "100px";
el.style.height = "100px";
el.style.display = "block";
el.style.boxShadow = "1px 1px 5px 5px red";
[http://www.leebrimelow.com/native-methods-jquery/]

_CODE.JQUERY:
$("body").css({
'width': '100%',
'height': '100%',
'padding': '0',
'margin': '0',
});
elmDivSplitter.css({
'background-color': 'blue',
'position': 'absolute',
'top': '0',
'left': '0',
'height': '100%',
'width': '100%',
'margin': '0',
'padding': '0',
});

SPECIFIC

name::
* McsEngl.ljs'helt.SPECIFIC@cptIt,
* McsEngl.ljshelt.specific@cptIt,

_SPECIFIC:
HTMLAnchorElement
HTMLAppletElement
HTMLAreaElement
HTMLAudioElement
HTMLBRElement
HTMLBaseElement
HTMLBodyElement
HTMLButtonElement
HTMLCanvasElement
HTMLCollection
HTMLContentElement
HTMLDListElement
HTMLDataListElement
HTMLDirectoryElement
HTMLDivElement
HTMLElement
HTMLEmbedElement
HTMLFieldSetElement
HTMLFontElement
HTMLFormElement
HTMLFrameElement
HTMLFrameSetElement
HTMLHRElement
HTMLHeadElement
HTMLHeadingElement
HTMLHtmlElement
HTMLIFrameElement
HTMLImageElement
HTMLInputElement
HTMLKeygenElement
HTMLLIElement
HTMLLabelElement
HTMLLegendElement
HTMLLinkElement
HTMLMapElement
HTMLMarqueeElement
HTMLMediaElement
HTMLMenuElement
HTMLMetaElement
HTMLMeterElement
HTMLModElement
HTMLOListElement
HTMLObjectElement
HTMLOptGroupElement
HTMLOptionElement
HTMLOutputElement
HTMLParagraphElement
HTMLParamElement
HTMLPreElement
HTMLProgressElement
HTMLQuoteElement
HTMLScriptElement
HTMLSelectElement
HTMLShadowElement
HTMLSourceElement
HTMLSpanElement
HTMLStyleElement
HTMLTableCaptionElement
HTMLTableCellElement
HTMLTableColElement
HTMLTableElement
HTMLTableRowElement
HTMLTableSectionElement
HTMLTemplateElement
HTMLTextAreaElement
HTMLTitleElement
HTMLTrackElement
HTMLUListElement
HTMLUnknownElement
HTMLVideoElement
===
The list below (not a complete list) should give you a good sense of the interfaces/constructors used to create HTML elements.
HTMLHtmlElement
HTMLHeadElement
HTMLLinkElement
HTMLTitleElement
HTMLMetaElement
HTMLBaseElement
HTMLIsIndexElement
HTMLStyleElement
HTMLBodyElement
HTMLFormElement
HTMLSelectElement
HTMLOptGroupElement
HTMLOptionElement
HTMLInputElement
HTMLTextAreaElement
HTMLButtonElement
HTMLLabelElement
HTMLFieldSetElement
HTMLLegendElement
HTMLUListElement
HTMLOListElement
HTMLDListElement
HTMLDirectoryElement
HTMLMenuElement
HTMLLIElement
HTMLDivElement
HTMLParagraphElement
HTMLHeadingElement
HTMLQuoteElement
HTMLPreElement
HTMLBRElement
HTMLBaseFontElement
HTMLFontElement
HTMLHRElement
HTMLModElement
HTMLAnchorElement
HTMLImageElement
HTMLObjectElement
HTMLParamElement
HTMLAppletElement
HTMLMapElement
HTMLAreaElement
HTMLScriptElement
HTMLTableElement
HTMLTableCaptionElement
HTMLTableColElement
HTMLTableSectionElement
HTMLTableRowElement
HTMLTableCellElement
HTMLFrameSetElement
HTMLFrameElement
HTMLIFrameElement
[http://domenlightenment.com/#3.1]

jsoHmlElt.oHTMLAnchorElement (type1)

name::
* McsEngl.jsoHmlElt.oHTMLAnchorElement (type1)@cptIt,
* McsEngl.ljsHTMLAnchorElement@cptIt,
* McsEngl.ljsoHTMLAnchorElement@cptIt,
* McsEngl.ljsoHAElt@cptIt,

_GENERIC:
> HTMLAnchorElement.__proto__
function HTMLElement() { [native code] }
> Object.getPrototypeOf(HTMLAnchorElement)
function HTMLElement() { [native code] }

_DESCRIPTION:
The HTMLAnchorElement interface represents hyperlink elements and provides special properties and methods (beyond those of the regular HTMLElement object interface they also have available to them by inheritance) for manipulating the layout and presentation of such elements.
[https://developer.mozilla.org/en/docs/Web/API/HTMLAnchorElement]
===
Anchor Object
The Anchor object represents an HTML hyperlink.
For each <a> tag in an HTML document, an Anchor object is created.
An anchor allows you to create a link to another document (with the href attribute), or to a different point in the same document (with the name attribute).
You can access an anchor by using getElementById(), or by searching through the anchors[] array of the Document object.

_CODE.LJS:
> var oA=document.createElement('a')
undefinedo
> A
<a></a>
> oA.nodeName
"A"
> oA.nodeType
1

_MEMBER:
> var oA=document.createElement('a')
> Object.getOwnPropertyNames(oA).sort()
0: oHTMLAnchorElement.accessKey,
1: oHTMLAnchorElement.attributes,
2: oHTMLAnchorElement.baseURI,
3: oHTMLAnchorElement.charset,
4: oHTMLAnchorElement.childElementCount,
5: oHTMLAnchorElement.childNodes,
6: oHTMLAnchorElement.children,
7: oHTMLAnchorElement.classList,
8: oHTMLAnchorElement.className,
9: oHTMLAnchorElement.clientHeight,
10: oHTMLAnchorElement.clientLeft,
11: oHTMLAnchorElement.clientTop,
12: oHTMLAnchorElement.clientWidth,
13: oHTMLAnchorElement.contentEditable,
14: oHTMLAnchorElement.coords,
15: oHTMLAnchorElement.dataset,
16: oHTMLAnchorElement.dir,
17: oHTMLAnchorElement.download,
18: oHTMLAnchorElement.draggable,
19: oHTMLAnchorElement.firstChild,
20: oHTMLAnchorElement.firstElementChild,
21: oHTMLAnchorElement.hash,
22: oHTMLAnchorElement.hidden,
23: oHTMLAnchorElement.host,
24: oHTMLAnchorElement.hostname,
25: oHTMLAnchorElement.href,
26: oHTMLAnchorElement.hreflang,
27: oHTMLAnchorElement.id,
28: oHTMLAnchorElement.innerHTML,
29: oHTMLAnchorElement.innerText,
30: oHTMLAnchorElement.isContentEditable,
31: oHTMLAnchorElement.lang,
32: oHTMLAnchorElement.lastChild,
33: oHTMLAnchorElement.lastElementChild,
34: oHTMLAnchorElement.localName,
35: oHTMLAnchorElement.name,
36: oHTMLAnchorElement.namespaceURI,
37: oHTMLAnchorElement.nextElementSibling,
38: oHTMLAnchorElement.nextSibling,
39: oHTMLAnchorElement.nodeName,
40: oHTMLAnchorElement.nodeType,
41: oHTMLAnchorElement.nodeValue,
42: oHTMLAnchorElement.offsetHeight,
43: oHTMLAnchorElement.offsetLeft,
44: oHTMLAnchorElement.offsetParent,
45: oHTMLAnchorElement.offsetTop,
46: oHTMLAnchorElement.offsetWidth,
47: oHTMLAnchorElement.onabort,
48: oHTMLAnchorElement.onautocomplete,
49: oHTMLAnchorElement.onautocompleteerror,
50: oHTMLAnchorElement.onbeforecopy,
51: oHTMLAnchorElement.onbeforecut,
52: oHTMLAnchorElement.onbeforepaste,
53: oHTMLAnchorElement.onblur,
54: oHTMLAnchorElement.oncancel,
55: oHTMLAnchorElement.oncanplay,
56: oHTMLAnchorElement.oncanplaythrough,
57: oHTMLAnchorElement.onchange,
58: oHTMLAnchorElement.onclick,
59: oHTMLAnchorElement.onclose,
60: oHTMLAnchorElement.oncontextmenu,
61: oHTMLAnchorElement.oncopy,
62: oHTMLAnchorElement.oncuechange,
63: oHTMLAnchorElement.oncut,
64: oHTMLAnchorElement.ondblclick,
65: oHTMLAnchorElement.ondrag,
66: oHTMLAnchorElement.ondragend,
67: oHTMLAnchorElement.ondragenter,
68: oHTMLAnchorElement.ondragleave,
69: oHTMLAnchorElement.ondragover,
70: oHTMLAnchorElement.ondragstart,
71: oHTMLAnchorElement.ondrop,
72: oHTMLAnchorElement.ondurationchange,
73: oHTMLAnchorElement.onemptied,
74: oHTMLAnchorElement.onended,
75: oHTMLAnchorElement.onerror,
76: oHTMLAnchorElement.onfocus,
77: oHTMLAnchorElement.oninput,
78: oHTMLAnchorElement.oninvalid,
79: oHTMLAnchorElement.onkeydown,
80: oHTMLAnchorElement.onkeypress,
81: oHTMLAnchorElement.onkeyup,
82: oHTMLAnchorElement.onload,
83: oHTMLAnchorElement.onloadeddata,
84: oHTMLAnchorElement.onloadedmetadata,
85: oHTMLAnchorElement.onloadstart,
86: oHTMLAnchorElement.onmousedown,
87: oHTMLAnchorElement.onmouseenter,
88: oHTMLAnchorElement.onmouseleave,
89: oHTMLAnchorElement.onmousemove,
90: oHTMLAnchorElement.onmouseout,
91: oHTMLAnchorElement.onmouseover,
92: oHTMLAnchorElement.onmouseup,
93: oHTMLAnchorElement.onmousewheel,
94: oHTMLAnchorElement.onpaste,
95: oHTMLAnchorElement.onpause,
96: oHTMLAnchorElement.onplay,
97: oHTMLAnchorElement.onplaying,
98: oHTMLAnchorElement.onprogress,
99: oHTMLAnchorElement.onratechange,
100: oHTMLAnchorElement.onreset,
101: oHTMLAnchorElement.onresize,
102: oHTMLAnchorElement.onscroll,
103: oHTMLAnchorElement.onsearch,
104: oHTMLAnchorElement.onseeked,
105: oHTMLAnchorElement.onseeking,
106: oHTMLAnchorElement.onselect,
107: oHTMLAnchorElement.onselectstart,
108: oHTMLAnchorElement.onshow,
109: oHTMLAnchorElement.onstalled,
110: oHTMLAnchorElement.onsubmit,
111: oHTMLAnchorElement.onsuspend,
112: oHTMLAnchorElement.ontimeupdate,
113: oHTMLAnchorElement.ontoggle,
114: oHTMLAnchorElement.onvolumechange,
115: oHTMLAnchorElement.onwaiting,
116: oHTMLAnchorElement.onwebkitfullscreenchange,
117: oHTMLAnchorElement.onwebkitfullscreenerror,
118: oHTMLAnchorElement.onwheel,
119: oHTMLAnchorElement.origin,
120: oHTMLAnchorElement.outerHTML,
121: oHTMLAnchorElement.outerText,
122: oHTMLAnchorElement.ownerDocument,
123: oHTMLAnchorElement.parentElement,
124: oHTMLAnchorElement.parentNode,
125: oHTMLAnchorElement.password,
126: oHTMLAnchorElement.pathname,
127: oHTMLAnchorElement.ping,
128: oHTMLAnchorElement.port,
129: oHTMLAnchorElement.prefix,
130: oHTMLAnchorElement.previousElementSibling,
131: oHTMLAnchorElement.previousSibling,
132: oHTMLAnchorElement.protocol,
133: oHTMLAnchorElement.rel,
134: oHTMLAnchorElement.rev,
135: oHTMLAnchorElement.scrollHeight,
136: oHTMLAnchorElement.scrollLeft,
137: oHTMLAnchorElement.scrollTop,
138: oHTMLAnchorElement.scrollWidth,
139: oHTMLAnchorElement.search,
140: oHTMLAnchorElement.shadowRoot,
141: oHTMLAnchorElement.shape,
142: oHTMLAnchorElement.spellcheck,
143: oHTMLAnchorElement.style,
144: oHTMLAnchorElement.tabIndex,
145: oHTMLAnchorElement.tagName,
146: oHTMLAnchorElement.target,
147: oHTMLAnchorElement.text,
148: oHTMLAnchorElement.textContent,
149: oHTMLAnchorElement.title,
150: oHTMLAnchorElement.translate,
151: oHTMLAnchorElement.type,
152: oHTMLAnchorElement.username,
153: oHTMLAnchorElement.webkitdropzone,

> Object.getOwnPropertyNames(oA.__proto__).sort()
* oHTMLAnchorElement.constructor,
* oHTMLAnchorElement.toString",

jsoHmlElt.oHTMLAppletElement

name::
* McsEngl.jsoHmlElt.oHTMLAppletElement@cptIt,
* McsEngl.ljsoHTMLAppletElement@cptIt,

jsoHmlElt.oHTMLAreaElement

name::
* McsEngl.jsoHmlElt.oHTMLAreaElement@cptIt,
* McsEngl.ljsoHTMLAreaElement@cptIt,

jsoHmlElt.oHTMLAudioElement

name::
* McsEngl.jsoHmlElt.oHTMLAudioElement@cptIt,
* McsEngl.ljsoHTMLAudioElement@cptIt,

jsoHmlElt.oHTMLBRElement

name::
* McsEngl.jsoHmlElt.oHTMLBRElement@cptIt,
* McsEngl.ljsoHTMLBREElement@cptIt,

jsoHmlElt.oHTMLBaseElement

name::
* McsEngl.jsoHmlElt.oHTMLBaseElement@cptIt,
* McsEngl.ljsoHTMLBaseElement@cptIt,

jsoHmlElt.oHTMLBodyElement

name::
* McsEngl.jsoHmlElt.oHTMLBodyElement@cptIt,
* McsEngl.ljs'body-element@cptIt,
* McsEngl.ljs'HTMLBodyElement@cptIt,
* McsEngl.ljsoHTMLBodyElement@cptIt,

_DESCRIPTION:
Body Object

The Body object represents the HTML body element.

The body element defines a document's body.

The body element contains all the contents of an HTML document, such as text, hyperlinks, images, tables, lists, etc.

_PROPERTY:
Object.keys(document.body).sort()
["aLink", "accessKey", "attributes", "background", "baseURI", "bgColor", "childElementCount", "childNodes", "children", "classList", "className", "clientHeight", "clientLeft", "clientTop", "clientWidth", "contentEditable", "dataset", "dir", "draggable", "firstChild", "firstElementChild", "hidden", "id", "innerHTML", "innerText", "isContentEditable", "lang", "lastChild", "lastElementChild", "link", "localName", "namespaceURI", "nextElementSibling", "nextSibling", "nodeName", "nodeType", "nodeValue", "offsetHeight", "offsetLeft", "offsetParent", "offsetTop", "offsetWidth", "outerHTML", "outerText", "ownerDocument", "parentElement", "parentNode", "prefix", "previousElementSibling", "previousSibling", "scrollHeight", "scrollLeft", "scrollTop", "scrollWidth", "spellcheck", "style", "tabIndex", "tagName", "text", "textContent", "title", "translate", "vLink", "webkitPseudo", "webkitShadowRoot", "webkitdropzone"]
[CHROME-2013-10-18]

_INSTANCE:
> Object.getPrototypeOf(document.getElementsByTagName("BODY")[0])
HTMLBodyElement {click: function, getAttribute: function, setAttribute: function, removeAttribute: function, getAttributeNode: function…}
> document.body
<body class=?"mce-fullscreen">?…?</body>?
> typeof document.body
"object"
> Object.getPrototypeOf(document.body)
HTMLBodyElement {click: function, getAttribute: function, setAttribute: function, removeAttribute: function, getAttributeNode: function…}

ljb'Body'onload-event

name::
* McsEngl.ljb'Body'onload-event@cptIt,

lcpJs'ex.onload_body:
<html>
<head>
<script type="text/javascript">
function load()
{
alert("Page is loaded");
}
</script>
</head>

<body onload="load()">
<h1>Hello World!</h1>
</body>
</html>

jsoHmlElt.oHTMLButtonElement

name::
* McsEngl.jsoHmlElt.oHTMLButtonElement@cptIt,
* McsEngl.ljsoHTMLButtonElement@cptIt,

_CODE.LJS:
<input type="button" onclick="changeTabIndex()" value="Change TabIndex" />
==========
A button with text="Change TabIndex" and fires "changeTabIndex()" when we click on.

jsoHmlElt.oHTMLCanvasElement

name::
* McsEngl.jsoHmlElt.oHTMLCanvasElement@cptIt,
* McsEngl.ljsoHTMLCanvasElement@cptIt,

jsoHmlElt.oHTMLContentElement

name::
* McsEngl.jsoHmlElt.oHTMLContentElement@cptIt,
* McsEngl.ljsoHTMLContentElement@cptIt,

jsoHmlElt.oHTMLDListElement

name::
* McsEngl.jsoHmlElt.oHTMLDListElement@cptIt,
* McsEngl.ljsoHTMLDListElement@cptIt,

jsoHmlElt.oHTMLDataListElement

name::
* McsEngl.jsoHmlElt.oHTMLDataListElement@cptIt,
* McsEngl.ljsoHTMLDataListElement@cptIt,

jsoHmlElt.oHTMLDirectoryElement

name::
* McsEngl.jsoHmlElt.oHTMLDirectoryElement@cptIt,
* McsEngl.ljsoHTMLDirectoryElement@cptIt,

jsoHmlElt.oHTMLDivElement

name::
* McsEngl.jsoHmlElt.oHTMLDivElement@cptIt,
* McsEngl.ljsoDiv@cptIt,
* McsEngl.ljsoHeltDiv@cptIt,
* McsEngl.ljsoHTMLDivElement@cptIt,

jsoHTMLDivElement'member:
//FIREFOX:
> Object.getOwnPropertyNames(document.createElement('div')).sort()
[]
> Object.getOwnPropertyNames(HTMLDivElement.prototype).sort()
["align", "constructor"]
> HTMLElement.prototype:
Object.getOwnPropertyNames((document.createElement('div')).__proto__.__proto__).sort()
["accessKey", "accessKeyLabel", "blur", "click", "constructor", "contentEditable", "contextMenu", "dataset", "dir", "draggable", "focus", "hidden", "isContentEditable", "itemId", "itemProp", "itemRef", "itemScope", "itemType", "itemValue", "lang", "offsetHeight", "offsetLeft", "offsetParent", "offsetTop", "offsetWidth", "onabort", "onblur", "oncanplay", "oncanplaythrough", "onchange", "onclick", "oncontextmenu", "oncopy", "oncut", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmouseenter", "onmouseleave", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmozfullscreenchange", "onmozfullscreenerror", "onmozpointerlockchange", "onmozpointerlockerror", "onpaste", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting", "properties", "spellcheck", "style", "tabIndex", "title"]
> Element.prototype: Object.getOwnPropertyNames((document.createElement('div')).__proto__.__proto__.__proto__).sort()
["attributes", "childElementCount", "children", "classList", "className", "clientHeight", "clientLeft", "clientTop", "clientWidth", "constructor", "firstElementChild", "getAttribute", "getAttributeNS", "getAttributeNode", "getAttributeNodeNS", "getBoundingClientRect", "getClientRects", "getElementsByClassName", "getElementsByTagName", "getElementsByTagNameNS", "hasAttribute", "hasAttributeNS", "id", "innerHTML", "insertAdjacentHTML", "lastElementChild", "matches", "mozMatchesSelector", "mozRequestFullScreen", "mozRequestPointerLock", "nextElementSibling", "onwheel", "outerHTML", "previousElementSibling", "querySelector", "querySelectorAll", "releaseCapture", "remove", "removeAttribute", "removeAttributeNS", "removeAttributeNode", "scrollHeight", "scrollIntoView", "scrollLeft", "scrollLeftMax", "scrollTop", "scrollTopMax", "scrollWidth", "setAttribute", "setAttributeNS", "setAttributeNode", "setAttributeNodeNS", "setCapture", "tagName"]
> Node.prototype: Object.getOwnPropertyNames((document.createElement('div')).__proto__.__proto__.__proto__.__proto__).sort()
["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "appendChild", "baseURI", "childNodes", "cloneNode", "compareDocumentPosition", "constructor", "contains", "firstChild", "hasAttributes", "hasChildNodes", "insertBefore", "isDefaultNamespace", "isEqualNode", "lastChild", "localName", "lookupNamespaceURI", "lookupPrefix", "namespaceURI", "nextSibling", "nodeName", "nodeType", "nodeValue", "normalize", "ownerDocument", "parentElement", "parentNode", "prefix", "previousSibling", "removeChild", "replaceChild", "textContent"]
> EventTarget.prototype: Object.getOwnPropertyNames((document.createElement('div')).__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["addEventListener", "constructor", "dispatchEvent", "removeEventListener"]
> Object.prototype: Object.getOwnPropertyNames((document.createElement('div')).__proto__.__proto__.__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]

jsfHTMLDivElement
jsoHmlElt.oHTMLEmbedElement

name::
* McsEngl.jsoHmlElt.oHTMLEmbedElement@cptIt,
* McsEngl.ljsoHTMLEmbedElement@cptIt,

jsoHmlElt.oHTMLFieldSetElement

name::
* McsEngl.jsoHmlElt.oHTMLFieldSetElement@cptIt,
* McsEngl.ljsoHTMLFieldSetElement@cptIt,

jsoHmlElt.oHTMLFontElement

name::
* McsEngl.jsoHmlElt.oHTMLFontElement@cptIt,
* McsEngl.ljsoHTMLFontElement@cptIt,

jsoHmlElt.oHTMLFormElement

name::
* McsEngl.jsoHmlElt.oHTMLFormElement@cptIt,
* McsEngl.ljsoHTMLFormElement@cptIt,

_ADDRESS.WPG:
* http://www.javascript-coder.com/javascript-form/javascript-get-all-form-objects.phtml,

jsoHTMLFormElement.MEMBER.CHROME:
> 2015-05-06:
> var o = document.createElement("form");
undefined
> Object.getOwnPropertyNames(o).sort()
Array[132][0 … 99]0: " acceptCharset" 1: " accessKey" 2: " action" 3: " attributes" 4: " autocomplete" 5: " childElementCount" 6: " children" 7: " classList" 8: " className" 9: " clientHeight" 10: " clientLeft" 11: " clientTop" 12: " clientWidth" 13: " contentEditable" 14: " dataset" 15: " dir" 16: " draggable" 17: " elements" 18: " encoding" 19: " enctype" 20: " firstElementChild" 21: " hidden" 22: " innerText" 23: " isContentEditable" 24: " lang" 25: " lastElementChild" 26: " length" 27: " localName" 28: " method" 29: " name" 30: " namespaceURI" 31: " nextElementSibling" 32: " noValidate" 33: " nodeName" 34: " nodeType" 35: " nodeValue" 36: " offsetHeight" 37: " offsetLeft" 38: " offsetParent" 39: " offsetTop" 40: " offsetWidth" 41: " onabort" 42: " onautocomplete" 43: " onautocompleteerror" 44: " onbeforecopy" 45: " onbeforecut" 46: " onbeforepaste" 47: " onblur" 48: " oncancel" 49: " oncanplay" 50: " oncanplaythrough" 51: " onchange" 52: " onclick" 53: " onclose" 54: " oncontextmenu" 55: " oncopy" 56: " oncuechange" 57: " oncut" 58: " ondblclick" 59: " ondrag" 60: " ondragend" 61: " ondragenter" 62: " ondragleave" 63: " ondragover" 64: " ondragstart" 65: " ondrop" 66: " ondurationchange" 67: " onemptied" 68: " onended" 69: " onerror" 70: " onfocus" 71: " oninput" 72: " oninvalid" 73: " onkeydown" 74: " onkeypress" 75: " onkeyup" 76: " onload" 77: " onloadeddata" 78: " onloadedmetadata" 79: " onloadstart" 80: " onmousedown" 81: " onmouseenter" 82: " onmouseleave" 83: " onmousemove" 84: " onmouseout" 85: " onmouseover" 86: " onmouseup" 87: " onmousewheel" 88: " onpaste" 89: " onpause" 90: " onplay" 91: " onplaying" 92: " onprogress" 93: " onratechange" 94: " onreset" 95: " onresize" 96: " onscroll" 97: " onsearch" 98: " onseeked" 99: " onseeking" [100 … 131]100: " onselect" 101: " onselectstart" 102: " onshow" 103: " onstalled" 104: " onsubmit" 105: " onsuspend" 106: " ontimeupdate" 107: " ontoggle" 108: " onvolumechange" 109: " onwaiting" 110: " onwebkitfullscreenchange" 111: " onwebkitfullscreenerror" 112: " onwheel" 113: " outerHTML" 114: " outerText" 115: " parentElement" 116: " prefix" 117: " previousElementSibling" 118: " scrollHeight" 119: " scrollLeft" 120: " scrollTop" 121: " scrollWidth" 122: " shadowRoot" 123: " spellcheck" 124: " style" 125: " tabIndex" 126: " tagName" 127: " target" 128: " textContent" 129: " title" 130: " translate" 131: " webkitdropzone" length: 132

jsoHmlElt.oHTMLFrameElement ljbhml'IFrame

name::
* McsEngl.jsoHmlElt.oHTMLFrameElement ljbhml'IFrame@cptIt,
* McsEngl.ljsoHTMLFrameElement@cptIt,

jsoHmlElt.oHTMLFrameSetElement

name::
* McsEngl.jsoHmlElt.oHTMLFrameSetElement@cptIt,
* McsEngl.ljsoHTMLFrameSetElement@cptIt,

jsoHmlElt.oHTMLHRElement

name::
* McsEngl.jsoHmlElt.oHTMLHRElement@cptIt,
* McsEngl.ljsoHTMLHRElement@cptIt,

jsoHmlElt.oHTMLHeadElement

name::
* McsEngl.jsoHmlElt.oHTMLHeadElement@cptIt,
* McsEngl.ljshhead@cptIt,
* McsEngl.ljsoHTMLHeadElement@cptIt,

_GENERIC:
> document.getElementsByTagName("HEAD")[0] instanceof HTMLHeadElement
true
===
> HTMLHeadElement instanceof HTMLElement
false
===
> HTMLHeadElement.__proto__
function HTMLElement() { [native code] }
> HTMLHeadElement.prototype
HTMLHeadElement {click: function, getAttribute: function, setAttribute: function, removeAttribute: function, getAttributeNode: function…}
> Object.getPrototypeOf(HTMLHeadElement)
function HTMLElement() { [native code] }

_PROPERTY:
> Object.getOwnPropertyNames(HTMLHeadElement).sort()
["arguments", "caller", "length", "name", "prototype", "toString"]

_INSTANCE:
> Object.getOwnPropertyNames(document.getElementsByTagName("HEAD")[0]).sort()
Array[130]
[0 … 99]
0: "accessKey"
1: "attributes"
2: "baseURI"
3: "childElementCount"
4: "childNodes"
5: "children"
6: "classList"
7: "className"
8: "clientHeight"
9: "clientLeft"
10: "clientTop"
11: "clientWidth"
12: "contentEditable"
13: "dataset"
14: "dir"
15: "draggable"
16: "firstChild"
17: "firstElementChild"
18: "hidden"
19: "id"
20: "innerHTML"
21: "innerText"
22: "isContentEditable"
23: "lang"
24: "lastChild"
25: "lastElementChild"
26: "localName"
27: "namespaceURI"
28: "nextElementSibling"
29: "nextSibling"
30: "nodeName"
31: "nodeType"
32: "nodeValue"
33: "offsetHeight"
34: "offsetLeft"
35: "offsetParent"
36: "offsetTop"
37: "offsetWidth"
38: "onabort"
39: "onbeforecopy"
40: "onbeforecut"
41: "onbeforepaste"
42: "onblur"
43: "oncancel"
44: "oncanplay"
45: "oncanplaythrough"
46: "onchange"
47: "onclick"
48: "onclose"
49: "oncontextmenu"
50: "oncopy"
51: "oncuechange"
52: "oncut"
53: "ondblclick"
54: "ondrag"
55: "ondragend"
56: "ondragenter"
57: "ondragleave"
58: "ondragover"
59: "ondragstart"
60: "ondrop"
61: "ondurationchange"
62: "onemptied"
63: "onended"
64: "onerror"
65: "onfocus"
66: "oninput"
67: "oninvalid"
68: "onkeydown"
69: "onkeypress"
70: "onkeyup"
71: "onload"
72: "onloadeddata"
73: "onloadedmetadata"
74: "onloadstart"
75: "onmousedown"
76: "onmouseenter"
77: "onmouseleave"
78: "onmousemove"
79: "onmouseout"
80: "onmouseover"
81: "onmouseup"
82: "onmousewheel"
83: "onpaste"
84: "onpause"
85: "onplay"
86: "onplaying"
87: "onprogress"
88: "onratechange"
89: "onreset"
90: "onresize"
91: "onscroll"
92: "onsearch"
93: "onseeked"
94: "onseeking"
95: "onselect"
96: "onselectstart"
97: "onshow"
98: "onstalled"
99: "onsubmit"
[100 … 129]
100: "onsuspend"
101: "ontimeupdate"
102: "onvolumechange"
103: "onwaiting"
104: "onwebkitfullscreenchange"
105: "onwebkitfullscreenerror"
106: "onwheel"
107: "outerHTML"
108: "outerText"
109: "ownerDocument"
110: "parentElement"
111: "parentNode"
112: "prefix"
113: "previousElementSibling"
114: "previousSibling"
115: "profile"
116: "scrollHeight"
117: "scrollLeft"
118: "scrollTop"
119: "scrollWidth"
120: "shadowRoot"
121: "spellcheck"
122: "style"
123: "tabIndex"
124: "tagName"
125: "textContent"
126: "title"
127: "translate"
128: "webkitShadowRoot"
129: "webkitdropzone"
length: 130

jsoHmlElt.oHTMLHeadingElement

name::
* McsEngl.jsoHmlElt.oHTMLHeadingElement@cptIt,
* McsEngl.ljsoHTMLHeadingElement@cptIt,

_PROPERTY:
>

jsoHmlElt.oHTMLHtmlElement

name::
* McsEngl.jsoHmlElt.oHTMLHtmlElement@cptIt,
* McsEngl.ljsHTMLHtmlElement@cptIt,
* McsEngl.ljsoHTMLHtmlElement@cptIt,
* McsEngl.ljs'html-element@cptIt,

_CODE.LJS:
> Object.getPrototypeOf(HTMLHtmlElement)
function HTMLElement#ql:jsohtmlelement#() { [native code] }
===
>>> document.documentElement.nodeName
>>> "HTML"

_MEMBER:
//FIREFOX 2014-12-07:
> Object.getOwnPropertyNames(document.createElement('html')).sort()
[]
Object.getOwnPropertyNames(document.createElement('html').__proto__).sort()
["constructor", "version"]
Object.getOwnPropertyNames(document.createElement('html').__proto__.__proto__).sort()
["accessKey", "accessKeyLabel", "blur", "className", "click", "constructor", "contentEditable", "contextMenu", "dataset", "dir", "draggable", "focus", "hidden", "isContentEditable", "itemId", "itemProp", "itemRef", "itemScope", "itemType", "itemValue", "lang", "offsetHeight", "offsetLeft", "offsetParent", "offsetTop", "offsetWidth", "onabort", "onblur", "oncanplay", "oncanplaythrough", "onchange", "onclick", "oncontextmenu", "oncopy", "oncut", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmouseenter", "onmouseleave", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmozfullscreenchange", "onmozfullscreenerror", "onmozpointerlockchange", "onmozpointerlockerror", "onpaste", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting", "properties", "spellcheck", "style", "tabIndex", "title"]
===
> Object.getOwnPropertyNames(document.createElement('html')).sort()
Array[133]
[0 … 99]
0: "accessKey"
1: "attributes"
2: "baseURI"
3: "childElementCount"
4: "childNodes"
5: "children"
6: "classList"
7: "className"
8: "clientHeight"
9: "clientLeft"
10: "clientTop"
11: "clientWidth"
12: "contentEditable"
13: "dataset"
14: "dir"
15: "draggable"
16: "firstChild"
17: "firstElementChild"
18: "hidden"
19: "id"
20: "innerHTML"
21: "innerText"
22: "isContentEditable"
23: "lang"
24: "lastChild"
25: "lastElementChild"
26: "localName"
27: "manifest"
28: "namespaceURI"
29: "nextElementSibling"
30: "nextSibling"
31: "nodeName"
32: "nodeType"
33: "nodeValue"
34: "offsetHeight"
35: "offsetLeft"
36: "offsetParent"
37: "offsetTop"
38: "offsetWidth"
39: "onabort"
40: "onautocomplete"
41: "onautocompleteerror"
42: "onbeforecopy"
43: "onbeforecut"
44: "onbeforepaste"
45: "onblur"
46: "oncancel"
47: "oncanplay"
48: "oncanplaythrough"
49: "onchange"
50: "onclick"
51: "onclose"
52: "oncontextmenu"
53: "oncopy"
54: "oncuechange"
55: "oncut"
56: "ondblclick"
57: "ondrag"
58: "ondragend"
59: "ondragenter"
60: "ondragleave"
61: "ondragover"
62: "ondragstart"
63: "ondrop"
64: "ondurationchange"
65: "onemptied"
66: "onended"
67: "onerror"
68: "onfocus"
69: "oninput"
70: "oninvalid"
71: "onkeydown"
72: "onkeypress"
73: "onkeyup"
74: "onload"
75: "onloadeddata"
76: "onloadedmetadata"
77: "onloadstart"
78: "onmousedown"
79: "onmouseenter"
80: "onmouseleave"
81: "onmousemove"
82: "onmouseout"
83: "onmouseover"
84: "onmouseup"
85: "onmousewheel"
86: "onpaste"
87: "onpause"
88: "onplay"
89: "onplaying"
90: "onprogress"
91: "onratechange"
92: "onreset"
93: "onresize"
94: "onscroll"
95: "onsearch"
96: "onseeked"
97: "onseeking"
98: "onselect"
99: "onselectstart"
[100 … 132]
100: "onshow"
101: "onstalled"
102: "onsubmit"
103: "onsuspend"
104: "ontimeupdate"
105: "ontoggle"
106: "onvolumechange"
107: "onwaiting"
108: "onwebkitfullscreenchange"
109: "onwebkitfullscreenerror"
110: "onwheel"
111: "outerHTML"
112: "outerText"
113: "ownerDocument"
114: "parentElement"
115: "parentNode"
116: "prefix"
117: "previousElementSibling"
118: "previousSibling"
119: "scrollHeight"
120: "scrollLeft"
121: "scrollTop"
122: "scrollWidth"
123: "shadowRoot"
124: "spellcheck"
125: "style"
126: "tabIndex"
127: "tagName"
128: "textContent"
129: "title"
130: "translate"
131: "version"
132: "webkitdropzone"
length: 133
===
Object.keys(document.documentElement).sort()
["accessKey", "attributes", "baseURI", "childElementCount", "childNodes", "children", "classList", "className", "clientHeight", "clientLeft", "clientTop", "clientWidth", "contentEditable", "dataset", "dir", "draggable", "firstChild", "firstElementChild", "hidden", "id", "innerHTML", "innerText", "isContentEditable", "lang", "lastChild", "lastElementChild", "localName", "manifest", "namespaceURI", "nextElementSibling", "nextSibling", "nodeName", "nodeType", "nodeValue", "offsetHeight", "offsetLeft", "offsetParent", "offsetTop", "offsetWidth", "outerHTML", "outerText", "ownerDocument", "parentElement", "parentNode", "prefix", "previousElementSibling", "previousSibling", "scrollHeight", "scrollLeft", "scrollTop", "scrollWidth", "spellcheck", "style", "tabIndex", "tagName", "textContent", "title", "translate", "version", "webkitPseudo", "webkitShadowRoot", "webkitdropzone"]
[GCHROME, 2013-10-18]

jsoHmlElt.oHTMLIFrameElement

name::
* McsEngl.jsoHmlElt.oHTMLIFrameElement@cptIt,
* McsEngl.ljsoHTMLIFrameElement@cptIt,
* McsEngl.ljsIframe-objectc@cptIt,

_HTML:
//creation
var o = document.createElement("IFRAME");

jsoHTMLIFrameElement.MEMBER.FIREFOX:
> var o = document.createElement('iframe')
undefined
Object.getOwnPropertyNames(o).sort()
[]
::> PROTOTYPE: Object.getOwnPropertyNames(o.__proto__).sort()
["align", "allowFullscreen", "constructor", "contentDocument", "contentWindow", "frameBorder", "getSVGDocument", "height", "longDesc", "marginHeight", "marginWidth", "name", "sandbox", "scrolling", "src", "srcdoc", "width"]
::> HTMLElement.prototype: Object.getOwnPropertyNames(o.__proto__.__proto__).sort()
["accessKey", "accessKeyLabel", "blur", "click", "constructor", "contentEditable", "contextMenu", "dataset", "dir", "draggable", "focus", "hidden", "isContentEditable", "itemId", "itemProp", "itemRef", "itemScope", "itemType", "itemValue", "lang", "offsetHeight", "offsetLeft", "offsetParent", "offsetTop", "offsetWidth", "onabort", "onblur", "oncanplay", "oncanplaythrough", "onchange", "onclick", "oncontextmenu", "oncopy", "oncut", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmouseenter", "onmouseleave", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmozfullscreenchange", "onmozfullscreenerror", "onmozpointerlockchange", "onmozpointerlockerror", "onpaste", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting", "properties", "spellcheck", "style", "tabIndex", "title"]

oHmlEltIfm.contentWindow

name::
* McsEngl.oHmlEltIfm.contentWindow@cptIt,

_DESCRIPTION:
IFrame's contentWindow and 'window' are different. 'document', 'innerHeight' for example are different.
[hmnSngo.2015-11-11]
===
jscontentWindow:
jscontentDocument:
Difference between contentDocument and contentWindow javascript iframe/frame access properties:
I think the <iframe> MDN documentation explains it well:
From the DOM iframe element, scripts can get access to the window object of the included HTML page via the contentWindow property.
The contentDocument property refers to the document element inside the iframe (this is equivalent to contentWindow.document), but is not supported by Internet Explorer versions before IE8.
So you would use contentWindow the same way you use window and contentDocument as you use document.
[http://stackoverflow.com/a/17303597]

jsoHmlElt.oHTMLImageElement

name::
* McsEngl.jsoHmlElt.oHTMLImageElement@cptIt,
* McsEngl.ljsoHTMLImageElement@cptIt,

jsoHmlElt.oHTMLInputElement

name::
* McsEngl.jsoHmlElt.oHTMLInputElement@cptIt,
* McsEngl.ljsoHTMLInputElement@cptIt,

jsoHmlElt.oHTMLInput-Button

name::
* McsEngl.jsoHmlElt.oHTMLInput-Button@cptIt,

jsoHmlElt.oHTMLInput-Checkbox

name::
* McsEngl.jsoHmlElt.oHTMLInput-Checkbox@cptIt,

jsoHmlElt.oHTMLInput-File

name::
* McsEngl.jsoHmlElt.oHTMLInput-File@cptIt,

jsoHmlElt.oHTMLInput-Hidden

name::
* McsEngl.jsoHmlElt.oHTMLInput-Hidden@cptIt,

jsoHmlElt.oHTMLInput-Password

name::
* McsEngl.jsoHmlElt.oHTMLInput-Password@cptIt,

jsoHmlElt.oHTMLInput-Radio

name::
* McsEngl.jsoHmlElt.oHTMLInput-Radio@cptIt,

jsoHmlElt.oHTMLInput-Reset

name::
* McsEngl.jsoHmlElt.oHTMLInput-Reset@cptIt,

jsoHmlElt.oHTMLInput-Submit

name::
* McsEngl.jsoHmlElt.oHTMLInput-Submit@cptIt,

jsoHmlElt.oHTMLInput-Text

name::
* McsEngl.jsoHmlElt.oHTMLInput-Text@cptIt,

jsoHmlElt.oHTMLKeygenElement

name::
* McsEngl.jsoHmlElt.oHTMLKeygenElement@cptIt,
* McsEngl.ljsoHTMLKeygenElement@cptIt,

jsoHmlElt.oHTMLLIElement

name::
* McsEngl.jsoHmlElt.oHTMLLIElement@cptIt,
* McsEngl.ljsoHTMLLIElement@cptIt,

jsoHmlElt.oHTMLLabelElement

name::
* McsEngl.jsoHmlElt.oHTMLLabelElement@cptIt,
* McsEngl.ljsoHTMLLabelElement@cptIt,

jsoHmlElt.oHTMLLegendElement

name::
* McsEngl.jsoHmlElt.oHTMLLegendElement@cptIt,
* McsEngl.ljsoHTMLLegendElement@cptIt,

jsoHmlElt.oHTMLLinkElement

name::
* McsEngl.jsoHmlElt.oHTMLLinkElement@cptIt,
* McsEngl.ljsoHTMLLinkElement@cptIt,

jsoHmlElt.oHTMLMapElement

name::
* McsEngl.jsoHmlElt.oHTMLMapElement@cptIt,
* McsEngl.ljsoHTMLMapElement@cptIt,

jsoHmlElt.oHTMLMarqueeElement

name::
* McsEngl.jsoHmlElt.oHTMLMarqueeElement@cptIt,
* McsEngl.ljsoHTMLMarqueeElement@cptIt,

jsoHmlElt.oHTMLMediaElement

name::
* McsEngl.jsoHmlElt.oHTMLMediaElement@cptIt,
* McsEngl.ljsoHTMLMediaElement@cptIt,

jsoHmlElt.oHTMLMenuElement

name::
* McsEngl.jsoHmlElt.oHTMLMenuElement@cptIt,
* McsEngl.ljsoHTMLMenuElement@cptIt,

jsoHmlElt.oHTMLMetaElement

name::
* McsEngl.jsoHmlElt.oHTMLMetaElement@cptIt,
* McsEngl.ljsoHTMLMetaElement@cptIt,

jsoHmlElt.oHTMLMeterElement

name::
* McsEngl.jsoHmlElt.oHTMLMeterElement@cptIt,
* McsEngl.ljsoHTMLMeterElement@cptIt,

jsoHmlElt.oHTMLModElement

name::
* McsEngl.jsoHmlElt.oHTMLModElement@cptIt,
* McsEngl.ljsoHTMLModElement@cptIt,

jsoHmlElt.oHTMLOListElement

name::
* McsEngl.jsoHmlElt.oHTMLOListElement@cptIt,
* McsEngl.ljsoHTMLOListElement@cptIt,

jsoHmlElt.oHTMLObjectElement

name::
* McsEngl.jsoHmlElt.oHTMLObjectElement@cptIt,
* McsEngl.ljsoHTMLObjectElement@cptIt,

jsoHmlElt.oHTMLOptGroupElement

name::
* McsEngl.jsoHmlElt.oHTMLOptGroupElement@cptIt,
* McsEngl.ljsoHTMLOptGroupElement@cptIt,

jsoHmlElt.oHTMLOptionElement

name::
* McsEngl.jsoHmlElt.oHTMLOptionElement@cptIt,
* McsEngl.ljsoHTMLOptionElement@cptIt,

jsoHmlElt.oHTMLOutputElement

name::
* McsEngl.jsoHmlElt.oHTMLOutputElement@cptIt,
* McsEngl.ljsoHTMLOutputElement@cptIt,

jsoHmlElt.oHTMLParagraphElement

name::
* McsEngl.jsoHmlElt.oHTMLParagraphElement@cptIt,
* McsEngl.ljsoHTMLParagraphElement@cptIt,

jsoHTMLParagraphElement:
> Object.getOwnPropertyNames(document.createElement('p')).sort()
Array[132]
[0 … 99]
0: "accessKey"
1: "align"
2: "attributes"
3: "baseURI"
4: "childElementCount"
5: "childNodes"
6: "children"
7: "classList"
8: "className"
9: "clientHeight"
10: "clientLeft"
11: "clientTop"
12: "clientWidth"
13: "contentEditable"
14: "dataset"
15: "dir"
16: "draggable"
17: "firstChild"
18: "firstElementChild"
19: "hidden"
20: "id"
21: "innerHTML"
22: "innerText"
23: "isContentEditable"
24: "lang"
25: "lastChild"
26: "lastElementChild"
27: "localName"
28: "namespaceURI"
29: "nextElementSibling"
30: "nextSibling"
31: "nodeName"
32: "nodeType"
33: "nodeValue"
34: "offsetHeight"
35: "offsetLeft"
36: "offsetParent"
37: "offsetTop"
38: "offsetWidth"
39: "onabort"
40: "onautocomplete"
41: "onautocompleteerror"
42: "onbeforecopy"
43: "onbeforecut"
44: "onbeforepaste"
45: "onblur"
46: "oncancel"
47: "oncanplay"
48: "oncanplaythrough"
49: "onchange"
50: "onclick"
51: "onclose"
52: "oncontextmenu"
53: "oncopy"
54: "oncuechange"
55: "oncut"
56: "ondblclick"
57: "ondrag"
58: "ondragend"
59: "ondragenter"
60: "ondragleave"
61: "ondragover"
62: "ondragstart"
63: "ondrop"
64: "ondurationchange"
65: "onemptied"
66: "onended"
67: "onerror"
68: "onfocus"
69: "oninput"
70: "oninvalid"
71: "onkeydown"
72: "onkeypress"
73: "onkeyup"
74: "onload"
75: "onloadeddata"
76: "onloadedmetadata"
77: "onloadstart"
78: "onmousedown"
79: "onmouseenter"
80: "onmouseleave"
81: "onmousemove"
82: "onmouseout"
83: "onmouseover"
84: "onmouseup"
85: "onmousewheel"
86: "onpaste"
87: "onpause"
88: "onplay"
89: "onplaying"
90: "onprogress"
91: "onratechange"
92: "onreset"
93: "onresize"
94: "onscroll"
95: "onsearch"
96: "onseeked"
97: "onseeking"
98: "onselect"
99: "onselectstart"
[100 … 131]
100: "onshow"
101: "onstalled"
102: "onsubmit"
103: "onsuspend"
104: "ontimeupdate"
105: "ontoggle"
106: "onvolumechange"
107: "onwaiting"
108: "onwebkitfullscreenchange"
109: "onwebkitfullscreenerror"
110: "onwheel"
111: "outerHTML"
112: "outerText"
113: "ownerDocument"
114: "parentElement"
115: "parentNode"
116: "prefix"
117: "previousElementSibling"
118: "previousSibling"
119: "scrollHeight"
120: "scrollLeft"
121: "scrollTop"
122: "scrollWidth"
123: "shadowRoot"
124: "spellcheck"
125: "style"
126: "tabIndex"
127: "tagName"
128: "textContent"
129: "title"
130: "translate"
131: "webkitdropzone"

jsoHmlElt.oHTMLParamElement

name::
* McsEngl.jsoHmlElt.oHTMLParamElement@cptIt,
* McsEngl.ljsoHTMLParamElement@cptIt,

jsoHmlElt.oHTMLPreElement

name::
* McsEngl.jsoHmlElt.oHTMLPreElement@cptIt,
* McsEngl.ljsoHTMLPreElement@cptIt,

jsoHmlElt.oHTMLProgressElement

name::
* McsEngl.jsoHmlElt.oHTMLProgressElement@cptIt,
* McsEngl.ljsoHTMLProgressElement@cptIt,

jsoHmlElt.oHTMLQuoteElement

name::
* McsEngl.jsoHmlElt.oHTMLQuoteElement@cptIt,
* McsEngl.ljsoHTMLQuoteElement@cptIt,

jsoHmlElt.oHTMLScriptElement

name::
* McsEngl.jsoHmlElt.oHTMLScriptElement@cptIt,
* McsEngl.ljsHTMLScriptElement@cptIt,
* McsEngl.ljsoHTMLScriptElement@cptIt,

_DESCRIPTION:
<script src="hitp/hitp.js"></script>

jsHTMLScriptElement.prototype.CHROME:
> Object.getOwnPropertyNames(HTMLScriptElement.prototype).sort()
["async", "charset", "constructor", "crossOrigin", "defer", "event", "htmlFor", "integrity", "src", "text", "type"]

jsoHmlElt.oHTMLSelectElement

name::
* McsEngl.jsoHmlElt.oHTMLSelectElement@cptIt,
* McsEngl.ljsoHTMLSelectElement@cptIt,

jsoHmlElt.oHTMLShadowElement

name::
* McsEngl.jsoHmlElt.oHTMLShadowElement@cptIt,
* McsEngl.ljsoHTMLShadowElement@cptIt,

jsoHmlElt.oHTMLSourceElement

name::
* McsEngl.jsoHmlElt.oHTMLSourceElement@cptIt,
* McsEngl.ljsoHTMLSourceElement@cptIt,

jsoHmlElt.oHTMLSpanElement

name::
* McsEngl.jsoHmlElt.oHTMLSpanElement@cptIt,
* McsEngl.ljsoHTMLSpanElement@cptIt,

jsoHmlElt.oHTMLStyleElement

name::
* McsEngl.jsoHmlElt.oHTMLStyleElement@cptIt,
* McsEngl.ljsoHTMLStyleElement@cptIt,

_DESCRIPTION:
Style object
The Style object represents an individual style statement.
The Style object can be accessed from the document or from the elements to which that style is applied.

_ADDRESS.WPG:
* http://www.w3schools.com/jsref/dom_obj_style.asp

_CODE.LJS:
> toString.call(document.createElement('style'))
"[object HTMLStyleElement]"
===

jsoHmlElt.oHTMLTableCaptionElement

name::
* McsEngl.jsoHmlElt.oHTMLTableCaptionElement@cptIt,
* McsEngl.ljsoHTMLTableCaptionElement@cptIt,

jsoHmlElt.oHTMLTableCellElement

name::
* McsEngl.jsoHmlElt.oHTMLTableCellElement@cptIt,
* McsEngl.ljsoHTMLTableCellElement@cptIt,

jsoHmlElt.oHTMLTableColElement

name::
* McsEngl.jsoHmlElt.oHTMLTableColElement@cptIt,
* McsEngl.ljsoHTMLTableColElement@cptIt,

jsoHmlElt.oHTMLTableElement

name::
* McsEngl.jsoHmlElt.oHTMLTableElement@cptIt,
* McsEngl.ljsoHTMLTableElement@cptIt,

jsoHmlElt.oHTMLTableRowElement

name::
* McsEngl.jsoHmlElt.oHTMLTableRowElement@cptIt,
* McsEngl.ljsoHTMLTableRowElement@cptIt,

jsoHmlElt.oHTMLTableSectionElement

name::
* McsEngl.jsoHmlElt.oHTMLTableSectionElement@cptIt,
* McsEngl.ljsoHTMLTableSectionElement@cptIt,

jsoHmlElt.oHTMLTemplateElement

name::
* McsEngl.jsoHmlElt.oHTMLTemplateElement@cptIt,
* McsEngl.ljsoHTMLTemplateElement@cptIt,

jsoHmlElt.oHTMLTextAreaElement

name::
* McsEngl.jsoHmlElt.oHTMLTextAreaElement@cptIt,
* McsEngl.ljsoHTMLTextAreaElement@cptIt,

jsoHmlElt.oHTMLTitleElement

name::
* McsEngl.jsoHmlElt.oHTMLTitleElement@cptIt,
* McsEngl.ljsoHTMLTitleElement@cptIt,

jsoHmlElt.oHTMLTrackElement

name::
* McsEngl.jsoHmlElt.oHTMLTrackElement@cptIt,
* McsEngl.ljsoHTMLTrackElement@cptIt,

jsoHmlElt.oHTMLUListElement

name::
* McsEngl.jsoHmlElt.oHTMLUListElement@cptIt,
* McsEngl.ljsoHTMLLUListElement@cptIt,

jsoHmlElt.oHTMLUnknownElement

name::
* McsEngl.jsoHmlElt.oHTMLUnknownElement@cptIt,
* McsEngl.ljsoHTMLUnknownElement@cptIt,

jsoHmlElt.oHTMLVideoElement

name::
* McsEngl.jsoHmlElt.oHTMLVideoElement@cptIt,
* McsEngl.ljsHTMLVideoElement@cptIt,
* McsEngl.ljsoHTMLVideoElement@cptIt,

* McsEngl.jsoEltVid@cptIt,
* McsEngl.ljsoEltVid@cptIt,

jsoEltVid.MEMBER:
> 2016-05-07 CHROME:
Object.getOwnPropertyNames(document.createElement('video')).sort()
[]
Object.getOwnPropertyNames(HTMLVideoElement.prototype).sort()
["constructor", "height", "poster", "videoHeight", "videoWidth", "webkitDecodedFrameCount", "webkitDisplayingFullscreen", "webkitDroppedFrameCount", "webkitEnterFullScreen", "webkitEnterFullscreen", "webkitExitFullScreen", "webkitExitFullscreen", "webkitSupportsFullscreen", "width"]

_CODE.LJS:
> document.createElement("video")
<video>?</video>?
> document.createElement("video") instanceof HTMLVideoElement
true

ljbhml'oNodeFilter > NodeFilter.prototype > Object.prototype

name::
* McsEngl.ljbhml'oNodeFilter > NodeFilter.prototype > Object.prototype@cptIt,

jsNodeFilter.prototype.CHROME:
//2015-11-22
* jsFILTER_ACCEPT: 1
* jsFILTER_REJECT: 2
* jsFILTER_SKIP: 3
* jsSHOW_ALL: 4294967295
* jsSHOW_ATTRIBUTE: 2
* jsSHOW_CDATA_SECTION: 8
* jsSHOW_COMMENT: 128
* jsSHOW_DOCUMENT: 256
* jsSHOW_DOCUMENT_FRAGMENT: 1024
* jsSHOW_DOCUMENT_TYPE: 512
* jsSHOW_ELEMENT: 1
* jsSHOW_ENTITY: 32
* jsSHOW_ENTITY_REFERENCE: 16
* jsSHOW_NOTATION: 2048
* jsSHOW_PROCESSING_INSTRUCTION: 64
* jsSHOW_TEXT: 4
* jsacceptNode: acceptNode()
* jsconstructor: NodeFilter()

ljbhml'oNodeIterator > NodeIterator.prototype > Object.prototype

name::
* McsEngl.ljbhml'oNodeIterator > NodeIterator.prototype > Object.prototype@cptIt,

jsNodeIterator.prototype:
> Object.getOwnPropertyNames(NodeIterator.prototype).sort()
["jsconstructor", "ljsdetach", "ljsfilter", "ljsnextNode", "ljspointerBeforeReferenceNode", "ljspreviousNode", "ljsreferenceNode", "ljsroot", "ljswhatToShow"]

jsexpandEntityReferences boolean:
Returns a Boolean value that indicates whether the children of entity reference nodes are visible to the NodeIterator or TreeWalker object.

jsfilter:
Returns the filtering that function belongs to the NodeIterator or TreeWalker object.

jsroot:
Returns the root element that was used to create the NodeIterator or TreeWalker object.

jswhatToShow:
Returns an integer that identifies the types of nodes that can be shown by the current NodeIterator or TreeWalker object.

jsdetach():
Releases the current NodeIterator object and puts the iterator into the invalid state.

jsnextNode():
Finds the next node relative to the current node in the ordered list represented by the current NodeIterator object or in the tree represented by the current TreeWalker object. If it exists, it will be made the current node and returned, else the current node is retained and null is returned.

previousNode():
Finds the previous node relative to the current node in the ordered list represented by the current NodeIterator object or in the tree represented by the current TreeWalker object. If it exists, it will be made the current node and returned, else the current node is retained and null is returned.

jscreateNodeIterator

_DESCRIPTION:
Creates a NodeIterator object that can be used to iterate through the nodes in a subtree.
Note: The createNodeIterator method is supported and implemented in Firefox from version 3.5. In the earlier versions of Firefox, it is supported but not implemented, using it raises an exception.
The NodeIterator object represents the result of the createNodeIterator method as an ordered list. The members of the NodeIterator object can be used to navigate through the result list. For a detailed description, please see the page for the NodeIterator object.

The createTreeWalker method and the TreeWalker object are similar to the createNodeIterator method and the NodeIterator object. The main difference is that the TreeWalker object represents the result as a tree not as an ordered list.
Syntax:
object.createNodeIterator (rootNode, nodeType, filterFunction, entityRefExpansion);
[http://help.dottoro.com/ljwoeapj.php]

ljbhml'oTreeWalker > TreeWalker.prototype > Object.prototype

name::
* McsEngl.ljbhml'oTreeWalker > TreeWalker.prototype > Object.prototype@cptIt,
* McsEngl.ljsoTreeWalker@cptIt,
* McsEngl.ljsTreeWalker@cptIt,

_DESCRIPTION:
Represents the result of the createTreeWalker method as a tree.
Note: The TreeWalker object is supported in Internet Explorer from version 9.
The elements of the resulting tree refer to the nodes in the document that fulfill the conditions specified for the createTreeWalker method. An element (element1) is an ancestor of other element (element2) in the resulting tree if and only if the node referred to by the element1 is an ancestor of the node referred to by the element2 in the document tree. An element (element1) precedes another element (element2) in the resulting tree if and only if the node referred to by the element1 precedes the node referred to by the element2 in the document tree.
The root, whatToShow, filter and expandEntityReferences properties of the TreeWalker object retrieve the settings that were specified earlier for the createTreeWalker method to create the TreeWalker object. The other members can be used to navigate through the resulting tree.
The createNodeIterator method and the NodeIterator object are similar to the createTreeWalker method and the TreeWalker object. The main difference is that the NodeIterator object represents the result as an ordered list not as a tree.
[http://help.dottoro.com/ljncphmi.php]

jsoTreeWalker'creating

name::
* McsEngl.jsoTreeWalker'creating@cptIt,

createTreeWalker > Document.prototype#ql:jsdocument.prototype#

name::
* McsEngl.ljscreateTreeWalker@cptIt,

_DESCRIPTION:
Creates a TreeWalker object that can be used to navigate through the nodes in a subtree.
Note: The createTreeWalker method is supported in Internet Explorer from version 9.
The TreeWalker object represents the result of the createTreeWalker method as a tree. The members of the TreeWalker object can be used to navigate through the resulting tree. For a detailed description, please see the page for the TreeWalker object.
The createNodeIterator method and the NodeIterator object are similar to the createTreeWalker method and the TreeWalker object. The main difference is that the NodeIterator object represents the result as an ordered list not as a tree.
Syntax:
object.createTreeWalker (rootNode, nodeType, filterFunction, entityRefExpansion);
- rootNode: Reference to a node that will be the root node of the TreeWalker object.
- nodeType: Integer that specifies the type of nodes to show.
- filterFunction: Reference to a user-specified function that can filter nodes.
- entityRefExpansion: Boolean whether EntityReference visible. false are hidden.
[http://help.dottoro.com/ljcnbgxu.php]

_CODE.LJS:
//firefox wants function(){return 1} NOT NodeFilter.FILTER_ACCEPT
oTreeWalker = document.createTreeWalker(oNodeRoot, NodeFilter.SHOW_ALL, function(){return 1}, false);
===
oTreeWalker = document.createTreeWalker(parentNode, NodeFilter.SHOW_ALL, NodeFilter.FILTER_ACCEPT, false);
oTreeWalker.currentNode = node;
===
function ElementChecker (node) {
if (node.tagName.toLowerCase () == 'button') {
return NodeFilter.FILTER_ACCEPT;
}
return NodeFilter.FILTER_SKIP;
}

walker = document.createTreeWalker (document, NodeFilter.SHOW_ELEMENT, ElementChecker, false);
[http://help.dottoro.com/ljcnbgxu.php]

jsoTreeWalker'TreeWalker.prototype > Object.prototype

name::
* McsEngl.jsoTreeWalker'TreeWalker.prototype > Object.prototype@cptIt,

jsTreeWalker.prototype.CHROME:
> Object.getOwnPropertyNames(TreeWalker.prototype).sort()
["jsconstructor", "ljscurrentNode", "ljsfilter", "ljsfirstChild", "ljslastChild", "ljsnextNode", "ljsnextSibling", "ljsparentNode", "ljspreviousNode", "ljspreviousSibling", "ljsroot", "ljswhatToShow"]

jscurrentNode oNode:
Sets or retrieves a reference to the node where the pointer of the TreeWalker is currently positioned.

jsexpandEntityReferences boolean:
Returns a Boolean value that indicates whether the children of entity reference nodes are visible to the NodeIterator or TreeWalker object.

jsfilter oNodeFilter:
Returns the filtering that function belongs to the NodeIterator or TreeWalker object.

jsroot oNode:
Returns the root element that was used to create the NodeIterator or TreeWalker object.

jswhatToShow number:
Returns an integer that identifies the types of nodes that can be shown by the current NodeIterator or TreeWalker object.

jsfirstChild():
Finds the first child of the current node in the tree represented by the current TreeWalker object. If it exists, it will be made the current node and returned, else the current node is retained and null is returned.

jslastChild():
Finds the last child of the current node in the tree represented by the current TreeWalker object. If it exists, it will be made the current node and returned, else the current node is retained and null is returned.

jsnextNode():
Finds the next node relative to the current node in the ordered list represented by the current NodeIterator object or in the tree represented by the current TreeWalker object. If it exists, it will be made the current node and returned, else the current node is retained and null is returned.

jsnextSibling():
Finds the next sibling of the current node in the tree represented by the current TreeWalker object. If it exists, it will be made the current node and returned, else the current node is retained and null is returned.

jsparentNode():
Finds the parent node of the current node in the tree represented by the current TreeWalker object. If it exists, it will be made the current node and returned, else the current node is retained and null is returned.

jspreviousNode():
Finds the previous node relative to the current node in the ordered list represented by the current NodeIterator object or in the tree represented by the current TreeWalker object. If it exists, it will be made the current node and returned, else the current node is retained and null is returned.

jspreviousSibling():
Finds the previous sibling of the current node in the tree represented by the current TreeWalker object. If it exists, it will be made the current node and returned, else the current node is retained and null is returned.

jsnextNode()

_DESCRIPTION:
Finds the next node relative to the current node in the ordered list represented by the current NodeIterator object or in the tree represented by the current TreeWalker object. If it exists, it will be made the current node and returned, else the current node is retained and null is returned.
Note: The TreeWalker and NodeIterator objects and their nextNode methods are supported in Internet Explorer from version 9.
The NodeIterator object represents the result of the createNodeIterator method as an ordered list. The elements of the ordered list refer to the nodes in the document that fulfill the conditions specified for the createNodeIterator method. For further details, please see the page for the NodeIterator object.
The TreeWalker object represents the result of the createTreeWalker method as a tree. The elements of the resulting tree refer to the nodes in the document that fulfill the conditions specified for the createTreeWalker method. For further details, please see the page for the TreeWalker object.
[http://help.dottoro.com/ljwqpseo.php]

ljbhml'parser

name::
* McsEngl.ljbhml'parser@cptIt,
* McsEngl.ljsalgo.HTML-Parser@cptIt,
* McsEngl.ljs'html-parser@cptIt,

HTML Parser By John Resig (ejohn.org)
* http://ejohn.org/files/htmlparser.js,

ljbhml'resource

name::
* McsEngl.ljbhml'resource@cptIt,

_ADDRESS.WPG:
* https://dom-tutorials.appspot.com/static/index.html,
* http://help.dottoro.com/ljhrmrfb.php, html-dom objects, The Dottoro Web Reference was created to promote the development of cross-browser web pages on all platforms.
* http://domenlightenment.com//
* http://nbubna.github.io/HTML//: library,
* http://www.sitepoint.com/jquery-vs-raw-javascript-1-dom-forms//

ljbalgo.DOM.SVG-PROCESSING

name::
* McsEngl.ljbalgo.DOM.SVG-PROCESSING@cptIt,
* McsEngl.ljssvg@cptIt,

_WHOLE:
* SVG#ql:svg_cptresource#

jssvg'resource

name::
* McsEngl.jssvg'resource@cptIt,

_ADDRESS.WPG:
* http://www.i-programmer.info/programming/graphics-and-imaging/3254-svg-javascript-and-the-dom.html,

ljbalgo.DOM.XML-PROCESSING

name::
* McsEngl.ljbalgo.DOM.XML-PROCESSING@cptIt,
* McsEngl.ljsxml@cptIt,

jsxml'XMLDocument

name::
* McsEngl.jsxml'XMLDocument@cptIt,

_CODE.LJS:
var fruitDocType = document.implementation.createDocumentType ("fruit", "SYSTEM", "<!ENTITY tf 'tropical fruit'>");
var xmlDoc = document.implementation.createDocument ("", "fruits", fruitDocType);

var fruitNode = xmlDoc.createElement ("fruit");
fruitNode.setAttribute ("name" , "avocado");
xmlDoc.documentElement.appendChild (fruitNode);

var serializer = new XMLSerializer();
alert (serializer.serializeToString (xmlDoc));
[http://help.dottoro.com/ljbiflam.php]

XMLDocument.prototype > Document.prototype#ql:jsdocument.prototype# > Node.prototype ...

jsXMLDocument.prototype.CHROME:
> Object.getOwnPropertyNames(XMLDocument.prototype)
["constructor"]

jsxml'XMLSerializer > Object.prototype

name::
* McsEngl.jsxml'XMLSerializer > Object.prototype@cptIt,

jsXMLSerializer.prototype.CHROME:
Object.getOwnPropertyNames(XMLSerializer.prototype)
["serializeToString", "constructor"]

ljbalgo.EVENT-PROCESSING

name::
* McsEngl.ljbalgo.EVENT-PROCESSING@cptIt,
* McsEngl.ljshtml'oEvent@cptIt,
* McsEngl.ljsoEvent@cptIt,
* McsEngl.ljs'event@cptIt,
* McsEngl.ljsevent@cptIt,
* McsEngl.ljsevt'action@cptIt,
* McsEngl.ljs'dom-event@cptIt,
* McsEngl.ljs'event@cptIt,
* McsEngl.ljs'event-model@cptIt,
* McsEngl.ljs'event-system@cptIt,

* McsEngl.jsevt@cptIt,
* McsEngl.ljsevt@cptIt,
====== lagoGreek:
* McsElln.τσ'συμβάν-advb@cptIt,
* McsElln.τσ'γεγονός-advb@cptIt,

ljbevt'DEFINITION

name::
* McsEngl.ljbevt'DEFINITION@cptIt,

_DEFINITION:
Events are processes that call commands when they happen in the-objects (targets) they are attached.
[hmnSngo.2016-02-01]
===
Event is a-js-object which
- is-attatched on a-dom-node and
- executes a-function
- uppon a doing detecting by the-dom-node.
[hmnSngo.2015-03-31]
===
Events are actions that can be detected by javascript.
[http://www.echoecho.com/javascript8.htm]
===
An event allows for signaling that something has occurred. E.g. that an image has completed downloading. It is represented by the Event interface or an interface that inherits from the Event interface.
[http://dom.spec.whatwg.org/#concept-event]
===
The building blocks of an interactive web page is the JavaScript event system. An event in JavaScript is something that happens with or on the webpage. A few example of events:
- A mouse click
- The webpage loading
- Mousing over a hot spot on the webpage, also known as hovering
- Selecting an input box in an HTML form
- A keystroke
[http://www.tizag.com/javascriptT/javascriptevents.php]
===
Events are actions that can be detected by JavaScript.
[http://www.w3schools.com/js/js_events.asp]
===
Με τον όρο συμβάντα (ή γεγονότα - events) αναφερόμαστε σε ΕΝΕΡΓΕΙΕΣ τις οποίες πραγματοποιεί ο ΧΡΗΣΤΗΣ στη διασύνδεση γραφικώ (GUI), όπως η τοποθέτηση του δείκτη του ποντικιού πάνω σε μια εικόνα, το πάτημα ενός πλήκτρου, το άνοιγμα ή το κλείσιμο ενός παραθύρου, η επιλογή ενός στοιχείου μιας λίστας κοκ. Μόλις λάβει χώρα ένα τέτοιο συμβάν εκτελείται ειδικός κώδικας, ο οποίος πραγματοποιεί κάποιες λειτουργίες που είναι συνδεδεμένες με αυτό. Το τμήμα αυτό του κώδικα ονομάζεται "χειριστής συμβάντων" (event handler).
[Λιακέας, Η γλώσσα JavaScript. 2002, 113]

ljbevt'browser-support

name::
* McsEngl.ljbevt'browser-support@cptIt,

ljbevt'doing.1.CREATING

name::
* McsEngl.ljbevt'doing.1.CREATING@cptIt,
* McsEngl.ljsevt'creating@cptIt,
* McsEngl.ljsevent'creating@cptIt,

_DESCRIPTION:
1) CREATE an-event object.
2) ADD an-event-listener to a-target-element
3) INVOKE the-event from the-target when you think.
[hmnSngo.2015-10-29]

_CODE.LJS:
// Events can be created with the Event constructor as follows:
var event = new Event('build');
// Listen for the event.
elem.addEventListener('build', function (e) { ... }, false);
// Dispatch the event.
elem.dispatchEvent(event);
[https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events]
===
// Define a new event.
var SpecialEvent = new CustomEvent(
"SpecialMessage",
{
detail:
{
message: "Hello There",
time: new Date()
},
bubbles: true,
cancelable: true
});
[http://www.dummies.com/how-to/content/how-to-create-custom-events-in-javascript-to-progr.html]
===
// First create the event
var myEvent = new CustomEvent("userLogin", {
 detail: {
   username: "davidwalsh"
 }
});
[http://davidwalsh.name/customevent]

===
The old-fashioned way

The older approach to creating events uses APIs inspired by Java. The following shows an example:

// Create the event.
var event = document.createEvent('Event');

// Define that the event name is 'build'.
event.initEvent('build', true, true);

// Listen for the event.
document.addEventListener('build', function (e) {
// e.target matches document from above
}, false);

// target can be any Element or other EventTarget.
document.dispatchEvent(event);

ljbevt'doing.2.ADDING-LISTENER (attaching)

name::
* McsEngl.ljbevt'doing.2.ADDING-LISTENER (attaching)@cptIt,
* McsEngl.ljsevt'adding-listener@cptIt,
* McsEngl.ljsevent'adding@cptIt,
* McsEngl.ljsevent'assigning@cptIt,
* McsEngl.ljsevent'binding@cptIt,
* McsEngl.ljsevent'listening@cptIt,
* McsEngl.ljsevent'on@cptIt,
* McsEngl.ljsevent'registration@cptIt,
* McsEngl.ljs'attaching-event@cptIt,

_DESCRIPTION:
Registers an event handler function (event listener) FOR the specified event ON the current object.
[http://help.dottoro.com/ljinxrmt.php]
===
Adding handler-function to target-element.
[hmnSngo.2014-11-12]
===
For most browsers following the W3C standards, the function addEventListener is used for attaching events, and the function removeEventListener is used to detach them. They work in the following manner:

var element = document.getElementById("myFavoriteElement");
element.addEventListener("click", myFavoriteFunction, false);
element.removeEventListener("click", myFavoriteFunction, false);

That seems pretty straightforward - except what does the last parameter to that function mean? That parameter is there because in the W3C standard there are two possible times that any event can be triggered. One is during the capture phase, and the other is during the bubble phase. The capture phase goes first - which is as an event travels downward through parent nodes to reach the final child destination node. The bubble phase is the opposite direction - as an event travels back upward from its destination node (again passing through all the parents). So, for instance, if you had an image in a table cell, which is in a table row, in a table, which is in on an html page, and you clicked on the image, the following would happen in the W3C event model. First, if anything is attached to the document onclick event for the capturing phase, it would fire. Then the table would be checked, and then the row, and then the cell, and finally the image itself. Anything attached to the onclick event for those elements, and set to go off in the capturing phase, will be fired. Then the event bubbles: the onclick for the image again would be checked, but this time for the bubbling phase. And then again with the table cell, and then the table row, the table itself, and finally the document. This gives you, as a developer, an extreme amount of flexibility as to when your event will fire.
[http://www.switchonthecode.com/tutorials/javascript-working-with-events]
===
But of course, Microsoft has its own set of standards. Which means that in Internet Explorer, there the functions to attach and remove events are different: attachEvent and detachEvent. And, similar to the W3C methods, they are used in the following way:

var element = document.getElementById("myFavoriteElement");
element.attachEvent("onclick", myFavoriteFunction);
element.detachEvent("onclick", myFavoriteFunction);
[http://www.switchonthecode.com/tutorials/javascript-working-with-events]
===
Now, we don't want to have to worry about these differences when we are writing javascript code - so it is generally best to hide these incompatibilities with a wrapper. And that is exactly what we have here:

function hookEvent(element, eventName, callback)
{
if(typeof(element) == "string")
element = document.getElementById(element);
if(element == null)
return;
if(element.addEventListener)
element.addEventListener(eventName, callback, false);
else if(element.attachEvent)
element.attachEvent("on" + eventName, callback);
}
[http://www.switchonthecode.com/tutorials/javascript-working-with-events]

_CODE.LJS:
* oElt.onclick = function
===
// Events can be created with the Event constructor as follows:
var event = new Event('build');
// Listen for the event.
elem.addEventListener('build', function (e) { ... }, false);
// Dispatch the event.
elem.dispatchEvent(event);
[https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events]

ljbevt'attachEvent

name::
* McsEngl.ljbevt'attachEvent@cptIt,

_DESCRIPTION:
The attachEvent method only works in Internet Explorer and Opera, use the addEventListener method in Firefox, Google Chrome and Safari (and Opera and Internet Explorer from version 9).
Use the detachEvent method to remove an event listener that has been registered with the attachEvent method. If a mouse event needs to be captured, use the setCapture method.
[http://help.dottoro.com/ljinxrmt.php]

ljbevt'doing.2.REMOVING-LISTENER (detaching)

name::
* McsEngl.ljbevt'doing.2.REMOVING-LISTENER (detaching)@cptIt,
* McsEngl.ljsevt'removing@cptIt,
* McsEngl.ljsoEvent'doing.REMOVING@cptIt,
* McsEngl.ljs'detaching'event@cptIt,

_DESCRIPTION:
This technique can also be used to remove an event - by setting that property back to null:

var element = document.getElementById("myFavoriteElement");
element.onclick = null;
[http://www.switchonthecode.com/tutorials/javascript-working-with-events]

ljbevt'doing.3.DISPATCHING (sending)

name::
* McsEngl.ljbevt'doing.3.DISPATCHING (sending)@cptIt,
* McsEngl.event-calling.javascript@cptIt,
* McsEngl.event-dispatching.javascript@cptIt,
* McsEngl.event-invoking.javascript@cptIt,
* McsEngl.event-occuring.javascript@cptIt,
* McsEngl.event-sending.javascript@cptIt,
* McsEngl.event-triggering.javascript@cptIt,
* McsEngl.ljsevt'invoking@cptIt,
* McsEngl.ljsevent'dispatching@cptIt,
* McsEngl.ljsevent'doing.FIRING@cptIt,
* McsEngl.ljsevent'invoking@cptIt,
* McsEngl.ljsevent'occuring@cptIt,
* McsEngl.ljsevent'triggering@cptIt,
* McsEngl.ljs'event'dispatching@cptIt,
* McsEngl.ljs'event'sending@cptIt,
* McsEngl.ljs'event'flow@cptIt,

_DESCRIPTION:
Denote the triggering ACTION, eg clicking a button, hovering a control, ...
[hmnSngo.2014-11-12]
===
Fire in the context of DOM is short for creating, initializing, and dispatching an event. Fire an event makes that process easier to write down. If the event needs its bubbles or cancelable attribute initialized, one could write "fire an event named submit with its cancelable attribute initialized to true".
[http://dom.spec.whatwg.org/#firing-events]
===
When an event is invoked the event flows or propagates through the DOM, firing the same event on other nodes and JavaScript objects. The event flow can be programmed to occur as a capture phase (i.e. DOM tree trunk to branch) or bubbling phase (i.e. DOM tree branches to trunk), or both.
[http://domenlightenment.com/#11.3]

_CODE.LJS:
_CODE.LJS:
// Events can be created with the Event constructor as follows:
var event = new Event('build');
// Listen for the event.
elem.addEventListener('build', function (e) { ... }, false);
// Dispatch the event.
elem.dispatchEvent#ql:jsdispatchevent#(event);
[https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events]
===
function FireEvent()
{
// Obtain the object reference.
var Label = document.getElementById("CustomLabel");

// Fire the event.
Label.dispatchEvent(SpecialEvent);
}
[http://www.dummies.com/how-to/content/how-to-create-custom-events-in-javascript-to-progr.html]
===
// Trigger it!
myElement.dispatchEvent(myEvent);
[http://davidwalsh.name/customevent]

ljbevt'order (phase)

name::
* McsEngl.ljbevt'order (phase)@cptIt,
* McsEngl.ljsevt'phase@cptIt,

_DESCRIPTION:
The basic problem is very simple. Suppose you have a element inside an element
--------------------------------
| element1 |
| ------------------------- |
| |element2 | |
| ------------------------- |
| |
--------------------------------
and both have an onClick event handler. If the user clicks on element2 he causes a click event in both element1 and element2. But which event fires first? Which event handler should be executed first? What, in other words, is the event order?
Two models
Not surprisingly, back in the bad old days Netscape and Microsoft came to different conclusions.
* Netscape said that the event on element1 takes place first. This is called event capturing.
* Microsoft maintained that the event on element2 takes precedence. This is called event bubbling.
The two event orders are radically opposed. Explorer only supports event bubbling. Mozilla, Opera 7 and Konqueror support both. Older Opera's and iCab support neither.
[http://www.quirksmode.org/js/events_order.html]
===
1. When an event occurs, the event listeners that capture the event are called (capturing phase).
2. After this phase, the event will be dispatched to the original target element (target phase).
3. Finally, if the event propagates up, then it will be dispatched to the ancestor elements of the original target element (bubbling phase).
[http://help.dottoro.com/ljogqtqm.php]
===
1. If an event is captured by event listeners, then the event processing starts with the capturing phase. In that phase, the event listeners that capture the event are called.
2. After that phase or if the event is not captured, the target phase follows. In that phase, the event is dispatched to the target element.
3. Finally, in the last phase (bubbling phase), the event propagates up the DOM hierarchy.
[http://help.dottoro.com/ljjeesba.php]

ljbevt'eventPhase > Event.prototype#ql:jsevent.prototype#

name::
* McsEngl.ljbevt'eventPhase > Event.prototype@cptIt,
* McsEngl.ljseventPhase@cptIt,

_DESCRIPTION:
Returns an integer value that indicates the current processing phase of an event.
[http://help.dottoro.com/ljjeesba.php]

ljbevt'dispatchEvent

name::
* McsEngl.ljbevt'dispatchEvent@cptIt,

ljbevt'doing.dispatching.CAPTURING (==>)

name::
* McsEngl.ljbevt'doing.dispatching.CAPTURING (==>)@cptIt,
* McsEngl.ljsevt'capturing@cptIt,
* McsEngl.ljsevt'Capture-Phase@cptIt,
* McsEngl.ljsevent'Capture-Phase@cptIt,
* McsEngl.ljsoEvent'Capture-Phase@cptIt,
* McsEngl.ljs'event'detection.top-down@cptIt,

_DESCRIPTION:
The capture phase goes first - which is as an event travels downward through parent nodes to reach the final child destination node.
[http://www.switchonthecode.com/tutorials/javascript-working-with-events]

_DESCRIPTION:
In Firefox, Opera, Google Chrome and Safari, events can be captured by event listeners, not by objects. Internet Explorer also supports this mechanism from version 9.
The addEventListener method can be used to register event listeners for capturing.
The capturing mechanism works differently in different browsers.
In Internet Explorer, the setCapture method can be used for set the mouse capture to an object.
[http://help.dottoro.com/ljogqtqm.php]
===
The setCapture method only works in Internet Explorer, use the addEventListener#ql:jsaddEventListener# method for event capturing in Firefox, Opera, Google Chrome and Safari (and optionally in Internet Explorer from version 9).
[http://help.dottoro.com/ljrtxexf.php]

ljbevt'setCapture

name::
* McsEngl.ljbevt'setCapture@cptIt,

ljbevt'doing.dispatching.PROPAGATING|BUBBLING (<==)

name::
* McsEngl.ljbevt'doing.dispatching.PROPAGATING|BUBBLING (<==)@cptIt,
* McsEngl.ljsevt'bubbling@cptIt,
* McsEngl.ljsevt'bubbling-up@cptIt,
* McsEngl.ljsevt'propagating-up@cptIt,
* McsEngl.ljsevt'propagation@cptIt,
* McsEngl.ljsevt'Bubble-Phase@cptIt,
* McsEngl.ljsevent'Bubble-Phase@cptIt,
* McsEngl.ljsoEvent'Bubble-Phase@cptIt,
* McsEngl.ljs'event'detection.bottom-up@cptIt,

_DESCRIPTION:
The bubble phase is the opposite direction - as an event travels back upward from its destination node (again passing through all the parents).
[http://www.switchonthecode.com/tutorials/javascript-working-with-events]

_DESCRIPTION:
There are two types of events, one propagates up the DOM hierarchy, the other does not.
For example the onclick event bubbles up the DOM hierarchy, the onfocus event does not.
onclick (bubbles up):
When the user clicks on a button, an onclick event is sent to the button element first.
After that, the onclick event is sent to the parent element of the button.
After that, the onclick event is sent to the parent element of the parent element of the button, and so on ...
onfocus (does not bubbles up):
The onfocus event is sent only to the button element.
When an event can bubble up, you can stop its propagation with the cancelBubble property or the stopPropagation method. Use the stopPropagation method in Firefox, Opera, Google Chrome and Safari, because the cancelBubble property is deprecated in those browsers. Internet Explorer also supports the stopPropagation method from version 9. In Internet Explorer before version 9, use the cancelBubble property, because the stopPropagation method is not supported.
With the cancelBubble property, you cannot allow the propagation of events that cannot bubble up, you can only prevent the propagation of events that can. Note that the use of the stopPropagation method or the cancelBubble property on an event that cannot propagate does not cause an error.
The properties and methods mentioned above are related to event propagation. If you need to suppress the default action for an event, then see the page for the preventDefault method or the returnValue property. If you need more information about event propagation and capturing, see the page for the event object.
[http://help.dottoro.com/ljsgdvke.php]

ljbevt'bubbles boolean

name::
* McsEngl.ljbevt'bubbles boolean@cptIt,
* McsEngl.ljsbubbles@cptIt,

_DESCRIPTION:
Returns a Boolean value that indicates whether the current event can propagate up the DOM hierarchy or not.
[http://help.dottoro.com/ljghpfmx.php]

ljbevt'cancelBubble boolean

name::
* McsEngl.ljbevt'cancelBubble boolean@cptIt,
* McsEngl.ljscancelBubble@cptIt,

_DESCRIPTION:
Sets or retrieves a Boolean value that indicates whether the current event should propagate up the DOM hierarchy, or not.
When an event can bubble up, you can stop its propagation with the cancelBubble property or the stopPropagation method. Use the stopPropagation method in Firefox, Opera, Google Chrome and Safari, because the cancelBubble property is deprecated in those browsers. Internet Explorer also supports the stopPropagation method from version 9. In Internet Explorer before version 9, use the cancelBubble property, because the stopPropagation method is not supported.
[http://help.dottoro.com/ljsgdvke.php]

ljbevt'stopPropagation-function#ql:jsstopPropagation#

name::
* McsEngl.ljbevt'stopPropagation-function@cptIt,

ljbevt'doing.4.CANCELING

name::
* McsEngl.ljbevt'doing.4.CANCELING@cptIt,
* McsEngl.ljsevt'canceling@cptIt,

_DESCRIPTION:
When an event is canceled, the default action that belongs to the event will not be executed.
If an event is cancelable, you can use the preventDefault method and the returnValue property to cancel the event.
Not every event can be canceled.
You can get whether an event can be canceled with the cancelable property in all browsers except in Internet Explorer before version 9. Although the cancelable property exists in Firefox, it always returns true, regardless of the cancelable state of the event. There is no way to determine whether an event can be canceled in Internet Explorer before version 9.
Note that the use of the preventDefault method and the returnValue property on a non-cancelable event does not cause an error.
When an event handler returns false, the event will be canceled.
You can use it instead of the preventDefault method and the returnValue property.
The properties and methods mentioned above do not affect the propagation of events.
If you need to prevent the propagation of an event in the DOM hierarchy, use the cancelBubble property or the stopPropagation method.
[http://help.dottoro.com/ljpbqcqb.php]

ljbevt'cancelable boolean

name::
* McsEngl.ljbevt'cancelable boolean@cptIt,
* McsEngl.ljscancelable@cptIt,

ljbevt'preventDefault-function

name::
* McsEngl.ljbevt'preventDefault-function@cptIt,

ljbevt'returnValue boolean

name::
* McsEngl.ljbevt'returnValue boolean@cptIt,
* McsEngl.ljsreturnValue@cptIt,

_DESCRIPTION:
Sets or retrieves a Boolean value that indicates whether the current event is canceled.
[http://help.dottoro.com/ljpbqcqb.php]

ljbevt'listener (action|function|handler)

name::
* McsEngl.ljbevt'listener (action|function|handler)@cptIt,
* McsEngl.ljs'event-handler@cptIt,
* McsEngl.ljsevent'handler@cptIt,
* McsEngl.ljsevt'action@cptIt,
* McsEngl.ljsevt'function@cptIt,
* McsEngl.ljsevt'handler-function@cptIt,
* McsEngl.ljsevt'listener-function@cptIt,
* McsEngl.ljs'code.event-handler@cptIt,
* McsEngl.ljs'event'listener@cptIt,

=== _NOTES: a-listener is attached to a-target.
a-listener is registered to an-event.
a-listener is bound to an-event.

_DESCRIPTION:
For a script to react on the event, there should be a function assigned to it.
Functions which react on events are called event handlers. They are usually named like "on+event type", for instance: onclick.
[http://javascript.info/tutorial/introduction-browser-events]
===
An event listener associates a callback with a specific event. Each event listener consists of a type (of the event), callback, and capture variable.
The callback is named EventListener for historical reasons. As can be seen from the definition above, an event listener is a more broad concept.
[http://dom.spec.whatwg.org/#concept-event-listener]
===
Most of the functions of JavaScript are invoked within a FORM or document with the help of Event Handlers. Each FORM type has a set of events that it responds to such a selecting a checkbox or defocusing or "blurring the focus" of a text field. The complete list of event handlers and what event they respond to is shown below:
- onBlur when an text, selection, or textarea field looses focus
- onChange when a selection, text, textarea field is modified or looses focus
- onClick when a button, checkbox, link, or radio object is clicked or selected
- onFocus when a selection, text, or textarea field is focused
- onLoad when a window or a FRAME is loaded
- onMouseOver when the mouse is moved over a hyperlink
- onSelect when text in a text or textarea field is selected
- onSubmit when a FORM is submitted
- onUnload when a window or FRAMESET is closed or a new page is displayed
An event handler is added as a new parameter to a given tag. For example,

<INPUT TYPE="button" VALUE="Total Amount" ONCLICK="doTotalAmount(this)">
This example will attempt to perform a calculation as described by the text. It uses the new Button type input field, which is used only with client-side scripting.

<A HREF="second_page.html" ONMOUSEOVER="window.status='Go on to Page 2'; return true;">Next Page</A>
The second example shows a quick way for you to display a text message in the status bar of the browser about the link the user is about to select.
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

jsoEvent'handler.INLINE

name::
* McsEngl.jsoEvent'handler.INLINE@cptIt,
* McsEngl.ljs'HTML-inline-event-handler@cptIt,
* McsEngl.ljs'inline-event-handler@cptIt,

=== _NOTES: A property event handler historically has been refered to as a "DOM level 0 event". And the addEventListener() is often refered to as a "DOM level 2 event". Which is rather confusing considering there is no level 0 event or level 1 event. Addintioanlly, inline event handlers are known to be called, "HTML event handlers".
[http://domenlightenment.com/#11.1]

_DESCRIPTION:
Element nodes typically support inline event handlers (e.g. <div onclick=""></div>),
[http://domenlightenment.com/#11.1]

jsoEvent'handler.METHOD

name::
* McsEngl.jsoEvent'handler.METHOD@cptIt,
* McsEngl.ljs'DOM-level-2-event@cptIt,
* McsEngl.ljs'method-event-handler@cptIt,

=== _NOTES: A property event handler historically has been refered to as a "DOM level 0 event". And the addEventListener() is often refered to as a "DOM level 2 event". Which is rather confusing considering there is no level 0 event or level 1 event. Addintioanlly, inline event handlers are known to be called, "HTML event handlers".
[http://domenlightenment.com/#11.1]

_DESCRIPTION:
Element nodes typically support inline event handlers (e.g. <div onclick=""></div>), property event handlers (e.g. document.querySelector('div').onclick = function(){}), and the use of the addEventListener() method.
[http://domenlightenment.com/#11.1]

jsoEvent'handler.PROPERTY

name::
* McsEngl.jsoEvent'handler.PROPERTY@cptIt,
* McsEngl.ljs'DOM-level-0-event@cptIt,
* McsEngl.ljs'property-event-handler@cptIt,

=== _NOTES: A property event handler historically has been refered to as a "DOM level 0 event". And the addEventListener() is often refered to as a "DOM level 2 event". Which is rather confusing considering there is no level 0 event or level 1 event. Addintioanlly, inline event handlers are known to be called, "HTML event handlers".
[http://domenlightenment.com/#11.1]

_DESCRIPTION:
property event handlers (e.g. document.querySelector('div').onclick = function(){}),
[http://domenlightenment.com/#11.1]

ljbevt'name

name::
* McsEngl.ljbevt'name@cptIt,

_DESCRIPTION:
Event name: A string containing the name that you want to use for the event. The name can be anything you want, but it can’t contain any whitespace characters, such as the space. Use an underscore (_), if desired, to separate words.
[http://www.dummies.com/how-to/content/how-to-create-custom-events-in-javascript-to-progr.html]

ljbevt'object (oEvt)

name::
* McsEngl.ljbevt'object (oEvt)@cptIt,
* McsEngl.ljsoEvt@cptIt,

_SPECIFIC:
* Event.prototype#ql:jsevent.prototype# > Object.prototype
* EventTarget.prototype#ql:jseventtarget.prototype# > Object.prototype
* CustomEvent.prototype > Event.prototype#ql:jsevent.prototype# > Object.prototype
* UIEvent.prototype#ql:jsUIEvent.prototype# > Event.prototype#ql:jsevent.prototype# > Object.prototype
* KeyboardEvent.prototype > UIEvent.prototype#ql:jsUIEvent.prototype# > Event.prototype#ql:jsevent.prototype# > Object.prototype
* MouseEvent.prototype > UIEvent.prototype#ql:jsUIEvent.prototype# > Event.prototype#ql:jsevent.prototype# > Object.prototype
=== CHROME:
* ApplicationCacheErrorEvent > Event.prototype#ql:jsevent.prototype#,
* AudioProcessingEvent > Event.prototype#ql:jsevent.prototype#,
* AutocompleteErrorEvent > Event.prototype#ql:jsevent.prototype#,
* BeforeUnloadEvent > Event.prototype#ql:jsevent.prototype#,
* CloseEvent > Event.prototype#ql:jsevent.prototype#,
* CompositionEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* CustomEvent > Event.prototype#ql:jsevent.prototype#,
* DeviceMotionEvent > Event.prototype#ql:jsevent.prototype#,
* DeviceOrientationEvent > Event.prototype#ql:jsevent.prototype#,
* ErrorEvent > Event.prototype#ql:jsevent.prototype#,
* Event > Object.prototype,
* EventSource > EventTarget.prototype#ql:jseventtarget.prototype#,
* EventTarget > Object.prototype,
* FocusEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* GamepadEvent > Event.prototype#ql:jsevent.prototype#,
* HashChangeEvent > Event.prototype#ql:jsevent.prototype#,
* IDBVersionChangeEvent > Event.prototype#ql:jsevent.prototype#,
* KeyboardEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* MediaKeyMessageEvent > Event.prototype#ql:jsevent.prototype#,
* MediaStreamEvent > Event.prototype#ql:jsevent.prototype#,
* MessageEvent > Event.prototype#ql:jsevent.prototype#,
* MouseEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* MutationEvent > Event.prototype#ql:jsevent.prototype#,
* OfflineAudioCompletionEvent > Event.prototype#ql:jsevent.prototype#,
* PageTransitionEvent > Event.prototype#ql:jsevent.prototype#,
* PopStateEvent > Event.prototype#ql:jsevent.prototype#,
* ProgressEvent > Event.prototype#ql:jsevent.prototype#,
* SVGZoomEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* SpeechSynthesisEvent > Event.prototype#ql:jsevent.prototype#,
* StorageEvent > Event.prototype#ql:jsevent.prototype#,
* TextEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* TouchEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* TrackEvent > Event.prototype#ql:jsevent.prototype#,
* TransitionEvent > Event.prototype#ql:jsevent.prototype#,
* UIEvent > Event.prototype#ql:jsevent.prototype#,
* WebGLContextEvent > Event.prototype#ql:jsevent.prototype#,
* WebKitAnimationEvent > Event.prototype#ql:jsevent.prototype#,
* WebKitTransitionEvent > Event.prototype#ql:jsevent.prototype#,
* WheelEvent > MouseEvent,
* XMLHttpRequestProgressEvent > ProgressEvent.prototype,
* webkitSpeechRecognitionEvent > Event.prototype#ql:jsevent.prototype#

ljsoEvt'constructor

name::
* McsEngl.ljsoEvt'constructor@cptIt,

_SPECIFIC:
* ljbevt'EventTarget_function##

ljsoEvt.oCustomEvent > CustomEvent.prototype > Event.prototype > Object.prototype

name::
* McsEngl.ljsoEvt.oCustomEvent > CustomEvent.prototype > Event.prototype > Object.prototype@cptIt,
* McsEngl.ljsoCustomEvent@cptIt,
* McsEngl.ljsCustomEvent.prototype@cptIt,

jsCustomEvent.prototype.CHROME:
> Object.getOwnPropertyNames(CustomEvent.prototype).sort()
["constructor", "detail", "initCustomEvent"]

ljsoEvt.oEvent > Event.prototype#ql:jsEvent.prototype# > Object.prototype

name::
* McsEngl.jsoEvent@cptIt,
* McsEngl.ljsoEvent@cptIt,
* McsEngl.ljs'fevent'member@cptIt,

jsoEvent'Event-function

name::
* McsEngl.jsoEvent'Event-function@cptIt,
* McsEngl.ljsEvent-function@cptIt,
* McsEngl.ljsf.Event@cptIt,
* McsEngl.ljsfEvent@cptIt,
* McsEngl.ljs'Event-function@cptIt,
* McsEngl.ljs'fevent@cptIt,
* McsEngl.ljsevt'Event-function@cptIt,

_GENERIC:
typeof Event
"function"

jsoEvent'Event.prototype > Object.prototype

name::
* McsEngl.jsoEvent'Event.prototype > Object.prototype@cptIt,
* McsEngl.jsEvent.prototype@cptIt,
* McsEngl.ljsEvent.prototype@cptIt,

_SPECIFIC:
* ApplicationCacheErrorEvent > Event.prototype#ql:jsevent.prototype#,
* AudioProcessingEvent > Event.prototype#ql:jsevent.prototype#,
* AutocompleteErrorEvent > Event.prototype#ql:jsevent.prototype#,
* BeforeUnloadEvent > Event.prototype#ql:jsevent.prototype#,
* CloseEvent > Event.prototype#ql:jsevent.prototype#,
* CustomEvent > Event.prototype#ql:jsevent.prototype#,
* DeviceMotionEvent > Event.prototype#ql:jsevent.prototype#,
* DeviceOrientationEvent > Event.prototype#ql:jsevent.prototype#,
* ErrorEvent > Event.prototype#ql:jsevent.prototype#,
* EventSource > EventTarget.prototype#ql:jseventtarget.prototype#,
* GamepadEvent > Event.prototype#ql:jsevent.prototype#,
* HashChangeEvent > Event.prototype#ql:jsevent.prototype#,
* IDBVersionChangeEvent > Event.prototype#ql:jsevent.prototype#,
* MediaKeyMessageEvent > Event.prototype#ql:jsevent.prototype#,
* MediaStreamEvent > Event.prototype#ql:jsevent.prototype#,
* MessageEvent > Event.prototype#ql:jsevent.prototype#,
* MutationEvent > Event.prototype#ql:jsevent.prototype#,
* OfflineAudioCompletionEvent > Event.prototype#ql:jsevent.prototype#,
* PageTransitionEvent > Event.prototype#ql:jsevent.prototype#,
* PopStateEvent > Event.prototype#ql:jsevent.prototype#,
* ProgressEvent > Event.prototype#ql:jsevent.prototype#,
* SpeechSynthesisEvent > Event.prototype#ql:jsevent.prototype#,
* StorageEvent > Event.prototype#ql:jsevent.prototype#,
* TrackEvent > Event.prototype#ql:jsevent.prototype#,
* TransitionEvent > Event.prototype#ql:jsevent.prototype#,
* UIEvent#ql:jsuievent.prototype# > Event.prototype#ql:jsevent.prototype#,
* WebGLContextEvent > Event.prototype#ql:jsevent.prototype#,
* WebKitAnimationEvent > Event.prototype#ql:jsevent.prototype#,
* WebKitTransitionEvent > Event.prototype#ql:jsevent.prototype#,
* webkitSpeechRecognitionEvent > Event.prototype#ql:jsevent.prototype#

jsEvent.prototype.CHROME:
> Object.getOwnPropertyNames(Event.prototype).sort()
["jsAT_TARGET", "ljsBLUR", "ljsBUBBLING_PHASE", "ljsCAPTURING_PHASE", "ljsCHANGE", "ljsCLICK", "ljsDBLCLICK", "ljsDRAGDROP", "ljsFOCUS", "ljsKEYDOWN", "ljsKEYPRESS", "ljsKEYUP", "ljsMOUSEDOWN", "ljsMOUSEDRAG", "ljsMOUSEMOVE", "ljsMOUSEOUT", "ljsMOUSEOVER", "ljsMOUSEUP", "ljsNONE", "ljsSELECT", "ljsbubbles", "ljscancelBubble", "ljscancelable", "ljsconstructor", "ljscurrentTarget", "ljsdefaultPrevented", "ljseventPhase", "ljsinitEvent", "ljspath", "ljspreventDefault", "ljsreturnValue", "ljssrcElement", "ljsstopImmediatePropagation", "ljsstopPropagation", "ljstarget", "ljstimeStamp", "ljstype"]

jsEvent.prototype.FF:
Object.getOwnPropertyNames(Event.prototype).sort()
["jsALT_MASK", "ljsAT_TARGET", "ljsBUBBLING_PHASE", "ljsCAPTURING_PHASE", "ljsCONTROL_MASK", "ljsMETA_MASK", "ljsNONE", "ljsSHIFT_MASK", "ljsbubbles", "ljscancelable", "ljsconstructor", "ljscurrentTarget", "ljsdefaultPrevented", "ljseventPhase", "ljsexplicitOriginalTarget", "ljsgetPreventDefault", "ljsinitEvent", "ljsoriginalTarget", "ljspreventDefault", "ljsstopImmediatePropagation", "ljsstopPropagation", "ljstarget", "ljstimeStamp", "ljstype"]

jsEvent.prototype.EDGE:
[
0: "AT_TARGET",
1: "BUBBLING_PHASE",
2: "CAPTURING_PHASE",
3: "bubbles",
4: "cancelBubble",
5: "cancelable",
6: "constructor",
7: "currentTarget",
8: "defaultPrevented",
9: "eventPhase",
10: "initEvent",
11: "isTrusted",
12: "preventDefault",
13: "returnValue",
14: "srcElement",
15: "stopImmediatePropagation",
16: "stopPropagation",
17: "target",
18: "timeStamp",
19: "type",
length: 20
]

jsEvent.prototype.bubles boolean

name::
* McsEngl.jsEvent.prototype.bubles boolean@cptIt,
* McsEngl.jsbubles@cptIt,
* McsEngl.ljsbubles@cptIt,

_DESCRIPTION:
Indicates whether the given event bubbles up through the DOM or not.
Only certain events can bubble. Events that do bubble have this property set to true. You can use this property to check if an event is allowed to bubble or not.
[https://developer.mozilla.org/en-US/docs/Web/API/Event/bubbles]

jsEvent.prototype.preventDefault-function

name::
* McsEngl.jsEvent.prototype.preventDefault-function@cptIt,
* McsEngl.jspreventDefault@cptIt,

_DESCRIPTION:
Lesson 5: preventDefault
The event object that is passed to handler functions also includes some useful methods that can effect what happens after handler finishes executing. One of these methods is preventDefault[?]. When called, this method prevents the browser from taking its normal actions in response to the event. An example of this is to supress the appearance of the browser's context menu.

Phone number:
Write some JavaScript code below that adds a keypress event handler to the input field (id is "phone"). If the user types something other than a number (look at the event's charCode property for the ASCII[?] value), then cancel the event by calling preventDefault.

var func = function(e) {
if (e.charCode < 48 || e.charCode > 57) {
e.preventDefault();
}
};
document.getElementById('phone').addEventListener('keypress', func, false);
[https://dom-tutorials.appspot.com/static/3.html]

jsEvent.prototype.srcElement

name::
* McsEngl.jsEvent.prototype.srcElement@cptIt,
* McsEngl.jssrcElement@cptIt,

_DESCRIPTION:
Retrieves a reference to the object on which the event occurred.
The target property can be used for similar functionality in Firefox, Opera, Google Chrome, Safari and Internet Explorer from version 9.
Note that the object on which the event has occurred and the object on which the event listener was registered may be different. For example, if the user clicks on an element and an event listener for the onclick event is registered on the parent of the element, the listener function will be called (the onclick event bubbles up). In that case, the event is occurred on a child of the element on which the event listener was registered.
If you need the object on which the listener was registered, use the currentTarget property or the this keyword (inline event handlers) within the listener function. For further details, please see Example 1 and 2.

In case of activation and mouse move events, the fromElement, toElement and relatedTarget properties can also be useful. For example, the fromElement and relatedTarget properties retrieve the element that the mouse pointer left, in case of the onmouseover event.
[http://help.dottoro.com/ljahrnvn.php]

_CODE.LJS:
<head>
<script type="text/javascript">
function ChangeColor (event) {
var target = event.target ? event.target : event.srcElement;
// if the click has occurred on a button
if (target && target.nodeName.toLowerCase () == "button") {
target.style.color = "#ff0000";
}
}
</script>
</head>
<body>
<div onclick="ChangeColor (event)">
Clicking on this text does not modify the text color.
Clicking on a button modify its text color.
<br /><br />
<button>Change my text color to red!</button>
<button>Change my text color to red!</button>
<button>Change my text color to red!</button>
</div>
</body>
[http://help.dottoro.com/ljahrnvn.php]

_SPECIFIC.OWN_MEMBER:
> Object.getOwnPropertyNames(Event).sort()
["AT_TARGET", "BLUR", "BUBBLING_PHASE", "CAPTURING_PHASE", "CHANGE", "CLICK", "DBLCLICK", "DRAGDROP", "FOCUS", "KEYDOWN", "KEYPRESS", "KEYUP", "MOUSEDOWN", "MOUSEDRAG", "MOUSEMOVE", "MOUSEOUT", "MOUSEOVER", "MOUSEUP", "NONE", "SELECT", "arguments", "caller", "length", "name", "prototype", "toString"]
===
> Object.getOwnPropertyNames(Event.__proto__).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]
===
> Object.getOwnPropertyNames(Event.prototype).sort()
["AT_TARGET", "BLUR", "BUBBLING_PHASE", "CAPTURING_PHASE", "CHANGE", "CLICK", "DBLCLICK", "DRAGDROP", "FOCUS", "KEYDOWN", "KEYPRESS", "KEYUP", "MOUSEDOWN", "MOUSEDRAG", "MOUSEMOVE", "MOUSEOUT", "MOUSEOVER", "MOUSEUP", "NONE", "SELECT", "constructor", "initEvent", "preventDefault", "stopImmediatePropagation", "stopPropagation"]
===
> getMemberAll(Event).sort()
["AT_TARGET", "BLUR", "BUBBLING_PHASE", "CAPTURING_PHASE", "CHANGE", "CLICK", "DBLCLICK", "DRAGDROP", "FOCUS", "KEYDOWN", "KEYPRESS", "KEYUP", "MOUSEDOWN", "MOUSEDRAG", "MOUSEMOVE", "MOUSEOUT", "MOUSEOVER", "MOUSEUP", "NONE", "SELECT", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "apply", "arguments", "bind", "call", "caller", "constructor", "hasOwnProperty", "isPrototypeOf", "length", "name", "propertyIsEnumerable", "prototype", "toLocaleString", "toString", "valueOf"]

_PROPERTY:
> CHROME:
Object.getOwnPropertyNames(Event).sort()
["AT_TARGET", "BLUR", "BUBBLING_PHASE", "CAPTURING_PHASE", "CHANGE", "CLICK", "DBLCLICK", "DRAGDROP", "FOCUS", "KEYDOWN", "KEYPRESS", "KEYUP", "MOUSEDOWN", "MOUSEDRAG", "MOUSEMOVE", "MOUSEOUT", "MOUSEOVER", "MOUSEUP", "NONE", "SELECT", "arguments", "caller", "length", "name", "prototype", "toString"]

> FIREFOX:
Object.getOwnPropertyNames(Event).sort()
["ALT_MASK", "AT_TARGET", "BUBBLING_PHASE", "CAPTURING_PHASE", "CONTROL_MASK", "META_MASK", "NONE", "SHIFT_MASK", "length", "prototype", "toString"]

jsEvent.prototype.stopImmediatePropagation-function

name::
* McsEngl.jsEvent.prototype.stopImmediatePropagation-function@cptIt,
* McsEngl.jsstopImmediatePropagation@cptIt,
* McsEngl.ljsstopImmediatePropagation@cptIt,

_DESCRIPTION:
If several listeners are attached to the same element for the same event type, they are called in order in which they have been added. If during one such call, event.stopImmediatePropagation() is called, no remaining listeners will be called.
[https://developer.mozilla.org/en-US/docs/Web/API/Event/stopImmediatePropagation]

_Browser_compatibility:
Desktop
Feature    Chrome  Firefox (Gecko)  Internet Explorer  Opera  Safari
Basic support  6.0  10.0 (10.0)  9.0  ?  5.0

jsEvent.prototype.stopPropagation-function

name::
* McsEngl.jsEvent.prototype.stopPropagation-function@cptIt,
* McsEngl.jsstopPropagation@cptIt,
* McsEngl.ljsstopPropagation@cptIt,

_DESCRIPTION:
By using stopPropagation function, we indicate that the event should not be sent to the parents.
[http://code.tutsplus.com/tutorials/bubblejs-a-16k-solution-to-a-common-problem--cms-21986]
===
Prevents further propagation of the current event in the-bubbling-phase#ql:jsevt'bubble_phase#.
[https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation]
===
Disables the propagation of the current event in the DOM hierarchy.
[http://help.dottoro.com/ljgfjsxd.php]

jsEvent.prototype.timeStamp number

name::
* McsEngl.jsEvent.prototype.timeStamp number@cptIt,
* McsEngl.jstimeStamp@cptIt,
* McsEngl.ljstimeStamp@cptIt,

_DESCRIPTION:
Returns the time (in milliseconds) at which the event was created. Starting with Chrome 49, returns a high-resolution monotonic time instead of epoch time.
[https://developer.mozilla.org/en-US/docs/Web/API/Event/timeStamp]

jsEvent.prototype.type string

name::
* McsEngl.jsEvent.prototype.type string@cptIt,
* McsEngl.jstype-of-event@cptIt,
* McsEngl.ljstype-of-event@cptIt,

_DESCRIPTION:
The Event.type read-only property returns a string containing the type of event. It is set when the event is constructed and is the name commonly used to refer to the specific event.
The event argument of EventTarget.addEventListener() and EventTarget.removeEventListener() is case insensitive.
[https://developer.mozilla.org/en-US/docs/Web/API/Event/type]

jsoEvent'member

name::
* McsEngl.jsoEvent'member@cptIt,

jsoEvent.MEMBER.FIREFOX:
> Object.getOwnPropertyNames(new Event('evnt')).sort()
* jsoEvent.isTrusted,
> Object.getOwnPropertyNames((new Event('evnt')).__proto__).sort()
* jsoEvent.ALT_MASK,
* jsoEvent.AT_TARGET,
* jsoEvent.BUBBLING_PHASE,
* jsoEvent.CAPTURING_PHASE,
* jsoEvent.CONTROL_MASK,
* jsoEvent.META_MASK,
* jsoEvent.NONE,
* jsoEvent.SHIFT_MASK,
* jsoEvent.bubbles,
* jsoEvent.cancelable,
* jsoEvent.constructor,
* jsoEvent.currentTarget,
* jsoEvent.defaultPrevented,
* jsoEvent.eventPhase,
* jsoEvent.explicitOriginalTarget,
* jsoEvent.getPreventDefault,
* jsoEvent.initEvent,
* jsoEvent.originalTarget,
* jsoEvent.preventDefault,
* jsoEvent.stopImmediatePropagation,
* jsoEvent.stopPropagation,
* jsoEvent.target,
* jsoEvent.timeStamp,
* jsoEvent.type,

jsoEvent.MEMBER.CHROME
> Object.getOwnPropertyNames(new Event('onclick')).sort()
["jsoEvent.bubbles", "ljsoEvent.cancelBubble", "ljsoEvent.cancelable", "ljsoEvent.clipboardData", "ljsoEvent.currentTarget", "ljsoEvent.defaultPrevented", "ljsoEvent.eventPhase", "ljsoEvent.path", "ljsoEvent.returnValue", "ljsoEvent.srcElement", "ljsoEvent.target", "ljsoEvent.timeStamp", "ljsoEvent.type"]
> Object.getOwnPropertyNames((new Event('onclick')).__proto__).sort()
["jsoEvent.AT_TARGET", "ljsoEvent.BLUR", "ljsoEvent.BUBBLING_PHASE", "ljsoEvent.CAPTURING_PHASE", "ljsoEvent.CHANGE", "ljsoEvent.CLICK", "ljsoEvent.DBLCLICK", "ljsoEvent.DRAGDROP", "ljsoEvent.FOCUS", "ljsoEvent.KEYDOWN", "ljsoEvent.KEYPRESS", "ljsoEvent.KEYUP", "ljsoEvent.MOUSEDOWN", "ljsoEvent.MOUSEDRAG", "ljsoEvent.MOUSEMOVE", "ljsoEvent.MOUSEOUT", "ljsoEvent.MOUSEOVER", "ljsoEvent.MOUSEUP", "ljsoEvent.NONE", "ljsoEvent.SELECT", "ljsoEvent.constructor", "ljsoEvent.initEvent", "ljsoEvent.preventDefault", "ljsoEvent.stopImmediatePropagation", "ljsoEvent.stopPropagation"]
> Object.getOwnPropertyNames((new Event('onclick')).__proto__.__proto__).sort()
["jsoEvent.__defineGetter__", "ljsoEvent.__defineSetter__", "ljsoEvent.__lookupGetter__", "ljsoEvent.__lookupSetter__", "ljsoEvent.__proto__", "ljsoEvent.constructor", "ljsoEvent.hasOwnProperty", "ljsoEvent.isPrototypeOf", "ljsoEvent.propertyIsEnumerable", "ljsoEvent.toLocaleString", "ljsoEvent.toString", "ljsoEvent.valueOf"]
===
//CHROME
> Object.getOwnPropertyNames((new Event('evnt'))).sort()
["bubbles", "cancelBubble", "cancelable", "clipboardData", "currentTarget", "defaultPrevented", "eventPhase", "path", "returnValue", "srcElement", "target", "timeStamp", "type"]
> Object.getOwnPropertyNames((new Event('evnt')).__proto__).sort()
["AT_TARGET", "BLUR", "BUBBLING_PHASE", "CAPTURING_PHASE", "CHANGE", "CLICK", "DBLCLICK", "DRAGDROP", "FOCUS", "KEYDOWN", "KEYPRESS", "KEYUP", "MOUSEDOWN", "MOUSEDRAG", "MOUSEMOVE", "MOUSEOUT", "MOUSEOVER", "MOUSEUP", "NONE", "SELECT", "constructor", "initEvent", "preventDefault", "stopImmediatePropagation", "stopPropagation"]

ljbevt'resource

name::
* McsEngl.ljbevt'resource@cptIt,

_ADDRESS.WPG:
* https://dom-tutorials.appspot.com/static/3.html,
* http://www.w3schools.com/jsref/dom_obj_event.asp,

ljbevt'target

name::
* McsEngl.ljbevt'target@cptIt,
* McsEngl.ljsevent'target-element@cptIt,
* McsEngl.ljsevent'target-node@cptIt,

_DESCRIPTION:
When an event occurs, it is dispatched to the target element first.
The target element is the element on which the event occurred (target and srcElement properties).
If the event propagates up, then it will be dispatched to the ancestor elements of the target element in the DOM hierarchy.
The propagation can be stopped with the stopPropagation method and the cancelBubble property.
An event is always dispatched to the target element first, except if the event is captured.
[http://help.dottoro.com/ljogqtqm.php]
===
DOM Node which contains (has attached) the event.
[hmnSngo.2014-11-12]
===
Which HTML element is the target of the event?

W3C/Netscape says: the target. No, says Microsoft, the srcElement. Both properties return the HTML element the event took place on.

function doSomething(e) {
 var targ;
 if (!e) var e = window.event;
 if (e.target) targ = e.target;
 else if (e.srcElement) targ = e.srcElement;
 if (targ.nodeType == 3) // defeat Safari bug
   targ = targ.parentNode;
}

The last two lines of code are especially for Safari. If an event takes place on an element that contains text, this text node, and not the element, becomes the target of the event. Therefore we check if the target's nodeType is 3, a text node. If it is we move to its parent node, the HTML element.

Even if an event is captured or bubbles up, the target/srcElement always remains the element the event took place on.
[http://www.quirksmode.org/js/events_properties.html]

ljbevt'html-element

name::
* McsEngl.ljbevt'html-element@cptIt,

ljbevt'usage

name::
* McsEngl.ljbevt'usage@cptIt,

_DESCRIPTION:
Events are used for two main purposes:
- To perform a function upon detection of the event,
- To show a popup box upon detection of the event.
[http://www.echoecho.com/javascript8.htm]

SPECIFIC

name::
* McsEngl.ljsevt.specific@cptIt,
* McsEngl.ljs'event.specific@cptIt,
* McsEngl.ljsevt'type@cptIt,

_SPECIFIC:
* https://developer.mozilla.org/en-US/docs/Web/Events,
* support and characteristics http://help.dottoro.com/larrqqck.php,
===
(CAPITAL = generic-event)
* abort
* beforeunload
* blur
* canplay
* canplaythrough
* change
* click
* contextmenu
* dblclick
* deviceorientation
* drag
* dragend
* dragenter
* dragleave
* dragover
* dragstart
* drop
* durationchange
* emptied
* ended
* error
* focus
* hashchange
* INLINE-event##
* input
* invalid
* KEY-event##
* keydown
* keypress
* keyup
* load
* loadeddata
* loadedmetadata
* loadstart
* message
* MOUSE-event##
* mousedown
* mouseenter
* mouseleave
* mousemove
* mouseout
* mouseover
* mouseup
* mousewheel
* offline
* online
* pagehide
* pageshow
* pause
* play
* playing
* popstate
* progress
* PROPERTY-event##
* ratechange
* reset
* resize
* scroll
* search
* seeked
* seeking
* select
* stalled
* storage
* submit
* suspend
* timeupdate
* TIMING-event##
* TOUCH-event##
* transitionend
* unload
* USER-INTERFACE-event##
* volumechange
* waiting

_SPECIFIC.CHROME:
* ApplicationCacheErrorEvent,
* AudioProcessingEvent,
* AutocompleteErrorEvent,
* BeforeUnloadEvent,
* CloseEvent,
* CompositionEvent,
* CustomEvent,
* DeviceMotionEvent,
* DeviceOrientationEvent,
* ErrorEvent,
* EvalError,
* Event,
* FocusEvent,
* GamepadEvent,
* IDBVersionChangeEvent,
* KeyboardEvent,
* MediaKeyEvent,
* MediaStreamEvent,
* MessageEvent,
* MouseEvent,
* MutationEvent,
* OfflineAudioCompletionEvent,
* OverflowEvent,
* PageTransitionEvent,
* PopStateEvent,
* ProgressEvent,
* SVGZoomEvent,
* SpeechSynthesisEvent,
* StorageEvent,
* TextEvent,
* TouchEvent,
* TrackEvent,
* TransitionEvent,
* UIEvent,
* WebGLContextEvent,
* WebKitAnimationEvent,
* WebKitTransitionEvent,
* WheelEvent,
* XMLHttpRequestProgressEvent,
* webkitSpeechRecognitionEvent,

_SPECIFIC:
Event type  Corresponding mapped events
mouse  "click", "dblclick", "mousedown", "mouseeenter", "mouseleave", "mousemove", "mouseout", "mouseover", "mouseup", "mouseleave", "mousewheel"
key  "keydown", "keyup", "keypress", "textInput"
touch  "touchstart", "touchmove", "touchend", "touchcancel"
control  "resize", "scroll", "zoom", "focus", "blur", "select", "change", "submit", "reset"
[https://developer.chrome.com/devtools/docs/commandline-api#monitoreventsobject-events]
===
Examples of events:
- A mouse click
- A web page or an image loading
- Mousing over a hot spot on the web page
- Selecting an input field in an HTML form
- Submitting an HTML form
- A keystroke
[http://www.w3schools.com/js/js_events.asp]

_DESCRIPTION:
e.g. "click", "hashchange", or "submit".
[http://dom.spec.whatwg.org/#concept-event]
===
What is the type of the event?
This is the only question with a true cross-browser answer: use the type property to read out the type:
function doSomething(e) {
 if (!e) var e = window.event;
 alert(e.type);
}
[http://www.quirksmode.org/js/events_properties.html]

HTML Event Handlers
Event Handler  Elements Supported      Description
* jsonblur  a, area, button, input, label, select, textarea  the element lost the focus
* jsonchange  input, select, textarea  the element value was changed
* onclick    All elements except applet, base, basefont, bdo, br, font, frame, frameset, head, html, iframe, isindex, meta, param, script, style, title  a pointer button was clicked
* jsondblclick  All elements except applet, base, basefont, bdo, br, font, frame, frameset, head, html, iframe, isindex, meta, param, script, style, title  a pointer button was double clicked
* jsonfocus  a, area, button, input, label, select, textarea  the element received the focus
* jsonkeydown  All elements except applet, base, basefont, bdo, br, font, frame, frameset, head, html, iframe, isindex, meta, param, script, style, title  a key was pressed down
* jsonkeypress  All elements except applet, base, basefont, bdo, br, font, frame, frameset, head, html, iframe, isindex, meta, param, script, style, title  a key was pressed and released
* jsonkeyup  All elements except applet, base, basefont, bdo, br, font, frame, frameset, head, html, iframe, isindex, meta, param, script, style, title  a key was released
* jsonload  frameset  all the frames have been loaded
* jsonload    body  the document has been loaded
* jsonmousedown  All elements except applet, base, basefont, bdo, br, font, frame, frameset, head, html, iframe, isindex, meta, param, script, style, title  a pointer button was pressed down
* jsonmousemove  All elements except applet, base, basefont, bdo, br, font, frame, frameset, head, html, iframe, isindex, meta, param, script, style, title  a pointer was moved within
* jsonmouseout  All elements except applet, base, basefont, bdo, br, font, frame, frameset, head, html, iframe, isindex, meta, param, script, style, title  a pointer was moved away
* onmouseover  All elements except applet, base, basefont, bdo, br, font, frame, frameset, head, html, iframe, isindex, meta, param, script, style, title  a pointer was moved onto
* jsonmouseup  All elements except applet, base, basefont, bdo, br, font, frame, frameset, head, html, iframe, isindex, meta, param, script, style, title  a pointer button was released
* jsonreset    form  the form was reset
* jsonselect  input, textarea  some text was selected
* jsonsubmit  form  the form was submitted
* jsonunload  frameset  all the frames have been removed
lcpJs'onunload  body  the document has been removed
[http://www.learn-javascript-tutorial.com/]

ljbevt.SPECIFIC-DIVISION.js-tree

name::
* McsEngl.ljbevt.SPECIFIC-DIVISION.js-tree@cptIt,

GSTREE:
* Event.prototype#ql:jsevent.prototype#:
* ApplicationCacheErrorEvent.prototype:
* AudioProcessingEvent.prototype:
* AutocompleteErrorEvent.prototype:
* BeforeUnloadEvent.prototype:
* CloseEvent.prototype:
* CustomEvent.prototype:
* DeviceMotionEvent.prototype:
* DeviceOrientationEvent.prototype:
* ErrorEvent.prototype:
* GamepadEvent.prototype:
* HashChangeEvent.prototype:
* IDBVersionChangeEvent.prototype:
* MediaKeyMessageEvent.prototype:
* MediaStreamEvent.prototype:
* MessageEvent.prototype:
* MutationEvent.prototype:
* OfflineAudioCompletionEvent.prototype:
* PageTransitionEvent.prototype:
* PopStateEvent.prototype:
* ProgressEvent.prototype:
* SpeechSynthesisEvent.prototype:
* StorageEvent.prototype:
* TrackEvent.prototype:
* TransitionEvent.prototype:
* UIEvent.prototype#ql:jsuievent.prototype#:
* CompositionEvent.prototype:
* FocusEvent.prototype:
* KeyboardEvent.prototype#ql:jsKeyboardEvent.prototype#:
* MouseEvent.prototype:
* DragEvent.prototype,
* WheelEvent.prototype,
* SVGZoomEvent.prototype:
* TextEvent.prototype:
* TouchEvent.prototype:
* WebGLContextEvent.prototype:
* WebKitAnimationEvent.prototype:
* WebKitTransitionEvent.prototype:
* webkitSpeechRecognitionEvent.prototype:

ljbevt.SPECIFIC-DIVISION.mozilla

name::
* McsEngl.ljbevt.SPECIFIC-DIVISION.mozilla@cptIt,

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/Events/,

_SPECIFIC:
Standard events
These events are defined in official Web specifications, and should be common across browsers. Each event is listed along with the interface representing the object sent to recipients of the event (so you can find information about what data is provided with each event) as well as a link to the specification or specifications that define the event.
Event-Name
---- Event-Type
---- Specification
---- Fired when...

* jsevt.abort
---- UIEvent
---- DOM L3
---- The loading of a resource has been aborted.
* jsevt.abort
---- ProgressEvent
---- Progress and XMLHttpRequest
---- Progression has been terminated (not due to an error).
* jsevt.abort
---- Event
---- IndexedDB A transaction has been aborted.
* jsevt.afterprint
---- Event
---- HTML5 The associated document has started printing or the print preview has been closed.
* jsevt.animationend
---- AnimationEvent
---- CSS Animations
---- A CSS animation has completed.
* jsevt.animationiteration
---- AnimationEvent
---- CSS Animations
---- A CSS animation is repeated.
* jsevt.animationstart
---- AnimationEvent
---- CSS Animations
---- A CSS animation has started.
* jsevt.audioprocess
---- AudioProcessingEvent
---- Web Audio API
---- The definition of 'audioprocess' in that specification. The input buffer of a ScriptProcessorNode is ready to be processed.
* jsevt.audioend
---- Event
---- Web Speech API
---- The user agent has finished capturing audio for speech recognition.
* jsevt.audiostart
---- Event
---- Web Speech API
---- The user agent has started to capture audio for speech recognition.
* jsevt.beforeprint
---- Event
---- HTML5 The associated document is about to be printed or previewed for printing.
* jsevt.beforeunload
---- BeforeUnloadEvent
---- HTML5
* jsevt.beginEvent
---- TimeEvent
---- SVG
---- A SMIL animation element begins.
* jsevt.blocked
---- IndexedDB An open connection to a database is blocking a versionchange transaction on the same database.
* jsevt.blur
---- FocusEvent
---- DOM L3
---- An element has lost focus (does not bubble).
* jsevt.boundary
---- SpeechSynthesisEvent
---- Web Speech API
---- The spoken utterance reaches a word or sentence boundary
* jsevt.cached
---- Event
---- Offline The resources listed in the manifest have been downloaded, and the application is now cached.
* jsevt.canplay
---- Event
---- HTML5 media The user agent can play the media, but estimates that not enough data has been loaded to play the media up to its end without having to stop for further buffering of content.
* jsevt.canplaythrough
---- Event
---- HTML5 media The user agent can play the media, and estimates that enough data has been loaded to play the media up to its end without having to stop for further buffering of content.
* jsevt.change
---- Event
---- DOM L2, HTML5 The change event is fired for <input>, <select>, and <textarea> elements when a change to the element's value is committed by the user.
* jsevt.chargingchange
---- Event
---- Battery status
---- The battery begins or stops charging.
* jsevt.chargingtimechange
---- Event
---- Battery status
---- The chargingTime attribute has been updated.
* jsevt.checking
---- Event
---- Offline The user agent is checking for an update, or attempting to download the cache manifest for the first time.
* jsevt.click
---- MouseEvent
---- DOM L3
---- A pointing device button has been pressed and released on an element.
* jsevt.close
---- Event
---- WebSocket A WebSocket connection has been closed.
* jsevt.complete
---- IndexedDB
----
* jsevt.complete
---- OfflineAudioCompletionEvent
---- Web Audio API
* jsevt.The
---- definition of 'OfflineAudioCompletionEvent' in that specification.
---- The rendering of an OfflineAudioContext is terminated.
* jsevt.compositionend
---- CompositionEvent
---- DOM L3
---- The composition of a passage of text has been completed or canceled.
* jsevt.compositionstart
---- CompositionEvent
---- DOM L3
---- The composition of a passage of text is prepared (similar to keydown for a keyboard input, but works with other inputs such as speech recognition).
* jsevt.compositionupdate
---- CompositionEvent
---- DOM L3
---- A character is added to a passage of text being composed.
* jsevt.contextmenu
---- MouseEvent
---- HTML5
---- The right button of the mouse is clicked (before the context menu is displayed).
* jsevt.copy
---- ClipboardEvent
---- Clipboard The text selection has been added to the clipboard.
* jsevt.cut
---- ClipboardEvent
---- Clipboard The text selection has been removed from the document and added to the clipboard.
* jsevt.dblclick
---- MouseEvent
---- DOM L3
---- A pointing device button is clicked twice on an element.
* jsevt.devicelight
---- DeviceLightEvent
---- Ambient Light Events
---- Fresh data is available from a light sensor.
* jsevt.devicemotion
---- DeviceMotionEvent
---- Device Orientation Events Fresh data is available from a motion sensor.
* jsevt.deviceorientation
---- DeviceOrientationEvent
---- Device Orientation Events Fresh data is available from an orientation sensor.
* jsevt.deviceproximity
---- DeviceProximityEvent
---- Proximity Events
---- Fresh data is available from a proximity sensor (indicates an approximated distance between the device and a nearby object).
* jsevt.dischargingtimechange
---- Event
---- Battery status
---- The dischargingTime attribute has been updated.
* jsevt.DOMActivate
---- UIEvent
---- DOM L3
---- A button, link or state changing element is activated (use click instead).
* jsevt.DOMAttributeNameChanged
---- MutationNameEvent
---- DOM L3 Removed
---- The name of an attribute changed (use mutation observers instead).
* jsevt.DOMAttrModified
---- MutationEvent
---- DOM L3
---- The value of an attribute has been modified (use mutation observers instead).
* jsevt.DOMCharacterDataModified
---- MutationEvent
---- DOM L3
---- A text or another CharacterData has changed (use mutation observers instead).
* jsevt.DOMContentLoaded
---- Event
---- HTML5
---- The document has finished loading (but not its dependent resources).
* jsevt.DOMElementNameChanged
---- MutationNameEvent
---- DOM L3 Removed
---- The name of an element changed (use mutation observers instead).
* jsevt.DOMFocusIn
---- Unimplemented FocusEvent
---- DOM L3
---- An element has received focus (use focus or focusin instead).
* jsevt.DOMFocusOut
---- Unimplemented
---- FocusEvent
---- DOM L3
---- An element has lost focus (use blur or focusout instead).
* jsevt.DOMNodeInserted
---- MutationEvent
---- DOM L3
---- A node has been added as a child of another node (use mutation observers instead).
* jsevt.DOMNodeInsertedIntoDocument
---- MutationEvent
---- DOM L3
---- A node has been inserted into the document (use mutation observers instead).
* jsevt.DOMNodeRemoved
---- MutationEvent
---- DOM L3
---- A node has been removed from its parent node (use mutation observers instead).
* jsevt.DOMNodeRemovedFromDocument
---- MutationEvent
---- DOM L3
---- A node has been removed from the document (use mutation observers instead).
* jsevt.DOMSubtreeModified
---- MutationEvent
---- DOM L3
---- A change happened in the document (use mutation observers instead).
* jsevt.downloading
---- Event
---- Offline The user agent has found an update and is fetching it, or is downloading the resources listed by the cache manifest for the first time.
* jsevt.drag
---- DragEvent
---- HTML5
---- An element or text selection is being dragged (every 350ms).
* jsevt.dragend
---- DragEvent
---- HTML5
---- A drag operation is being ended (by releasing a mouse button or hitting the escape key).
* jsevt.dragenter
---- DragEvent
---- HTML5
---- A dragged element or text selection enters a valid drop target.
* jsevt.dragleave
---- DragEvent
---- HTML5
---- A dragged element or text selection leaves a valid drop target.
* jsevt.dragover
---- DragEvent
---- HTML5
---- An element or text selection is being dragged over a valid drop target (every 350ms).
* jsevt.dragstart
---- DragEvent
---- HTML5
---- The user starts dragging an element or text selection.
* jsevt.drop
---- DragEvent
---- HTML5
---- An element is dropped on a valid drop target.
* jsevt.durationchange
---- Event
---- HTML5 media The duration attribute has been updated.
* jsevt.emptied
---- Event
---- HTML5 media The media has become empty; for example, this event is sent if the media has already been loaded (or partially loaded), and the load() method is called to reload it.
* jsevt.end
---- Event
---- Web Speech API
---- The speech recognition service has disconnected.
* jsevt.end
---- SpeechSynthesisEvent
---- Web Speech API
---- The utterance has finished being spoken.
* jsevt.ended
---- Event
---- HTML5 media Playback has stopped because the end of the media was reached.
* jsevt.ended
---- Event
---- Web Audio API
----
* jsevt.endEvent
---- TimeEvent
---- SVG
---- A SMIL animation element ends.
* jsevt.error
---- UIEvent
---- DOM L3
---- A resource failed to load.
* jsevt.error
---- ProgressEvent
---- Progress and XMLHttpRequest Progression has failed.
* jsevt.error
---- Event
---- Offline An error occurred while downloading the cache manifest or updating the content of the application.
* jsevt.error
---- Event
---- WebSocket A WebSocket connection has been closed with prejudice (some data couldn't be sent for example).
* jsevt.error
---- Event
---- Server Sent Events
---- An event source connection has been failed.
* jsevt.error
---- Event
---- IndexedDB A request caused an error and failed.
* jsevt.error
---- Event
---- Web Speech API
---- A speech recognition error occurs.
* jsevt.error
---- SpeechSynthesisErrorEvent
---- Web Speech API
---- An error occurs that prevents the utterance from being succesfully spoken.
* jsevt.focus
---- FocusEvent
---- DOM L3
---- An element has received focus (does not bubble).
* jsevt.focusinUnimplemented (see bug 687787) FocusEvent
---- DOM L3
---- An element is about to receive focus (bubbles).
* jsevt.focusoutUnimplemented (see bug 687787)
---- FocusEvent
---- DOM L3
---- An element is about to lose focus (bubbles).
* jsevt.fullscreenchange
---- Event
---- Full Screen An element was turned to fullscreen mode or back to normal mode.
* jsevt.fullscreenerror
---- Event
---- Full Screen It was impossible to switch to fullscreen mode for technical reasons or because the permission was denied.
* jsevt.gamepadconnected
---- GamepadEvent
---- Gamepad A gamepad has been connected.
* jsevt.gamepaddisconnected
---- GamepadEvent
---- Gamepad A gamepad has been disconnected.
* jsevt.gotpointercapture
---- PointerEvent
---- Pointer Events
---- Element receives pointer capture.
* jsevt.hashchange
---- HashChangeEvent
---- HTML5
---- The fragment identifier of the URL has changed (the part of the URL after the#).
* jsevt.lostpointercapture
---- PointerEvent
---- Pointer Events
---- Element lost pointer capture.
* jsevt.input
---- Event
---- HTML5
---- The value of an element changes or the content of an element with the attribute contenteditable is modified.
* jsevt.invalid
---- Event
---- HTML5
---- A submittable element has been checked and doesn't satisfy its constraints.
* jsevt.keydown
---- KeyboardEvent
---- DOM L3
---- A key is pressed down.
* jsevt.keypress
---- KeyboardEvent
---- DOM L3
---- A key is pressed down and that key normally produces a character value (use input instead).
* jsevt.keyup
---- KeyboardEvent
---- DOM L3
---- A key is released.
* jsevt.languagechange
---- Event
---- HTML5.1
* jsevt.The
---- definition of 'NavigatorLanguage.languages' in that specification.
----
* jsevt.levelchange
---- Event
---- Battery status
---- The level attribute has been updated.
* jsevt.load
---- UIEvent
---- DOM L3
---- A resource and its dependent resources have finished loading.
* jsevt.load
---- ProgressEvent
---- Progress and XMLHttpRequest Progression has been successful.
* jsevt.loadeddata
---- Event
---- HTML5 media The first frame of the media has finished loading.
* jsevt.loadedmetadata
---- Event
---- HTML5 media The metadata has been loaded.
* jsevt.loadend
---- ProgressEvent
---- Progress and XMLHttpRequest Progress has stopped (after "error", "abort" or "load" have been dispatched).
* jsevt.loadstart
---- ProgressEvent
---- Progress and XMLHttpRequest Progress has begun.
* jsevt.mark
---- SpeechSynthesisEvent
---- Web Speech API
---- The spoken utterance reaches a named SSML "mark" tag.
* jsevt.message
---- MessageEvent
---- WebSocket A message is received through a WebSocket.
* jsevt.message
---- MessageEvent
---- Web Workers A message is received from a Web Worker.
* jsevt.message
---- MessageEvent
---- Web Messaging A message is received from a child (i)frame or a parent window.
* jsevt.message
---- MessageEvent
---- Server Sent Events
---- A message is received through an event source.
* jsevt.message
---- ServiceWorkerMessageEvent
---- or ExtendableMessageEvent, depending on context.
---- Service Workers A message is received from a service worker, or a message is received in a service worker from another context.
* jsevt.mousedown
---- MouseEvent
---- DOM L3
---- A pointing device button (usually a mouse) is pressed on an element.
* jsevt.mouseenter
---- MouseEvent
---- DOM L3
---- A pointing device is moved onto the element that has the listener attached.
* jsevt.mouseleave
---- MouseEvent
---- DOM L3
---- A pointing device is moved off the element that has the listener attached.
* jsevt.mousemove
---- MouseEvent
---- DOM L3
---- A pointing device is moved over an element.
* jsevt.mouseout
---- MouseEvent
---- DOM L3
---- A pointing device is moved off the element that has the listener attached or off one of its children.
* jsevt.mouseover
---- MouseEvent
---- DOM L3
---- A pointing device is moved onto the element that has the listener attached or onto one of its children.
* jsevt.mouseup
---- MouseEvent
---- DOM L3
---- A pointing device button is released over an element.
* jsevt.nomatch
---- SpeechRecognitionEvent
---- Web Speech API
---- The speech recognition service returns a final result with no significant recognition.
* jsevt.notificationclick
---- NotificationEvent
---- Notifications API
* jsevt.The
---- definition of 'onnotificationclick' in that specification.
---- A system notification spawned by ServiceWorkerRegistration.showNotification() has been clicked.
* jsevt.noupdate
---- Event
---- Offline The manifest hadn't changed.
* jsevt.obsolete
---- Event
---- Offline The manifest was found to have become a 404 or 410 page, so the application cache is being deleted.
* jsevt.offline
---- Event
---- HTML5 offline The browser has lost access to the network.
* jsevt.online
---- Event
---- HTML5 offline The browser has gained access to the network (but particular websites might be unreachable).
* jsevt.open
---- Event
---- WebSocket A WebSocket connection has been established.
* jsevt.open
---- Event
---- Server Sent Events
---- An event source connection has been established.
* jsevt.orientationchange
---- Event
---- Screen Orientation
---- The orientation of the device (portrait/landscape) has changed
* jsevt.pagehide
---- PageTransitionEvent
---- HTML5
---- A session history entry is being traversed from.
* jsevt.pageshow
---- PageTransitionEvent
---- HTML5
---- A session history entry is being traversed to.
* jsevt.paste
---- ClipboardEvent
---- Clipboard Data has been transfered from the system clipboard to the document.
* jsevt.pause
---- Event
---- HTML5 media Playback has been paused.
* jsevt.pause
---- SpeechSynthesisEvent
---- Web Speech API
---- The utterance is paused part way through.
* jsevt.pointercancel
---- PointerEvent
---- Pointer Events
---- The pointer is unlikely to produce any more events.
* jsevt.pointerdown
---- PointerEvent
---- Pointer Events
---- The pointer enters the active buttons state.
* jsevt.pointerenter
---- PointerEvent
---- Pointer Events
---- Pointing device is moved inside the hit-testing boundary.
* jsevt.pointerleave
---- PointerEvent
---- Pointer Events
---- Pointing device is moved out of the hit-testing boundary.
* jsevt.pointerlockchange
---- Event
---- Pointer Lock
---- The pointer was locked or released.
* jsevt.pointerlockerror
---- Event
---- Pointer Lock
---- It was impossible to lock the pointer for technical reasons or because the permission was denied.
* jsevt.pointermove
---- PointerEvent
---- Pointer Events
---- The pointer changed coordinates.
* jsevt.pointerout
---- PointerEvent
---- Pointer Events
---- The pointing device moved out of hit-testing boundary or leaves detectable hover range.
* jsevt.pointerover
---- PointerEvent
---- Pointer Events
---- The pointing device is moved into the hit-testing boundary.
* jsevt.pointerup
---- PointerEvent
---- Pointer Events
---- The pointer leaves the active buttons state.
* jsevt.play
---- Event
---- HTML5 media Playback has begun.
* jsevt.playing
---- Event
---- HTML5 media Playback is ready to start after having been paused or delayed due to lack of data.
* jsevt.popstate
---- PopStateEvent
---- HTML5
---- A session history entry is being navigated to (in certain cases).
* jsevt.progress
---- ProgressEvent
---- Progress and XMLHttpRequest In progress.
* jsevt.progress
---- ProgressEvent
---- Offline The user agent is downloading resources listed by the manifest.
* jsevt.push
---- PushEvent
---- Push API
---- A Service Worker has received a push message.
* jsevt.pushsubscriptionchange
---- PushEvent
---- Push API
---- A PushSubscription has expired.
* jsevt.ratechange
---- Event
---- HTML5 media The playback rate has changed.
* jsevt.readystatechange
---- Event
---- HTML5 and XMLHttpRequest
---- The readyState attribute of a document has changed.
* jsevt.repeatEvent
---- TimeEvent
---- SVG
---- A SMIL animation element is repeated.
* jsevt.reset
---- Event
---- DOM L2, HTML5 A form is reset.
* jsevt.resize
---- UIEvent
---- DOM L3
---- The document view has been resized.
* jsevt.resourcetimingbufferfull
---- Performance Resource Timing The browser's resource timing buffer is full.
* jsevt.result
---- SpeechRecognitionEvent
---- Web Speech API
---- The speech recognition service returns a result — a word or phrase has been positively recognized and this has been communicated back to the app.
* jsevt.resume
---- SpeechSynthesisEvent
---- Web Speech API
---- A paused utterance is resumed.
* jsevt.scroll
---- UIEvent
---- DOM L3
---- The document view or an element has been scrolled.
* jsevt.seeked
---- Event
---- HTML5 media A seek operation completed.
* jsevt.seeking
---- Event
---- HTML5 media A seek operation began.
* jsevt.select
---- UIEvent
---- DOM L3
---- Some text is being selected.
* jsevt.selectstart
---- Event
---- Selection API A selection just started.
* jsevt.selectionchange
---- Event
---- Selection API The selection in the document has been changed.
* jsevt.show
---- MouseEvent
---- HTML5
---- A contextmenu event was fired on/bubbled to an element that has a contextmenu attribute
* jsevt.soundend
---- Event
---- Web Speech API
---- Any sound — recognisable speech or not — has stopped being detected.
* jsevt.soundstart
---- Event
---- Web Speech API
---- Any sound — recognisable speech or not — has been detected.
* jsevt.speechend
---- Event
---- Web Speech API
---- Speech recognised by the speech recognition service has stopped being detected.
* jsevt.speechstart
---- Event
---- Web Speech API
---- Sound that is recognised by the speech recognition service as speech has been detected.
* jsevt.stalled
---- Event
---- HTML5 media The user agent is trying to fetch media data, but data is unexpectedly not forthcoming.
* jsevt.start
---- Event
---- Web Speech API
---- The speech recognition service has begun listening to incoming audio with intent to recognize grammars associated with the current SpeechRecognition.
* jsevt.start
---- SpeechSynthesisEvent
---- Web Speech API
---- The utterance has begun to be spoken.
* jsevt.storage
---- StorageEvent
---- Web Storage A storage area (localStorage or sessionStorage) has changed.
* jsevt.submit
---- Event
---- DOM L2, HTML5 A form is submitted.
* jsevt.success
---- Event
---- IndexedDB A request successfully completed.
* jsevt.suspend
---- Event
---- HTML5 media Media data loading has been suspended.
* jsevt.SVGAbort
---- SVGEvent
---- SVG
---- Page loading has been stopped before the SVG was loaded.
* jsevt.SVGError
---- SVGEvent
---- SVG
---- An error has occurred before the SVG was loaded.
* jsevt.SVGLoad
---- SVGEvent
---- SVG
---- An SVG document has been loaded and parsed.
* jsevt.SVGResize
---- SVGEvent
---- SVG
---- An SVG document is being resized.
* jsevt.SVGScroll
---- SVGEvent
---- SVG
---- An SVG document is being scrolled.
* jsevt.SVGUnload
---- SVGEvent
---- SVG
---- An SVG document has been removed from a window or frame.
* jsevt.SVGZoom
---- SVGZoomEvent
---- SVG
---- An SVG document is being zoomed.
* jsevt.timeout
---- ProgressEvent
---- XMLHttpRequest
----
* jsevt.timeupdate
---- Event
---- HTML5 media The time indicated by the currentTime attribute has been updated.
* jsevt.touchcancel
---- TouchEvent
---- Touch Events
---- A touch point has been disrupted in an implementation-specific manners (too many touch points for example).
* jsevt.touchend
---- TouchEvent
---- Touch Events
---- A touch point is removed from the touch surface.
* jsevt.touchenter
---- TouchEvent
---- Touch Events Removed
---- A touch point is moved onto the interactive area of an element.
* jsevt.touchleave
---- TouchEvent
---- Touch Events Removed
---- A touch point is moved off the interactive area of an element.
* jsevt.touchmove
---- TouchEvent
---- Touch Events
---- A touch point is moved along the touch surface.
* jsevt.touchstart
---- TouchEvent
---- Touch Events
---- A touch point is placed on the touch surface.
* jsevt.transitionend
---- TransitionEvent
---- CSS Transitions A CSS transition has completed.
* jsevt.unload
---- UIEvent
---- DOM L3
---- The document or a dependent resource is being unloaded.
* jsevt.updateready
---- Event
---- Offline The resources listed in the manifest have been newly redownloaded, and the script can use swapCache() to switch to the new cache.
* jsevt.upgradeneeded
---- IndexedDB An attempt was made to open a database with a version number higher than its current version. A versionchange transaction has been created.
* jsevt.userproximity
---- UserProximityEvent
---- Proximity Events
---- Fresh data is available from a proximity sensor (indicates whether the nearby object is near the device or not).
* jsevt.voiceschanged
---- Event
---- Web Speech API
---- The list of SpeechSynthesisVoice objects that would be returned by the SpeechSynthesis.getVoices() method has changed (when the voiceschanged event fires.)
* jsevt.versionchange
---- IndexedDB A versionchange transaction completed.
* jsevt.visibilitychange
---- Event
---- Page visibility The content of a tab has become visible or has been hidden.
* jsevt.volumechange
---- Event
---- HTML5 media The volume has changed.
* jsevt.waiting
---- Event
---- HTML5 media Playback has stopped because of a temporary lack of data.
* jsevt.wheel
---- WheelEvent
---- DOM L3
---- A wheel button of a pointing device is rotated in any direction.

Non-standard events
* jsevt.Event
---- Name
---- Event
---- Type
---- Specification Fired when...
* jsevt.afterscriptexecute
---- Event
---- Mozilla Specific
---- A script has been executed.
* jsevt.beforescriptexecute
---- Event
---- Mozilla Specific
---- A script is about to be executed.
* jsevt.beforeinstallprompt
---- Event
---- Chrome specific A user is prompted to save a web site to a home screen on mobile.
* jsevt.cardstatechange
---- Firefox OS specific The MozMobileConnection.cardState property changes value.
* jsevt.change
---- DeviceStorageChangeEvent
---- Firefox OS specific This event is triggered each time a file is created, modified or deleted on a given storage area.
* jsevt.connectionInfoUpdate
---- Firefox OS specific The informations about the signal strength and the link speed have been updated.
* jsevt.cfstatechange
---- Firefox OS specific The call forwarding state changes.
* jsevt.datachange
---- Firefox OS specific The MozMobileConnection.data object changes values.
* jsevt.dataerror
---- Firefox OS specific The MozMobileConnection.data object receive an error from the RIL.
* jsevt.DOMMouseScroll
---- Mozilla specific
---- The wheel button of a pointing device is rotated (detail attribute is a number of lines). (use wheel instead)
* jsevt.dragdrop
---- DragEvent
---- Mozilla specific
---- An element is dropped (use drop instead).
* jsevt.dragexit
---- DragEvent
---- Mozilla specific
---- A drag operation is being ended(use dragend instead).
* jsevt.draggesture
---- DragEvent
---- Mozilla specific
---- The user starts dragging an element or text selection (use dragstart instead).
* jsevt.icccardlockerror
---- Firefox OS specific the MozMobileConnection.unlockCardLock() or MozMobileConnection.setCardLock() methods fails.
* jsevt.iccinfochange
---- Firefox OS specific The MozMobileConnection.iccInfo object changes.
* jsevt.localized
---- Mozilla Specific
---- The page has been localized using data-l10n-* attributes.
* jsevt.mousewheel
---- Unimplemented
---- IE invented The wheel button of a pointing device is rotated.
* jsevt.MozAudioAvailable
---- Event
---- Mozilla specific
---- The audio buffer is full and the corresponding raw samples are available.
* jsevt.MozBeforeResize
---- Mozilla specific
---- A window is about to be resized.
* jsevt.mozbrowseractivitydone
---- Firefox OS Browser API-specific Sent when some activity has been completed (complete description TBD.)
* jsevt.mozbrowserasyncscroll
---- Firefox OS Browser API-specific Sent when the scroll position within a browser <iframe> changes.
* jsevt.mozbrowseraudioplaybackchange
---- Firefox OS Browser API-specific Sent when audio starts or stops playing within the browser <iframe> content.
* jsevt.mozbrowsercaretstatechanged
---- Firefox OS Browser API-specific Sent when the text selected inside the browser <iframe> content changes.
* jsevt.mozbrowserclose
---- Firefox OS Browser API-specific Sent when window.close() is called within a browser <iframe>.
* jsevt.mozbrowsercontextmenu
---- Firefox OS Browser API-specific Sent when a browser <iframe> try to open a context menu.
* jsevt.mozbrowserdocumentfirstpaint
---- Firefox OS Browser API-specific Sent when a new paint occurs on any document in the browser <iframe>.
* jsevt.mozbrowsererror
---- Firefox OS Browser API-specific Sent when an error occured while trying to load a content within a browser iframe
* jsevt.mozbrowserfindchange
---- Firefox OS Browser API-specific Sent when a search operation is performed on the browser <iframe> content (see HTMLIFrameElement search methods.)
* jsevt.mozbrowserfirstpaint
---- Firefox OS Browser API-specific Sent when the <iframe> paints content for the first time (this doesn't include the initial paint from about:blank.)
* jsevt.mozbrowsericonchange
---- Firefox OS Browser API-specific Sent when the favicon of a browser iframe changes.
* jsevt.mozbrowserlocationchange
---- Firefox OS Browser API-specific Sent when an browser iframe's location changes.
* jsevt.mozbrowserloadend
---- Firefox OS Browser API-specific Sent when the browser iframe has finished loading all its assets.
* jsevt.mozbrowserloadstart
---- Firefox OS Browser API-specific Sent when the browser iframe starts to load a new page.
* jsevt.mozbrowsermanifestchange
---- Firefox OS Browser API-specific Sent when a the path to the app manifest changes, in the case of a browser <iframe> with an open web app embedded in it.
* jsevt.mozbrowsermetachange
---- Firefox OS Browser API-specific Sent when a <meta> elelment is added to, removed from or changed in the browser <iframe>'s content.
* jsevt.mozbrowseropensearch
---- Firefox OS Browser API-specific Sent when a link to a search engine is found.
* jsevt.mozbrowseropentab
---- Firefox OS Browser API-specific Sent when a new tab is opened within a browser <iframe> as a result of the user issuing a command to open a link target in a new tab (for example ctrl/cmd + click.)
* jsevt.mozbrowseropenwindow
---- Firefox OS Browser API-specific Sent when window.open() is called within a browser iframe.
* jsevt.mozbrowserresize
---- Firefox OS Browser API-specific Sent when the browser <iframe>'s window size has changed.
* jsevt.mozbrowserscroll
---- Firefox OS Browser API-specific Sent when the browser <iframe> content scrolls.
* jsevt.mozbrowserscrollareachanged
---- Firefox OS Browser API-specific Sent when the available scrolling area
---- in the browser <iframe> changes. This can occur on resize and when the page size changes (while loading for example.)
* jsevt.mozbrowserscrollviewchange
---- Firefox OS Browser API-specific Sent when asynchronous scrolling (i.e. APCZ) starts or stops.
* jsevt.mozbrowsersecuritychange
---- Firefox OS Browser API-specific Sent when the SSL state changes within a browser iframe.
* jsevt.mozbrowserselectionstatechanged
---- Firefox OS Browser API-specific Sent when the text selected inside the browser <iframe> content changes. Note that this is deprecated, and newer implementations use mozbrowsercaretstatechanged instead.
* jsevt.mozbrowsershowmodalprompt
---- Firefox OS Browser API-specific Sent when alert(), confirm() or prompt() are called within a browser iframe
* jsevt.mozbrowsertitlechange
---- Firefox OS Browser API-specific Sent when the document.title changes within a browser iframe.
* jsevt.mozbrowserusernameandpasswordrequired
---- Firefox OS Browser API-specific Sent when an HTTP authentification is requested.
* jsevt.mozbrowservisibilitychange
---- Firefox OS Browser API-specific Sent when the visibility state of the current browser iframe <iframe> changes, for example due to a call to setVisible().
* jsevt.MozGamepadButtonDown
---- To be specified A gamepad button is pressed down.
* jsevt.MozGamepadButtonUp
---- To be specified A gamepad button is released.
* jsevt.MozMousePixelScroll
---- Mozilla specific
---- The wheel button of a pointing device is rotated (detail attribute is a number of pixels). (use wheel instead)
* jsevt.MozOrientation
---- Mozilla specific
---- Fresh data is available from an orientation sensor (see deviceorientation).
* jsevt.MozScrolledAreaChanged
---- UIEvent
---- Mozilla specific
---- The document view has been scrolled or resized.
* jsevt.moztimechange
---- Mozilla specific
---- The time of the device has been changed.
* jsevt.MozTouchDown
---- Mozilla specific
---- A touch point is placed on the touch surface (use touchstart instead).
* jsevt.MozTouchMove
---- Mozilla specific
---- A touch point is moved along the touch surface (use touchmove instead).
* jsevt.MozTouchUp
---- Mozilla specific
---- A touch point is removed from the touch surface (use touchend instead).
* jsevt.alerting
---- CallEvent
---- To be specified The correspondent is being alerted (his/her phone is ringing).
* jsevt.busy
---- CallEvent
---- To be specified The line of the correspondent is busy.
* jsevt.callschanged
---- CallEvent
---- To be specified A call has been added or removed from the list of current calls.
* jsevt.onconnected
---- connected CallEvent To be specified A call has been connected.
* jsevt.connecting
---- CallEvent
---- To be specified A call is about to connect.
* jsevt.delivered
---- SMSEvent
---- To be specified An SMS has been successfully delivered.
* jsevt.dialing
---- CallEvent
---- To be specified The number of a correspondent has been dialed.
* jsevt.disabled
---- Firefox OS specific Wifi has been disabled on the device.
* jsevt.disconnected
---- CallEvent
---- To be specified A call has been disconnected.
* jsevt.disconnecting
---- CallEvent
---- To be specified A call is about to disconnect.
* jsevt.enabled
---- Firefox OS specific Wifi has been enabled on the device.
* jsevt.error
---- CallEvent
---- To be specified An error occurred.
* jsevt.held
---- CallEvent
---- To be specified A call has been held.
* jsevt.holding
---- CallEvent
---- To be specified A call is about to be held.
* jsevt.incoming
---- CallEvent
---- To be specified A call is being received.
* jsevt.received
---- SMSEvent
---- To be specified An SMS has been received.
* jsevt.resuming
---- CallEvent
---- To be specified A call is about to resume.
* jsevt.sent
---- SMSEvent
---- To be specified An SMS has been sent.
* jsevt.statechange
---- CallEvent
---- To be specified The state of a call has changed.
* jsevt.statuschange
---- Firefox OS specific The status of the Wifi connection changed.
* jsevt.overflow
---- UIEvent
---- Mozilla specific
---- An element has been overflowed by its content or has been rendered for the first time in this state (only works for elements styled with overflow != visible).
* jsevt.smartcard-insert
---- Mozilla specific
---- A smartcard has been inserted.
* jsevt.smartcard-remove
---- Mozilla specific
---- A smartcard has been removed.
* jsevt.stkcommand
---- Firefox OS specific The STK Proactive Command is issued from ICC.
* jsevt.stksessionend
---- Firefox OS specific The STK Session is terminated by ICC.
* jsevt.text
---- Mozilla Specific
---- A generic composition event occurred.
* jsevt.underflow
---- UIEvent
---- Mozilla specific
---- An element is no longer overflowed by its content (only works for elements styled with overflow != visible).
* jsevt.uploadprogress
---- ProgressEvent
---- Mozilla Specific
---- Upload is in progress (see progress).
* jsevt.ussdreceived
---- Firefox OS specific A new USSD message is received
* jsevt.voicechange
---- Firefox OS specific The MozMobileConnection.voice object changes values.
[https://developer.mozilla.org/en-US/docs/Web/Events]

ljbevt.SPECIFIC-DIVISION.browser

name::
* McsEngl.ljbevt.SPECIFIC-DIVISION.browser@cptIt,

_SPECIFIC:
* chrome
* edge
* FF
* IE
* safari

jsevt.CHROME:
* jsonabort
* jsonautocomplete
* jsonautocompleteerror
* jsonbeforecopy
* jsonbeforecut
* jsonbeforepaste
* jsonblur
* jsoncancel
* jsoncanplay
* jsoncanplaythrough
* jsonchange
* jsonclick
* jsonclose
* jsoncontextmenu
* jsoncopy
* jsoncuechange
* jsoncut
* jsondblclick
* jsondrag
* jsondragend
* jsondragenter
* jsondragleave
* jsondragover
* jsondragstart
* jsondrop
* jsondurationchange
* jsonemptied
* jsonended
* jsonerror
* jsonfocus
* jsoninput
* jsoninvalid
* jsonkeydown
* jsonkeypress
* jsonkeyup
* jsonload
* jsonloadeddata
* jsonloadedmetadata
* jsonloadstart
* jsonmousedown
* jsonmouseenter
* jsonmouseleave
* jsonmousemove
* jsonmouseout
* jsonmouseover
* jsonmouseup
* jsonmousewheel
* jsonpaste
* jsonpause
* jsonplay
* jsonplaying
* jsonpointerlockchange
* jsonpointerlockerror
* jsonprogress
* jsonratechange
* jsonreadystatechange
* jsonreset
* jsonresize
* jsonscroll
* jsonsearch
* jsonseeked
* jsonseeking
* jsonselect
* jsonselectionchange
* jsonselectstart
* jsonshow
* jsonstalled
* jsonsubmit
* jsonsuspend
* jsontimeupdate
* jsontoggle
* jsonvolumechange
* jsonwaiting
* jsonwebkitfullscreenchange
* jsonwebkitfullscreenerror
* jsonwheel

ljbevt.SPECIFIC-DIVISION.action

name::
* McsEngl.ljbevt.SPECIFIC-DIVISION.action@cptIt,

_SPECIFIC:
* key
* mouse

ljbevt.SPECIFIC-DIVISION.target

name::
* McsEngl.ljbevt.SPECIFIC-DIVISION.target@cptIt,

_SPECIFIC:

ljbevt.action.KEYBOARD

name::
* McsEngl.ljbevt.action.KEYBOARD@cptIt,
* McsEngl.ljsevt.keyboard@cptIt,
* McsEngl.ljsKeyboardEvent@cptIt,
* McsEngl.ljs'key-event@cptIt554i,
* McsEngl.ljs'key-stroke-event@cptIt,
* McsEngl.ljs'keyboard-event@cptIt554i,

_DEFINITION:
key stroke handling code in JavaScript.

_SPECIFIC:
Keyboard events
* Event Type:
 Event Interface
 Description
 Event Targets
 Bubbles
 Cancelable
* keydown  KeyboardEvent  Fires when a key is initially pressed. This is sent after any key mapping is performed, but before any input method editors receive the keypress. This is sent for any key, even if it doesn't generate a character code.  Element, Document  Yes  Yes
* keypress  KeyboardEvent  Fires when a key is initially pressed, but only if that key normally produces a character value. This is sent after any key mapping is performed, but before any input method editors receive the keypress.  Element, Document  Yes  Yes
* keyup  KeyboardEvent  Fires when a key is released. This is sent after any key mapping is performed, and always follows thecorresponding keydown and keypress events.  Element, Document  Yes  Yes
[http://domenlightenment.com/#11.2]

_CODE.LJS:
* TEST: http://unixpapa.com/js/testkey.html

jsoKeyboardEvent > KeyboardEvent.prototype > UIEvent.prototype > Event.prototype

name::
* McsEngl.jsoKeyboardEvent > KeyboardEvent.prototype > UIEvent.prototype > Event.prototype@cptIt,
* McsEngl.jsoKeyboardEvent@cptIt,

jsoKeyboardEvent.MEMBER:
> var oE=document.createEvent('KeyboardEvent')
undefined
> Object.getOwnPropertyNames(oE).sort()
//2016-01-30 Chrome
["isTrusted"]

KeyboardEvent.prototype > UIEvent.prototype > Event.prototype

name::
* McsEngl.KeyboardEvent.prototype > UIEvent.prototype > Event.prototype@cptIt,
* McsEngl.jsKeyboardEvent.prototype@cptIt,

> KeyboardEvent.prototype:
//2016-01-30 Chrome
Object.getOwnPropertyNames(KeyboardEvent.prototype).sort()
["DOM_KEY_LOCATION_LEFT", "DOM_KEY_LOCATION_NUMPAD", "DOM_KEY_LOCATION_RIGHT", "DOM_KEY_LOCATION_STANDARD", "altKey", "charCode", "code", "constructor", "ctrlKey", "getModifierState", "initKeyboardEvent", "keyCode", "keyIdentifier", "keyLocation", "location", "metaKey", "repeat", "shiftKey", "which"]

KeyboardEvent.prototype.code

name::
* McsEngl.KeyboardEvent.prototype.code@cptIt,
* McsEngl.key-of-KeyboardEvent.prototype@cptIt,

_ADDRESS.WPG:
* http://keycode.info/
* https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code

KeyboardEvent.prototype.key

name::
* McsEngl.KeyboardEvent.prototype.key@cptIt,
* McsEngl.key-of-KeyboardEvent.prototype@cptIt,
* McsEngl.ljskey-of-KeyboardEvent.prototype@cptIt,

_ADDRESS.WPG:
* http://keycode.info/
* https://developer.mozilla.org/el/docs/Web/API/KeyboardEvent/key/Key_Values,

_SPECIFIC:
Key-Pressed    KeyCode
* ljskey.0      48
* ljskey.1      49
* ljskey.2      50
* ljskey.3      51
* ljskey.4      52
* ljskey.5      53
* ljskey.6      54
* ljskey.7      55
* ljskey.8      56
* ljskey.9      57
* ljskey.a      65
* ljskey.add    107
* ljskey.Alt    18
* ljskey.b      66
* ljskey.back slash  220
* ljskey.backspace  8
* ljskey.c      67
* ljskey.caps lock  20
* ljskey.close braket  221
* ljskey.comma  188
* ljskey.ctrl    17
* ljskey.d      68
* ljskey.dash    189
* ljskey.decimal point  110
* ljskey.delete    46
* ljskey.divide    111
* ljskey.down arrow  40
* ljskey.e      69
* ljskey.end    35
* ljskey.enter    13
* ljskey.equal sign  187
* ljskey.escape    27
* ljskey.f      70
* ljskey.f1    112
* ljskey.f10    121
* ljskey.f11    122
* ljskey.f12    123
* ljskey.f2    113
* ljskey.f3    114
* ljskey.f4    115
* ljskey.f5    116
* ljskey.f6    117
* ljskey.f7    118
* ljskey.f8    119
* ljskey.f9    120
* ljskey.forward slash  191
* ljskey.g    71
* ljskey.grave accent  192
* ljskey.h    72
* ljskey.home    36
* ljskey.i    73
* ljskey.insert    45
* ljskey.j    74
* ljskey.k    75
* ljskey.l    76
* ljskey.left arrow  37
* ljskey.left window key 91
* ljskey.m    77
* ljskey.multiply  106
* ljskey.n    78
* ljskey.num lock  144
* ljskey.numpad 0  96
* ljskey.numpad 1  97
* ljskey.numpad 2  98
* ljskey.numpad 3  99
* ljskey.numpad 4  100
* ljskey.numpad 5  101
* ljskey.numpad 6  102
* ljskey.numpad 7  103
* ljskey.numpad 8  104
* ljskey.numpad 9  105
* ljskey.o    79
* ljskey.open bracket  219
* ljskey.p    80
* ljskey.page down  34
* ljskey.page up  33
* ljskey.pause/break  19
* ljskey.period 190
* ljskey.q    81
* ljskey.r    82
* ljskey.right arrow  39
* ljskey.right window key 92
* ljskey.s    83
* ljskey.scroll lock  145
* ljskey.select key  93
* ljskey.semi-colon  186
* ljskey.shift    16
* ljskey.single quote  222
* ljskey.subtract  109
* ljskey.t    84
* ljskey.tab    9
* ljskey.u    85
* ljskey.up arrow  38
* ljskey.v    86
* ljskey.w    87
* ljskey.x    88
* ljskey.y    89
* ljskey.z    90

KeyboardEvent.prototype.charCode

name::
* McsEngl.KeyboardEvent.prototype.charCode@cptIt,
* McsEngl.charCode.javascript@cptIt,
* McsEngl.ljs'charCode@cptIt,

_DESCRIPTION:
Non-standard
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
Deprecated
This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time.
The KeyboardEvent.charCode read-only property returns the Unicode value of a character key pressed during a keypress event.

For constants equivalent to these numeric codes, see KeyEvent.

Do not use this property anymore, it is deprecated.
Use KeyboardEvent.key instead.
[https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/charCode] {2016-03-19}

KeyboardEvent.prototype.keyCode

name::
* McsEngl.KeyboardEvent.prototype.keyCode@cptIt,
* McsEngl.jskeyCode@cptIt,
* McsEngl.keyCode.javascript@cptIt,
* McsEngl.ljskeyCode@cptIt,

_ADDRESS.WPG:
* http://keycode.info//

_DESCRIPTION:
Deprecated
This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time.
The KeyboardEvent.keyCode read-only property represents a system and implementation dependent numerical code identifying the unmodified value of the pressed key. This is usually the decimal ASCII (RFC 20) or Windows 1252 code corresponding to the key. If the key can't be identified, this value is 0.

The value of keypress event is different between browsers. IE and Google Chrome set the KeyboardEvent.charCode value. Gecko sets 0 if the pressed key is a printable key, otherwise it sets the same keyCode as a keydown or keyup event.

This shouldn't be used by new web applications. IE and Firefox already (partially) support KeyboardEvent.key. Also, Google Chrome and Safari support KeyboardEvent.keyIdentifier which is defined in the old draft of DOM Level 3 Events. If you can use them or one of them, you should use them/it as far as possible.

Note: Web developers shouldn't use the keycode attribute for printable characters when handling keydown and keyup events. As described above, the keycode attribute is not useful for printable characters, especially those input with the Shift or Alt key pressed. When implementing a shortcut key handler, the keypress event is usually better (at least when Gecko is the runtime in use). See Gecko Keypress Event for details.
[https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode] {2016-03-19}

Key Pressed      Javascript Key Code
* ljskeyCode.0    48
* ljskeyCode.1    49
* ljskeyCode.2    50
* ljskeyCode.3    51
* ljskeyCode.4    52
* ljskeyCode.5    53
* ljskeyCode.6    54
* ljskeyCode.7    55
* ljskeyCode.8    56
* ljskeyCode.9    57
* ljskeyCode.a    65
* ljskeyCode.add  107
* ljskeyCode.alt  18
* ljskeyCode.b    66
* ljskeyCode.back_slash  220
* ljskeyCode.backspace  8
* ljskeyCode.c      67
* ljskeyCode.caps lock    20
* ljskeyCode.close braket  221
* ljskeyCode.comma    188
* ljskeyCode.ctrl    17
* ljskeyCode.d      68
* ljskeyCode.dash    189
* ljskeyCode.decimal point  110
* ljskeyCode.delete    46
* ljskeyCode.divide    111
* ljskeyCode.down_arrow  40
* ljskeyCode.e      69
* ljskeyCode.end    35
* ljskeyCode.enter    13
* ljskeyCode.equal sign  187
* ljskeyCode.escape  27
* ljskeyCode.f    70
* ljskeyCode.f1    112
* ljskeyCode.f10    121
* ljskeyCode.f11    122
* ljskeyCode.f12    123
* ljskeyCode.f2    113
* ljskeyCode.f3    114
* ljskeyCode.f4    115
* ljskeyCode.f5    116
* ljskeyCode.f6    117
* ljskeyCode.f7    118
* ljskeyCode.f8    119
* ljskeyCode.f9    120
* ljskeyCode.forward slash  191
* ljskeyCode.g    71
* ljskeyCode.grave accent  192
* ljskeyCode.h    72
* ljskeyCode.home    36
* ljskeyCode.i    73
* ljskeyCode.insert    45
* ljskeyCode.j    74
* ljskeyCode.k    75
* ljskeyCode.l    76
* ljskeyCode.left arrow  37
* ljskeyCode.left window key 91
* ljskeyCode.m    77
* ljskeyCode.multiply  106
* ljskeyCode.n    78
* ljskeyCode.num lock  144
* ljskeyCode.numpad 0  96
* ljskeyCode.numpad 1  97
* ljskeyCode.numpad 2  98
* ljskeyCode.numpad 3  99
* ljskeyCode.numpad 4  100
* ljskeyCode.numpad 5  101
* ljskeyCode.numpad 6  102
* ljskeyCode.numpad 7  103
* ljskeyCode.numpad 8  104
* ljskeyCode.numpad 9  105
* ljskeyCode.o    79
* ljskeyCode.open bracket  219
* ljskeyCode.p    80
* ljskeyCode.page_down  34
* ljskeyCode.page up  33
* ljskeyCode.pause/break  19
* ljskeyCode.period 190
* ljskeyCode.q    81
* ljskeyCode.r    82
* ljskeyCode.right arrow  39
* ljskeyCode.right window key 92
* ljskeyCode.s    83
* ljskeyCode.scroll lock  145
* ljskeyCode.select key  93
* ljskeyCode.semi-colon  186
* ljskeyCode.shift    16
* ljskeyCode.single quote  222
* ljskeyCode.subtract  109
* ljskeyCode.t    84
* ljskeyCode.tab    9
* ljskeyCode.u    85
* ljskeyCode.up_arrow  38
* ljskeyCode.v    86
* ljskeyCode.w    87
* ljskeyCode.x    88
* ljskeyCode.y    89
* ljskeyCode.z    90
[http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/Javascript-Char-Codes-Key-Codes.aspx]

var keyCodes = {
* ljskeyCode.3 : "break",
* ljskeyCode.8 : "backspace / delete",
* ljskeyCode.9 : "tab",
* ljskeyCode.12 : 'clear',
* ljskeyCode.13 : "enter",
* ljskeyCode.16 : "shift",
* ljskeyCode.17 : "ctrl ",
* ljskeyCode.18 : "alt",
* ljskeyCode.19 : "pause/break",
* ljskeyCode.20 : "caps lock",
* ljskeyCode.27 : "escape",
* ljskeyCode.32 : "spacebar",
* ljskeyCode.33 : "page up",
* ljskeyCode.34 : "page down",
* ljskeyCode.35 : "end",
* ljskeyCode.36 : "home ",
* ljskeyCode.37 : "left arrow ",
* ljskeyCode.38 : "up arrow ",
* ljskeyCode.39 : "right arrow",
* ljskeyCode.40 : "down arrow ",
* ljskeyCode.41 : "select",
* ljskeyCode.42 : "print",
* ljskeyCode.43 : "execute",
* ljskeyCode.44 : "Print Screen",
* ljskeyCode.45 : "insert ",
* ljskeyCode.46 : "delete",
* ljskeyCode.48 : "0",
* ljskeyCode.49 : "1",
* ljskeyCode.50 : "2",
* ljskeyCode.51 : "3",
* ljskeyCode.52 : "4",
* ljskeyCode.53 : "5",
* ljskeyCode.54 : "6",
* ljskeyCode.55 : "7",
* ljskeyCode.56 : "8",
* ljskeyCode.57 : "9",
* ljskeyCode.59 : "semicolon (firefox), equals",
* ljskeyCode.60 : "<",
* ljskeyCode.61 : "equals (firefox)",
* ljskeyCode.65 : "a",
* ljskeyCode.66 : "b",
* ljskeyCode.67 : "c",
* ljskeyCode.68 : "d",
* ljskeyCode.69 : "e",
* ljskeyCode.70 : "f",
* ljskeyCode.71 : "g",
* ljskeyCode.72 : "h",
* ljskeyCode.73 : "i",
* ljskeyCode.74 : "j",
* ljskeyCode.75 : "k",
* ljskeyCode.76 : "l",
* ljskeyCode.77 : "m",
* ljskeyCode.78 : "n",
* ljskeyCode.79 : "o",
* ljskeyCode.80 : "p",
* ljskeyCode.81 : "q",
* ljskeyCode.82 : "r",
* ljskeyCode.83 : "s",
* ljskeyCode.84 : "t",
* ljskeyCode.85 : "u",
* ljskeyCode.86 : "v",
* ljskeyCode.87 : "w",
* ljskeyCode.88 : "x",
* ljskeyCode.89 : "y",
* ljskeyCode.90 : "z",
* ljskeyCode.91 : "Windows Key / Left ?",
* ljskeyCode.92 : "right window key ",
* ljskeyCode.93 : "Windows Menu / Right ?",
* ljskeyCode.96 : "numpad 0 ",
* ljskeyCode.97 : "numpad 1 ",
* ljskeyCode.98 : "numpad 2 ",
* ljskeyCode.99 : "numpad 3 ",
* ljskeyCode.100 : "numpad 4 ",
* ljskeyCode.101 : "numpad 5 ",
* ljskeyCode.102 : "numpad 6 ",
* ljskeyCode.103 : "numpad 7 ",
* ljskeyCode.104 : "numpad 8 ",
* ljskeyCode.105 : "numpad 9 ",
* ljskeyCode.106 : "multiply ",
* ljskeyCode.107 : "add",
* ljskeyCode.108 : "numpad period (firefox)",
* ljskeyCode.109 : "subtract ",
* ljskeyCode.110 : "decimal point",
* ljskeyCode.111 : "divide ",
* ljskeyCode.112 : "f1 ",
* ljskeyCode.113 : "f2 ",
* ljskeyCode.114 : "f3 ",
* ljskeyCode.115 : "f4 ",
* ljskeyCode.116 : "f5 ",
* ljskeyCode.117 : "f6 ",
* ljskeyCode.118 : "f7 ",
* ljskeyCode.119 : "f8 ",
* ljskeyCode.120 : "f9 ",
* ljskeyCode.121 : "f10",
* ljskeyCode.122 : "f11",
* ljskeyCode.123 : "f12",
* ljskeyCode.124 : "f13",
* ljskeyCode.125 : "f14",
* ljskeyCode.126 : "f15",
* ljskeyCode.127 : "f16",
* ljskeyCode.128 : "f17",
* ljskeyCode.129 : "f18",
* ljskeyCode.130 : "f19",
* ljskeyCode.144 : "num lock ",
* ljskeyCode.145 : "scroll lock",
* ljskeyCode.163 : "#",
* ljskeyCode.173 : "minus (firefox), mute/unmute",
* ljskeyCode.174 : "decrease volume level",
* ljskeyCode.175 : "increase volume level",
* ljskeyCode.176 : "next",
* ljskeyCode.177 : "previous",
* ljskeyCode.178 : "stop",
* ljskeyCode.179 : "play/pause",
* ljskeyCode.181 : "mute/unmute (firefox)",
* ljskeyCode.182 : "decrease volume level (firefox)",
* ljskeyCode.183 : "increase volume level (firefox)",
* ljskeyCode.186 : "semi-colon ",
* ljskeyCode.187 : "equal sign ",
* ljskeyCode.188 : "comma",
* ljskeyCode.189 : "dash ",
* ljskeyCode.190 : "period ",
* ljskeyCode.191 : "forward slash",
* ljskeyCode.192 : "grave accent ",
* ljskeyCode.194 : "numpad period (chrome)",
* ljskeyCode.219 : "open bracket ",
* ljskeyCode.220 : "back slash ",
* ljskeyCode.221 : "close bracket ",
* ljskeyCode.222 : "single quote ",
* ljskeyCode.224 : "left or right ? key (firefox)",
* ljskeyCode.225 : "altgr",
* ljskeyCode.226 : "< /git >",
* ljskeyCode.255 : "toggle touchpad"
};
[https://github.com/wesbos/keycodes/blob/gh-pages/scripts.js]

KeyboardEvent.prototype.which

name::
* McsEngl.KeyboardEvent.prototype.which@cptIt,
* McsEngl.which-of-KeyboardEvent.prototype@cptIt,

_DESCRIPTION:
Deprecated
This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time.
The KeyboardEvent.which read-only property returns the numeric keyCode of the key pressed, or the character code (charCode) for an alphanumeric key pressed.
[https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/which]

ljbevt.action.MOUSE

name::
* McsEngl.ljbevt.action.MOUSE@cptIt,
* McsEngl.ljs'mouse-event@cptIt,

_ADDRESS.WPG:
* http://help.dottoro.com/ljtdqwlx.php#mouseEvents,

_SPECIFIC:
Mouse events
* Event Type  Event Interface  Description  Event Targets  Bubbles  Cancelable
* click  MouseEvent  Fires when mouse pointer is clicked (or user presses enter key) over an element. A click is defined as a mousedown and mouseup over the same screen location. The sequence of these events is mousedown>mouseup>click. Depending upon the environment configuration, the click event may be dispatched if one or more of the event types mouseover, mousemove, and mouseout occur between the press and release of the pointing device button. The click event may also be followed by the dblclick event  Element, Document, window  Yes  Yes
* dblclick  MouseEvent  Fires when a mouse pointer is clicked twice over an element. The definition of a double click depends on the environment configuration, except that the event target must be the same between mousedown, mouseup, and dblclick. This event type must be dispatched after the event typeclick if a click and double click occur simultaneously, and after the event type mouseup otherwise  Element, Document, window  Yes  Yes
* mousedown  MouseEvent  Fires when mouse pointer is pressed over an element  Element, Document, window  Yes  Yes
* mouseenter  MouseEvent  Fires when mouse pointer is moved onto the boundaries of an element or one of its descendent elements. This event type is similar to mouseover, but differs in that it does not bubble, and must not be dispatched when the pointer device moves from an element onto the boundaries of one of its descendent elements  Element, Document, window  No  No
* mouseleave  MouseEvent  Fires when mouse pointer is moved off of the boundaries of an element and all of its descendent elements. This event type is similar to mouseout, but differs in that does not bubble, and that it must not be dispatched until the pointing device has left the boundaries of the element and the boundaries of all of its children  Element, Document, window  No  No
* mousemove  MouseEvent  Fires when mouse pointer is moved while it is over an element. The frequency rate of events while the pointing device is moved is implementation-, device-, and platform-specific, but multiple consecutive mousemove events should be fired for sustained pointer-device movement, rather than a single event for each instance of mouse movement. Implementations are encouraged to determine the optimal frequency rate to balance responsiveness with performance  Element, Document, window  Yes  No
* mouseout  MouseEvent  Fires when mouse pointer is moved off of the boundaries of an element. This event type is similar to mouseleave, but differs in that does bubble, and that it must be dispatched when the pointer device moves from an element onto the boundaries of one of its descendent elements  Element, Document, window  Yes  Yes
* mouseup  MouseEvent  Fires when mouse pointer button is released over an element  Element, Document, window  Yes  Yes
* mouseover  MouseEvent  Fires when mouse pointer is moved over an element  Element, Document, window  Yes  Yes
[http://domenlightenment.com/#11.2]

jsoMouseEvent > MouseEvent.prototype > UIEvent.prototype > Event.prototype > Object.prototype

name::
* McsEngl.jsoMouseEvent > MouseEvent.prototype > UIEvent.prototype > Event.prototype > Object.prototype@cptIt,

jsoMouseEvent.member.CHROME:
//2015-11-14
> Object.getOwnPropertyNames(document.createEvent('MouseEvent')).sort()
["isTrusted"]
===
> var o = document.createEvent('mouseevent')
undefined
> Object.getPrototypeOf(o)
MouseEvent {initMouseEvent: function, initUIEvent: function, stopPropagation: function, preventDefault: function, initEvent: function…}
> Object.getPrototypeOf(o.__proto__)
UIEvent {initUIEvent: function, stopPropagation: function, preventDefault: function, initEvent: function, stopImmediatePropagation: function…}
> Object.getPrototypeOf(o.__proto__.__proto__)
Event {stopPropagation: function, preventDefault: function, initEvent: function, stopImmediatePropagation: function, NONE: 0…}
Object.getPrototypeOf(o.__proto__.__proto__.__proto__)Object {}

jsoMouseEvent.MEMBER.CHROME:
> Object.getOwnPropertyNames(o).sort()
["altKey", "bubbles", "button", "cancelBubble", "cancelable", "charCode", "clientX", "clientY", "ctrlKey", "currentTarget", "dataTransfer", "defaultPrevented", "detail", "eventPhase", "fromElement", "keyCode", "layerX", "layerY", "metaKey", "movementX", "movementY", "offsetX", "offsetY", "pageX", "pageY", "path", "relatedTarget", "returnValue", "screenX", "screenY", "shiftKey", "srcElement", "target", "timeStamp", "toElement", "type", "view", "webkitMovementX", "webkitMovementY", "which", "x", "y"]
> MouseEvent.prototype
Object.getOwnPropertyNames(o.__proto__).sort()["constructor", "initMouseEvent"]
> UIEvent.prototype
Object.getOwnPropertyNames(o.__proto__.__proto__).sort()["constructor", "initUIEvent"]
> Event.prototype Object.getOwnPropertyNames(o.__proto__.__proto__.__proto__).sort()["AT_TARGET", "BLUR", "BUBBLING_PHASE", "CAPTURING_PHASE", "CHANGE", "CLICK", "DBLCLICK", "DRAGDROP", "FOCUS", "KEYDOWN", "KEYPRESS", "KEYUP", "MOUSEDOWN", "MOUSEDRAG", "MOUSEMOVE", "MOUSEOUT", "MOUSEOVER", "MOUSEUP", "NONE", "SELECT", "constructor", "initEvent", "preventDefault", "stopImmediatePropagation", "stopPropagation"]
> Object.prototype Object.getOwnPropertyNames(o.__proto__.__proto__.__proto__.__proto__).sort()["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

MouseEvent.prototype > UIEvent.prototype#ql:jsUIEvent.prototype# > Event.prototype

name::
* McsEngl.jsMouseEvent.prototype@cptIt,
* McsEngl.ljsMouseEvent.prototype@cptIt,

jsMouseEvent.prototype.CHROME:
> Object.getOwnPropertyNames(MouseEvent.prototype).sort()
["altKey", "button", "buttons", "clientX", "clientY", "constructor", "ctrlKey", "fromElement", "initMouseEvent", "layerX", "layerY", "metaKey", "movementX", "movementY", "offsetX", "offsetY", "pageX", "pageY", "relatedTarget", "screenX", "screenY", "shiftKey", "toElement", "webkitMovementX", "webkitMovementY", "which", "x", "y"]

ljbevt.CLICK

name::
* McsEngl.ljbevt.CLICK@cptIt,
* McsEngl.ljsoEvent.onclick@cptIt,
* McsEngl.ljs'onclick@cptIt554i,
* McsEngl.onclick.js@cptIt554i,

_DESCRIPTION:
The next most common way to attach events is to attach them directly to the element object in javascript. In the following code, we obtain an element object using getElementById, and then attach the myFavoriteFunction method to the onclick event by setting the onclick property of the element object:

var element = document.getElementById("myFavoriteElement");
element.onclick = myFavoriteFunction;

Note that the line is element.onclick = myFavoriteFunction, not element.onclick = myFavoriteFunction(). This is because we are setting onclick equal to the function itself, not the result of the function. If the parentheses are there, the function would be evaluated.
[http://www.switchonthecode.com/tutorials/javascript-working-with-events]

_CODE.LJS:
displays the text on td clicked.
<!DOCTYPE html>
<html lang="en">
<body>

<p>Click a table cell</p>

<table border="1">
<tbody>
<tr><td>row 1 column 1</td><td>row 1 column 2</td></tr>
<tr><td>row 2 column 1</td><td>row 2 column 2</td></tr>
<tr><td>row 3 column 1</td><td>row 3 column 2</td></tr>
<tr><td>row 4 column 1</td><td>row 4 column 2</td></tr>
<tr><td>row 5 column 1</td><td>row 5 column 2</td></tr>
<tr><td>row 6 column 1</td><td>row 6 column 2</td></tr>
</tbody>
</table>

<script>
document.querySelector('table').addEventListener('click',function(event){
 if(event.target.tagName.toLowerCase() === 'td'){ //make sure we only run code if a td is the target
   console.log(event.target.textContent); //use event.target to gain access to target of the event which is the td
 }
},false);
</script>
</body>
</html>
[http://domenlightenment.com/#11.14]

_CODE.LJS:
// property event handler
elementDiv.onclick = function(){console.log('I\'m first, but I get overidden/replace')};

//overrides/replaces the prior value
elementDiv.onclick = function(){console.log('I win')};

ljbevt.DRAG

name::
* McsEngl.ljbevt.DRAG@cptIt,
* McsEngl.ljs'drag-event@cptIt,

_SPECIFIC:
Drag events

Event Type  Event Interface  Description  Event Targets  Bubbles  Cancelable
drag  DragEvent  Fires on the source object continuously during a drag operation.  Element, Document, window  Yes  Yes
dragstart  DragEvent  Fires on the source object when the user starts to drag a text selection or selected object. The ondragstart event is the first to fire when the user starts to drag the mouse.  Element, Document, window  Yes  Yes
dragend  DragEvent  Fires on the source object when the user releases the mouse at the close of a drag operation. The ondragend event is the final drag event to fire, following the ondragleave event, which fires on the target object.  Element, Document, window  Yes  No
dragenter  DragEvent  Fires on the target element when the user drags the object to a valid drop target.  Element, Document, window  Yes  Yes
dragleave  DragEvent  Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation.  Element, Document, window  Yes  No
dragover  DragEvent  Fires on the target element continuously while the user drags the object over a valid drop target. The ondragover event fires on the target object after the ondragenter event has fired.  Element, Document, window  Yes  Yes
drop  DragEvent  Fires on the target object when the mouse button is released during a drag-and-drop operation. The ondrop event fires before the ondragleave and ondragend events.  Element, Document, window  Yes  Yes
[http://domenlightenment.com/#11.2]

ljbevt.mouseenter

name::
* McsEngl.ljbevt.mouseenter@cptIt,
* McsEngl.ljsmouseenter@cptIt,
* McsEngl.ljsonmouseenter@cptIt,

_DESCRIPTION:
Browser support: IE,
Occurs when the user moves the mouse pointer into the area of an element.
The onmouseenter event is only supported by Internet Explorer, for a cross-browser solution, use the onmouseover event. The only difference between the onmouseenter and onmouseover events is that the onmouseover event propagates up the document hierarchy, while the onmouseenter does not.
Use the onmousemove event to receive a notification when the user moves the mouse pointer over, and the onmouseout event to receive a notification when the user moves the mouse pointer out of an element.
Note: the onmouseenter event is not fired during a drag operation. For that case, use the ondragenter event.
[http://help.dottoro.com/ljbnomdb.php]

ljbevt.mouseover

name::
* McsEngl.ljbevt.mouseover@cptIt,
* McsEngl.ljsmouseover@cptIt,
* McsEngl.ljsonmouseover@cptIt,

_DESCRIPTION:
Browser support: all
Occurs when the user moves the mouse pointer into the element.
Use the onmousemove event to receive a notification when the user moves the mouse pointer over and the onmouseout event to receive a notification when the user moves the mouse pointer out of an element.
Note: the onmouseover event is not fired during a drag operation. For that case, use the ondragenter event.
[http://help.dottoro.com/ljudwitu.php]

ljbevt.WHEEL

name::
* McsEngl.ljbevt.WHEEL@cptIt,
* McsEngl.ljs'wheel-event@cptIt,

_SPECIFIC:
Event Type  Event Interface  Description  Event Targets  Bubbles  Cancelable
wheel (browsers use mousewheel but the specification uses wheel)  WheelEvent  Fires when a mouse wheel has been rotated around any axis, or when an equivalent input device (such as a mouse-ball, certain tablets or touchpads, etc.) has emulated such an action. Depending on the platform and input device, diagonal wheel deltas may be delivered either as a singlewheel event with multiple non-zero axes or as separate wheel events for each non-zero axis. Some helpful details about browser support can be found here.  Element, Document, Window  Yes  Yes
[http://domenlightenment.com/#11.2]

ljbevt.action.TOUCH

name::
* McsEngl.ljbevt.action.TOUCH@cptIt,
* McsEngl.ljbevt.touch@cptIt,
* McsEngl.ljs'touch-event@cptIt,
* McsEngl.press-event@cptIt,
* McsEngl.tap-event@cptIt,
* McsEngl.touch-event@cptIt,

_SPECIFIC:
Touch events
Event Type  Event Interface  Description  Event Targets  Bubbles  Cancelable
* touchstart  TouchEvent  Fires event to indicate when the user places a touch point on the touch surface  Element, Document, window  Yes  Yes
* touchend  TouchEvent  Fires event to indicate when the user removes a touch point from the touch surface, also including cases where the touch point physically leaves the touch surface, such as being dragged off of the screen  Element, Document, window  Yes  Yes
* touchmove  TouchEvent  Fires event to indicate when the user moves a touch point along the touch surface  Element, Document, window  Yes  Yes
* touchenter  TouchEvent  Fires event to indicate when a touch point moves onto the interactive area defined by a DOM element  Element, Document, window  No  ?
* toucheleave  TouchEvent  Fires event to indicate when a touch point moves off the interactive area defined by a DOM element  Element, Document, window  No  ?
* touchcancel  TouchEvent  Fires event to indicate when a touch point has been disrupted in an implementation-specific manner, such as a synchronous event or action originating from the UA canceling the touch, or the touch point leaving the document window into a non-document area which is capable of handling user interactions.  Element, Document, window  Yes  No
Notes
Touch events are typically only supported iOS, Andorid, and Blackberry browsers or browsers (e.g. chrome) that can switch on touch modes
[http://domenlightenment.com/#11.2]

Resource

_ADDRESS.WPG:
* https://www.w3.org/TR/touch-events//
* http://www.html5rocks.com/en/mobile/touchandmouse//
* http://www.html5rocks.com/en/mobile/touch//
* https://developer.mozilla.org/en-US/docs/Web/API/Touch_events,
* https://developers.google.com/web/tools/chrome-devtools/iterate/device-mode/?utm_source=dcc&utm_medium=redirect&utm_campaign=2016q3#emulate-touch-events,
===
* https://gianlucaguarini.github.io/Tocca.js// Super lightweight script (1kb) to detect via Javascript events like 'tap' 'dbltap' 'swipeup' 'swipedown' 'swipeleft' 'swiperight' on any kind of device.

ljbevt.TAP.LONG

name::
* McsEngl.ljbevt.TAP.LONG@cptIt,
* McsEngl.longtap@cptIt,
* McsEngl.tapHold@cptIt,
* McsEngl.tapLong@cptIt,

ljbevt.action.USER-INTERFACE

name::
* McsEngl.ljbevt.action.USER-INTERFACE@cptIt,
* McsEngl.ljs'user-interface-event@cptIt,

_SPECIFIC:
User interface events
* Event Type  Event Interface  Description  Event Targets  Bubbles  Cancelable
* load  Event, UIEvent  fires when an asset (HTML page, image, CSS, frameset, <object>, or JS file) is loaded.  Element, Document, window, XMLHttpRequest, XMLHttpRequestUpload  No  No
* unload   UIEvent  fires when user agent removes the resource (document, element, defaultView) or any depending resources (images, CSS file, etc.)  window, <body>, <frameset>  No  No
* abort  Event, UIEvent  Fires when an resource (object/image) is stopped from loading before completely loaded  Element, XMLHttpRequest, XMLHttpRequestUpload  Yes  No
* error  Event, UIEvent  Fires when a resource failed to load, or has been loaded but cannot be interpreted according to its semantics, such as an invalid image, a script execution error, or non-well-formed XML  Element, XMLHttpRequest, XMLHttpRequestUpload  Yes  No
* resize  UIEvent  Fires when a document view has been resized. This event type is dispatched after all effects for that occurrence of resizing of that particular event target have been executed by the user agent  window, <body>, <frameset>  Yes  No
* scroll  UIEvent  Fires when a user scrolls a document or an element.  Element, Document, window  Yes  No
* contextmenu  MouseEvent  fires by right clicking an element  Element  Yes  Yes
[http://domenlightenment.com/#11.2]

jsoUIEvent

jsoUIEvent.MEMBER.CHROME:
> Object.getOwnPropertyNames(document.createEvent("UIEvent")).sort()
["bubbles", "cancelBubble", "cancelable", "charCode", "currentTarget", "defaultPrevented", "detail", "eventPhase", "keyCode", "layerX", "layerY", "pageX", "pageY", "path", "returnValue", "srcElement", "target", "timeStamp", "type", "view", "which"]
> Object.getOwnPropertyNames(document.createEvent("UIEvent").__proto__).sort()
["constructor", "initUIEvent"]

UIEvent.prototype > Event.prototype#ql:jsevent.prototype# > Object.prototype

name::
* McsEngl.jsUIEvent.prototype@cptIt,
* McsEngl.ljsUIEvent.prototype@cptIt,

jsUIEvent.prototype.CHROME:
> Object.getOwnPropertyNames(UIEvent.prototype).sort()
["jsconstructor", "ljsdetail", "ljsinitUIEvent", "ljsview", "ljswhich"]

_SPECIFIC:
* CompositionEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* FocusEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* KeyboardEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* MouseEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* SVGZoomEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* TextEvent > UIEvent.prototype#ql:jsUIEvent.prototype#,
* TouchEvent > UIEvent.prototype#ql:jsUIEvent.prototype#

ljbevt.action.FOCUS

name::
* McsEngl.ljbevt.action.FOCUS@cptIt,
* McsEngl.ljs'focus-event@cptIt,

_SPECIFIC:
Focus events
Event Type  Event Interface  Description  Events Targets  Bubbles  Cancelable
blur  FocusEvent  Fires when an element loses focus either via the mouse or tabbing  Element (except <body> and <frameseet> ), Document  No  No
focus  FocusEvent  Fires when an element receives focus  Element (except <body> and <frameseet> ), Document  No  No
focusin  FocusEvent  Fires when an event target is about to receive focus but before the focus is shifted. This event occurs right before the focus event  Element  Yes  No
focusout  FocusEvent  Fires when an event target is about to lose focus but before the focus is shifted. This event occurs right before the blur event  Element  Yes  No
[http://domenlightenment.com/#11.2]

FocusEvent.prototype > UIEvent.prototype#ql:jsuievent.prototype# > Event.prototype > Object.prototype

name::
* McsEngl.jsFocusEvent.prototype@cptIt,

jsFocusEvent.prototype.CHROME:
> Object.getOwnPropertyNames(FocusEvent.prototype).sort()
["jsconstructor", "ljsrelatedTarget"]

ljbevt.focus

name::
* McsEngl.ljbevt.focus@cptIt,
* McsEngl.ljsfocus@cptIt,
* McsEngl.ljsonfocus@cptIt,
* McsEngl.ljsevt.onfocus@cptIt,

_DESCRIPTION:
Browser support: ALL.
Occurs when an element receives focus.
An element with focus is always the active element in a document, but an active element does not necessarily have focus. For example, an active element within a window that is not the foreground window has no focus. Only one element can be active at a time in a document.
You can get the active element with the activeElement property.
To set the active element in a document, use the focus and setActive methods.
To determine whether the active element has focus, use the hasFocus method.
The onfocus event is not cancelable. If you want to prevent an element from getting the focus, set the disabled property of the element to true. See the examples for details.
To detect when an element loses focus, use the onblur event.
[http://help.dottoro.com/ljlmvqok.php]

ljbevt.focusin

name::
* McsEngl.ljbevt.focusin@cptIt,
* McsEngl.ljsfocusin@cptIt,
* McsEngl.ljsonfocusin@cptIt,
* McsEngl.ljsevt.onfocusin@cptIt,

_DESCRIPTION:
Browser support: IE.
Occurs before an element receives focus.
The onfocusin event bubbles up (unlike the onfocus event), so if you want to detect whether an element or its child gets the focus, it is sufficient to listen for the onfocusin event of the element.
In Opera, Google Chrome and Safari, use the DOMFocusIn event instead of the onfocusin event.
In Firefox, if you need to detect whether a child of an element gets the focus, use a capturing listener for the onfocus event. See the examples for details.
To detect when an element loses focus, use the onblur, onfocusout and DOMFocusOut events.
[http://help.dottoro.com/ljggspvo.php]

ljbevt.action.WEBPAGE

name::
* McsEngl.ljbevt.action.WEBPAGE@cptIt,
* McsEngl.ljsevt.webpage@cptIt,
* McsEngl.ljsevt.page@cptIt,

ljbevt.beforeunload

name::
* McsEngl.ljbevt.beforeunload@cptIt,
* McsEngl.ljsbeforeunload@cptIt,
* McsEngl.ljsonbeforeunload@cptIt,
* McsEngl.ljsevent.beforeunload@cptIt,
* McsEngl.ljsevent.onbeforeunload@cptIt,
* McsEngl.ljsevt.beforeunload@cptIt,
* McsEngl.ljsevt.onbeforeunload@cptIt,

_DESCRIPTION:
In JavaScript, onbeforeunload event is fired when the page is about to unload and there can be multiple reasons for this unload. For instance, back or forward or refresh button is clicked or a link on the page is clicked, etc.
[http://www.codeproject.com/Articles/696526/Solution-to-Browser-Back-Button-Click-Event-Handli]
===
Definition and Usage
The onbeforeunload event occurs when the document is about to be unloaded.

This event allows you to display a message in a confirmation dialog box to inform the user whether he/she wants to stay or leave the current page.

The default message that appears in the confirmation box, is different in different browsers. However, the standard message is something like "Are you sure you want to leave this page?". This message cannot be removed.

However, you can write a custom message together with the default message. See the first example on this page.

Note: If the onbeforeunload event is not assigned to the <body> element, you must assign/attach the event on the window object, and use the returnValue property to create a custom message (see syntax examples below).

Note: In Firefox, only the default message will be displayed (not the custom message (if any)).
[http://www.w3schools.com/jsref/event_onbeforeunload.asp]

_CODE.LJS: _CODE.HML:
Syntax
In HTML:
<element onbeforeunload="myScript">Try it

In JavaScript:

object.onbeforeunload=function(){myScript};Try it
In JavaScript, using the addEventListener() method:

object.addEventListener("beforeunload", myScript);Try it
Note: The addEventListener() method is not supported in Internet Explorer 8 and earlier versions.
[http://www.w3schools.com/jsref/event_onbeforeunload.asp]

ljbevt.DOMContentLoaded

name::
* McsEngl.ljbevt.DOMContentLoaded@cptIt,
* McsEngl.ljsDOMContentLoaded@cptIt,
* McsEngl.ljsevent.DOMContentLoaded@cptIt,

_ADDRESS.WPG:
* http://ie.microsoft.com/Testdrive/HTML5/DOMContentLoaded/Default.html,

_DESCRIPTION:
The DOMContentLoaded event is fired when the initial HTML document has been completely loaded and parsed, without waiting for stylesheets, images, and subframes to finish loading. A very different event - load#ql:jsevt.load# - should be used only to detect a fully-loaded page. It is an incredibly popular mistake to use load where DOMContentLoaded would be much more appropriate, so be cautious.
Note: Synchronous Javascript pauses parsing of the DOM.
Note: There are also plenty of general-purpose and standalone libraries who offer cross-browser methods to detect that the DOM is ready.
Speeding up
If you want DOM to get parsed as fast as possible after the user had requested the page, some things you could do is turn your JavaScript asynchronous and to optimize loading of stylesheets which if used as usual, slow down page load due to being loaded in parallel, "stealing" traffic from the main html document.
General info
Specification  HTML5
Interface    Event
Bubbles    Yes
Cancelable    Yes (although specified as a simple event that isn't cancelable)
Target    Document
Default Action  None.
[https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded]
===
The DOMContentLoaded event fires when parsing of the current page is complete; the load event fires when all files have finished loading from all resources, including ads and images. DOMContentLoaded is a great event to use to hookup UI functionality to complex web pages.
[http://ie.microsoft.com/Testdrive/HTML5/DOMContentLoaded/Default.html]

_CODE.LJS:
// alternative to DOMContentLoaded event
document.onreadystatechange = function () {
if (document.readyState == "interactive") {
initApplication();
}
}
[https://developer.mozilla.org/en-US/docs/Web/API/Document/readyState]

ljbevt.hashchange

name::
* McsEngl.ljbevt.hashchange@cptIt,
* McsEngl.ljshashchange@cptIt,
* McsEngl.ljsevent.hashchange@cptIt,
* McsEngl.ljsevt.onhashchange@cptIt,

_DESCRIPTION:
The hashchange event fires when a window's hash changes (see location.hash).
[https://developer.mozilla.org/en/docs/Web/API/WindowEventHandlers/onhashchange]

ljbevt.load

name::
* McsEngl.ljbevt.load@cptIt,
* McsEngl.ljsevent.load@cptIt,
* McsEngl.ljsevt.load@cptIt,

_ADDRESS.WPG:
* http://ie.microsoft.com/Testdrive/HTML5/DOMContentLoaded/Default.html,

_DESCRIPTION:
The DOMContentLoaded event is fired when the initial HTML document has been completely loaded and parsed, without waiting for stylesheets, images, and subframes to finish loading.
A very different event - load - should be used only to detect a fully-loaded page.
It is an incredibly popular mistake to use load where DOMContentLoaded would be much more appropriate, so be cautious.
[https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded]

_CODE.LJS:
if (window.addEventListener#ql:jsaddeventlistener#)
window.addEventListener('load', fReady, false)
else if (window.attachEvent)
window.attachEvent('onload', fReady)
===
// alternative to load event
document.onreadystatechange = function () {
if (document.readyState == "complete") {
initApplication();
}
}
[https://developer.mozilla.org/en-US/docs/Web/API/Document/readyState]

ljbevt.CUSTOM

name::
* McsEngl.ljbevt.CUSTOM@cptIt,

ljbevt.CUSTOM.NO

name::
* McsEngl.ljbevt.CUSTOM.NO@cptIt,
* McsEngl.ljsevent.builtIn@cptIt,
* McsEngl.ljsevent.customNo@cptIt,
* McsEngl.ljsevent.native@cptIt,
* McsEngl.ljsevent.standard@cptIt,

ljbevt.target.DOCUMENT

name::
* McsEngl.ljbevt.target.DOCUMENT@cptIt,
* McsEngl.ljs'document-event@cptIt,

_SPECIFIC:
Document specific events
Event Type  Event Interface  Description  Event Targets  Bubbles  Cancelable
* readystatechange  Event  Fires event when readyState is changed  Document, XMLHttpRequest  No  No
* DOMContentLoaded  Event  Fires when a webpage has been parsed, but before all resources have been fully downloaded  Document  Yes  No
[http://domenlightenment.com/#11.2]

ljbevt.target.FORM

name::
* McsEngl.ljbevt.target.FORM@cptIt,
* McsEngl.ljs'form-event@cptIt,

_SPECIFIC:
Form events
Event Type  Event Interface  Description  Event Targets  Bubbles  Cancelable
* change  specific to HTML forms  Fires when a control loses the input focus and its value has been modified since gaining focus  Element  Yes  No
* reset  specific to HTML forms  Fires when a form is reset  Element  Yes  No
* submit  specific to HTML forms  Fires when a form is submitted  Element  Yes  Yes
* select  specific to HTML forms  Fires when a user selects some text in a text field, including input and textarea  Element  Yes  No
[http://domenlightenment.com/#11.2]

ljbevt.target.WINDOW

name::
* McsEngl.ljbevt.target.WINDOW@cptIt,
* McsEngl.ljs'window-event@cptIt,

_SPECIFIC:
Window, <body>, and frame specific events

Event Type  Event Interface  Description  Event Targets  Bubbles  Cancelable
afterprint  ?  Fires on the object immediately after its associated document prints or previews for printing  window, <body>, <frameset>  No  No
beforeprint  ?  Fires on the object before its associated document prints or previews for printing  window, <body>, <frameset>  No  No
beforeunload  ?  Fires prior to a document being unloaded  window, <body>, <frameset>  No  Yes
hashchange  HashChangeEvent  Fires when there are changes to the portion of a URL that follows the number sign (#)  window, <body>, <frameset>  No  No
messsage  ?  Fires when the user sends a cross-document message or a message is sent from a Worker with postMessage  window, <body>, <frameset>  No  No
offline  NavigatorOnLine  Fires when browser is working offline  window, <body>, <frameset>  No  No
online  NavigatorOnLine  Fires when browser is working online  window, <body>, <frameset>  No  No
pagehide  PageTransitionEvent  Fires when traversing from a session history entry  window, <body>, <frameset>  No  No
pageshow  PageTransitionEvent  The pagehide event is fired when traversing from a session history entry  window, <body>, <frameset>  No  No
[http://domenlightenment.com/#11.2]

ljbevt.TIMING

name::
* McsEngl.ljbevt.TIMING@cptIt,
* McsEngl.ljs'timing-event@cptIt,

_DESCRIPTION:
JavaScript Timing Events

With JavaScript, it is possible to execute some code after a specified time-interval. This is called timing events.

It's very easy to time events in JavaScript. The two key methods that are used are:

setTimeout() - executes a code some time in the future
clearTimeout() - cancels the setTimeout()
Note: The setTimeout() and clearTimeout() are both methods of the HTML DOM Window object.
[http://www.w3schools.com/js/js_timing.asp]

ljbalgo.FILE-PROCESSING

name::
* McsEngl.ljbalgo.FILE-PROCESSING@cptIt,
* McsEngl.ljb'file-processing@cptIt,
* McsEngl.ljbfile@cptIt,
* McsEngl.ljbFile-processing@cptIt,
* McsEngl.ljbalgo.file-processing@cptIt,
* McsEngl.ljbalgo.file-processing@cptIt,,
* McsEngl.ljb'file@cptIt,
* McsEngl.ljb'file-code@cptIt,
* McsEngl.ljb'code.FILE@cptIt,
* McsEngl.ljb'file-processing@cptIt,
* McsEngl.lbjfile@cptIt,

ljsfile'API

name::
* McsEngl.ljsfile'API@cptIt,
* McsEngl.web'api.FILE@cptIt,
* McsEngl.web'file-api@cptIt,

_ADDRESS.WPG:
* http://www.w3.org/TR/FileAPI//
* http://dev.w3.org/2006/webapi/FileAPI//
* http://www.matlus.com/html5-file-upload-with-progress//

_SPECIFIC:
* js-file-api#ql:js'file_api#

jsfile'Blob-object

name::
* McsEngl.jsfile'Blob-object@cptIt,
* McsEngl.ljsBlob@cptIt,
* McsEngl.ljsoBlob@cptIt,
* McsEngl.ljsfileapi'blob@cptIt,

_DESCRIPTION:
A blob is a reference to a chuck of byte sequence data. A blob is not a reference to a file, it may seem like it is.

A blob has its size and MIME type just like a file has. Blob data can be stored in the memory or filesystem depending on the browser and blob size. A blob can be used like a file wherever we use files.

Most APIs for working with blobs are asynchronous. But synchronous versions of APIs are also available so that they can be used in Web Workers.

Contents of a blob can be copied into a ArrayBuffer and therefore it makes blobs very handy to store binary data.
[http://qnimate.com/an-introduction-to-javascript-blobs-and-file-interface/]
===
Stands for binary large object. A blob is a set of binary data that is stored a single object. It is a general-purpose way to reference binary data in web applications. A blob can be an image or an audio file.
Blob
Blob—with a capital B—is a data structure that is immutable, which means that binary data referenced by a Blob cannot be modified directly. This makes Blobs act predictably when they are passed to asynchronous APIs.
[https://developer.mozilla.org/en-US/docs/WebGuide/API/File_System/Introduction#definitions]

jsoBlob.member.CHROME:
> Object.getOwnPropertyNames(new Blob())
[]
> Object.getOwnPropertyNames(new Blob().__proto__)
["size", "type", "slice", "constructor"]
> Object.getOwnPropertyNames(new Blob().__proto__.__proto__)
["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "__defineGetter__", "__lookupGetter__", "__defineSetter__", "__lookupSetter__", "__proto__"]
===
Blob {type: "", size: 0, slice: function}

jsBlob.prototype > Object.prototype

name::
* McsEngl.jsBlob.prototype > Object.prototype@cptIt,

jsBlob.prototype.CHROME:
Object.getOwnPropertyNames(Blob.prototype).sort()
["constructor", "size", "slice", "type"]

jsfile'code

name::
* McsEngl.jsfile'code@cptIt,
* McsEngl.ljs'code.FILE@cptIt,
* McsEngl.ljsfile@cptIt,

_DESCRIPTION:
Deployment of client-side JavaScript code favors large .js files, but during development I want smaller ones.
[http://blog.startifact.com/posts/overwhelmed-by-javascript-dependencies.html]

jsfile'File-object > Blob.prototype

name::
* McsEngl.jsfile'File-object > Blob.prototype@cptIt,
* McsEngl.ljsFile@cptIt,
* McsEngl.ljsoFile@cptIt,

_PROPERTY:
> FIREFOX:
Object.getOwnPropertyNames(File.prototype).sort()
["QueryInterface", "lastModifiedDate", "mozFullPath", "name", "path", "size", "slice", "type"]
Object.getOwnPropertyNames(File.prototype.__proto__).sort()
["QueryInterface", "size", "slice", "type"]
Object.getOwnPropertyNames(File.prototype.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]

jsfile'FileList-object

name::
* McsEngl.jsfile'FileList-object@cptIt,
* McsEngl.ljsFileList@cptIt,
* McsEngl.ljsoFileList@cptIt,

_CODE.LJS:
var oFileList = document.getElementById('idFile').files;
// idFile is <input type="file" id="idFile" />

// Make sure file has been selected
if (!(oFileList instanceof FileList) || oFileList.length === 0){
alert('You must select a settings file to import. Click the Choose File to select a file.');
return false;
}

jsfile'FileReader-object

name::
* McsEngl.jsfile'FileReader-object@cptIt,
* McsEngl.ljsFileReader@cptIt,
* McsEngl.ljsoFileReader@cptIt,

_PROPERTY:
FileReader {onloadend: null, onerror: null, onabort: null, onload: null, onprogress: null…}
error: null
onabort: null
onerror: null
onload: null
onloadend: null
onloadstart: null
onprogress: null
readyState: 0
result: null
__proto__: FileReader

SPECIFIC

* jsfile.specific,

_SPECIFIC:
* lcpJs'code.file.SPECIFIC,
* file-api#ql:js'api.file#

jsfile.CREATING

name::
* McsEngl.jsfile.CREATING@cptIt,

_ADDRESS.WPG:
* https://github.com/keithwhor/FSO.js// JavaScript FileSystemObject library for temporary and permanent client-side file storage http://fsojs.com/

jsfile.READING

name::
* McsEngl.jsfile.READING@cptIt,
* McsEngl.ljs'file-reading@cptIt,
* McsEngl.ljs'ex.File.reading@cptIt,

_ADDRESS.WPG:
* http://www.html5rocks.com/en/tutorials/file/dndfiles//
* https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications,

jQuery load-method#ql:jquery'file_load#

_XMLHttpRequest:
function XMLHttpRequestDemo() {
var oRequest = new XMLHttpRequest();
var sURL = "http://"+self.location.hostname+"/faq/requested_file.htm";

oRequest.open("GET",sURL,false);
oRequest.setRequestHeader("User-Agent",navigator.userAgent);
oRequest.send(null)

if (oRequest.status==200) alert(oRequest.responseText);
else alert("Error executing XMLHttpRequest call!");
}

Reading local files in JavaScript:
* http://www.html5rocks.com/tutorials/file/dndfiles/#toc-selecting-files-input

The File API worked perfectly. Thanks for the suggestion.

Here's what I did, for anyone else who runs across a similar issue:

/**
* Imports settings from file via Files API
*/
var importSettings : function(){

var fileList = document.getElementById('settingsFile').files;
// settingsFile is <input type="file" id="settingsFile" />

// Make sure file has been selected
if (!(fileList instanceof FileList) || fileList.length === 0){
alert('You must select a settings file to import. Click theChoose File to select a file.');
return false;
}

var fileReader = new FileReader();

// Bind function to the FileReader onloadend event to know when file is fully loaded
fileReader.onloadend = (function(file){

return function(e) {
// This is non-obvious: Your file's content will be in e.target.result
}

})(fileList[0]); // fileList[0] assumes only one file has beenselected

fileReader.readAsText(fileList[0]);
}

<div id="main">
</div>
<script type="text/javascript">
document.getElementById('main').innerHTML =
'<object type="type/html" data="welcome.html"><\/object>';
</script>
=> NEEDS plugin.

open-file and alert content

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications#Using_hidden_file_input_elements_using_the_click()_method,

<!DOCTYPE html>
<html>
<body>

<h3>A demonstration of how to access a File Upload Button</h3>

<input type="file" id="idFile">

<p>Click the "Try it" button to read the file.</p>

<button onclick="fReadfile()">Try it</button>

<script>
var fReadfile = function(){

var oFileList = document.getElementById('idFile').files;
// idFile is <input type="file" id="idFile" />

// Make sure file has been selected
if (!(oFileList instanceof FileList) || oFileList.length === 0){
alert('You must select a settings file to import. Click the Choose File to select a file.');
return false;
}

var oFileReader = new FileReader();

// Bind function to the FileReader onloadend event to know when file is fully loaded
oFileReader.onloadend = (function(file){

return function(e) {
// This is non-obvious: Your file's content will be in e.target.result
alert(e.target.result);
}
})(oFileList[0]); // oFileList[0] assumes only one file has beenselected

oFileReader.readAsText(oFileList[0]);
}
</script>

</body>
</html>

jsfile.File-manager

name::
* McsEngl.jsfile.File-manager@cptIt,
* McsEngl.ljs'ex.FileSystem@cptIt,
* McsEngl.ljs'file-manager@cptIt,

_ADDRESS.WPG:
* http://www.matlus.com/html5-file-upload-with-progress//

_DESCRIPTION:
There is no way to handle the file system with JavaScript. You will have to use localStorage, Web SQL Databases, or resort to NPAPI (C++, native code).

jsfile.SELECTING

name::
* McsEngl.jsfile.SELECTING@cptIt,

_CODE.LJS:
Consider this HTML:

<input type="file" id="fileElem" multiple accept="image/*" style="display:none" onchange="handleFiles(this.files)">
<a href="#" id="fileSelect">Select some files</a>

The code that handles the click event can look like this:

var fileSelect = document.getElementById("fileSelect"),
fileElem = document.getElementById("fileElem");

fileSelect.addEventListener("click", function (e) {
if (fileElem) {
fileElem.click();
}
e.preventDefault(); // prevent navigation to "#"
}, false);

Obviously you can style the new button for opening the file picker as you wish.
[https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications]

ljbalgo.IMAGE-PROCESSING

name::
* McsEngl.ljbalgo.IMAGE-PROCESSING@cptIt,
* McsEngl.ljsimage@cptIt,

_ADDRESS.WPG:
* http://www.menucool.com/javascript-image-slider,

ljbalgo.STORAGE

name::
* McsEngl.ljbalgo.STORAGE@cptIt,
* McsEngl.ljsstorage@cptIt,

jsstorage.sessionStorage

name::
* McsEngl.jsstorage.sessionStorage@cptIt,
* McsEngl.ljssessionStorage@cptIt,

_DESCRIPTION:
One of the most interesting parts of the recent browser evolution has been the explosive growth in the number of options for client-side data storage. Prior to this past year, our only viable cross-browser method of storing data on the client was cookies. Cookies have the downside of adding additional overhead to server requests and responses, but they do get the job done. HTML 5 introduced three new options for client-side data storage: sessionStorage, localStorage, and client-side databases. The first two, sessionStorage and localStorage, have since been split out into a separate Web Storage specification while client-side databases is covered in the Web Database specification. Of these three new client-side data storage options, I find sessionStorage the most interesting.
[http://www.nczonline.net/blog/2009/07/21/introduction-to-sessionstorage/]

ljbalgo'CODE

name::
* McsEngl.ljbalgo'CODE@cptIt,
* McsEngl.ljs'CODE.SOURCE@cptIt,
* McsEngl.ljs'acode@cptIt, {2014-11-01}
* McsEngl.ljs'first-code@cptIt, {2014-11-01}
* McsEngl.ljs'source-code@cptIt,
* McsEngl.ljsacode@cptIt, {2014-11-01}
* McsEngl.ljscode@cptIt, {2014-02-21}
* McsEngl.ljssourcecode@cptIt, {2014-10-28}
* McsEngl.ljs'code-construct@cptIt, {2014-02-10}
* McsEngl.ljs'codebase@cptIt,
* McsEngl.ljs'domainOut@cptIt,
* McsEngl.ljs'script@cptIt,
* McsEngl.ljs'unit-of-code@cptIt, [ECMA]
* McsEngl.ljs'code.BINARY.NO@cptIt,
* McsEngl.ljs'code.source@cptIt,
* McsEngl.ljs'source-code@cptIt,

* McsEngl.ljscds@cptIt,

_DESCRIPTION:
Code is the human-friendly representation used by the-language for its algorithms which (representation) understands and the-machines.
[hmnSngo.2016-05-10]

_DESCRIPTION:
Code is any IDENTIFIABLE part of domainOut elements.
[hmnSngo.2014-02-19]
===
Code-unit any identifiable part of a program#ql:js'program#.

ljbalgo'code'ATTRIBUTE

name::
* McsEngl.ljbalgo'code'ATTRIBUTE@cptIt,

_SPECIFIC:
* jscode-convention
* jscode-documentation#ql:js'code'documentation#
* jscode-executing
* jscode-inserting

jscode'browser-support#ql:js'browser-support#

name::
* McsEngl.jscode'browser-support@cptIt,
* McsEngl.ljs'browser-support@cptIt,

ljbalgo'code'convention

name::
* McsEngl.ljbalgo'code'convention@cptIt,
* McsEngl.ljsnotation@cptIt,
* McsEngl.ljs'convension@cptIt,
* McsEngl.ljs'format@cptIt,
* McsEngl.ljs'Notation@cptIt,

_DESCRIPTION:
The long-term value of software to an organization is in direct proportion to the quality of the codebase. Over its lifetime, a program will be handled by many pairs of hands and eyes. If a program is able to clearly communicate its structure and characteristics, it is less likely that it will break when modified in the never-too-distant future.

Code conventions can help in reducing the brittleness of programs.

All of our JavaScript code is sent directly to the public. It should always be of publication quality.

Neatness counts.
[http://javascript.crockford.com/code.html]

_SPECIFIC:
* a  array
* b  boolean
* c  class
* f  function
* m  module
* n  number
* o  object
* r  regexp
* s  string
[hmnSngo.2014-03-26]
===
* x  Many or Unknown 'part-of-code'
[hmnSngo.2014-03-31]
* variable:    projectName
* function:    funProjectName
* html-element:  divProjectName, ...
* html-elm-att:  idProjectName, classProjectName, ...
* image:    imgProjectName,

ljb'Indentation

name::
* McsEngl.ljb'Indentation@cptIt,

Indentation
The unit of indentation is four spaces. Use of tabs should be avoided because (as of this writing in the 21st Century) there still is not a standard for the placement of tabstops. The use of spaces can produce a larger filesize, but the size is not significant over local networks, and the difference is eliminated by minification.
[http://javascript.crockford.com/code.html]

ljb'Line-length

name::
* McsEngl.ljb'Line-length@cptIt,
* McsEngl.ljs'notation.LINE@cptIt,

Constrain lines to 80 characters
* Break lines right after operators or comma
* Indent the line after a line break with one extra tab

Line Length
Avoid lines longer than 80 characters. When a statement will not fit on a single line, it may be necessary to break it. Place the break after an operator, ideally after a comma. A break after an operator decreases the likelihood that a copy-paste error will be masked by semicolon insertion. The next line should be indented 8 spaces.
[http://javascript.crockford.com/code.html]

ljbalgo'code'inserting

name::
* McsEngl.ljbalgo'code'inserting@cptIt,
* McsEngl.ljs'code'loading@cptIt,
* McsEngl.ljs'loading-script@cptIt,

_DESCRIPTION:
1) external-file:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
2) page-inline:
<script>....</script>
3) attribute-inline:
<div onclick="alert('yo')"></div>
[http://domenlightenment.com/#10.1]

_SPEED:
In most cases, just concatenating all of your scripts together is going to give you speeds anywhere from almost-as-good-as-a-script-loader to way-way-faster-than-a-script-loader depending on the situation. So when people talk about the benefits of a script loader, we're talking about eeking out the last little bits of performance, not revolutionizing your page load time. If you want the quickest win, just concatenate your scripts together, and place them at the bottom of your page. That is going to be the biggest jump in performance 99 times out of 100.
[http://msdn.microsoft.com/en-us/magazine/hh227261.aspx]

script-element#ql:html'elt.script#
script-loader#ql:js'script-loader#
ljbalgo'code'structure

name::
* McsEngl.ljbalgo'code'structure@cptIt,

_IMPORTANCE:
How you structure your JavaScript is very important because:
- Done right, it makes code easier to understand for others and yourself re-visting your own code.
- Having a decided-upon structure helps keep future code clean and encourages your declared best practices.
- It makes your code testable.
[http://css-tricks.com/how-do-you-structure-javascript-the-module-pattern-edition/]

ljb'coding-style

name::
* McsEngl.ljb'coding-style@cptIt,
* McsEngl.ljs'coding-style@cptIt,
* McsEngl.ljs'style-of-coding@cptIt,

_GENERIC:
* programming-style#ql:programing_style@cptIt#

_SPECIFIC:
* JsType#ql:jstype@cptIt#

ljbalgo'code'documentation

name::
* McsEngl.ljbalgo'code'documentation@cptIt,
* McsEngl.ljs'documentation@cptIt,

_DESCRIPTION:
One of the hardest tasks of software development is documenting things. Practically everyone hates doing it, yet everybody laments about bad or missing documentation of the tools they need to use. There is a wide range of tools that supposedly help and automate documenting your code:
YUIDoc (requires Node.js, npm)
JsDoc Toolkit (requires Node.js, npm)
Markdox (requires Node.js, npm)
Dox (requires Node.js, npm)
Docco (requires Node.js, Python, CoffeeScript)
JSDuck (reqires Ruby, gem)
JSDoc 3 (requires Java)
At one point or another all of these tool won’t fail to disappoint. JavaScript is a very dynamic language and thus particularly diverse in expression. This makes a lot of things extremely difficult for these tools. The following list features a couple of reasons why I’ve decided to prepare documentation in vanilla HTML, markdown or DocBoock (if the project is large enough). jQuery, for example, has the same issues and doesn’t document their APIs within their code at all.
Function signatures aren’t the only documentation you need, but most tools focus only on them.
Example code goes a long way in explaining how something works. Regular API docs usually fail to illustrate that with a fair trade-off.
API docs usually fail horribly at explaining things behind the scenes (flow, events, etc).
Documenting methods with multiple signatures is usually a real pain.
Documenting methods using option objects is often not a trivial task.
Generated Methods aren’t easily documented, neither are default callbacks.
If you can’t (or don’t) want to adjust your code to fit one of the listed documentation tools, projects like Document-Bootstrap might save you some time setting up your home brew documentation.
Make sure your Documentation is more than just some generated API doc. Your users will appreciate any examples you provide. Tell them how your software flows and which events are involved when doing something. Draw them a map, if it helps their understanding of whatever it is your software is doing. And above all: keep your docs in sync with your code!
SELF-EXPLANATORY CODE
Providing good documentation will not keep developers from actually reading your code — your code is a piece of documentation itself. Whenever the documentation doesn’t suffice (and every documentation has its limits), developers fall back to reading the actual source to get their questions answered. Actually, you are one of them as well. You are most likely reading your own code again and again, with weeks, months or even years in between.
You should be writing code that explains itself. Most of the time this is a non-issue, as it only involves you thinking harder about naming things (functions, variables, etc) and sticking to a core concept. If you find yourself writing code comments to document how your code does something, you’re most likely wasting time — your time, and the reader’s as well. Comment on your code to explain why you solved the problem this particular way, rather than explaining how you solved the problem. The how should become apparent through your code, so don’t repeat yourself. Note that using comments to mark sections within your code or to explain general concepts is totally acceptable.
[http://coding.smashingmagazine.com/2012/10/09/designing-javascript-apis-usability/]

ljbalgo'code'executing

name::
* McsEngl.ljbalgo'code'executing@cptIt,

_DESCRIPTION:
By default when the DOM is being parsed and it encounters a <script> element it will stop parsing the document, block any further rendering & downloading, and exectue the JavaScript. Because this behavior is blocking and does not permit parallel parsing of the DOM or exection of JavaScript its consider to be synchronous. If the JavaScript is external to the html document the blocking is exacerbated because the JavaScript must first be downloaed before it can be parsed.
[http://domenlightenment.com/#10.2]
The <script> element has an attribute called defer that will defer the blocking, downloading, and executing of an external JavaScript file until the browser has parsed the closing <html> node. Using this attribute simply defers what normally occurs when a web browser encoutners a <script> node. In the code below I defer each external JavaScript file until the final <html> is encountered.
...
defer is a boolan attribute it does not have a value
Some browers support defered inline scripts but this is not common among modern browsers
[http://domenlightenment.com/#10.3]

ljbalgo'code'error-checking

name::
* McsEngl.ljbalgo'code'error-checking@cptIt,
* McsEngl.ljs'error-checking@cptIt,

ljbalgo'code'parse-time

name::
* McsEngl.ljbalgo'code'parse-time@cptIt,

ljbalgo'code'run-time

name::
* McsEngl.ljbalgo'code'run-time@cptIt,
* McsEngl.code-execution-phase@cptIt,
* McsEngl.ljs'code-execution-stage@cptIt,
* McsEngl.ljs'run-time@cptIt,
* McsEngl.ljs'runtime@cptIt,

ljbalgo'code'executing.ASYNCHRONOUS

name::
* McsEngl.ljbalgo'code'executing.ASYNCHRONOUS@cptIt,

_DESCRIPTION:
A known hack for forcing a web browser into asynchronous JavaScript downloading and parsing without using the async attribure is to programatically create <script> elements that include external JavaScript files and insert them in the DOM. In the code below I programatically create the <script> element node and then append it to the <body> element which forces the browser to treat the <script> element asynchronously.

live code: http://jsfiddle.net/domenlightenment/du94d
<!DOCTYPE html>
<html lang="en">
<body>

<!-- Don't block, just start downloading and then parse the file when it's done downloading -->
<script>
var underscoreScript = document.createElement("script");
underscoreScript.src = "http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js";
document.body.appendChild(underscoreScript);
</script>
...
A major drawback to using dynamic <script> elements is JavaScript files potentially get parsed out of the order they are included in the DOM. This raises a dependency management issue.
[http://domenlightenment.com/#10.5]

ljbalgo'code.SPECIFIC

name::
* McsEngl.ljbalgo'code.SPECIFIC@cptIt,
* McsEngl.ljscode.specific@cptIt,
* McsEngl.ljs'code.SPECIFIC@cptIt,

_SPECIFIC:
* character#ql:js'character#,
* data#ql:js'data#,
* delimeter,
* expression#ql:js'expression#,
* file#ql:js'file#,
* function#ql:js'function#,
* identifier#ql:js'identifier#,
* keyword#ql:js'keyword#,
* object#ql:js'object#,
* statement#ql:js'statement#,
* token#ql:js'token#,
* value#ql:js'value#
* variable#ql:js'variable#
* whitespace,

ljbalgo'code.SPECIFIC-DIVISION.location

name::
* McsEngl.ljbalgo'code.SPECIFIC-DIVISION.location@cptIt,

_SPECIFIC:
* lcpJs'code.external##
* lcpJs'code.internal##

ljbalgo'code.APPLICATION

name::
* McsEngl.ljbalgo'code.APPLICATION@cptIt,
* McsEngl.ljs'ex.application@cptIt,
* McsEngl.ljs'app@cptIt,
* McsEngl.ljs'application@cptIt,
* McsEngl.ljs'software-system@cptIt,

_DESCRIPTION:
* user-data (static-webpage) plus js-code.
[hmnSngo.2013-08-01]

_PART:
* js--endUser-code,
* js-program#ql:js'program#

ljbalgo'code.CONTAINER

name::
* McsEngl.ljbalgo'code.CONTAINER@cptIt,

_GENERIC:
* js-code#ql:js'code#

_SPECIFIC:
* js--data-container,
* js--processing-container,
* js--mixed-container,
===
* js-function#ql:js'function#,
* js-object#ql:js'object#,
* js-variable#ql:js'variable#

ljbalgo'code.EXPRESSION

name::
* McsEngl.ljbalgo'code.EXPRESSION@cptIt,
* McsEngl.ljs'expression@cptIt,

_GENERIC:
* unit-of-code#ql:"js'unit_of_code"#,

_DESCRIPTION:
An expression is any valid unit of code that resolves to a value.

Conceptually, there are two types of expressions: those that assign a value to a variable and those that simply have a value.

The expression x = 7 is an example of the first type. This expression uses the = operator to assign the value seven to the variable x. The expression itself evaluates to seven.

The code 3 + 4 is an example of the second expression type. This expression uses the + operator to add three and four together without assigning the result, seven, to a variable.

JavaScript has the following expression categories:

Arithmetic: evaluates to a number, for example 3.14159. (Generally uses arithmetic operators.)
String: evaluates to a character string, for example, "Fred" or "234". (Generally uses string operators.)
Logical: evaluates to true or false. (Often involves logical operators.)
Object: evaluates to an object. (See special operators for various ones that evaluate to objects.)
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators]
===
Any expression is also a statement.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Statements]
===
The case labels in a switch statement can be expressions. They don't have to be constants. They can be strings.
[http://javascript.crockford.com/survey.html]
===
JavaScript allows any expression to be used as a statement. This can mask some errors, particularly in the presence of semicolon insertion. The only expressions that should be used as statements are assignments and invocations.
[http://javascript.crockford.com/code.html#statements]

ljbalgo'code.KEY

name::
* McsEngl.ljbalgo'code.KEY@cptIt,

_SPECIFIC:
Key   Code
backspace   8
tab   9
enter   13
shift   16
ctrl   17
alt   18
pause/break   19
caps lock   20
escape   27
page up   33
page down   34
end   35
home   36
left arrow   37
up arrow   38
right arrow   39
down arrow   40
insert   45
delete   46
0   48
1   49
2   50
3   51
4   52
5   53
6   54
7   55
8   56
9   57
a   65
b   66
c   67
d   68
 
Key   Code
e   69
f   70
g   71
h   72
i   73
j   74
k   75
l   76
m   77
n   78
o   79
p   80
q   81
r   82
s   83
t   84
u   85
v   86
w   87
x   88
y   89
z   90
left window key   91
right window key   92
select key   93
numpad 0   96
numpad 1   97
numpad 2   98
numpad 3   99
numpad 4   100
numpad 5   101
numpad 6   102
numpad 7   103
 
Key   Code
numpad 8   104
numpad 9   105
multiply   106
add   107
subtract   109
decimal point   110
divide   111
f1   112
f2   113
f3   114
f4   115
f5   116
f6   117
f7   118
f8   119
f9   120
f10   121
f11   122
f12   123
num lock   144
scroll lock   145
semi-colon   186
equal sign   187
comma   188
dash   189
period   190
forward slash   191
grave accent   192
open bracket   219
back slash   220
close braket   221
single quote   222
[http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes]

ljbalgo'code.location.EXTERNAL

name::
* McsEngl.ljbalgo'code.location.EXTERNAL@cptIt,

_DESCRIPTION:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>

ljbalgo'code.location.INLINE.ATTRIBUTE

name::
* McsEngl.ljbalgo'code.location.INLINE.ATTRIBUTE@cptIt,
* McsEngl.ljs'attribute-inline-script@cptIt,
* McsEngl.ljs'code.attribute-inline@cptIt,

_CODE.LJS:
<div onclick="alert('yo')"></div>

ljbalgo'code.location.INLINE.PAGE

name::
* McsEngl.ljbalgo'code.location.INLINE.PAGE@cptIt,
* McsEngl.ljs'code.page-inline@cptIt,
* McsEngl.ljs'page-inline-script@cptIt,

_CODE.LJS:
<script>...</script>

ljbalgo'code.MIXED

_CREATED: {2012-01-27}

name::
* McsEngl.ljbalgo'code.MIXED@cptIt,

_GENERIC:
* js-code#ql:js'code#

_SPECIFIC:
* js-object#ql:js'object#

ljbalgo'code.MIXIN

name::
* McsEngl.ljbalgo'code.MIXIN@cptIt,
* McsEngl.ljs'mixin@cptIt,

_DESCRIPTION:
Mixins are a way to add the functionality of 1 or more objects to a new object, essentially creating a non-standard means of inheritance. This inheritance is also done functionally, which is the way JavaScript seems to like having things done. Basically all we’re doing is reusing functions without the need for the standard inheritance model.
[http://www.joezimjs.com/javascript/javascript-mixins-functional-inheritance/]

ljbalgo'code.SELECTING

name::
* McsEngl.ljbalgo'code.SELECTING@cptIt,
* McsEngl.ljs'selecting@cptIt,

window.getSelection();
window.getSelection().toString()

function clearSelection() {
if (window.getSelection) {
window.getSelection().removeAllRanges();
} else if (document.selection) {
document.selection.empty();
}
}
[http://stackoverflow.com/questions/6190143/javascript-set-window-selection]

function selectElement(element) {
if (window.getSelection) {
var sel = window.getSelection();
sel.removeAllRanges();
var range = document.createRange();
range.selectNodeContents(element);
sel.addRange(range);
} else if (document.selection) {
var textRange = document.body.createTextRange();
textRange.moveToElementText(element);
textRange.select();
}
}
[http://stackoverflow.com/questions/6190143/javascript-set-window-selection]

Disable Selction on Menu Items with this jQuery Extension
Jan 20th, 2009 (web)
Every now and then I encounter menus or draggable/droppable elements that when clicked, get unintentionally selected. This results in CSS buttons that don’t behave like buttons but more like clickable text. If you really want to fine tune your user experience and have snazzy CSS buttons then you read on.

The following screen capture highlights the differences in the two menus. The second one looks much better especially if it can stay that way.

disable-selection

If you are using jQuery, you can easily extend the core by adding a disableSelection function like so:

1
2
3
4
5
6
7
8
9
10
11
12
13
jQuery.fn.extend({
disableSelection : function() {
return this.each(function() {
this.onselectstart = function() { return false; };
this.unselectable = "on";
jQuery(this).css('user-select', 'none');
jQuery(this).css('-o-user-select', 'none');
jQuery(this).css('-moz-user-select', 'none');
jQuery(this).css('-khtml-user-select', 'none');
jQuery(this).css('-webkit-user-select', 'none');
});
}
});
Usage is easy:

1
2
// disable selection on all button objects
$('.button').disableSelection();
This will disable selection on all elements with the button class <div class="button">Wall Papers</div>.

Note for jQuery UI Core users:Thomas Christensen points out that the jQuery UI core offers undocumented functions .disableSelection() and .enableSelection() which achieves the same result.

CSS Approach
Additionally you may also want to add the following to CSS markup for added cushioning (or use it exclusively and forgo the Javascript solution altogether):

1
2
3
4
5
6
7
.button {
user-select: none;
-o-user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
}
[http://aleembawany.com/2009/01/20/disable-selction-on-menu-items-with-this-jquery-extension/]

WebKit browsers (ie Google Chrome and Safari) have a CSS solution similar to Mozilla's -moz-user-select:none

.no-select{
-webkit-user-select: none;
cursor:not-allowed; /*makes it even more obvious*/
}
[http://stackoverflow.com/questions/924916/is-there-a-way-to-make-a-div-unselectable]

ljbalgo'code.SOURCE

name::
* McsEngl.ljbalgo'code.SOURCE@cptIt,
* McsEngl.ljs'code.source@cptIt,
* McsEngl.ljs'Domain.Out@cptIt,
* McsEngl.ljs'source-code@cptIt,
* McsEngl.ljs'source-text@cptIt,

_WHOLE:
* js-soft-sys#ql:js'application#

_SPECIFIC:
The source text of an ECMAScript program is first converted into a sequence of input elements, which are tokens, line terminators, comments, or white space. The source text is scanned from left to right, repeatedly taking the longest possible sequence of characters as the next input element.
[file:///D:/File1a/WebsiteSngm/standard/techInfo/ecma.262.51.2011.html#idSec7P1]

_SPECIFIC:
* js-character##
* data-code#ql:js'data#,
* js-processing-code#ql:js'code.processing#
* mixed-code#ql:js'mixed_code#,
* js-container#ql:js'code.container#
* js-data-code#ql:js'data#,
* js-processing-code#ql:js'code.processing#
* js-program#ql:js'program#,
* js-unit-of-code#ql:js'unit_of_code#,
* js-variable#ql:js'variable#

_SPECIFIC_DIVISION.PROCESSING:
* js-processing-code#ql:js'code.processing#

_SPECIFIC_DIVISION.CONTAINER:
* js-container#ql:js'code.container#
* js-container.no##

ljbalgo'code.SOURCE-MAP

name::
* McsEngl.ljbalgo'code.SOURCE-MAP@cptIt,
* McsEngl.ljs'source-map@cptIt,

_ADDRESS.WPG:
* Source Map Revision 3 Proposal: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?hl=en_US&pli=1&pli=1,

_DESCRIPTION:
Have you ever found yourself wishing you could keep your client-side code readable and more importantly debuggable even after you've combined and minified it, without impacting performance? Well now you can through the magic of source maps.

Basically it's a way to map a combined/minified file back to an unbuilt state. When you build for production, along with minifying and combining your JavaScript files, you generate a source map which holds information about your original files. When you query a certain line and column number in your generated JavaScript you can do a lookup in the source map which returns the original location. Developer tools (currently WebKit nightly builds, Google Chrome, or Firefox 23+) can parse the source map automatically and make it appear as though you're running unminified and uncombined files.
[http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/]

ljbalgo'code.SUBSTRINGING

name::
* McsEngl.ljbalgo'code.SUBSTRINGING@cptIt,
* McsEngl.ljs'substringing@cptIt,

ljb'string'substring-method

name::
* McsEngl.ljb'string'substring-method@cptIt,
* McsEngl.ljs'substring-method@cptIt,

_DESCRIPTION:
Syntax
string.substr(start,length)
Parameter Values
Parameter  Description
start  Required. The position where to start the extraction. First character is at index 0
length  Optional. The number of characters to extract. If omitted, it extracts the rest of the string
[http://www.w3schools.com/jsref/jsref_substr.asp]

ljb'string'substring-method

name::
* McsEngl.ljb'string'substring-method@cptIt,
* McsEngl.ljs'substring-method@cptIt,

_DESCRIPTION:
Syntax
string.substring(from, to)
Parameter  Description
from  Required. The index where to start the extraction. First character is at index 0
to  Optional. The index where to stop the extraction. If omitted, it extracts the rest of the string
[http://www.w3schools.com/jsref/jsref_substring.asp]

_CODE.LJS:
location.href.substring(location.href.indexOf('#')
===
<script>
var str="Hello world!";
document.write(str.substring(3)+"<br>");
document.write(str.substring(3,7));
</script>
The output of the code above will be:
lo world!
lo w
[http://www.w3schools.com/jsref/jsref_substring.asp]

ljbalgo'code.URL

name::
* McsEngl.ljbalgo'code.URL@cptIt,
* McsEngl.ljs'URL-code@cptIt,

// Spaces are never valid in URLs and it's a very common mistake for people to make so we fix it here.
 value.href = value.href.replace(' ', '%20');

ljbalgo'code.ERROR

name::
* McsEngl.ljbalgo'code.ERROR@cptIt,
* McsEngl.ljserror@cptIt,
* McsEngl.ljs'error@cptIt,

jserror.OBJECT

name::
* McsEngl.jserror.OBJECT@cptIt,
* McsEngl.ljserror@cptIt,
* McsEngl.ljsobt.ERROR@cptIt,
* McsEngl.ljs'Error-function@cptIt,
* McsEngl.ljs'error-object@cptIt,

_GENERIC:
> typeof Error
"function"

_MEMBER:
> Object.getOwnPropertyNames(new Error())
["stack"]
Object.getOwnPropertyNames((new Error()).__proto__)
["constructor", "name", "message", "toString"]
Object.getOwnPropertyNames(Error)
["length", "name", "arguments", "caller", "prototype", "captureStackTrace", "stackTraceLimit"]
Object.getOwnPropertyNames(Error.prototype)
["constructor", "name", "message", "toString"]

_SPECIFIC:
the Error objects Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError and URIError.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2P3]

jserror.EVAL

name::
* McsEngl.jserror.EVAL@cptIt,
* McsEngl.ljs'eval-error@cptIt,

jserror.RANGE

name::
* McsEngl.jserror.RANGE@cptIt,
* McsEngl.ljs'range-error@cptIt,

jserror.REFERENCE

name::
* McsEngl.jserror.REFERENCE@cptIt,
* McsEngl.ljsReferenceError@cptIt,
* McsEngl.ljs'reference-error@cptIt,

_DESCRIPTION:
Summary
The ReferenceError object represents an error when a non-existent variable is referenced.
Description
A ReferenceError is thrown when trying to dereference a variable that has not been declared.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError]

_CODE.LJS:
> AAA
ReferenceError: AAA is not defined
> var AAA
undefined

jserror.SYNTAX

name::
* McsEngl.jserror.SYNTAX@cptIt,
* McsEngl.ljs'syntax-error@cptIt,

_DESCRIPTION:
SyntaxError: Unexpected strict mode reserved word:

jserror.TYPE

name::
* McsEngl.jserror.TYPE@cptIt,
* McsEngl.ljs'type-error@cptIt,

_CASE:
When an algorithm uses an internal property of an object and the object does not implement the indicated internal property, a TypeError exception is thrown.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.6.2P1]

jserror.URI

name::
* McsEngl.jserror.URI@cptIt,
* McsEngl.ljs'URI-error@cptIt,

ljbalgo'code.NATIVE

_CREATED: {2014-07-29}

name::
* McsEngl.ljbalgo'code.NATIVE@cptIt,
* McsEngl.ljscode.native@cptIt,
* McsEngl.ljscode.plain@cptIt,
* McsEngl.ljscode.pure@cptIt,
* McsEngl.ljscode.raw@cptIt,
* McsEngl.ljscode.vanilla@cptIt,
* McsEngl.native-JavaScript@cptIt,
* McsEngl.plain-JavaScript@cptIt,
* McsEngl.pure-JavaScript@cptIt,
* McsEngl.vanilla-JavaScript@cptIt,

_DESCRIPTION:
Implemented by NO 'third-parties'.
[hmnSngo.2014-07-29]

_ADDRESS.WPG:
* http://stackoverflow.com/questions/7022007/what-is-native-javascript,

ljbapi.CORE#ql:ljbapi.core-cpt#

name::
* McsEngl.ljbapi.CORE@cptIt,

ljbalgo'code.NATIVE.NO

name::
* McsEngl.ljbalgo'code.NATIVE.NO@cptIt,
* McsEngl.custom-JavaScript@cptIt,
* McsEngl.ljscode.custom@cptIt,
* McsEngl.ljscode.third-party@cptIt,

ljbalgo'code.PROCESSING.NO (data)

_CREATED: {2011-09-25}

name::
* McsEngl.ljbalgo'code.PROCESSING.NO (data)@cptIt,
* McsEngl.conceptIt554.8,
* McsEngl.ljs'code.data@cptIt,
* McsEngl.ljs'data@cptIt,
* McsEngl.ljs'data-code@cptIt554.8,

_GENERIC:
* js-code#ql:js'code#,
* unit-of-code#ql:js'unit_of_code#,
* data-of-scripting-language#ql:sl'data#

_WHOLE:
* js-application#ql:js'application#

_DESCRIPTION:
Data is the js-code that is manipulated with other code and has a meaning in a human-language eg number, string, array, character, type, value, etc.
[hmnSngo.2013-06-25]

ljb'data'variable

name::
* McsEngl.ljb'data'variable@cptIt,
* McsEngl.ljs'variable.data@cptIt,

_GENERIC:
* variable#ql:js'variable#

SPECIFIC

name::
* McsEngl.ljs'Datatype@cptIt,
* McsEngl.ljs'data-generic@cptIt554i, {2011-09-24}
* McsEngl.ljs'data'Specific@cptIt,
* McsEngl.ljs'data-type@cptIt,
* McsEngl.ljs'generic-data@cptIt554i, {2011-09-24}
* McsEngl.ljs'type@cptIt554i,
* McsEngl.ljs'data.SPECIFIC@cptIt,

_SPECIFIC:
JavaScript contains a small set of data types. It has the three primitive types
- boolean,
- number, and
- string
and the special values
- null and
- undefined.
Everything else is variations on the
- object type.
[http://javascript.crockford.com/survey.html]

_SPECIFIC_DIVISION:
* composite,
* non-composite,

_SPECIFIC:
* object,
* number,
* string,
* boolean,
* array,
* function-pointer,
The four basic data types available in JavaScript are the object (a generic data type that can be anything), the number (floating point or decimal), the string (a set of text characters), and the boolean (true or false values). A variable is indicated by a word name and is case sensitive. Variable names also allow for the use of the underscore character (_), but nothing else other than ASCII alphanumeric characters. Also, variable names can begin only with an alphabetic character, not a number or underscore. The example below shows several variables being assigned values.
myvariable = "A line of text";
count = 0;
Super_Long_VariableNamethatishardtoread = "";
WorldIsRound = true;
The first variable is a string. The second variable stores a numerical value, and the third is another string (currently blank). The last is a boolean value that can be either true or false. With these basic types it is possible to do much of the work. In addition, there are two more advanced data types known as the array and the function pointer.
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

ljb'data.Array

_CREATED: {2012-01-29}

name::
* McsEngl.ljb'data.Array@cptIt,
* McsEngl.ljs'ArrayData@cptIt, {2012-01-29}
* McsEngl.ljs'array.data@cptIt, {2012-01-29}
* McsEngl.ljs'data-array@cptIt, {2012-01-29}

_Definition.Specific:
Data-array is an ARRAY-OBJECT#ql:js'object.array# that contains only data.
[hmnSngo.2012-01-29]

ljb'data.BOOLEAN#ql:js'boolean#

name::
* McsEngl.ljb'data.BOOLEAN@cptIt,

ljb'data.BUILT-IN

name::
* McsEngl.ljb'data.BUILT-IN@cptIt,
* McsEngl.ljs'built-in-type@cptIt,

_DESCRIPTION:
A primitive value is a member of one of the following built-in types: Undefined, Null, Boolean, Number, and String; an object is a member of the remaining built-in type Object; and a function is a callable object. A function that is associated with an object via a property is a method.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2P2]

_SPECIFIC:
* Boolean,
* Null,
* Number,
* Object,
* String,
* Undefined,
===
* object,
* primitivive-value,

ljb'data.Character

name::
* McsEngl.ljb'data.Character@cptIt,
* McsEngl.ljs'character-datatype@cptIt,

_GENERIC:
* string#ql:js'string#

_DESCRIPTION:
String is a sequence of zero or more Unicode characters. There is no separate character type. A character is represented as a string of length 1. Literal strings are quoted using the ' or " characters. The quote characters can be used interchangeably, but they have to match.
'This is a string.'
"Isn't this a string? Yes!"
'A' // The character A
"" // An empty string
Escapement is done with the \ character, like in Java.

ljb'data.Composite

name::
* McsEngl.ljb'data.Composite@cptIt,
* McsEngl.ljs'composite-datatype@cptIt,

_SPECIFIC:

ljb'data.CompositeNo

name::
* McsEngl.ljb'data.CompositeNo@cptIt,
* McsEngl.ljs'non-composite-datatype@cptIt,

_SPECIFIC:
* primite#ql:js'primitive_datatype# (boolean, number, string),
* special#ql:js'special_datatype#

ljb'data.Key-value-map

name::
* McsEngl.ljb'data.Key-value-map@cptIt,

_DEFINITION:
It is a key-value object with values only data.
[hmnSngo.2012-01-19]

ljb'data.LITERAL

name::
* McsEngl.ljb'data.LITERAL@cptIt,

ljb'data.null

name::
* McsEngl.ljb'data.null@cptIt,

ljb'data.Number#ql:js'number#

name::
* McsEngl.ljb'data.Number@cptIt,

ljb'data.PRIMITIVE

name::
* McsEngl.ljb'data.PRIMITIVE@cptIt,
* McsEngl.ljs'primitive-datatype@cptIt,
* McsEngl.ljs'primitive-value@cptIt,

_SPECIFIC:
A primitive value is a member of one of the following built-in types: Undefined, Null, Boolean, Number, and String; an object is a member of the remaining built-in type Object; and a function is a callable object. A function that is associated with an object via a property is a method.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2P2]
===
JavaScript contains a small set of data types. It has the three primitive types
- boolean,
- number, and
- string,
and the special values
- null and
- undefined.
Everything else is variations on the
- object type.
[http://javascript.crockford.com/survey.html]

ljb'data.Special

name::
* McsEngl.ljb'data.Special@cptIt,
* McsEngl.ljs'special-datatype@cptIt,

_SPECIFIC:
JavaScript contains a small set of data types. It has the three primitive types
- boolean,
- number, and
- string,
and the special values
- null and
- undefined.
Everything else is variations on the
- object type.
[http://javascript.crockford.com/survey.html]

ljb'data.String#ql:js'string.literal#

name::
* McsEngl.ljb'data.String@cptIt,

ljb'data.undefined#ql:js'undefined#

name::
* McsEngl.ljb'data.undefined@cptIt,

ljbalgo'code.TYPE

_CREATED: {2014-02-12}

name::
* McsEngl.ljbalgo'code.TYPE@cptIt,
* McsEngl.ljs'code-type@cptIt,
* McsEngl.ljs'codetype@cptIt, {2014-02-12}
* McsEngl.ljs'type@cptIt,

=== _NOTES: ECMAScript spec 5.1 NEVER use the name 'datatype', 'data type'. ONLY 'type' and 'value type'.
[hmnSngo.2014-02-12]

_DESCRIPTION:
Codetype is GENERIC code-constructs.
[hmnSngo.2014-02-12]
===
Let's start off by looking at the building block of any language: the types. JavaScript programs manipulate values, and those values all belong to a type.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Overview]
===
4.3.1 type
set of data values as defined in Clause 8 of this specification
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.3.1]

ljb'type'value#ql:jsvalue@cptIt#

name::
* McsEngl.ljb'type'value@cptIt,

SPECIFIC

_SPECIFIC:
* atom-type#ql:lcpjs'atom#
* ECMAScript-type#linkL#
* library-type#linkL#
* primitive-type#linkL#
* program-type#linkL#
* sentence-type#linkL#
* sentence-structure-type#linkL#
* unit-type#linkL#

ljb'type.ECMASript

name::
* McsEngl.ljb'type.ECMASript@cptIt,
* McsEngl.lcpEs'type@cptIt,
* McsEngl.lcpEs'value-type@cptIt,

lcpEs'type'doing.CONVERTING

name::
* McsEngl.lcpEs'type'doing.CONVERTING@cptIt,
* McsEngl.lcpEs'type-conversion@cptIt,

_DESCRIPTION:
The ECMAScript runtime system performs automatic type conversion as needed. To clarify the semantics of certain constructs it is useful to define a set of conversion abstract operations. These abstract operations are not a part of the language; they are defined here to aid the specification of the semantics of the language. The conversion abstract operations are polymorphic; that is, they can accept a value of any ECMAScript language type, but not of specification types.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec9]

lcpEs'type'value

name::
* McsEngl.lcpEs'type'value@cptIt,
* McsEngl.lcpEs'value@cptIt,

_DESCRIPTION:
Algorithms within this specification manipulate values each of which has an associated type#ql:lcpes'type#.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8H1]

SPECIFIC

_SPECIFIC:
Algorithms within this specification manipulate values each of which has an associated type. The possible value types are exactly those defined in this clause. Types are further subclassified into ECMAScript language types and specification types.

An ECMAScript language type corresponds to values that are directly manipulated by an ECMAScript programmer using the ECMAScript language. The ECMAScript language types are Undefined, Null, Boolean, String, Number, and Object.

A specification type corresponds to meta-values that are used within algorithms to describe the semantics of ECMAScript language constructs and ECMAScript language types. The specification types are Reference, List, Completion, Property Descriptor, Property Identifier, Lexical Environment, and Environment Record. Specification type values are specification artefacts that do not necessarily correspond to any specific entity within an ECMAScript implementation. Specification type values may be used to describe intermediate results of ECMAScript expression evaluation but such values cannot be stored as properties of objects or values of ECMAScript language variables.

Within this specification, the notation “Type(x)” is used as shorthand for “the type of x” where “type” refers to the ECMAScript language and specification types defined in this clause.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8H1]

lcpEs'type.LANGUAGE

name::
* McsEngl.lcpEs'type.LANGUAGE@cptIt,
* McsEngl.lcpEs'language-type@cptIt,

_SPECIFIC:
An ECMAScript language type corresponds to values that are directly manipulated by an ECMAScript programmer using the ECMAScript language. The ECMAScript language types are Undefined, Null, Boolean, String, Number, and Object.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8H1]

lcpEs'type.language.Boolean

name::
* McsEngl.lcpEs'type.language.Boolean@cptIt,
* McsEngl.lcpEs'Boolean-type@cptIt,

_DESCRIPTION:
The Boolean type represents a logical entity having two values, called true and false.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.3]

lcpEs'type.language.Null

name::
* McsEngl.lcpEs'type.language.Null@cptIt,
* McsEngl.lcpEs'Null-type@cptIt,

_DESCRIPTION:
The Null type has exactly one value, called null.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.2]

lcpEs'type.language.Number

name::
* McsEngl.lcpEs'type.language.Number@cptIt,
* McsEngl.lcpEs'Number-type@cptIt,

_DESCRIPTION:
The Number type has exactly 18437736874454810627 (that is, 264-253+3) values, representing the double-precision 64-bit format IEEE 754 values as specified in the IEEE Standard for Binary Floating-Point Arithmetic, except that the 9007199254740990 (that is, 253-2) distinct “Not-a-Number” values of the IEEE Standard are represented in ECMAScript as a single special NaN value. (Note that the NaN value is produced by the program expression NaN.) In some implementations, external code might be able to detect a difference between various Not-a-Number values, but such behaviour is implementation-dependent; to ECMAScript code, all NaN values are indistinguishable from each other.

There are two other special values, called positive Infinity and negative Infinity. For brevity, these values are also referred to for expository purposes by the symbols +8 and -8, respectively. (Note that these two infinite Number values are produced by the program expressions +Infinity (or simply Infinity) and -Infinity.)

The other 18437736874454810624 (that is, 264-253) values are called the finite numbers. Half of these are positive numbers and half are negative numbers; for every finite positive Number value there is a corresponding negative value having the same magnitude.

Note that there is both a positive zero and a negative zero. For brevity, these values are also referred to for expository purposes by the symbols +0 and -0, respectively. (Note that these two different zero Number values are produced by the program expressions +0 (or simply 0) and -0.)

The 18437736874454810622 (that is, 264-253-2) finite nonzero values are of two kinds:

18428729675200069632 (that is, 264-254) of them are normalised, having the form

s Χ m Χ 2e
where s is +1 or -1, m is a positive integer less than 253 but not less than 252, and e is an integer ranging from -1074 to 971, inclusive.

The remaining 9007199254740990 (that is, 253-2) values are denormalised, having the form

s Χ m Χ 2e
where s is +1 or -1, m is a positive integer less than 252, and e is -1074.

Note that all the positive and negative integers whose magnitude is no greater than 253 are representable in the Number type (indeed, the integer 0 has two representations, +0 and -0).

A finite number has an odd significand if it is nonzero and the integer m used to express it (in one of the two forms shown above) is odd. Otherwise, it has an even significand.

In this specification, the phrase “the Number value for x” where x represents an exact nonzero real mathematical quantity (which might even be an irrational number such as p) means a Number value chosen in the following manner. Consider the set of all finite values of the Number type, with -0 removed and with two additional values added to it that are not representable in the Number type, namely 21024 (which is +1 Χ 253 Χ 2971) and -21024 (which is -1 Χ 253 Χ 2971). Choose the member of this set that is closest in value to x. If two values of the set are equally close, then the one with an even significand is chosen; for this purpose, the two extra values 21024 and -21024 are considered to have even significands. Finally, if 21024 was chosen, replace it with +8; if -21024 was chosen, replace it with -8; if +0 was chosen, replace it with -0 if and only if x is less than zero; any other chosen value is used unchanged. The result is the Number value for x. (This procedure corresponds exactly to the behaviour of the IEEE 754 “round to nearest” mode.)

Some ECMAScript operators deal only with integers in the range -231 through 231-1, inclusive, or in the range 0 through 232-1, inclusive. These operators accept any value of the Number type but first convert each such value to one of 232 integer values. See the descriptions of the ToInt32 and ToUint32 operators in 9.5 and 9.6, respectively.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.5]

lcpEs'type.language.Object

name::
* McsEngl.lcpEs'type.language.Object@cptIt,
* McsEngl.lcpEs'Object-type@cptIt,

_DESCRIPTION:
8.6 The Object Type
An Object is a collection of properties. Each property is either a named data property, a named accessor property, or an internal property:

A named data property associates a name with an ECMAScript language value and a set of Boolean attributes.

A named accessor property associates a name with one or two accessor functions, and a set of Boolean attributes. The accessor functions are used to store or retrieve an ECMAScript language value that is associated with the property.

An internal property has no name and is not directly accessible via ECMAScript language operators. Internal properties exist purely for specification purposes.

There are two kinds of access for named (non-internal) properties: get and put, corresponding to retrieval and assignment, respectively.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.6]

lcpEs'type.language.String

name::
* McsEngl.lcpEs'type.language.String@cptIt,
* McsEngl.lcpEs'String-type@cptIt,

_DESCRIPTION:
The String type is the set of all finite ordered sequences of zero or more 16-bit unsigned integer values (“elements”). The String type is generally used to represent textual data in a running ECMAScript program, in which case each element in the String is treated as a code unit value (see Clause 6). Each element is regarded as occupying a position within the sequence. These positions are indexed with nonnegative integers. The first element (if any) is at position 0, the next element (if any) at position 1, and so on. The length of a String is the number of elements (i.e., 16-bit values) within it. The empty String has length zero and therefore contains no elements.

When a String contains actual textual data, each element is considered to be a single UTF-16 code unit. Whether or not this is the actual storage format of a String, the characters within a String are numbered by their initial code unit element position as though they were represented using UTF-16. All operations on Strings (except as otherwise stated) treat them as sequences of undifferentiated 16-bit unsigned integers; they do not ensure the resulting String is in normalised form, nor do they ensure language-sensitive results.

NOTE The rationale behind this design was to keep the implementation of Strings as simple and high-performing as possible. The intent is that textual data coming into the execution environment from outside (e.g., user input, text read from a file or received over the network, etc.) be converted to Unicode Normalised Form C before the running program sees it. Usually this would occur at the same time incoming text is converted from its original character encoding to Unicode (and would impose no additional overhead). Since it is recommended that ECMAScript source code be in Normalised Form C, string literals are guaranteed to be normalised (if source text is guaranteed to be normalised), as long as they do not contain any Unicode escape sequences.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.4]

lcpEs'type.language.Undefined

name::
* McsEngl.lcpEs'type.language.Undefined@cptIt,
* McsEngl.lcpEs'Undefined-type@cptIt,

_DESCRIPTION:
The Undefined type has exactly one value, called undefined. Any variable that has not been assigned a value has the value undefined.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.1]

lcpEs'type.SPECIFICATION

name::
* McsEngl.lcpEs'type.SPECIFICATION@cptIt,
* McsEngl.lcpEs'specification-type@cptIt,

_SPECIFIC:
* Completion,
* Environment Record
* Lexical Environment, and
* List,
* Property Descriptor,
* Property Identifier,
* Reference,
===
A specification type corresponds to meta-values that are used within algorithms to describe the semantics of ECMAScript language constructs and ECMAScript language types. The specification types are Reference, List, Completion, Property Descriptor, Property Identifier, Lexical Environment, and Environment Record. Specification type values are specification artefacts that do not necessarily correspond to any specific entity within an ECMAScript implementation. Specification type values may be used to describe intermediate results of ECMAScript expression evaluation but such values cannot be stored as properties of objects or values of ECMAScript language variables.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8H1]

lcpEs'type.specification.Completion

name::
* McsEngl.lcpEs'type.specification.Completion@cptIt,
* McsEngl.lcpEs'completion-specification-type@cptIt,

_DESCRIPTION:
8.9 The Completion Specification Type

The Completion type is used to explain the behaviour of statements (break, continue, return and throw) that perform nonlocal transfers of control. Values of the Completion type are triples of the form (type, value, target), where type is one of normal, break, continue, return, or throw, value is any ECMAScript language value or empty, and target is any ECMAScript identifier or empty. If cv is a completion value then cv.type, cv.value, and cv.target may be used to directly refer to its constituent values.

The term “abrupt completion” refers to any completion with a type other than normal.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.9]

lcpEs'type.specification.Environment-Record

name::
* McsEngl.lcpEs'type.specification.Environment-Record@cptIt,
* McsEngl.lcpEs'environment-record-specification-type@cptIt,

_DESCRIPTION:
An Environment Record records the identifier bindings that are created within the scope of its associated Lexical Environment.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec10.2P2]

lcpEs'type.specification.Lexical-Environment

name::
* McsEngl.lcpEs'type.specification.Lexical-Environment@cptIt,
* McsEngl.ljs'lexical-environment@cptIt,
* McsEngl.ljs'variable-object@cptIt,
* McsEngl.lcpEs'lexical-environment-specification-type@cptIt,
* McsEngl.ljs'lexical-environment-specification-type@cptIt,

_DESCRIPTION:
A Lexical Environment is a specification type used to define the association of Identifiers to specific variables and functions based upon the lexical nesting structure of ECMAScript code. A Lexical Environment consists of an Environment Record and a possibly null reference to an outer Lexical Environment. Usually a Lexical Environment is associated with some specific syntactic structure of ECMAScript code such as a FunctionDeclaration, a WithStatement, or a Catch clause of a TryStatement and a new Lexical Environment is created each time such code is evaluated.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec10.2P1]
===
Notice, in ES5 the concept of variable object is replaced with lexical environments model, which detailed description can be found in the appropriate chapter.
[http://dmitrysoshnikov.com/ecmascript/chapter-2-variable-object/]

lcpEs'Global-Environment

name::
* McsEngl.lcpEs'Global-Environment@cptIt,

_DESCRIPTION:
10.2.3 The Global Environment

The global environment is a unique Lexical Environment which is created before any ECMAScript code is executed. The global environment’s Environment Record is an object environment record whose binding object is the global object (15.1). The global environment’s outer environment reference is null.

As ECMAScript code is executed, additional properties may be added to the global object and the initial properties may be modified.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec10.2.3]

lcpEs'type.specification.List

name::
* McsEngl.lcpEs'type.specification.List@cptIt,
* McsEngl.lcpEs'list-specification-type@cptIt,

_DESCRIPTION:
8.8 The List Specification Type

The List type is used to explain the evaluation of argument lists (see 11.2.4) in new expressions, in function calls, and in other algorithms where a simple list of values is needed. Values of the List type are simply ordered sequences of values. These sequences may be of any length.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.8]

lcpEs'type.specification.Property-Descriptor

name::
* McsEngl.lcpEs'type.specification.Property-Descriptor@cptIt,
* McsEngl.lcpEs'property-descriptor-specification-type@cptIt,

_DESCRIPTION:

lcpEs'type.specification.Property-Identifier

name::
* McsEngl.lcpEs'type.specification.Property-Identifier@cptIt,
* McsEngl.lcpEs'property-identifier-specification-type@cptIt,

_DESCRIPTION:
The Property Identifier type is used to associate a property name with a Property Descriptor. Values of the Property Identifier type are pairs of the form (name, descriptor), where name is a String and descriptor is a Property Descriptor value.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.10P5]

lcpEs'type.specification.Reference

name::
* McsEngl.lcpEs'type.specification.Reference@cptIt,
* McsEngl.lcpEs'reference-specification-type@cptIt,

_DESCRIPTION:
A Reference is a resolved name binding. A Reference consists of three components, the base value, the referenced name and the Boolean valued strict reference flag. The base value is either undefined, an Object, a Boolean, a String, a Number, or an environment record (10.2.1). A base value of undefined indicates that the reference could not be resolved to a binding. The referenced name is a String.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.7P2]

lcpEs'reference'base

name::
* McsEngl.lcpEs'reference'base@cptIt,

_DESCRIPTION:
The base value is either undefined, an Object, a Boolean, a String, a Number, or an environment record (10.2.1). A base value of undefined indicates that the reference could not be resolved to a binding.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.7P2]

lcpEs'reference'reference-name

name::
* McsEngl.lcpEs'reference'reference-name@cptIt,

_DESCRIPTION:
The referenced name is a String.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.7P2]

lcpEs'reference'strict-reference

name::
* McsEngl.lcpEs'reference'strict-reference@cptIt,

_DESCRIPTION:
A Reference consists of three components, the base value, the referenced name and the Boolean valued strict reference flag.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.7P2]

ljb'type.PRIMITIVE

name::
* McsEngl.ljb'type.PRIMITIVE@cptIt,

_SPECIFIC:
“primitive” means Undefined, Null, Boolean, String, or Number.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec8.6.2P3]

ljbalgo'code.TYPE.NO

_CREATED: {2014-02-12}

name::
* McsEngl.ljbalgo'code.TYPE.NO@cptIt,
* McsEngl.ljs'non-code-type@cptIt,
* McsEngl.ljs'code.instance@cptIt,
* McsEngl.ljs'codetypeNo@cptIt, {2014-02-12}
* McsEngl.ljs'typeNo@cptIt,

_DESCRIPTION:
CodetypeNo is INSTANCE code-constructs.
[hmnSngo.2014-02-12]

ljbalgo'code.LIBRARY

_CREATED: {2014-02-21}

name::
* McsEngl.ljbalgo'code.LIBRARY@cptIt,
* McsEngl.ljb'framework@cptIt,
* McsEngl.ljb'library@cptIt,
* McsEngl.ljslibrary@cptIt,
* McsEngl.ljb'code.collection@cptIt,
* McsEngl.ljb'code-collection@cptIt, {2014-02-21}
* McsEngl.ljb'code.api.LIBRARY@cptIt,
* McsEngl.ljb'collection-of-code@cptIt,
* McsEngl.ljb'library@cptIt,
* McsEngl.ljb'framework@cptIt,

* McsEngl.ljblbr@cptIt,

_GENERIC:
* ljs-library#linkL#

_DESCRIPTION:
a JavaScript Library is going to refer to a collection of JavaScript code. This collection of JavaScript code will contain commonly-used functions, shortcuts and animation effects that allow us to create really nice, interactive interfaces for our web applications. These JavaScript Libraries are also going to be extending the nature of JavaScript, making it so that you can do things in JavaScript that are not natively part of the JavaScript language. Also, these JavaScript Libraries are going to give us the ability to manipulate data a little bit easier than what we have traditionally had to do. This is going to include manipulation helpers for using JSON, as well as using XML and without having to do a lot of heavy lifting. So the library itself will be doing a lot of the heavy lifting. These JavaScript Libraries are also going to give us what are called widgets which are essentially user interface elements that are commonly encountered in a lot of your Web 2.0 applications. Now, combining all of those things together, we end up getting a collection of JavaScript code that's going to allow us to create in essence these Web 2.0 applications, giving us ability to work with AJAX data, working more swiftly making selections of DOM objects, creating animation effects and generally making our lives a whole lot easier. These JavaScript Libraries are released and maintained by either individuals, groups or companies. Now, because they are released by these different entities, they tend to be licensed to users in some way, be that under some type of open-source license or a commercial license. Most commonly these JavaScript Libraries that we encounter are licensed to users through some type of open-source license. Now the question we need to ask now is what is the difference between libraries, Frameworks and toolkits? Because if you've taken a look at what's out there, you've probably encountered these three different phrases. Well, for our purposes, these terms are going to be used interchangeably and I'm going to be probably referring to a toolkit as a Framework and a library as a toolkit throughout the video tutorial series. However, there is a distinct difference between these so I'm going to go ahead and talk a little bit about that so that we can officially say that there are differences but for our purposes, we're just going to kind of gloss over them.
So for the record, a Library is a collection of commonly-used functions.
A Framework extends the nature of JavaScript into a more sophisticated programming language and Toolkits are a collection of JavaScript and Cascading Style Sheet controlled user interface elements that contribute to the user's experience with that application.
As distinct as these differences may be, they all share the commonality of being written in JavaScript and being maintained as an external set of code. So in theory they are quite different, but in practice they're collections of handy JavaScript-based extensions that we don't have to program ourselves. So call them what you will. The only thing I really care about is that the scripts work and that implementing them is relatively easy. So with all of that in mind, what we're going to be working with are specifically these collections of JavaScript code that have been released by a group or company of some type, licensed to users for their own use to streamline the development process.
[http://www.vtc.com/products/JavaScriptLibraries/DefineJavaScriptLibraries/81352]
===
A JavaScript library is a library of pre-written JavaScript which allows for easier development of JavaScript-based applications, especially for AJAX and other web-centric technologies.

Some JavaScript libraries, such as YUI, are classified as frameworks since they exhibit full-stack capabilities and properties not found in general JavaScript libraries.

While JavaScript, as first developed by Netscape (and later Mozilla), has long had a presence on the Web for many websites, it gained a particular pitch with the rise of the Web 2.0 era of computing, in which JavaScript became increasingly used for the development of user interfaces for applications, both web-based and desktop-based. JavaScript was also combined with CSS to create dynamic web pages, which have also become popular as a more efficient and accessible alternative to Flash -based websites.

With the expanded demands for JavaScript, an easier means for programmers to develop such dynamic interfaces was needed. Thus, JavaScript libraries such as Prototype, script.aculo.us, Ext Core, MooTools and jQuery and JavaScript widget libraries such as Ext JS and Dojo Toolkit were developed, allowing for developers to concentrate more upon more distinctive applications of AJAX. This has led to other companies and groups, such as Microsoft and Yahoo! developing their own JavaScript-based user interface libraries, which find their way into the web applications developed by these companies.

Almost all JavaScript libraries are released under either a copycenter or copyleft license to ensure license-free distribution, usage, and modification.

Some JavaScript libraries allow for easier integration of JavaScript with other web development technologies, such as CSS, PHP, Ruby, and Java. Many libraries include code to detect differences between runtime environments, and remove the need for applications to allow for such inconsistencies.
[http://en.wikipedia.org/wiki/JavaScript_library]

ljblbr'usage

name::
* McsEngl.ljblbr'usage@cptIt,

_DESCRIPTION:
I've been doing web development since 2000, and in that time I've seen eras marked by libraries and frameworks come and go. The Ajax era began around the same time as the jQuery era began, the Backbone era began several years later, and the React era really began about two years ago. Each of these eras brought with it a new realization about the way we can build dynamic web interfaces based on the tools available. jQuery made it clear that browser abstractions and CSS querying were important to developers, Backbone introduced the concept of client-side architecture to many, and React enables the creation of UI components instead of templates.
[blog@nczonline.net 2016-01-26]
===
If you’re smart about your JavaScript work, you’ll probably rely on a framework to smooth out browser incompatibilities, ease DOM access, and enhance JavaScript.
[http://alistapart.com/article/getoutbindingsituations#section8]

ljblbr'Loading

name::
* McsEngl.ljblbr'Loading@cptIt,

_CODE.LJB:
//great suggestion @Jasper
var len = $('script[src*="Javascript/MyScript.js"]').length;

if (len === 0) {
alert('script not loaded');

loadScript('Javascript/MyScript.js');

if ($('script[src*="Javascript/MyScript.js"]').length === 0) {
alert('still not loaded');
}
else {
alert('loaded now');
}
}
else {
alert('script loaded');
}


function loadScript(scriptLocationAndName) {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = scriptLocationAndName;
head.appendChild(script);
}
[http://stackoverflow.com/a/9522483]

SPECIFIC

* ljblbr.specific,

_SPECIFIC:
* AJAX#ql:js'ajax#,
* prototype
* YUI#ql:js'yui#

_SPECIFIC: This is a list of notable JavaScript libraries.
* ljblbr.Ally
* ljblbr.Ample_SDK
* ljblbr.Artisan_JS
* ljblbr.Blackbird
* ljblbr.Cappuccino
* ljblbr.Clean_AJAX
* ljblbr.cufσn
* ljblbr.Datejs
* ljblbr.DHTMLX
* ljblbr.Dojo_Toolkit
* ljblbr.Echo
* ljblbr.Ext
* ljblbr.Flot
* ljblbr.FUEL
* ljblbr.Glow
* ljblbr.Google_Closure_Library
* ljblbr.Google_Web_Toolkit
* ljblbr.Himle
* ljblbr.iX_Framework
* ljblbr.Jelly_(JavaScript_library)
* ljblbr.Joose
* ljblbr.JWee_Javascript_Toolkit
* ljblbr.jQuery
* ljblbr.jQuery_UI
* ljblbr.jsDraw2D
* ljblbr.Knockout
* ljblbr.Lively_Kernel
* ljblbr.Microsoft_AJAX_Library
* ljblbr.midori
* ljblbr.Mochikit
* ljblbr.MooTools
* ljblbr.My_Library
* ljblbr.OpenLink_AJAX_Toolkit
* ljblbr.PlotKit
* ljblbr.PottisJS
* ljblbr.Processing.js
* ljblbr.Prototype_JavaScript_Framework
* ljblbr.PURE_Javascript_Templates_Engine
* ljblbr.qooxdoo
* ljblbr.Raphaλl
* ljblbr.Rialto_Toolkit
* ljblbr.Rico
* ljblbr.Script.aculo.us
* ljblbr.SmartClient
* ljblbr.SoundManager
* ljblbr.Spark
* ljblbr.SproutCore
* ljblbr.Spry_framework
* ljblbr.Sylvester
* ljblbr.SWFObject
* ljblbr.Taffy_DB
* ljblbr.typeface.js
* ljblbr.Underscore.js
* ljblbr.Yahoo!_UI_Library
* ljblbr.Zeleos_web_toolkit
* ljblbr.Zreshk
[http://en.wikipedia.org/wiki/List_of_JavaScript_libraries] 2011-08-24

ljblbr.BACKBONE

name::
* McsEngl.ljblbr.BACKBONE@cptIt,
* McsEngl.backbone.js@cptIt,

_DESCRIPTION:
I've been doing web development since 2000, and in that time I've seen eras marked by libraries and frameworks come and go. The Ajax era began around the same time as the jQuery era began, the Backbone era began several years later, and the React era really began about two years ago. Each of these eras brought with it a new realization about the way we can build dynamic web interfaces based on the tools available. jQuery made it clear that browser abstractions and CSS querying were important to developers, Backbone introduced the concept of client-side architecture to many, and React enables the creation of UI components instead of templates.
[blog@nczonline.net 2016-01-26]

ljblbr.doing.DIAGRAM

name::
* McsEngl.ljblbr.doing.DIAGRAM@cptIt,

_ADDRESS.WPG:
* http://gojs.net/latest/index.html,

ljblbr.Cerny

name::
* McsEngl.ljblbr.Cerny@cptIt,
* McsEngl.cerny.js@cptIt,

Cerny.js is a JavaScript library aiming to ease development of JavaScript projects in large development teams. It tries to accomplish this goal by providing solutions for
method call interception,
type checking for arguments and return values on function calls,
dependency management,
logging,
validation of an object against a schema,
programming by contract,
dictionaries,
pretty printing JSON in text or HTML,
easy configuration, and
good documentation.
[http://www.cerny-online.com/cerny.js/]

ljblbr.CRYPTO

name::
* McsEngl.ljblbr.CRYPTO@cptIt,
* McsEngl.ljs'crypto-library@cptIt,

_ADDRESS.WPG:
* https://github.com/bitwiseshiftleft/sjcl, Stanford Javascript Crypto Library

ljblbr.Dojo-toolkit

name::
* McsEngl.ljblbr.Dojo-toolkit@cptIt,
* McsEngl.dojo@cptIt554i,
* McsEngl.ljs'dojo-toolkit@cptIt,

_GENERIC:
* js-library,

_DESCRIPTION:
Dojo Toolkit is an open source modular JavaScript library (or more specifically JavaScript toolkit) designed to ease the rapid development of cross-platform, JavaScript/Ajax-based applications and web sites. It was started by Alex Russell, Dylan Schiemann, David Schontzler, and others in 2004 and is dual-licensed under the modified BSD license or the Academic Free License (= 2.1). The Dojo Foundation is a non-profit organization[1] designed to promote the adoption of the toolkit.
[http://en.wikipedia.org/wiki/Dojo_Toolkit]

ljblbr.ExtJS

name::
* McsEngl.ljblbr.ExtJS@cptIt,
* McsEngl.ExtJS@cptIt,

Build Awesome Desktop Web Apps
Sencha Ext JS is the industry's most powerful desktop application development platform with unparalleled cross-browser compatibility, advanced MVC architecture, plugin-free charting, and modern UI widgets.
[http://www.sencha.com/products/extjs/]

ljblbr.FILE-MANAGING

name::
* McsEngl.ljblbr.FILE-MANAGING@cptIt,

_SPECIFIC:
* resumable:
- https://github.com/mimecuvalo/resumable.js,
- A JavaScript library for providing multiple simultaneous, stable, fault-tolerant and resumable/restartable uploads via the HTML5 File API.
http://www.23developer.com/opensource

* https://github.com/eligrey/FileSaver.js,

ljblbr.jQuery

name::
* McsEngl.ljblbr.jQuery@cptIt,
* McsEngl.conceptIt554.10,
* McsEngl.jQuery@cptIt554.10,
* McsEngl.ljs'jQuery-library@cptIt,
* McsEngl.ljs'library.jQuery@cptIt,
* McsEngl.ljs'code.api.library.jQuery@cptIt,
* McsEngl.ljs'jQuery@cptIt,
* McsEngl.jqr@cptIt,

_DEFINITION:
I've been doing web development since 2000, and in that time I've seen eras marked by libraries and frameworks come and go. The Ajax era began around the same time as the jQuery era began, the Backbone era began several years later, and the React era really began about two years ago. Each of these eras brought with it a new realization about the way we can build dynamic web interfaces based on the tools available. jQuery made it clear that browser abstractions and CSS querying were important to developers, Backbone introduced the concept of client-side architecture to many, and React enables the creation of UI components instead of templates.
[blog@nczonline.net 2016-01-26]
===
* jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript.
[http://jquery.com/]
jQuery is a cross-browser JavaScript library designed to simplify the client-side scripting of HTML.[1] It was released in January 2006 at BarCamp NYC by John Resig. Used by over 31% of the 10,000 most visited websites, jQuery is the most popular JavaScript library in use today.
[http://en.wikipedia.org/wiki/JQuery]

jquery'ajax#ql:ajax'jquery#

name::
* McsEngl.jquery'ajax@cptIt,

jquery'API

name::
* McsEngl.jquery'API@cptIt,
* McsEngl.jquery'reference@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com//
- jquery'ex.API (on the above address there are examples).

jquery'animate()

name::
* McsEngl.jquery'animate()@cptIt,

_DESCRIPTION:
.animate( properties [, duration] [, easing] [, complete] )
propertiesA map of CSS properties that the animation will move toward.
durationA string or number determining how long the animation will run.
easingA string indicating which easing function to use for the transition.
completeA function to call once the animation is complete.
[http://api.jquery.com/animate/]

_CODE.JQUERY:
Example: Animates all paragraph to a left style of 50 and opacity of 1 (opaque, visible), completing the animation within 500 milliseconds.
$( "p" ).animate({
"left": "50", "opacity": 1
}, 500 );

jquery'bind()

name::
* McsEngl.jquery'bind()@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/bind//

jquery'deferred

name::
* McsEngl.jquery'deferred@cptIt,

_ADDRESS.WPG:
* http://eng.wealthfront.com/2012/12/jquerydeferred-is-most-important-client.html,

jquery'document.ready()

name::
* McsEngl.jquery'document.ready()@cptIt,
* McsEngl.jquery'ready-event@cptIt,

_DESCRIPTION: jQuery has a simple statement that checks the document and waits until it's ready to be manipulated, known as the ready event
[http://docs.jquery.com/How_jQuery_Works]

SOURCE:
* http://api.jquery.com/ready//

$(document).ready()
This is the first thing to learn about jQuery: If you want an event#ql:jquery'event# to work on your page, you should call it inside the $(document).ready() function. Everything inside it will load as soon as the DOM is loaded and before the page contents are loaded.
JavaScript:
1. $(document).ready(function() {
2. // put all your jQuery goodness in here.
3. });
The $(document).ready() function has a ton of advantages over other ways of getting events to work. First of all, you don't have to put any "behavioral" markup in the HTML. You can separate all of your javascript/jQuery into a separate file where it's easier to maintain and where it can stay out of the way of the content. I never did like seeing all those "javascript:void()" messages in the status bar when I would hover over a link. That's what happens when you attach the event directly inside an <a href> tag.

The following is a shortcut for the $(document).ready(callback) notation:
$(function() {
// code to execute when the DOM is ready
});
[http://www.learningjquery.com/2006/09/introducing-document-ready]

_REPLACEMENT:
document.addEventListener("DOMContentLoaded", function(event) {
//do work
});
[http://stackoverflow.com/a/800010]

jquery'addClass

name::
* McsEngl.jquery'addClass@cptIt,

The list has an ID "orderedlist". In classic JavaScript, you could select it by using document.getElementById("orderedlist"). With jQuery, we do it like this:

$(document).ready(function() {
$("#orderedlist").addClass("red");
});
[http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery]

jquery'attr

name::
* McsEngl.jquery'attr@cptIt,

.attr( attributeName ) Returns: String
Description: Get the value of an attribute for the first element in the set of matched elements.

.attr( attributeName, value )
Description: Set one or more attributes for the set of matched elements.

_CODE.JQUERY:
We can change the alt attribute by simply passing the name of the attribute and its new value to the .attr() method:
$('#greatphoto').attr('alt', 'Beijing Brush Seller');

We can add an attribute the same way:
$('#greatphoto')
.attr('title', 'Photo by Kelly Clark');

Setting several attributes at once
To change the alt attribute and add the title attribute at the same time, we can pass both sets of names and values into the method at once using a map (JavaScript object literal). Each key-value pair in the map adds or modifies an attribute:

$('#greatphoto').attr({
alt: 'Beijing Brush Seller',
title: 'photo by Kelly Clark'
});
[http://api.jquery.com/attr/]

jquery'css-method

name::
* McsEngl.jquery'css-method@cptIt,
* McsEngl.jquery'css@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/css//

_CODE.JQUERY:
<script>$(":header").css({ background:'#CCC', color:'blue' });</script>
===
$("a[name]").css("background", "#eee" );
This adds a background color to all anchor elements with a name attribute.
[http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery]

_CODE.JQUERY: PASS-FUNCTION:
As with .attr(), .css() allows us to pass a function as the property value:

$('div.example').css('width', function(index) {
return index * 50;
});
[http://api.jquery.com/css/]

_CODE.JQUERY: MANY-PROPERTIES.
Also, jQuery can equally interpret the CSS and DOM formatting of multiple-word properties. For example, jQuery understands and returns the correct value for both
.css({'background-color': '#ffe', 'border-left': '5px solid#ccc'}) and
.css({backgroundColor: '#ffe', borderLeft: '5px solid#ccc'}).
Notice that with the DOM notation, quotation marks around the property names are optional, but with CSS notation they're required due to the hyphen in the name.

$(tocElDivToc).find("p").css({'text-decoration':'underline', 'font-size':'14px'});

jquery'each()

name::
* McsEngl.jquery'each()@cptIt,

_ADDRESS.WPG:
* http://www.jquery4u.com/jquery-functions/jquery-each-examples//

_DESCRIPTION:
Description: A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.
[http://api.jquery.com/jQuery.each/]

_CODE.JQUERY:
Don't repeat yourself; if you're repeating yourself, you're doing it wrong.

// BAD
if ( $eventfade.data( "currently" ) !== "showing" ) {
$eventfade.stop();
}

if ( $eventhover.data( "currently" ) !== "showing" ) {
$eventhover.stop();
}

if ( $spans.data( "currently" ) !== "showing" ) {
$spans.stop();
}

// GOOD!!
var $elems = [ $eventfade, $eventhover, $spans ];

$.each( $elems, function( i, elem ) {
if ( elem.data( "currently" ) !== "showing" ) {
elem.stop();
}
});
[http://learn.jquery.com/code-organization/dont-repeat-yourself/]

jquery'end()

name::
* McsEngl.jquery'end()@cptIt,

Think of a FAQ page, where all answers are hidden first, and shown, when the question is clicked. The jQuery code for this:

$(document).ready(function() {
$('#faq').find('dd').hide().end().find('dt').click(function() {
$(this).next().slideToggle();
});
});

Here we use some chaining to reduce the code size and gain better performance, as '#faq' is only selected once. By using end(), the first find() is undone, so we can start search with the next find() at our#faq element, instead of the dd children.
[http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery]

jquery'extend

name::
* McsEngl.jquery'extend@cptIt,

_CODE.JQUERY:
/* merge object2 into object1 */
$.extend(object1, object2);

/* merge defaults and options, without modifying defaults */
var settings = $.extend({}, defaults, options);

/* merge object2 into object1, recursively */
$.extend(true, object1, object2);

jquery'filter

name::
* McsEngl.jquery'filter@cptIt,

filter( selector ) Returns: jQuery

Description: Reduce the set of matched elements to those that match the selector or pass the function's test.

_CODE.JQUERY:
Selects all paragraphs and removes those without a class "selected".
$("p").filter(".selected")
[http://api.jquery.com/filter/]

_CODE.JQUERY: FUNCTION:
We can also take advantage of the index passed through the function, which indicates the 0-based position of the element within the unfiltered set of matched elements:

$('li').filter(function(index) {
return index % 3 == 2;
}).css('background-color', 'red');

This alteration to the code will cause the third and sixth list items to be highlighted, as it uses the modulus operator (%) to select every item with an index value that, when divided by 3, has a remainder of 2.
[http://api.jquery.com/filter/]

jquery'height

name::
* McsEngl.jquery'height@cptIt,

SOURCE:
* http://api.jquery.com/height//

jquery'hide

name::
* McsEngl.jquery'hide@cptIt,

_CODE.JQUERY:
$("a").click(function(event){
event.preventDefault();
$(this).hide("slow");
});
= hides a link

===

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("p").click(function(){
$(this).hide();
});
});
</script>
</head>
<body>
<p>If you click on me, I will disappear.</p>
<p>Click me away!</p>
<p>Click me too!</p>
</body>
</html>

jquery'html-method (v1.0)

name::
* McsEngl.jquery'html-method (v1.0)@cptIt,

Description: Get the HTML contents of the first element in the set of matched elements.
[http://api.jquery.com/html/]

_CODE.JQUERY:
* SET content:
$('#idPopup').html(sPopup);

* GET CONTENT:
sPopup = $('#' + sId2).html();

===
<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script>
$(document).ready(function(){
$("button").click(function(){
alert($("p").text());
});
});
</script>
</head>
<body>

<button>Return the text content of all p elements</button>
<p>This is a paragraph.</p>
<p>This is <b>another</b> paragraph.</p>

</body>
</html>

jquery'if

name::
* McsEngl.jquery'if@cptIt,

_CODE.JQUERY:
if($("section").length > 1){
//needs 'length' attribute because find many elements.

jquery'not

name::
* McsEngl.jquery'not@cptIt,

An additional challenge is to select only certain elements from a group of similar or identical ones. jQuery provides filter() and not() for this. While filter() reduces the selection to the elements that fit the filter expression, not() does the contrary and removes all elements that fit the expression. Think of an unordered list where you want to select all li elements that have no ul children. $("li").not(":has(ul)").css("border", "1px solid black");
[http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery]

jquery'offset()

name::
* McsEngl.jquery'offset()@cptIt,


The .offset() method allows us to retrieve the current position of an element relative to the document. Contrast this with .position(), which retrieves the current position relative to the offset parent. When positioning a new element on top of an existing one for global manipulation (in particular, for implementing drag-and-drop), .offset() is the more useful.

.offset() returns an object containing the properties top and left.

Note: jQuery does not support getting the offset coordinates of hidden elements.
[http://api.jquery.com/offset/]

_CODE.JQUERY:
Set the offset of the second paragraph:

<!DOCTYPE html>
<html>
<head>
<style>p { margin-left:10px; } </style>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<p>Hello</p><p>2nd Paragraph</p>
<script>$("p:last").offset({ top: 10, left: 30 });</script>

</body>
</html>

jquery'operator

name::
* McsEngl.jquery'operator@cptIt,

Start With: ^=
The ^= operator will filter elements whose attribute starts with the given value.

Ends With: $=
The $= operator will filter elements whose attribute ends with the given value.

Contains: *=
The *= operator will filter elements whose attribute contains the given value.

jquery'position()

name::
* McsEngl.jquery'position()@cptIt,

_DESCRIPTION:
The .position() method allows us to retrieve the current position of an element relative to the offset parent. Contrast this with .offset(), which retrieves the current position relative to the document. When positioning a new element near another one and within the same containing DOM element, .position() is the more useful.

Returns an object containing the properties top and left.
[http://api.jquery.com/position/]

jquery'removeClass()

name::
* McsEngl.jquery'removeClass()@cptIt,

_CODE.JQUERY:
<html>
<head>
<style type="text/css">
.highlight {
 background:green;
}
</style>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
</head>
<body>
<h1>jQuery add / remove css class example</h1>

<p id="para1">This is paragraph 1</p>
<p>This is paragraph 2</p>
<p>This is paragraph 3</p>
<p>This is paragraph 4</p>

<button id="addClass">Add highlight</button>
<button id="removeClass">Remove highlight</button>

<script type="text/javascript">

$("#addClass").click(function () {

  $('#para1').addClass('highlight');

});

$("#removeClass").click(function () {

  $('#para1').removeClass('highlight');

});

</script>
</body>
</html>
[http://www.mkyong.com/jquery/how-to-add-remove-css-class-dynamically-in-jquery/]

jquery'split()

name::
* McsEngl.jquery'split()@cptIt,

_CODE.JQUERY:
var words = $("p:first").text().split(" ");

jquery'stopPropagation()

name::
* McsEngl.jquery'stopPropagation()@cptIt,

event.stopPropagation()
Description: Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.
[http://api.jquery.com/event.stopPropagation/]

_CODE.JQUERY:
$("p").click(function(event){
event.stopPropagation();
// do something
});

jquery'text()

name::
* McsEngl.jquery'text()@cptIt,

Get the combined text contents of each element in the set of matched elements, including their descendants, or set the text contents of the matched elements.
[http://api.jquery.com/text/]

jquery'this

name::
* McsEngl.jquery'this@cptIt,

More often that not, in my early dabbling with jQuery and more advanced JavaScript, I found I would constantly get confused over the meaning of "this" in jQuery and my own new libraries.

Hopefully this quick guide can help clarify those confusing moments, because once you've got it, it's simple as pie.

What is "this"?

In many object-oriented programming languages, this (or self) is a keyword which can be used in instance methods to refer to the object on which the currently executing method has been invoked.

Source: http://en.wikipedia.org/wiki/This_(computer_science)
jQuery's this

There are really two main contexts of 'this' in jQuery. The first refers to a to a DOM element, and the second to a jQuery object.
Example of this as a DOM element

'this' is a DOM element when you are inside of a callback function (in the context of jQuery), for example, being called by the click, each, bind, etc. methods.

The following code searches for anchor links with the class of 'newTarget' and sets the 'target' attribute to '_new' (which is a trick to create strict XHTML while still having some links open in a new window).

In this example we are also going to perform a double check to ensure links to the same domain don't open in a new window using the this object.

$('a.newTarget').each(function() { // <- our anonymous callback
// check the DOM attribute 'host' on this
if (this.host != window.location.host) {
// create a jQuery object using the current DOM element
$(this).attr('target', '_new');
}
});

Example of this as a jQuery object

'this' is a jQuery object when you are inside your own jQuery functions. Note that the result of a selector query (i.e. $('a') ) is a jQuery object, which is an array of the matched DOM elements (imagine jQuery is an array with bells on).

jQuery.fn.newTarget = function() {
// 'this' is a jQuery object at this point - with all the jQuery functions

return this.each(function() { // return so we don't break the chain
// now we are inside of a jQuery function, the DOM element is the context
// so 'this' has changed to become a DOM element.

if (this.host != window.location.host) {
$(this).attr('target', '_new');
}
});
};

Finishing up

This is far from comprehensive, but equally there's very little to the logic. So long as you remember the context of 'this' changes when moving in and out of object methods then you're on your way.

If you're still not sure, get your hands on Firebug and add 'console.log(this)' within your code to interrogate and understand what 'this' is at that point in your code.

If this still doesn't make sense or I've got it terribly wrong - or you're suddenly enlightened, please do let me know - and I'll do my best to help.
[http://remysharp.com/2007/04/12/jquerys-this-demystified/]

jquery'toggle-method

name::
* McsEngl.jquery'toggle-method@cptIt,

_CODE.JQUERY:
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("button").click(function(){
$("p").toggle();
});
});
</script>
</head>
<body>

<button>Toggle</button>
<p>This is a paragraph with little content.</p>
<p>This is another small paragraph.</p>
</body>
</html>
===> hides|shows the paragraphs.
===

Simple animations with jQuery can be achieved with show() and hide().

$(document).ready(function(){
$("a").toggle(function(){
$(".stuff").hide('slow');
},function(){
$(".stuff").show('fast');
});
});
[http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery]

jquery'Attribute-of-library

name::
* McsEngl.jquery'Attribute-of-library@cptIt,

jQuery is a lot about making code shorter and therefore easier to read and maintain.
[http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery]

jquery'autocomplete

name::
* McsEngl.jquery'autocomplete@cptIt,
* McsEngl.jquery'autosuggest@cptIt,

_ADDRESS.WPG:
* http://jqueryui.com/autocomplete//

jquery'deferred-object

name::
* McsEngl.jquery'deferred-object@cptIt,

_DESCRIPTION:
5/28/13
Promises are like babies: easy to make, hard to deliver. ~Author Unknown
Remember when you wanted to associate an event handler to a mouseclick, you would assign it to the element's onclick event, as in mywidget.onclick = myhandler;. This became problematic when another method also wanted to get in on the click action since you could only assign one function at a time. Eventually, the issue was solved by the addEventListener() DOM function, which allowed you to add as many listeners as you wanted. Fast forward to the present, and a similar problem has emerged with Ajax calls. This time it's Ajax's limitation of only supporting one callback function. jQuery introduced the Deferred object in version 1.5 to solve this problem. It can register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function. In today's article, we'll learn how to use the Deferred object with Promises.
[http://www.htmlgoodies.com/beyond/javascript/making-promises-with-jquery-deferred.html]

jquery'deferred.fail()

name::
* McsEngl.jquery'deferred.fail()@cptIt,

Description: Add handlers to be called when the Deferred object is rejected.
[http://api.jquery.com/deferred.fail/]

jquery'deferred.promise()

name::
* McsEngl.jquery'deferred.promise()@cptIt,

Description: Return a Deferred's Promise object.

jquery'deferred.reject()

name::
* McsEngl.jquery'deferred.reject()@cptIt,

Description: Reject a Deferred object and call any failCallbacks with the given args.
[http://api.jquery.com/deferred.reject/]

jquery'deferred.resolve()

name::
* McsEngl.jquery'deferred.resolve()@cptIt,

Description: Resolve a Deferred object and call any doneCallbacks with the given args.
When the Deferred is resolved, any doneCallbacks added by deferred.then() or deferred.done() are called. Callbacks are executed in the order they were added. Each callback is passed the args from the deferred.resolve(). Any doneCallbacks added after the Deferred enters the resolved state are executed immediately when they are added, using the arguments that were passed to the deferred.resolve() call.
[http://api.jquery.com/deferred.resolve/]

jquery'deferred.then()

name::
* McsEngl.jquery'deferred.then()@cptIt,

Description: Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
[http://api.jquery.com/deferred.then/]

jquery'Download

name::
* McsEngl.jquery'Download@cptIt,
* McsEngl.jquery'CDN@cptIt,

_SPECIFIC:
* http://code.jquery.com/
* http://code.jquery.com/jquery-1.9.1.min.js
* http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css
* http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js

* <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
* <script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js"></script>

jquery'Element-of-DOM

name::
* McsEngl.jquery'Element-of-DOM@cptIt,
* McsEngl.jquery'elm@cptIt,

jquery'elm'attribute

name::
* McsEngl.jquery'elm'attribute@cptIt,
* McsEngl.jquery'attribute-of-element@cptIt,
* McsEngl.jquery'ex.element-Attribute@cptIt,
* McsEngl.jquery'Get-ID-attribute@cptIt,

_CODE.JQUERY:
== GET ==
<a href="test.php" class="test" id="12" />test</a>

$('.test').click(function(){
alert($(this).attr('id'));
});

== SET ==
.attr({"type":"button","value":"Collapse-All"})

== REMOVE ==
$(this).removeAttr("class");

jquery'elm'content

name::
* McsEngl.jquery'elm'content@cptIt,
* McsEngl.ex.element-Content@cptIt,

_CODE.JQUERY:
divTocSplitLeft.html(funH5oGetOutlineHtml());

jquery'elm'create

name::
* McsEngl.jquery'elm'create@cptIt,
* McsEngl.jquery'ex.element-Create@cptIt,

_CODE.JQUERY:
var spliter = $('<div></div>')

jquery'elm'name

name::
* McsEngl.jquery'elm'name@cptIt,
* McsEngl.jquery'ex.element-Tag-name@cptIt,
* McsEngl.jquery'tagName@cptIt,

_CODE.JQUERY:
$(this).get(0).nodeName
===
$(this).attr("tagName")
===
$(this).attr("nodeName")
===
this.nodeName
===
if($(this).is('h1')){
doStuff();
}

_CODE.JQUERY:
var $tag = $('#idTag1')[0].tagName; //'DIV'
alert($tag);

var $tag = $('p').get(0).tagName; //'P'
alert($tag);

jquery'equivalent-native-JavaScript

name::
* McsEngl.jquery'equivalent-native-JavaScript@cptIt,

_ADDRESS.WPG:
* http://youmightnotneedjquery.com//

jquery'evaluation

name::
* McsEngl.jquery'evaluation@cptIt,

NCZOnline Newsletter - jQuery Today
NCZOnline newsletter@nczonline.net via mail2.suw15.mcsv.net
2015-09-29 7:00 PM (19 minutes ago)
Hi everyone,

Not too long ago, Lea Verou wrote an article entitled, jQuery considered harmful, in which she argued that you're better off not using jQuery anymore for a number of reasons. Lea's hypothesis is that jQuery's cost (library size, extra objects, perceived complexity) outweigh its benefits when you're not dealing with older browsers. I found myself disagreeing with this hypothesis rather adamantly as I read the article.

Lea's assertion is that you can just use native JavaScript APIs if you are only dealing with modern browsers, and that's something I would never recommend. As soon as you leave an abstraction behind, you end up putting developers in a spot where they must now know which browsers support which APIs and what cross-browser quirks (if any) exist. That extra cognitive load can't be discounted, as not realizing browser A didn't work exactly the same as browser B can easily lead to hard-to-find bugs. I even wrote a free ebook about why avoiding native JavaScript APIs is often the best course of action.

I maintain that there's a place for jQuery in today's JavaScript toolkit, but that place is lower in the stack than it has traditionally been used. jQuery is an excellent browser-normalization library, something that every web application needs to survive. Sure, you could roll your own, but then you'd just be rediscovering all of the cross-browser incompatibilities and bugs that jQuery already covers. Maybe you're interested in doing just that, but not me. I'd rather get to work coding up compelling user experiences and I don't want engineers on my team spending all of their time trying to track down browser differences.

So if you're using jQuery already, I'd advise you not to rush to remove it. Perhaps push it further down the stack so people are mostly using regular DOM objects, and delegate lower-level functionality to jQuery via some further abstraction. jQuery is absolutely not harmful and still has a very important role to play in today's web applications.

Be well.

-N

jquery'Evolution

name::
* McsEngl.jquery'Evolution@cptIt,
* McsEngl.jquery'version@cptIt,

2.0.3: {2013-07-03}
[http://blog.jquery.com/2013/07/03/jquery-1-10-2-and-2-0-3-released/]

version 2.0.1,  2013-05-24,

version 2.0.0,  2013-04-18,
As promised, this version leaves behind the older Internet Explorer 6, 7, and 8 browsers. In return it is smaller, faster, and can be used in JavaScript environments where the code needed for old-IE compatibility often causes problems of its own. But don’t worry, the jQuery team still supports the 1.x branch which does run on IE 6/7/8. You can (and should) continue to use jQuery 1.9 (and the upcoming 1.10) on web sites that need to accommodate older browsers.

1.10.2: {2013-07-03}
[http://blog.jquery.com/2013/07/03/jquery-1-10-2-and-2-0-3-released/]

version 1.10.0,  2013-05-24,

Version 1.9

Version 1.8

Version 1.7,  2011-11-03,

Version 1.6

Version 1.5.1
Version 1.5

Version 1.4.4
Version 1.4.3,  2010-10-16
Version 1.4.2
Version 1.4.1
Version 1.4

Version 1.3

Version 1.2.6
Version 1.2.3
Version 1.2

Version 1.1.4
Version 1.1.3
Version 1.1.2
Version 1.1

Version 1.0.4
Version 1.0,  2006-08-26,

jQuery'ev.2011-11-03:
Posted November 3rd, 2011 by dmethvin
jQuery 1.7 is ready for download! You can get the code from the jQuery CDN:
http://code.jquery.com/jquery-1.7.js
http://code.jquery.com/jquery-1.7.min.js
[http://blog.jquery.com/2011/11/03/jquery-1-7-released//]

2010-10-16: jQuery 1.4.3 Released
Posted October 16th, 2010 by John Resig

jQuery 1.4.3 is now out! This is the third minor release on top of jQuery 1.4, fixing some bugs and landing some nice improvements.

2010-02-19: jQuery 1.4.2 Released
Posted February 19th, 2010 by John Resig
jQuery 1.4.2 is now out!

1.2. History Of jQuery

Aug. 22, 2005
Everything started here where John Resig, creator of jQuery, showed us a few ideas of what would become jQuery(http://ejohn.org/blog/selectors-in-javascript/)
Jan. 14, 2006
jQuery announced
Jan. 24, 2006
Creation of the jQuery Blog
Jan. 27, 2006
Creation of the jQuery mailing list
Aug. 26, 2006
First stable version of jQuery, v1.0 released
Jan. 14, 2007
Anniversary of jQuery. v1.1 released: significant performance improvements; reduced, simplified API
Sep. 10, 2007
v1.2 released: additional DOM traversal and manipulation methods; improved animation control; JSONP support; XPath selectors removed
Sep. 17, 2007
First version of jQuery UI released: fully themed interaction and widget library built on top of jQuery
Jan. 14, 2009
Third anniversary of jQuery. v1.3 released: CSS selector engine, Sizzle, available as a standalone component; "live event" binding; improved cross-browser event abstraction; significant performance improvements
Mar. 6, 2009
jQuery UI 1.7 released: ThemeRoller theme generation; new project hosting domain
Jan. 14, 2010
Fourth anniversary of jQuery. v1.4 released: more performance improvements; more DOM traversal and manipulation methods; more animation control; more moreness
Jan. 21, 2010
jQuery.org goes live (site containing resources for jQuery and related projects)
Mar. 23, 2010
jQuery UI 1.8 released: new utilities; new widgets; upgraded widget factory; more modular core
Jan. 31, 2011
v1.5 released: deferred objects; improved, extensible Ajax support
May. 3, 2011
v1.6 released: major rewrite of the Attribute module plus performance improvement
[http://marakana.com/bookshelf/jquery_tutorial/index.html#_history_of_jquery]

jquery'migration

name::
* McsEngl.jquery'migration@cptIt,

_ADDRESS.WPG:
* https://github.com/jquery/jquery-migrate//
* http://jquery.com/upgrade-guide/1.9//

_METHOD:
In your web page, load this plugin after the script for jQuery:
<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

jquery'Example-code

name::
* McsEngl.jquery'Example-code@cptIt,
* McsEngl.jquery'code@cptIt,

jquery'ex.HotKeys

name::
* McsEngl.jquery'ex.HotKeys@cptIt,

Javascript jQuery Hotkeys Plugin
* http://code.google.com/p/js-hotkeys//

jquery'ex.Include-library

name::
* McsEngl.jquery'ex.Include-library@cptIt,
* McsEngl.jquery'ex.set-library@cptIt,

Including the library

The jQuery library is a single JavaScript file, containing all of its common DOM, event, effects, and Ajax functions. It can be included within a web page by linking to a local copy, or to one of the many copies available from public servers (such as Google [10] or Microsoft CDN).

<script type="text/javascript" src="jQuery.js"></script>

<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.3.min.js"></script>

jquery'ex.PREVIEW-LINK

name::
* McsEngl.jquery'ex.PREVIEW-LINK@cptIt,
* McsEngl.jquery'link-preview@cptIt,

_ADDRESS.WPG:
* image-preview: http://james.padolsey.com/demos/imgPreview/full//

jquery'ex.SCROLL-TO-POSITION

name::
* McsEngl.jquery'ex.SCROLL-TO-POSITION@cptIt,
* McsEngl.jquery'scroll-to-position@cptIt,

_CODE.JQUERY:
/* scroll to this element */
$(elmSpliterLeftDiv).scrollTop(0);
var position = $(this).offset().top;
var windowHeight = $(window).height();
$(elmSpliterLeftDiv).scrollTop(position - (windowHeight/2));
===

If you are using jQuery, you can also do this:

$.fn.focusWithoutScrolling = function(){
var x = window.scrollX, y = window.scrollY;
this.focus();
window.scrollTo(x, y);
};
and then

$('#search_terms').focusWithoutScrolling();
===


Example:
Adds the focused class to whatever element has focus

<!DOCTYPE html>
<html>
<head>
<style>
.focused {
background:#abcdef;
}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>

<div id="content">
<input tabIndex="1">
<input tabIndex="2">
<select tabIndex="3">
<option>select menu</option>
</select>
<div tabIndex="4">
a div
</div>
</div>

<script>
$( "#content" ).delegate( "*", "focus blur", function( event ) {
var elem = $( this );
setTimeout(function() {
elem.toggleClass( "focused", elem.is( ":focus" ) );
}, 0);
});
</script>

</body>
</html>
[http://api.jquery.com/focus-selector/]

jquery'ex.Set-Attribute-Title

name::
* McsEngl.jquery'ex.Set-Attribute-Title@cptIt,

_CODE.JQUERY:
$(tocElDivToc).find("a").each(
function(){
/* sets as title-attribute the text of a-element */
var txt=$(this).text();
$(this).attr('title',txt);

jquery'ex.TOC

name::
* McsEngl.jquery'ex.TOC@cptIt,

* http://projects.jga.me/toc//
TOC is a jQuery plugin that will automatically generate a table of contents for your page. You can see an example of it on the left side of the page.

Automatic Table of Contents:
* http://css-tricks.com/automatic-table-of-contents//

jquery'event

name::
* McsEngl.jquery'event@cptIt,

jquery'preventDefault():
event.preventDefault()
event.preventDefault() Returns: undefined
Description: If this method is called, the default action of the event will not be triggered.

SPECIFIC

* http://api.jquery.com/category/events//

_SPECIFIC:
blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick,
mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error,

jquery'event.bind()

name::
* McsEngl.jquery'event.bind()@cptIt,
* McsEngl.jquery'event@cptIt,

All the existing event binding methods (and their corresponding unbinding methods) are still there in 1.7, but we recommend that you use .on() for any new jQuery project where you know version 1.7 or higher is in use. Here are some examples of mapping between the old and new API calls:

$('a').bind('click', myHandler);
$('a').on('click', myHandler);
[http://blog.jquery.com/2011/11/03/jquery-1-7-released//]

The .bind() method is the primary means of attaching behavior to a document. All JavaScript event types, such as focus, mouseover, and resize, are allowed for eventType. The error event on the window object uses nonstandard conventions and is not supported by jQuery; attach a handler directly to the window object instead. The beforeunload event is supported cross-browser in jQuery 1.5.1 and 1.6+, but is not supported in IE for jQuery 1.5.2 due to a regression.

The jQuery library provides shortcut methods for binding the standard event types, such as .click() for .bind('click'). A description of each can be found in the discussion of its shortcut method: blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error
[http://api.jquery.com/bind/]

jquery'event.mouseup()

name::
* McsEngl.jquery'event.mouseup()@cptIt,
* McsEngl.jquery'mouseup@cptIt,

_CODE.JQUERY:
Example:
Show texts when mouseup and mousedown event triggering.
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<p>Press mouse and release here.</p>

<script>
$("p").mouseup(function(){
$(this).append('<span style="color:#F00;">Mouse up.</span>');
}).mousedown(function(){
$(this).append('<span style="color:#00F;">Mouse down.</span>');
});
</script>

</body>
</html>
[http://api.jquery.com/mouseup/]

jquery'event.ready()

name::
* McsEngl.jquery'event.ready()@cptIt,
* McsEngl.jquery'launcing-code@cptIt,

Launching Code on Document Ready

The first thing that most Javascript programmers end up doing is adding some code to their program, similar to this:

window.onload = function(){ alert("welcome"); }
Inside of which is the code that you want to run right when the page is loaded. Problematically, however, the Javascript code isn't run until all images are finished downloading (this includes banner ads). The reason for using window.onload in the first place is that the HTML 'document' isn't finished loading yet, when you first try to run your code.

To circumvent both problems, jQuery has a simple statement that checks the document and waits until it's ready to be manipulated, known as the ready event:

$(document).ready(function(){
// Your code here
});
[http://docs.jquery.com/How_jQuery_Works]

jquery'event.unbind()

name::
* McsEngl.jquery'event.unbind()@cptIt,
* McsEngl.jquery'unbind@cptIt,

_CODE.JQUERY:
Example: Can bind and unbind events to the colored button.
<!DOCTYPE html>
<html>
<head>
<style>
button { margin:5px; }
button#theone { color:red; background:yellow; }
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<button id="theone">Does nothing...</button>
<button id="bind">Bind Click</button>
<button id="unbind">Unbind Click</button>

<div style="display:none;">Click!</div>
<script>

function aClick() {
$("div").show().fadeOut("slow");
}
$("#bind").click(function () {
// could use .bind('click', aClick) instead but for variety...
$("#theone").click(aClick)
.text("Can Click!");
});
$("#unbind").click(function () {
$("#theone").unbind('click', aClick)
.text("Does nothing...");
});

</script>

</body>
</html>
[http://api.jquery.com/unbind/]

jquery'Function

name::
* McsEngl.jquery'Function@cptIt,

jquery'fn

name::
* McsEngl.jquery'fn@cptIt,

_CODE.JQUERY:
$.fn.getElFinder = function() {
var instance;

this.each(function() {
if (this.elfinder) {
instance = this.elfinder;
return false;
}
});

return instance;
}

jquery'function.Anonymous

name::
* McsEngl.jquery'function.Anonymous@cptIt,
* McsEngl.jquery'anonymous-function@cptIt,
* McsEngl.jquery'closure@cptIt,

_CODE.JQUERY:
<script type = "text/javascript">
(function($){ ... })(jQuery);
</script>
What is going on here? First of all, in a real-world scenario, the three dots would be replaced with actual code that we would like to be executed. Here we see a definition of an anonymous function (also known as function closure), that takes a parameter called dollar sign ($).
[http://www.authenticsociety.com/blog/jQueryPluginTutorial_Beginner]
===
(function($, undefined) {
$.fn.split = function(options) {};
...
})(jQuery);
You create an anonymous function which takes one parameter, and immediately invoke it with the parameter jQuery.

jquery'function.Callback

name::
* McsEngl.jquery'function.Callback@cptIt,
* McsEngl.jquery'Callback-function@cptIt,

CALLBACK AND FUNCTIONS

A callback is a function that is passed as an argument to another function and is executed after its parent function has completed. The special thing about a callback is that functions that appear after the "parent" can execute before the callback executes. Another important thing to know is how to properly pass the callback. This is where I have often forgotten the proper syntax.
[http://docs.jquery.com/How_jQuery_Works]

RIGHT:
$.get('myhtmlpage.html', function(){
myCallBack(param1, param2);
});

WRONG:
$.get('myhtmlpage.html', myCallBack(param1, param2));

jquery'METHOD-FACTORY

name::
* McsEngl.jquery'METHOD-FACTORY@cptIt,
* McsEngl.jQuery-Factory-Method@cptIt,
* McsEngl.jQuery-Factory-Function@cptIt,

jQuery has two usage styles:
* via the $ function, which is a factory method for the jQuery object. These functions, often called commands, are chainable; they each return a jQuery object

Typically, access to and manipulation of multiple DOM nodes begins with the $ function being called with a CSS selector string, which results in a jQuery object referencing matching elements in the HTML page. This node set can be manipulated by calling instance methods on the jQuery object, or on the nodes themselves. For example:

$("div.test").add("p.quote").addClass("blue").slideDown("slow");

This line finds the union of all div tags with class attribute test and all p tags with CSS class attribute quote, adds the class attribute blue to each matched element, and then slides them down with an animation. The $ and add functions affect the matched set, while the addClass and slideDown affect the referenced nodes.

jquery'METHOD-UTILITY

name::
* McsEngl.jquery'METHOD-UTILITY@cptIt,
* McsEngl.jQuery-Utility-Method@cptIt,
* McsEngl.jQuery-Utility-Function@cptIt,

via $.-prefixed functions. These are utility functions which do not work on the jQuery object per se.
The methods prefixed with $. are convenience methods or affect global properties and behaviour. For example, the following is an example of the map function called each in jQuery:

$.each([1,2,3], function(){
document.write(this + 1);
});

This writes the number 234 to the document.
[http://en.wikipedia.org/wiki/JQuery]

jquery'jQuery-function

name::
* McsEngl.jquery'jQuery-function@cptIt,
* McsEngl.jqf@cptIt,
* McsEngl.ljsf.jQuery@cptIt,

_CODE.JQUERY:
> typeof jQuery
"function"
> typeof $
"function"

_PROPERTY:
* jqf.Event,
* jqf.acceptData,
* jqf.access,
* jqf.active,
* jqf.ajax,
* jqf.ajaxSettings,
* jqf.ajaxSetup,
* jqf.arguments,
* jqf.attr,
* jqf.attrFn,
* jqf.bindReady,
* jqf.boxModel,
* jqf.browser,
* jqf.buildFragment,
* jqf.cache,
* jqf.caller,
* jqf.camelCase,
* jqf.clean,
* jqf.cleanData,
* jqf.contains,
* jqf.css,
* jqf.cssHooks,
* jqf.cssNumber,
* jqf.cssProps,
* jqf.curCSS,
* jqf.data,
* jqf.dequeue,
* jqf.dir,
* jqf.each,
* jqf.easing,
* jqf.error,
* jqf.etag,
* jqf.event,
* jqf.expando,
* jqf.expr,
* jqf.extend,
* jqf.filter,
* jqf.find,
* jqf.fn,
* jqf.fragments,
* jqf.fx,
* jqf.get,
* jqf.getJSON,
* jqf.getScript,
* jqf.globalEval,
* jqf.grep,
* jqf.guid,
* jqf.handleComplete,
* jqf.handleError,
* jqf.handleSuccess,
* jqf.httpData,
* jqf.httpNotModified,
* jqf.httpSuccess,
* jqf.inArray,
* jqf.isArray,
* jqf.isEmptyObject,
* jqf.isFunction,
* jqf.isNaN,
* jqf.isPlainObject,
* jqf.isReady,
* jqf.isWindow,
* jqf.isXMLDoc,
* jqf.lastModified,
* jqf.length,
* jqf.makeArray,
* jqf.map,
* jqf.merge,
* jqf.name,
* jqf.noConflict,
* jqf.noData,
* jqf.nodeName,
* jqf.noop,
* jqf.now,
* jqf.nth,
* jqf.offset,
* jqf.param,
* jqf.parseJSON,
* jqf.post,
* jqf.props,
* jqf.prototype,
* jqf.proxy,
* jqf.queue,
* jqf.ready,
* jqf.readyWait,
* jqf.removeData,
* jqf.removeEvent,
* jqf.sibling,
* jqf.speed,
* jqf.style,
* jqf.support,
* jqf.swap,
* jqf.text,
* jqf.timers,
* jqf.triggerGlobal,
* jqf.trim,
* jqf.type,
* jqf.uaMatch,
* jqf.unique,
* jqf.uuid,

* jqf.apply, __proto__,
* jqf.arguments, __proto__,
* jqf.bind, __proto__,
* jqf.call, __proto__,
* jqf.caller, __proto__,
* jqf.constructor, __proto__,
* jqf.length, __proto__,
* jqf.name, __proto__,
* jqf.toString, __proto__,
===
> Object.getOwnPropertyNames(jQuery).sort()
["Event", "acceptData", "access", "active", "ajax", "ajaxSettings", "ajaxSetup", "arguments", "attr", "attrFn", "bindReady", "boxModel", "browser", "buildFragment", "cache", "caller", "camelCase", "clean", "cleanData", "contains", "css", "cssHooks", "cssNumber", "cssProps", "curCSS", "data", "dequeue", "dir", "each", "easing", "error", "etag", "event", "expando", "expr", "extend", "filter", "find", "fn", "fragments", "fx", "get", "getJSON", "getScript", "globalEval", "grep", "guid", "handleComplete", "handleError", "handleSuccess", "httpData", "httpNotModified", "httpSuccess", "inArray", "isArray", "isEmptyObject", "isFunction", "isNaN", "isPlainObject", "isReady", "isWindow", "isXMLDoc", "lastModified", "length", "makeArray", "map", "merge", "name", "noConflict", "noData", "nodeName", "noop", "now", "nth", "offset", "param", "parseJSON", "post", "props", "prototype", "proxy", "queue", "ready", "readyWait", "removeData", "removeEvent", "sibling", "speed", "style", "support", "swap", "text", "timers", "triggerGlobal", "trim", "type", "uaMatch", "unique", "uuid"]

jqf.METHOD

name::
* McsEngl.jqf.METHOD@cptIt,

jqf.METHOD.NO

name::
* McsEngl.jqf.METHOD.NO@cptIt,

jqf.browser:
> chrome: jQuery.browser
Object {webkit: true, version: "537.36", safari: true}
> ff: jQuery.browser
Object { mozilla=true, version="31.0"}

jquery'jQuery-object

name::
* McsEngl.jquery'jQuery-object@cptIt,
* McsEngl.jqo@cptIt,
* McsEngl.jquery'object@cptIt,

_DESCRIPTION:
The jQuery function, ‘$’, returns an object that contains all the elements that match the given CSS selector(s) (in this case ‘div#test’). This object has access to all of the methods mentioned in the jQuery documentation. ‘text’ is a method that returns ‘[the] combined text contents of all matched elements.’ (from here).
[http://blog.themeforest.net/tutorials/7-things-i-wish-i-had-known-about-jquery/#h5o-1]

===
A jQuery object contains a collection of Document Object Model (DOM) elements that have been created from an HTML string or selected from a document. Since jQuery methods often use CSS selectors to match elements from a document, the set of elements in a jQuery object is often called a set of "matched elements" or "selected elements".

The jQuery object itself behaves much like an array; it has a length property and the elements in the object can be accessed by their numeric indices [0] to [length-1]. Note that a jQuery object is not actually a Javascript Array object, so it does not have all the methods of a true Array object such as join().

Most frequently, you will use the jQuery() function to create a jQuery object. jQuery() can also be accessed by its familiar single-character alias of $(), unless you have called jQuery.noConflict() to disable this option. Many jQuery methods return the jQuery object itself, so that method calls can be chained:

$("p").css("color", "red").find(".special").css("color", "green");
Whenever you use a "destructive" jQuery method that potentially changes the set of elements in the jQuery object, such as .filter() or .find(), that method actually returns a new jQuery object with the resulting elements. To return to the previous jQuery object, you use the .end() method.

A jQuery object may be empty, containing no DOM elements. You can create an empty jQuery object with $() (that is, passing no arguments at all). A jQuery object may also be empty if a selector doesn't select any elements, or if a chained method filters out all the elements. It is not an error; any further methods called on that jQuery object simply have no effect since they have no elements to act upon. So, in this example if there are no bad entries on the page then no elements will be colored red:

$(".badEntry").css({color: "red"});
[http://docs.jquery.com/Types#jQuery]

jquery'object'Array

name::
* McsEngl.jquery'object'Array@cptIt,

jQuery can Behave Somewhat like an Array

In JavaScript you access the first item in an array like this: ‘arrayVariable[0]‘. You find how many items are in an array using ‘arrayVariable.length’. You can do the same with jQuery. Each object that matches the specified selectors is an item in the array. Look at this:
/*
Assume the HTML looks like this:
<div id="wrapper">
 <div class="box">Content#1!</div>
 <div class="box">Content#2!</div>
 <div class="box">Content#3!</div>
 <div class="box">Content#4!</div>
</div>
<div id="wrapper2">
 <div class="box">Content2#1!</div>
</div>
*/

// returns 4
$('#wrapper .box').length;

// num is equal to 4
var num = $('#wrapper .box');
num = num.length;

// text is equal to 'Content#2!'
var text = $("#wrapper .box")[1];

// text is equal to 'Content#1'
var text = $("#wrapper .box")[0];

// text is equal to 'Content2#1'
var text = $("#wrapper2 .box")[0];
[http://blog.themeforest.net/tutorials/7-things-i-wish-i-had-known-about-jquery/#h5o-5]

jquery'object'Chainability

name::
* McsEngl.jquery'object'Chainability@cptIt,
* McsEngl.jquery'chainability@cptIt,

Chainability
JavaScript is ‘chainable’. ‘Chainable’ means you can have multiple methods joined together. For example this jQuery:
var testText = $('div#test').parent().text();
…and this HTML:
<div id="test">This is the content!</div>
That code would return the text of the parent of the div with the id of ‘test’. The parent method returned a new jQuery object containing the element’s parent.
Not all things are chainable. For example the text method doesn’t return a jQuery object, it returns a string. You use the parent method on a string, because that doesn’t make any sense at all. However, because it returns a string you can use all the methods that you can use with a string. These methods are documented very well here. For example, it is perfectly fine to use the split method on the text method, as demonstrated here:
var testText = $('div#test').parent().text().split(' ');
Now the variable testText would be set as an array that contains ‘This’,'is’,'the’, and ‘content!’ as items in the array.
[http://blog.themeforest.net/tutorials/7-things-i-wish-i-had-known-about-jquery//]

jquery'object'member

name::
* McsEngl.jquery'object'member@cptIt,

_PROPERTY (Chrome, Firefox):
* jqo.0, own,
* jqo.context, own,
* jqo.length, own,
* jqo._toggle,
* jqo.add,
* addClass,
* jqo.after,
* jqo.ajaxComplete,
* jqo.ajaxError,
* jqo.ajaxSend,
* jqo.ajaxStart,
* jqo.ajaxStop,
* jqo.ajaxSuccess,
* jqo.andSelf,
* jqo.animate,
* append,
* jqo.appendTo,
* jqo.attr,
* jqo.before,
* jqo.bind,
* jqo.blur,
* jqo.change,
* children,
* jqo.clearQueue,
* jqo.click,
* jqo.clone,
* jqo.closest,
* jqo.contents,
* jqo.css,
* jqo.data,
* jqo.dblclick,
* jqo.delay,
* jqo.delegate,
* jqo.dequeue,
* jqo.detach,
* jqo.die,
* jqo.domManip,
* each,
* jqo.empty,
* jqo.end,
* jqo.eq,
* jqo.error,
* jqo.extend,
* jqo.fadeIn,
* jqo.fadeOut,
* jqo.fadeTo,
* jqo.filter,
* find,
* jqo.first,
* focus,
* jqo.focusin,
* jqo.focusout,
* jqo.get,
* jqo.has,
* jqo.hasClass,
* height,
* hide,
* jqo.hover,
* html,
* jqo.index,
* jqo.init,
* jqo.innerHeight,
* jqo.innerWidth,
* insertAfter,
* jqo.insertBefore,
* jqo.is,
* jqo.jquery,
* jqo.keydown,
* jqo.keypress,
* jqo.keyup,
* jqo.last,
* jqo.length,
* jqo.live,
* load,
* jqo.map,
* jqo.mousedown,
* jqo.mouseenter,
* jqo.mouseleave,
* jqo.mousemove,
* jqo.mouseout,
* jqo.mouseover,
* jqo.mouseup,
* jqo.next,
* jqo.nextAll,
* jqo.nextUntil,
* jqo.not,
* jqo.offset,
* jqo.offsetParent,
* jqo.one,
* jqo.outerHeight,
* jqo.outerWidth,
* parent,
* jqo.parents,
* jqo.parentsUntil,
* position,
* jqo.prepend,
* jqo.prependTo,
* jqo.prev,
* jqo.prevAll,
* jqo.prevUntil,
* jqo.push,
* jqo.pushStack,
* jqo.queue,
* ready,
* remove,
* jqo.removeAttr,
* jqo.removeClass,
* jqo.removeData,
* jqo.replaceAll,
* jqo.replaceWith,
* jqo.resize,
* jqo.scroll,
* scrollLeft,
* scrollTop,
* jqo.select,
* jqo.selector,
* jqo.serialize,
* jqo.serializeArray,
* show,
* jqo.siblings,
* jqo.size,
* jqo.slice,
* jqo.slideDown,
* jqo.slideToggle,
* jqo.slideUp,
* jqo.sort,
* jqo.splice,
* jqo.stop,
* jqo.submit,
* text,
* jqo.toArray,
* jqo.toggle,
* jqo.toggleClass,
* jqo.trigger,
* jqo.triggerHandler,
* jqo.unbind,
* jqo.undelegate,
* jqo.unload,
* jqo.unwrap,
* jqo.val,
* width#ql:jqo.width#,
* jqo.wrap,
* jqo.wrapAll,
* jqo.wrapInner,
===
> Object.getOwnPropertyNames(jQuery(document)).sort()
["0", "context", "length"]
Object.getOwnPropertyNames(jQuery(document).__proto__).sort()
["_toggle", "add", "addClass", "after", "ajaxComplete", "ajaxError", "ajaxSend", "ajaxStart", "ajaxStop", "ajaxSuccess", "andSelf", "animate", "append", "appendTo", "attr", "before", "bind", "blur", "change", "children", "clearQueue", "click", "clone", "closest", "contents", "css", "data", "dblclick", "delay", "delegate", "dequeue", "detach", "die", "domManip", "each", "empty", "end", "eq", "error", "extend", "fadeIn", "fadeOut", "fadeTo", "filter", "find", "first", "focus", "focusin", "focusout", "get", "has", "hasClass", "height", "hide", "hover", "html", "index", "init", "innerHeight", "innerWidth", "insertAfter", "insertBefore", "is", "jquery", "keydown", "keypress", "keyup", "last", "length", "live", "load", "map", "mousedown", "mouseenter", "mouseleave", "mousemove", "mouseout", "mouseover", "mouseup", "next", "nextAll", "nextUntil", "not", "offset", "offsetParent", "one", "outerHeight", "outerWidth", "parent", "parents", "parentsUntil", "position", "prepend", "prependTo", "prev", "prevAll", "prevUntil", "push", "pushStack", "queue", "ready", "remove", "removeAttr", "removeClass", "removeData", "replaceAll", "replaceWith", "resize", "scroll", "scrollLeft", "scrollTop", "select", "selector", "serialize", "serializeArray", "show", "siblings", "size", "slice", "slideDown", "slideToggle", "slideUp", "sort", "splice", "stop", "submit", "text", "toArray", "toggle", "toggleClass", "trigger", "triggerHandler", "unbind", "undelegate", "unload", "unwrap", "val", "width", "wrap", "wrapAll", "wrapInner"]

jqo.METHOD

name::
* McsEngl.jqo.METHOD@cptIt,
* McsEngl.jquery'method@cptIt,

jqo.append():
eltOLD.append(eltNEW);
===
//JS equivalent
oEltOLD.appendChild(oEltNEW);
===
$("#elem").append("I'm a good guy.");
document.getElementById("elem").innerHTML += "I'm a good guy.";

jqo.children():
> $('#idSpliterDiv').children() instanceof jQuery
true
===
eltSpliterChildren = eltSpliterDiv.children(),
eltSpliterLeftDiv = eltSpliterChildren.first(),
eltSpliterRightDiv = eltSpliterChildren.next(),
eltSpliterChildren.trigger('resize');
eltSpliterChildren.css({
'-khtml-user-select': 'none',
'-moz-user-select': 'none',
'-webkit-user-select': 'none'
});

jqo.each():
_CODE.JQUERY:
===
[].slice.call(document.querySelectorAll('#idTocTree li > a')).forEach(function(oElt, nIndex, array){})
===
$("div").each(function(){
console.log($(this).html());
});
nodes=document.getElementsByTagName("div");
for(i=0;i<nodes.length;i++){
console.log(nodes[i].innerHTML);
}

jqo.find()

$("#elem").find("#saves");
function checkChildren(nodes, elemId){
for(i=0;i<nodes.length;i++){
if(nodes[i].id==elemId){
return nodes[i];
}else{
return checkChildren(nodes[i].children, elemId);
}
}
}
nodes=document.getElementById("elem").children;
checkChildren(nodes, "saves");

jqo.height():
$(window).height()
===
window.innerHeight

jqo.hide():
$(".clsTabContent").hide(); //Hide all content
$("#elem").hide();
document.getElementById("elem").style.display = "none";

jqo.hover():
_CODE.JQUERY:
* jquery'hover:
$("#orderedlist li:last").hover(function() {
$(this).addClass("green");
},function(){
$(this).removeClass("green");
});
[http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery]
===
//JS equivalent:
oElt.onmouseover (function)
oElt.onmouseout(function)

jqo.insertAfter():
jqEltNew.insertAfter(jqEltOld)
===
//JS equivalent
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
[http://stackoverflow.com/a/4793630]

jqo.parent():
===
//JS equivalent
oElt.parentNode;

jqo.position():
$('#idSpliterBarDiv').position().left
242.9971466064453
===
document.getElementById('idSpliterBarDiv').offsetLeft
243
document.getElementById('idSpliterBarDiv').style.left
"243px"

jqo.ready()
$(document).ready(function() {
===
//JS
document.addEventListener('DOMContentLoaded', function () {
oHitp.fMake_toc();
});
===
//AT the END of the page add the script and then execute it.
<script src="testHitp.js"></script>
<script>oHitp.fMake_toc()</script>

jqo.remove:
jqelt.remove();
===
//JS equivalent
element.parentNode.removeChild(element);
===

$("#elem").remove();
document.getElementById("elem").remove();

jqo.scrollLeft(index):
===
//JS equivalent
oElt.scrollLeft = n;

jqo.scrollTop(index):
===
//JS equivalent
oElt.scrollIntoViewIfNeeded();

jqo.show():
$("#elem").show();
===
document.getElementById("elem").style.display = "block";

jqo.text():
===
oElt.textContent
===
//JS equivalent
oElt.innerText (chrome, not FIREFOX)

jqo.toggle():
$("#elem").toggle();
document.getElementById("elem").style.display = document.getElementById("elem").style.display=="block" ? "none":"block";

jqo.FOCUS

name::
* McsEngl.jqo.FOCUS@cptIt,
* McsEngl.jquery'ex.FOCUS@cptIt,
* McsEngl.jquery'focus@cptIt,

_CODE.JQUERY:
Div can get the focus if it has tabindex attribute... The index even could be -1. For example:

$("#focus_point").attr("tabindex",-1).focus();

:focus { outline: none; }

===
// jsoHelt.focus:
//js equivalent
document.getElementById('idSpliterRightDiv').setAttribute('tabindex', -1);
document.getElementById('idSpliterRightDiv').focus();

jqo.METHOD.NO

name::
* McsEngl.jqo.METHOD.NO@cptIt,
* McsEngl.jquery'methodNo@cptIt,

jquery'object'Variable

name::
* McsEngl.jquery'object'Variable@cptIt,

jQuery in a Variable
You can store the results from a jQuery selection in a variable, and still access all the same methods. It is good practice to prepend the variable with ‘$’ to remember that you are, indeed, working with a jQuery object. Example:
var $testBox = $('#test');
// the variable testHTML is equal to the content's of '#test'
var testHTML = $testBox.html();

jquery'menu

name::
* McsEngl.jquery'menu@cptIt,
* McsEngl.jquery'ex.menu@cptIt,

_ADDRESS.WPG:
* vertical-mega-menu: http://plugins.jquery.com/project/vertical-mega-menu,

jquery'performance

name::
* McsEngl.jquery'performance@cptIt,

css

Use Stylesheets for Changing CSS on Many Elements
If you're changing the CSS of more than 20 elements using .css(), consider adding a style tag to the page instead for a nearly 60% increase in speed.

// Fine for up to 20 elements, slow after that:
$( "a.swedberg" ).css( "color", "#0769ad" );

// Much faster:
$( "<style type=\"text/css\">a.swedberg { color:#0769ad }</style>")
.appendTo( "head" );
[http://learn.jquery.com/performance/use-stylesheets-for-changing-css/]

detache-elements

Detach Elements to Work with Them
The DOM is slow; you want to avoid manipulating it as much as possible. jQuery introduced detach() in version 1.4 to help address this issue, allowing you to remove an element from the DOM while you work with it.

var $table = $( "#myTable" );
var $parent = $table.parent();

$table.detach();

// ... add lots and lots of rows to table

$parent.append( $table );
[http://learn.jquery.com/performance/detach-elements-before-work-with-them/]

loop

Cache Length During Loops
In a for loop, don't access the length property of an array every time; cache it beforehand.

var myLength = myArray.length;

for ( var i = 0; i < myLength; i++ ) {

// do stuff

}
[http://learn.jquery.com/performance/cache-loop-length/]

selector

Optimize Selectors
Selector optimization is less important than it used to be, as more browsers implement document.querySelectorAll() and the burden of selection shifts from jQuery to the browser. However, there are still some tips to keep in mind.
[http://learn.jquery.com/performance/optimize-selectors/]

Avoid the Universal Selector
Selections that specify or imply that a match could be found anywhere can be very slow.

$( ".buttons > *" ); // Extremely expensive.
$( ".buttons" ).children(); // Much better.

$( ".category :radio" ); // Implied universal selection.
$( ".category *:radio" ); // Same thing, explicit now.
$( ".category input:radio" ); // Much better.

ID-Based Selectors
Beginning your selector with an ID is always best.

// Fast:
$( "#container div.robotarm" );

// Super-fast:
$( "#container" ).find( "div.robotarm" );
The .find() approach is faster because the first selection is handled without going through the Sizzle selector engine – ID-only selections are handled using document.getElementById(), which is extremely fast because it is native to the browser.

jquery'Plugin

name::
* McsEngl.jquery'Plugin@cptIt,

_ADDRESS.WPG:
* home: http://plugins.jquery.com//
* http://docs.jquery.com/Plugins/Authoring,
* http://net.tutsplus.com/articles/news/you-still-cant-create-a-jquery-plugin//

_DESCRIPTION:
A jQuery plugin is simply a new method that we use to extend jQuery's prototype object. By extending the prototype object you enable all jQuery objects to inherit any methods that you add. As established, whenever you call jQuery() you're creating a new jQuery object, with all of jQuery's methods inherited.
The idea of a plugin is to do something with a collection of elements. You could consider each method that comes with the jQuery core a plugin, like .fadeOut() or .addClass().
You can make your own plugins and use them privately in your code or you can release them into the wild. There are thousands of jQuery plugins available online. The barrier to creating a plugin of your own is so low that you'll want to do it straight away!
[http://learn.jquery.com/plugins/]
===
Writing jQuery plugins allows you to make the most out of the library and abstract your most clever and useful functions out into reusable code that can save you time and make your development even more efficient. Here's a brief summary of the post and what to keep in mind when developing your next jQuery plugin:

Always wrap your plugin in (function( $ ){ // plugin goes here })( jQuery );
Don't redundantly wrap the this keyword in the immediate scope of your plugin's function
Unless you're returning an intrinsic value from your plugin, always have your plugin's function return the this keyword to maintain chainability.
Rather than requiring a lengthy amount of arguments, pass your plugin settings in an object literal that can be extended over the plugin's defaults.
Don't clutter the jQuery.fn object with more than one namespace per plugin.
Always namespace your methods, events and data.
jQuery.fn is pronounced jQuery effin'
[http://docs.jquery.com/Plugins/Authoring]

//Add a doOnce plugin:
jQuery.fn.doOnce = function( ) {
//stuff
}

$( "li.cartitems" ).doOnce();
[http://learn.jquery.com/performance/dont-act-on-absent-elements/]
===
plugin ==> js:
doOnce(elm) {
...
}
doOnce($('li.cartitems'));

To write a jQuery plugin, start by adding a new function property to the jQuery.fn object where the name of the property is the name of your plugin:

jQuery.fn.myPlugin = function() {

// Do your awesome plugin stuff here

};
But wait! Where's my awesome dollar sign that I know and love? It's still there, however to make sure that your plugin doesn't collide with other libraries that might use the dollar sign, it's a best practice to pass jQuery to a self executing function (closure) that maps it to the dollar sign so it can't be overwritten by another library in the scope of its execution.

(function( $ ) {
$.fn.myPlugin = function() {

// Do your awesome plugin stuff here

};
})( jQuery );
Ah, that's better. Now within that closure, we can use the dollar sign in place of jQuery as much as we like.
[http://docs.jquery.com/Plugins/Authoring]

jquery'plugin.MULTISELECT

name::
* McsEngl.jquery'plugin.MULTISELECT@cptIt,
* McsEngl.jquery'multiselect-plugin@cptIt,

_ADDRESS.WPG:
* jQuery.multiselect plugin demo: http://www.std42.ru/jquery-multiselect//

jquery'program

name::
* McsEngl.jquery'program@cptIt,
* McsEngl.jquery'application@cptIt,

_SPECIFIC:
* iPaint: MS Paint like online painting program implemented using HTML5
http://www.jswidget.com/index-ipaint.html,

jquery'EasyComment

_CREATED: {2013-07-20}

name::
* McsEngl.jquery'EasyComment@cptIt,
* McsEngl.EasyComment@cptIt,

EasyComment jQuery Plugin
Allowing visitors to leave comment on your web page can never be easier with the help of EasyComment. EasyComment is a lightweight yet full functional jQuery plugin that can be easily embedded in any web page to allow visitors to leave comments on that page. No database is required. EasyComment also support multi section comments within one page. EasyComment has the following features:
Multiple comments in one page.You can easily add comment to different section within the same page.
Multi-level reply allowed
Comment moderating options:
No moderate: This is the default option
Waiting for approval: Other visitors will not see this comment until it is approved
Trash
Spam: Blacklist visitor's IP address
Approved
Easy use comment dashboard to spam, trash or approve a new comment
Dynamic reply level control: control how deep the reply can go for individual comment.
Support special element:
[link]your-url[/link] for <a></a> element
[img]image-url[/img] for <img></img>
[b]your-text[/b] for <strong></strong>
[u]your-text[/u] for <u></u>
[i]your-text[/i] for <i></i>
[strike]your-text[/strike] for <strike></strike>
[quote]your-text[/quote] for <blockquote></blockquote>
No database support required: Comments are managed using XML file format.
Tested in IE9, Firefox 3.6+, Google Chrome 11, Opera 10+, Safari 5.04 .
[http://www.jswidget.com/lab/easy-comment.html]

jquery'Script

name::
* McsEngl.jquery'Script@cptIt,

_Content_delivery_network:
* <script src="http://code.jquery.com/jquery-latest.js"></script>
* <script src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
* http://code.jquery.com/jquery-1.7.js
* <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
* <script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.3.min.js"></script>

_CODE.JQUERY:
* MORE THAN ONE FILE:
<script src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
<script src="splitter.js"></script>
<link href="splitter.css" rel="stylesheet"/>
<script>
jQuery(function($) {
$('#widget').width(700).height(400).split({orientation:'vertical', limit:50});
});
</script>
===
<script src="http://code.jquery.com/jquery-latest.js"></script>

_CODE.JQUERY:
* ONE FILE:
<script src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
<script>
jQuery(document).ready(function() {

jQuery.fn.split = function() {
...
};

jQuery('#idPanelSplitter').width(800).height(600).split();
});
</script>

jquery'Selector

name::
* McsEngl.jquery'Selector@cptIt,

_ADDRESS.WPG:
* http://www.w3schools.com/jquery/jquery_ref_selectors.asp,

$(document).ready(function() {
$("a").click(function() {
alert("Hello world!");
});
});
Let's have a look at what we are doing: $("a") is a jQuery selector, in this case, it selects all a elements. $ itself is an alias for the jQuery "class", therefore $() constructs a new jQuery object. The click() function we call next is a method of the jQuery object. It binds a click event to all selected elements (in this case, a single anchor element) and executes the provided function when the event occurs.

This is similar to the following code:
<a href="" onclick="alert('Hello world')">Link</a>

The difference is quite obvious: We don't need to write an onclick for every single element. We have a clean separation of structure (HTML) and behavior (JS), just as we separate structure and presentation by using CSS.
[http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery]

jQuery provides two approaches to select elements.
- The first uses a combination of CSS and XPath selectors passed as a string to the jQuery constructor (eg. $("div > ul a")).
- The second uses several methods of the jQuery object. Both approaches can be combined.
[http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery]

_SPECIFIC:
Selectors


Borrowing from CSS 1–3, and then adding its own, jQuery offers a powerful set of tools for matching a set of elements in a document.

If you wish to use any of the meta-characters (#;&,.+*~':"!^$[]()=>|/@ ) as a literal part of a name, you must escape the character with two backslashes: \\. For example, if you have an an input with name="names[]", you can use the selector $("input[name=names\\[\\]]").
===

* All_Selector (“*”)
Basic
Selects all elements.
===

* :animated_Selector
Basic Filter
Select all elements that are in the progress of an animation at the time the selector is run.
===

* Attribute Contains Prefix Selector [name|=value]
Attribute
Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-).
===

* Attribute Contains Selector [name*=value]
Attribute
Selects elements that have the specified attribute with a value containing the a given substring.
===

* Attribute Contains Word Selector [name~=value]
Attribute
Selects elements that have the specified attribute with a value containing a given word, delimited by spaces.
===

* Attribute Ends With Selector [name$=value]
Attribute
Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive.
===

* Attribute Equals_Selector [name=value]
Attribute
Selects elements that have the specified attribute with a value exactly equal to a certain value.
===

* Attribute Not Equal_Selector [name!=value]
Attribute
Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value.
===

* Attribute Starts With_Selector [name^=value]
Attribute
Selects elements that have the specified attribute with a value beginning exactly with a given string.
===

* :button_Selector
Form
Selects all button elements and elements of type button.
===

* :checkbox_Selector
Form
Selects all elements of type checkbox.
===

* :checked_Selector
Form
Matches all elements that are checked.
===

* Child_Selector (“parent > child”)
Hierarchy
Selects all direct child elements specified by "child" of elements specified by "parent".
===

* Class_Selector (“.class”)
Basic
Selects all elements with the given class.
===

* :contains()_Selector
Content Filter
Select all elements that contain the specified text.
===

* Descendant_Selector (“ancestor descendant”)
Hierarchy
Selects all elements that are descendants of a given ancestor.
===

* :disabled_Selector
Form
Selects all elements that are disabled.
===

* Element_Selector (“element”)
Basic
Selects all elements with the given tag name.
===

* :empty_Selector
Content Filter
Select all elements that have no children (including text nodes).
===

* :enabled_Selector
Form
Selects all elements that are enabled.
===

* :eq()_Selector
Basic Filter
Select the element at index n within the matched set.
===

* :even_Selector
Basic Filter
Selects even elements, zero-indexed. See also odd.
===

* :file_Selector
Form
Selects all elements of type file.
===

* :first-child_Selector
Child Filter
Selects all elements that are the first child of their parent.
===

* :first_Selector
Basic Filter
Selects the first matched element.
===

* :gt()_Selector
Basic Filter
Select all elements at an index greater than index within the matched set.

===

* Has Attribute_Selector [name]
Attribute
Selects elements that have the specified attribute, with any value.
===

* :has()_Selector
Content Filter
Selects elements which contain at least one element that matches the specified selector.
===

* :header_Selector
Basic Filter
Selects all elements that are headers, like h1, h2, h3 and so on.
===

* :hidden_Selector
Visibility Filter
Selects all elements that are hidden.
===

* ID_Selector (“#id”)
Basic
Selects a single element with the given id attribute.
===

* :image_Selector
Form
Selects all elements of type image.
===

* :input_Selector
Form
Selects all input, textarea, select and button elements.
===

* :last-child_Selector
Child Filter
Selects all elements that are the last child of their parent.
===

* :last_Selector
Basic Filter
Selects the last matched element.
===

* :lt()_Selector
Basic Filter
Select all elements at an index less than index within the matched set.
===

* Multiple Attribute_Selector [name=value][name2=value2]
Attribute
Matches elements that match all of the specified attribute filters.
===

* Multiple_Selector (“selector1, selector2, selectorN”)
Basic
Selects the combined results of all the specified selectors.
===

* Next_Adjacent_Selector (“prev + next”)
Hierarchy
Selects all next elements matching "next" that are immediately preceded by a sibling "prev".
===

* Next Siblings_Selector (“prev ~ siblings”)
Hierarchy
Selects all sibling elements that follow after the "prev" element, have the same parent, and match the filtering "siblings" selector.
===

* :not()_Selector
Basic Filter
Selects all elements that do not match the given selector.
===

* :nth-child()_Selector
Child Filter
Selects all elements that are the nth-child of their parent.
===

* :odd_Selector
Basic Filter
Selects odd elements, zero-indexed. See also even.
===

* :only-child_Selector
Child Filter
Selects all elements that are the only child of their parent.
===

* :parent_Selector
Content Filter
Select all elements that are the parent of another element, including text nodes.
===

* :password_Selector
Form
Selects all elements of type password.
===

* :radio_Selector
Form
Selects all elements of type radio.
===

* :reset_Selector
Form
Selects all elements of type reset.
===

* :selected_Selector
Form
Selects all elements that are selected.
===

* :submit_Selector
Form
Selects all elements of type submit.
===

* :text_Selector
Form
Selects all elements of type text.
===

* :visible_Selector
Visibility Filter
Selects all elements that are visible.
[http://api.jquery.com/category/selectors/]

$("#orderedlist > li").addClass("blue");

jquery'selector.ATTRIBUTE

name::
* McsEngl.jquery'selector.ATTRIBUTE@cptIt,
* McsEngl.jquery'attribute-selector@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/category/selectors/attribute-selectors//

Note:
In jQuery 1.3 [@attr] style selectors were removed (they were previously deprecated in jQuery 1.2). Simply remove the “@” symbol from your selectors in order to make them work again.

example, $('a[rel=nofollow]'), will select <a href="example.html" rel="nofollow">Some text</a> but not <a href="example.html">Some text</a>.

jquery'selector.Children-element

name::
* McsEngl.jquery'selector.Children-element@cptIt,

Example: Find all p elements that are children of a div element and apply a border to them.
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<p>one</p> <div><p>two</p></div> <p>three</p>
<script>
$("div > p").css("border", "1px solid gray");
</script>

</body>
</html>

_CODE.JQUERY: FIRST-LAST-CHILD:
1. $(‘li:first-child’) – selects all elements matched by <li> that are the first child of their parent.
2. $(tr:first-child’) – selects all elements matched by <tr> that are the first child of their parent.
The :last-child is used to select all elements that are the last child of their parent.
1. $(‘li:last-child’) – selects all elements matched by <li> that are the last child of their parent.

jquery'selector.Class-attribute

name::
* McsEngl.jquery'selector.Class-attribute@cptIt,

_CODE.JQUERY: CLASS-SELECTOR:
<a href="test.php" class="test" id="12" />test</a>
$('.test').click(function(){
===
$(".clsTabContent").hide();

jquery'selector.HEADER

name::
* McsEngl.jquery'selector.HEADER@cptIt,
* McsEngl.jquery'header-selector@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/header-selector//

_CODE.JQUERY:
$(":header").css({ background:'#CCC', color:'blue' });

jquery'selector.ID

name::
* McsEngl.jquery'selector.ID@cptIt,
* McsEngl.jquery'ID-selector@cptIt,

_DESCRIPTION:
For id selectors, jQuery uses the JavaScript function document.getElementById(), which is extremely efficient. When another selector is attached to the id selector, such as h2#pageTitle, jQuery performs an additional check before identifying the element as a match.

Calling jQuery() (or $()) with an id selector as its argument will return a jQuery object containing a collection of either zero or one DOM element.

Each id value must be used only once within a document. If more than one element has been assigned the same ID, queries that use that ID will only select the first matched element in the DOM. This behavior should not be relied on, however; a document with more than one element using the same ID is invalid.

If the id contains characters like periods or colons you have to escape those characters with backslashes.
[http://api.jquery.com/id-selector/]
===
jQuery – Get All Divs Whose ID Starts With
On November 12, 2009, in Web Design, by shereen

<div id="thisismydiv1"></div>
<div id="thisismydiv2"></div>
<div id="thisismydiv3"></div>
<div id="thisismydiv4"></div>

To return an array of all divs that start with ‘thisismydiv’, you would use the following:

var divList = $("div[id^='thisismydiv']");

The above translates to, find me all divs whose id starts with ‘thisismydiv’. You could now do something cool like add a class to all those divs:
$("div[id^='thisismydiv']").addClass('myClass');
[http://blog.qumsieh.ca/2009/11/12/jquery-get-all-divs-whose-id-starts-with/]

_CODE.JQUERY:
$( "#myDiv" ).css( "border", "3px solid red" );
[http://api.jquery.com/id-selector/]

jquery'selector.IMAGE

name::
* McsEngl.jquery'selector.IMAGE@cptIt,

:image Selector
Selects all elements of type image.
===
jQuery(':image')
Description: Selects all elements of type image.
:image is equivalent to [type="image"]
[http://api.jquery.com/image-selector/]

jquery'selector.MULTIPLE

name::
* McsEngl.jquery'selector.MULTIPLE@cptIt,
* McsEngl.jquery'multiple-selector@cptIt,

_CODE.JQUERY:
$("div,span,p.myClass").css("border","3px solid red")

jquery'Syntax

name::
* McsEngl.jquery'Syntax@cptIt,

jQuery Syntax

The jQuery syntax is tailor made for selecting HTML elements and perform some action on the element(s).

Basic syntax is: $(selector).action()

A dollar sign to define jQuery
A (selector) to "query (or find)" HTML elements
A jQuery action() to be performed on the element(s)
Examples:

$(this).hide() - hides current element

$("p").hide() - hides all paragraphs

$("p.test").hide() - hides all paragraphs with class="test"

$("#test").hide() - hides the element with id="test"
[http://www.w3schools.com/jquery/jquery_syntax.asp]

jquery'tab

name::
* McsEngl.jquery'tab@cptIt,
* McsEngl.jquery'ex.tab@cptIt,

_SPECIFIC:
* http://kyleschaeffer.com/web-controls/simple-jquery-tabs-template//

jquery'traversing

name::
* McsEngl.jquery'traversing@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/category/traversing//

_SPECIFIC:
* jquery'add()
Add elements to the set of matched elements.
Also in: Traversing > Miscellaneous Traversing
* jquery'addBack()
Add the previous set of elements on the stack to the current set, optionally filtered by a selector.
Also in: Deprecated > Deprecated 1.8 | Traversing > Miscellaneous Traversing
* jquery'andSelf()
Add the previous set of elements on the stack to the current set.
Also in: Traversing > Tree Traversal
* jquery'children()
Get the children of each element in the set of matched elements, optionally filtered by a selector.
Also in: Traversing > Tree Traversal
* jquery'closest()
For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
Also in: Traversing > Miscellaneous Traversing
* jquery'contents()
Get the children of each element in the set of matched elements, including text and comment nodes.
Also in: Miscellaneous > Collection Manipulation
* jquery'each()
Iterate over a jQuery object, executing a function for each matched element.
Also in: Traversing > Miscellaneous Traversing
* jquery'end()
End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.
Also in: Traversing > Filtering
* jquery'eq()
Reduce the set of matched elements to the one at the specified index.
Also in: Traversing > Filtering
* jquery'filter()
Reduce the set of matched elements to those that match the selector or pass the function’s test.
Also in: Traversing > Tree Traversal
* jquery'find()
Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
Also in: Traversing > Filtering
* jquery'first()
Reduce the set of matched elements to the first in the set.
Also in: Traversing > Filtering
* jquery'has()
Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.
Also in: Traversing > Filtering
* jquery'is()
Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
Also in: Traversing > Filtering

* jquery'last()
Reduce the set of matched elements to the final one in the set.
Also in: Traversing > Filtering
* jquery'map()
Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.
Also in: Traversing > Tree Traversal
* jquery'next()
Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.
Also in: Traversing > Tree Traversal
* jquery'nextAll()
Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.
Also in: Traversing > Tree Traversal
* jquery'nextUntil()
Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
Also in: Traversing > Filtering | Traversing > Miscellaneous Traversing
* jquery'not()
Remove elements from the set of matched elements.
Also in: Offset | Traversing > Tree Traversal
* jquery'offsetParent()
Get the closest ancestor element that is positioned.
Also in: Traversing > Tree Traversal
* jquery'parent()
Get the parent of each element in the current set of matched elements, optionally filtered by a selector.
Also in: Traversing > Tree Traversal

* jquery'parents()
Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.
Also in: Traversing > Tree Traversal
* jquery'parentsUntil()
Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
Also in: Traversing > Tree Traversal
* jquery'prev()
Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.
Also in: Traversing > Tree Traversal
* jquery-prevAll()
Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.
Also in: Traversing > Tree Traversal
* jquery'prevUntil()
Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
Also in: Traversing > Tree Traversal
* jquery'siblings()
Get the siblings of each element in the set of matched elements, optionally filtered by a selector.
Also in: Traversing > Filtering
* jquery'slice()
Reduce the set of matched elements to a subset specified by a range of indices.
[http://api.jquery.com/category/traversing//]

jquery'traversing.LEVEL.PREVIOUS (parent)

name::
* McsEngl.jquery'traversing.LEVEL.PREVIOUS (parent)@cptIt,
* McsEngl.jquery'traversing.ansestor@cptIt,
* McsEngl.jquery'traversing.parent@cptIt,

_SPECIFIC:
* parent,
* parents,

jquery'traversing.LEVEL.NEXT (child)

name::
* McsEngl.jquery'traversing.LEVEL.NEXT (child)@cptIt,
* McsEngl.jquery'traversing.child@cptIt,
* McsEngl.jquery'traversing.descendant@cptIt,

_SPECIFIC:
* find,

jquery'traversing.LEVEL.SAME (sibling)

name::
* McsEngl.jquery'traversing.LEVEL.SAME (sibling)@cptIt,
* McsEngl.jquery'traversing.sibling@cptIt,

_SPECIFIC:
* prevAll#ql:jquery'prevall#

jquery'traversing.FILTERING

name::
* McsEngl.jquery'traversing.FILTERING@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/category/traversing/filtering/

_SPECIFIC:
.eq()
Reduce the set of matched elements to the one at the specified index.
.filter()
Reduce the set of matched elements to those that match the selector or pass the function’s test.
.first()
Reduce the set of matched elements to the first in the set.
.has()
Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.
.is()
Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
.last()
Reduce the set of matched elements to the final one in the set.
.map()
Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.
Also in: Traversing > Miscellaneous Traversing
.not()
Remove elements from the set of matched elements.
.slice()
Reduce the set of matched elements to a subset specified by a range of indices.
[http://api.jquery.com/category/traversing/filtering/]

jquery'traversing.MISC

name::
* McsEngl.jquery'traversing.MISC@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/category/traversing/miscellaneous-traversal/

_SPECIFIC:
.add()
Add elements to the set of matched elements.
.addBack()
Add the previous set of elements on the stack to the current set, optionally filtered by a selector.
Also in: Deprecated > Deprecated 1.8
.andSelf()
Add the previous set of elements on the stack to the current set.
.contents()
Get the children of each element in the set of matched elements, including text and comment nodes.
.end()
End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.
Also in: Traversing > Filtering
.not()
Remove elements from the set of matched elements.
[http://api.jquery.com/category/traversing/miscellaneous-traversal/]

jquery'traversing.TREE

name::
* McsEngl.jquery'traversing.TREE@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/category/traversing/tree-traversal//

_SPECIFIC:
.children()
Get the children of each element in the set of matched elements, optionally filtered by a selector.
.closest()
For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
.find()
Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
.next()
Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.
.nextAll()
Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.
.nextUntil()
Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
Also in: Offset
.offsetParent()
Get the closest ancestor element that is positioned.
.parent()
Get the parent of each element in the current set of matched elements, optionally filtered by a selector.
.parents()
Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.
.parentsUntil()
Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
.prev()
Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.
.prevAll()
Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.
.prevUntil()
Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
.siblings()
Get the siblings of each element in the set of matched elements, optionally filtered by a selector.
[http://api.jquery.com/category/traversing/tree-traversal/]

jquery'eq

name::
* McsEngl.jquery'eq@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/eq//

_DESCRIPTION:
Reduce the set of matched elements to the one at the specified index.
[http://api.jquery.com/eq/]

jquery'find

name::
* McsEngl.jquery'find@cptIt,

_ADDRESS.WPG:
* http://api.jquery.com/find//

_DESCRIPTION:
Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
[http://api.jquery.com/find/]

_CODE.JQUERY:
$("#orderedlist").find("li").each(function(i) {
$(this).append( " BAM! " + i );
});
[http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery]

jquery'parents

name::
* McsEngl.jquery'parents@cptIt,

_DESCRIPTION:
Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.
[http://api.jquery.com/parents/]
===

In addition to siblings, you can also select parent elements (also known as ancestors for those more familiar with XPath). Maybe you want to highlight the paragraph that is the parent of the link the user hovers. Try this:

$(document).ready(function(){
$("a").hover(function(){
$(this).parents("p").addClass("highlight");
},function(){
$(this).parents("p").removeClass("highlight");
});
});

For all hovered anchor elements, the parent paragraph is searched and a class "highlight" added and removed.
[http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery]

jquery'prev()

name::
* McsEngl.jquery'prev()@cptIt,

_GENERIC:
* sibling-traversing#ql:jquery'traversing.sibling#

_DESCRIPTION:
Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.
...
If no previous sibling exists, or if the previous sibling element does not match a supplied selector, an empty jQuery object is returned.
To select all preceding sibling elements, rather than just the preceding adjacent sibling, use the .prevAll() method.
[http://api.jquery.com/prev/]

jquery'prevAll()

name::
* McsEngl.jquery'prevAll()@cptIt,

_GENERIC:
* sibling-traversing#ql:jquery'traversing.sibling#

_DESCRIPTION:
Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.
[http://api.jquery.com/prevall//]

_CODE.JQUERY:
* \PrgmJS\JQuery\API\prevAll.html:
Locate all the divs preceding the last div and give them a class.
<!DOCTYPE html>
<html>
<head>
<style>

div { width:70px; height:70px; background:#abc;
border:2px solid black; margin:10px; float:left; }
div.before { border-color: red; }
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<div></div>
<div></div>
<div></div>
<div></div>
<script>$("div:last").prevAll().addClass("before");</script>

</body>
</html>
[http://api.jquery.com/prevall//]

jquery'Resource

name::
* McsEngl.jquery'Resource@cptIt,

* _WebResource#ql::DEZIGNEPTERO.NFO:http.jquery#

jQuery is a new kind of JavaScript Library.
jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript.
* http://jquery.com/

TUTORIALS:
* http://docs.jquery.com/Tutorials
* http://www.jquery-tutorial.net//

jQuery UI is a widget and interaction library built on top of the jQuery JavaScript Library, that you can use to build highly interactive web applications. This guide is designed to get you up to speed on how jQuery UI works. Follow along below to get started.
* http://jqueryui.com/docs/Getting_Started

Tips, techniques, and tutorials for the jQuery JavaScript library:
* http://www.learningjquery.com/

I urge you to use the Google AJAX Libraries Content Delivery Network to serve jQuery to your users directly from Google’s network of datacenters.
* http://encosia.com/3-reasons-why-you-should-let-google-host-jquery-for-you//

* http://www.learningjquery.com//

ljblbr.MICROLIBRARY

name::
* McsEngl.ljblbr.MICROLIBRARY@cptIt,

_DESCRIPTION:
March 01, 2016
From nczonline.net, with love.

Hi everyone,

I was recently listening to a podcast that described the process of creating a pencil. Did you know that there is basically no way to make a modern pencil by yourself? The pieces come from different countries and only come together to make the actual pencil at the very last stage. If you were dropped in the middle of a forest, away from civilization, you wouldn't be able to get close to creating a pencil. Think about that the next time someone asks you to write something down.

In many ways, the story of the pencil reminds me of what's going on today with JavaScript architecture. The trend has been to move away from "walled garden" frameworks like Ember and Angular in favor of micro-libraries that are added together to create the architecture you need. YUI was the first big walled garden to close up shop, saying that they would rather focus on building great micro-libraries. (That was sad to me, as I spent a lot of time working on and with YUI.) Does that mean walled gardens have no place in today's JavaScript architecture?

With micro-libraries, you do get a lot of control, so you can pick and choose different pieces suited specifically to your needs. That control, however, comes with a cost. First, there's a big upfront cost of evaluating each of the pieces. Then, you need to find or create the "glue" that allows these pieces to work together. And last, you have to train your developers to understand this framework you've cobbled together from a variety of sources. Going forward, you'll need to keep up with upgrades to each and risk that those pieces, or your glue, won't quite work with future changes. In short, you're stopping to create a pencil before writing down your shopping list. There's a big upfront cost before you can get to the job you actually want to do (building a product or writing down your shopping list).

Frameworks like Ember and Angular are great for people who don't have the time or expertise to create their own architecture from micro-libraries. You can get up and running quickly, knowing that all the pieces you're going to use are designed to work together. Instead of creating your own documentation for how to develop, you can refer to the documentation provided by the framework itself. The walled garden framework is the pencil you buy for a few cents so you can start writing immediately. The upfront cost is small, so you can get started faster.

So yes, walled garden frameworks still make a lot of sense for a large number of developers. In fact, I'd recommend that anyone starting a new company should strongly consider using Ember or Angular for their first version. You'll spend a lot more time getting the work done that matters and a lot less time creating a pencil.

Be well.

-N

P.S. Many people said they really liked the recommended book section and were sad to see it go. So, I'm going to rotate between recommended books and reader questions going forward. As always, thanks for the feedback!

ljblbr.Prototype

name::
* McsEngl.ljblbr.Prototype@cptIt,
* McsEngl.conceptIt554.5,
* McsEngl.ljs'Prototype-framework@cptIt,
* McsEngl.ljs'code.api.library.Prototype@cptIt,

_ADDRESS.WPG:
* http://www.prototypejs.org//

_GENERIC:
* js-framework,

_DESCRIPTION:
Prototype is a JavaScript Framework that aims to ease development of dynamic web applications.
Featuring a unique, easy-to-use toolkit for class-driven development and the nicest Ajax library around, Prototype is quickly becoming the codebase of choice for web application developers everywhere.
[http://www.prototypejs.org//]

ljb'prototype'script.aculo.us

name::
* McsEngl.ljb'prototype'script.aculo.us@cptIt,

_DESCRIPTION:
script.aculo.us provides you with easy-to-use, cross-browser user interface JavaScript libraries to make your web sites and web applications fly.
What's inside? animation framework, drag and drop, Ajax controls, DOM utilities, and unit testing.
It's an add-on to the fantastic Prototype framework.
[http://script.aculo.us/]

ljb'prototype'version

name::
* McsEngl.ljb'prototype'version@cptIt,

Download the latest stable version — 1.7 (November 16, 2010)

ljblbr.SECURITY

name::
* McsEngl.ljblbr.SECURITY@cptIt,

_ADDRESS.WPG:
* Stanford Javascript Crypto Library: http://bitwiseshiftleft.github.io/sjcl/

ljblbr.UNDERSCORE

name::
* McsEngl.ljblbr.UNDERSCORE@cptIt,
* McsEngl.ljs'underscore-library@cptIt,
* McsEngl.underscorejs@cptIt,

_DESCRIPTION:
Underscore is a utility-belt library for JavaScript that provides a lot of the functional programming support that you would expect in Prototype.js (or Ruby), but without extending any of the built-in JavaScript objects. It's the tie to go along with jQuery's tux, and Backbone.lcpJs's suspenders.
Underscore provides 80-odd functions that support both the usual functional suspects: map, select, invoke — as well as more specialized helpers: function binding, javascript templating, deep equality testing, and so on. It delegates to built-in functions, if present, so modern browsers will use the native implementations of forEach, map, reduce, filter, every, some and indexOf.
[http://underscorejs.org/]

ljblbr.USER-INTERFACE

name::
* McsEngl.ljblbr.USER-INTERFACE@cptIt,

ljblbr.YUI

name::
* McsEngl.ljblbr.YUI@cptIt,
* McsEngl.ljs'yui@cptIt,
* McsEngl.YUI@cptIt554i,

_ADDRESS.WPG:
* http://yuilibrary.com//

_GENERIC:
* js-framework#ql:js'framework#

_DESCRIPTION:
YUI is a free, open source JavaScript and CSS framework for building richly interactive web applications. YUI is provided under a BSD license and is available on GitHub for forking and contribution.
[http://yuilibrary.com//]

yui'class'

name::
* McsEngl.yui'class'@cptIt,

yui'module

name::
* McsEngl.yui'module@cptIt,

_DESCRIPTION:
YUI provides more than 250 unique modules to use in your applications.
[http://yuilibrary.com/yui/docs/yui/]

yui'module'Defined_in

name::
* McsEngl.yui'module'Defined_in@cptIt,

Defined in: app/js/app-base.js:1054

yui'module'Available_since

name::
* McsEngl.yui'module'Available_since@cptIt,

Available since 3.5.0

ljblbr.WebGL

name::
* McsEngl.ljblbr.WebGL@cptIt,
* McsEngl.WebGL@cptIt,
* McsEngl.Web-Graphics-Library@cptIt,

_ADDRESS.WPG:
* http://www.khronos.org/webgl//
* https://www.khronos.org/registry/webgl/specs/1.0//

_DESCRIPTION:
WebGL (Web Graphics Library) is a JavaScript API for rendering interactive 3D graphics and 2D graphics[2] within any compatible web browser without the use of plug-ins. WebGL is integrated completely into all the web standards of the browser allowing GPU accelerated usage of physics and image processing and effects as part of the web page canvas. WebGL elements can be mixed with other HTML elements and composited with other parts of the page or page background.[3] WebGL programs consist of control code written in JavaScript and shader code that is executed on a computer's Graphics Processing Unit (GPU). WebGL is designed and maintained by the non-profit Khronos Group.[4]
[http://en.wikipedia.org/wiki/WebGL]

ljblbr.WIDGET

name::
* McsEngl.ljblbr.WIDGET@cptIt,
* McsEngl.ljs'widget-library@cptIt,

_DESCRIPTION:
JavaScript widget libraries such as jQuery UI, YUI, Google Closure, and Dojo Dijit include ARIA markup as well.
[https://developer.mozilla.org/en-US/docs/Web/Accessibility/An_overview_of_accessible_web_applications_and_widgets]

ljbalgo'code.PROGRAM

name::
* McsEngl.ljbalgo'code.PROGRAM@cptIt,
* McsEngl.ljspgm@cptIt,
* McsEngl.ljsprogram@cptIt,
* McsEngl.ljs'app@cptIt,
* McsEngl.ljs'code-independent@cptIt,
* McsEngl.ljs'program@cptIt,
* McsEngl.pgmJs@cptIt,
* McsEngl.ljs'pgm@cptIt,

_WHOLE:
* html-page#ql:html'page#

_GENERIC:
* scripting-program#ql:sl'program#,
* program,

_PART:
* documentation,
* code#ql:js'code#,
* sentence#ql:lcpjs'sentence#
* sentence-structure##

pgmJs'delivery

name::
* McsEngl.pgmJs'delivery@cptIt,
* McsEngl.ljs'delivery@cptIt,
* McsEngl.ljs'location-of-script@cptIt,
* McsEngl.ljs'script-location@cptIt,
* McsEngl.ljs'tag@cptIt,
* McsEngl.ljs'where-to-place-javascript@cptIt,

_DESCRIPTION:
There are three general areas that JavaScript can be placed for use in a webpage.
- Inside the head tag
- Within the body tag (like our example in the previous lesson)
- In an external file (we'll talk about this next lesson)
The location choice of head or body is very simple.
If you want to have a script run on some event, such as when a user clicks somewhere, then you will place that script in the head.
If you want the script to run when the page loads, like our "Hello World!" example in the previous lesson, then you will want to place the script within the body tag.
[http://www.tizag.com/javascriptT/javascriptheadnbody.php]

ljb'script-tag

name::
* McsEngl.ljb'script-tag@cptIt,
* McsEngl.html'script-element@cptIt,
* McsEngl.html'script-tag@cptIt,
* McsEngl.html'element.SCRIPT@cptIt,
* McsEngl.ljs'script-tag@cptIt,
* McsEngl.script-html-element@cptIt554i,
* McsEngl.script-tag@cptIt554i,

_CODE.LJS:
<script src="bg.js"></script>
<script>...</script>

_DESCRIPTION:
JavaScript code should not be embedded in HTML files unless the code is specific to a single session. Code in HTML adds significantly to pageweight with no opportunity for mitigation by caching and compression.
<script src=filename.js> tags should be placed as late in the body as possible. This reduces the effects of delays imposed by script loading on other page components. There is no need to use the language or type attributes. It is the server, not the script tag, that determines the MIME type.
[http://javascript.crockford.com/code.html]

_ATTRIBUTE:
* language,
* src,
* type,

_Attribute_src="url"
The src attribute is optional. If it is present, then its value is a url which identifies a .js file. The loading and processing of the page pauses while the browser fetches, compiles, and executes the file. The content between the <script src="url"> and the </script> should be blank.
[http://javascript.crockford.com/script.html]

_Attribute_language="javascript"
This attribute has been deprecated. It was used to select other programming languages and specific versions of JavaScript. You don't need it. Don't use it.
[http://javascript.crockford.com/script.html]

_Attribute_type="text/javascript"
This attribute is optional. Since Netscape 2, the default programming language in all browsers has been JavaScript. In XHTML, this attribute is required and unnecessary. In HTML, it is better to leave it out. The browser knows what to do.
[http://javascript.crockford.com/script.html]

Do not use the <!-- //--> hack with scripts. It was intended to prevent scripts from showing up as text on the first generation browsers Netscape 1 and Mosaic. It has not been necessary for many years. <!-- //--> is supposed to signal an HTML comment. Comments should be ignored, not compiled and executed. Also, HTML comments are not to include --, so a script that decrements has an HTML error.
[http://javascript.crockford.com/script.html]

_Net_Library:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>

Embedded in the page source

_DESCRIPTION:
JavaScript code should not be embedded in HTML files unless the code is specific to a single session. Code in HTML adds significantly to pageweight with no opportunity for mitigation by caching and compression.
[http://javascript.crockford.com/code.html]

We can put our code inside script tags in our HTML markup. The code within these tags are evaluated as they are encountered by the browser when loading the HTML, from top to bottom.
Syntax

<script type="text/javascript">
var MY_VAR = 123;
function doSomething() {
//.. code here
}
</script>
[http://www.learn-javascript-tutorial.com/Production-Grade-JS.cfm]

in HEAD element

_CODE.LJS:
$(document).ready(function() {
$("a").click(function() {
alert("Hello world!");
});
});

in BODY element
Inline in HTML tags

Sometimes we also see some script in attributes of HTML tags. These are usually there to handle some event associated with the tag like a button's click.
Syntax

<input type="button"
value="Validate"
onclick="if(!validInput()) { alert('Please fix input');" />
[http://www.learn-javascript-tutorial.com/Production-Grade-JS.cfm]

In external files

The code can also be placed in separate files that are retrieved and loaded by the browser when a script tag with a src attribute is found.
Syntax
<script type="text/javascript" src="library.js"></script>
[http://www.learn-javascript-tutorial.com/Production-Grade-JS.cfm]

_POSITION:
<script src=filename.js> tags should be placed as late in the body as possible. This reduces the effects of delays imposed by script loading on other page components. There is no need to use the language or type attributes. It is the server, not the script tag, that determines the MIME type.
[http://javascript.crockford.com/code.html]

ljb'UNOBTRUSIVE#ql:lcpjs.unobtrusive#

name::
* McsEngl.ljb'UNOBTRUSIVE@cptIt,

Choosing between these options

Traditionally, the choice of delivery mechanism has always revolved around code reuse and client caching.

If we have scripts that are used in more than one page, then it is appropriate that we put these scripts in external files and add them to each page.

There are two immediate benefits to this beyond the code reuse. First, the code will be maintained in a single place, the .js file. Avoiding code duplication is always a good practice. Second, browsers will cache the individual files, speeding up the page load process in subsequent visits.

Lately, though, there has been a lot of emphasis being placed on what has been called Unobtrusive JavaScript. Read on.
[http://www.learn-javascript-tutorial.com/Production-Grade-JS.cfm]

pgmJs'doc

name::
* McsEngl.pgmJs'doc@cptIt,
* McsEngl.ljs'Documentation-of-program@cptIt,

_WHOLE:
* js-program#ql:js'program#

pgmJs'Human

name::
* McsEngl.pgmJs'Human@cptIt,

pgmJs'Installation

name::
* McsEngl.pgmJs'Installation@cptIt,

pgmJs'License

name::
* McsEngl.pgmJs'License@cptIt,

pgmJs'Resource

name::
* McsEngl.pgmJs'Resource@cptIt,

pgmJs'source-text

name::
* McsEngl.pgmJs'source-text@cptIt,
* McsEngl.source-text.js-pgm@cptIt,

_DESCRIPTION:
The source text of an ECMAScript program is first converted into a sequence of input elements, which are tokens, line terminators, comments, or white space. The source text is scanned from left to right, repeatedly taking the longest possible sequence of characters as the next input element.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7P1]

pgmJs'Version

name::
* McsEngl.pgmJs'Version@cptIt,

SPECIFIC

* lcpJs'pgm.specific,

_SPECIFIC:
* editor,
* parser,

pgmJs.Converter.Number

name::
* McsEngl.pgmJs.Converter.Number@cptIt,

_CODE.LJS:
<html>
<link rel="stylesheet" type="text/css" href="../../css/basicstyle.css" />
<head>
<title>
arbitrary base conversion
</title>
</head>
<script>
// orion elenzil
// 20080905

function getValueOfDigit(digit, alphabet)
{
var pos = alphabet.indexOf(digit);
return pos;
}

function convert(src, srcAlphabet, dstAlphabet)
{
var srcBase = srcAlphabet.length;
var dstBase = dstAlphabet.length;

var wet = src;
var val = 0;
var mlt = 1;

while (wet.length > 0)
{
var digit = wet.charAt(wet.length - 1);
val += mlt * getValueOfDigit(digit, srcAlphabet);
wet = wet.substring(0, wet.length - 1);
mlt *= srcBase;
}

wet = val;
var ret = "";

while (wet >= dstBase)
{
var digitVal = wet % dstBase;
var digit = dstAlphabet.charAt(digitVal);
ret = digit + ret;
wet /= dstBase;
}

var digit = dstAlphabet.charAt(wet);
ret = digit + ret;

return ret;
}
</script>

<body>
<div style="float:right; position:fixed; top:5; right:5;"><a href="esoterica.html">up</a></div>
<center><table><td>
<span style="font-size:200%">
arbitrary base conversion in javascript
</span><br>
<span style="font-size:80%">
<br>
<b>what to do</b>: enter all the 'digits' of the bases you want to convert between in the "base/alphabet" fields,<br>
then enter a value you want to convert in one of the "value" fields,<br>
then click the appropriate "click!" button to convert it to the other base.<br>
<br>
note, this works for arbitrary <i>bases</i>, but the values must be non-negative integers less than 2^31.<br>
</span>
<br>
<form name=f1>
<table cellspacing=0 cellpadding=0>
<tr><td>value</td><td>base / alphabet</td><td><b>click!</b></td></tr>
<tr>
<td><input type=text name="srcVal" value="195948557"></td>
<td></input><input type=text name="srcBet" size=120 value="0123456789"></input></td>
<td><button style="width:100%" onClick="document.f1.dstVal.value=convert(document.f1.srcVal.value, document.f1.srcBet.value, document.f1.dstBet.value); return false;">v</button></td>
</tr>
<tr>
<td><input type=text name="dstVal"></td>
<td></input><input type=text name="dstBet" size=120 value="0123456789ABCDEF"></input></td>
<td><button style="width:100%" onClick="document.f1.srcVal.value=convert(document.f1.dstVal.value, document.f1.dstBet.value, document.f1.srcBet.value); return false;">^</button></td>
</tr>
</table>
<br>
<br>
some base alphabets of interest<br>
<input type=text size=120 value="01" > binary<br>
<input type=text size=120 value="0123"> base 4<br>
<input type=text size=120 value="01234567"> octal<br>
<input type=text size=120 value="0123456789"> decimal<br>
<input type=text size=120 value="0123456789ABCDEF"> hexadecimal<br>
<input type=text size=120 value="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"> base 36 (alphanumeric without case)<br>
<input type=text size=120 value="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"> base 62 (alphanumeric with case)<br>
<input type=text size=120 value="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_.,!=-*(){}[]"> base 75 (url-safe, i think)<br>
</form>
<br>
<span style="font-size:80%">
i was a bit surprised to completely fail in finding an online arbitrary base converter which didn't need a download, so wrote this real quick-like.<br>
note that the stock decimal alphabet is "0123456789", but you could do something crazy like "987654310" if you want.<br>
this would make a handy decoder ring type thing, if only the number values could be arbitrarily large too..
<br>
<br>
thanks to "ben" for pointing out that "#" is not URL-safe.<br>
and to patrick for pointing out that "+" isn't, either.<br>
<br>
</span>
<a href="/contact">
orion elenzil
20080905
</a>
</td></table></center></body></html>
[http://elenzil.com/esoterica/baseConversion.html]

pgmJs.EDITOR

name::
* McsEngl.pgmJs.EDITOR@cptIt,
* McsEngl.ljseditor@cptIt,
* McsEngl.ljs'app.editor@cptIt,
* McsEngl.ljs'Editor-application@cptIt,

_DESCRIPTION:
Editor WRITTEN in js.

_SPECIFIC:
* js-code-editor,
* js-html-editor#ql:html'editor_program#,
===
* CKEditor#cptIt583#
* http://www.wymeditor.org//

pgmJs.editor.CODE

name::
* McsEngl.pgmJs.editor.CODE@cptIt,
* McsEngl.ljspgm.codeeditor@cptIt,
* McsEngl.ljs'code-editor@cptIt,
* McsEngl.pgmJs.editorCode@cptIt,

_ADDRESS.WPG:
* http://en.wikipedia.org/wiki/Comparison_of_JavaScript-based_source_code_editors,
* http://codegeekz.com/javascript-code-editors-and-ide-for-developers//

_SPECIFIC:
* ace##
* CodeMirror##

Ace

name::
* McsEngl.Ace@cptIt,
* McsEngl.Ace-code-editor@cptIt554i,
* McsEngl.pgmAce@cptIt,

_DESCRIPTION:
Ace (from Ajax.org Cloud9 Editor) is a standalone code editor written in JavaScript. The goal is to create a web-based code editor that matches and extends the features, usability and performance of existing native editors such as TextMate, Vim or Eclipse. It can be easily embedded in any web page and JavaScript application. Ace is developed as the primary editor for Cloud9 IDE and the successor of the Mozilla Skywriter project.[2]
[http://en.wikipedia.org/wiki/Ace_(editor)]

_ADDRESS.WPG:
* demo: http://ace.c9.io/build/kitchen-sink.html,
* http://ace.c9.io/#nav=about/
* https://github.com/ajaxorg/ace,

pgmace'shortcut

name::
* McsEngl.pgmace'shortcut@cptIt,

goto:
goto_line        ctrl+L
goto_matching_bracket    ctrl+P

folding:
fold_all        alt+0
Alt-L, Ctrl-F1  Command-Option-L, Command-F1  fold selection
Alt-Shift-L, Ctrl-Shift-F1  Command-Option-Shift-L, Command-Shift-F1  unfold
Alt-Shift-0  Command-Option-Shift-0  unfold all

Default Keyboard Shortcuts
PC (Windows/Linux)  Mac      action
Ctrl-,      Command-,    Show the settings menu
Ctrl-Alt-Up    Ctrl-Option-Up    add multi-cursor above
Ctrl-Alt-Down    Ctrl-Option-Down  add multi-cursor below
Ctrl-Alt-Right    Ctrl-Option-Right  add next occurrence to multi-selection
Ctrl-Alt-Left    Ctrl-Option-Left  add previous occurrence to multi-selection
Ctrl-L  center selection
Ctrl-Shift-U  Ctrl-Shift-U  change to lower case
Ctrl-U  Ctrl-U  change to upper case
Alt-Shift-Down  Command-Option-Down  copy lines down
Alt-Shift-Up  Command-Option-Up  copy lines up
Delete    delete
Ctrl-Shift-D  Command-Shift-D  duplicate selection
Ctrl-F  Command-F  find
Ctrl-K  Command-G  find next
Ctrl-Shift-K  Command-Shift-G  find previous
Alt-0  Command-Option-0  fold all
Alt-L, Ctrl-F1  Command-Option-L, Command-F1  fold selection
Down  Down, Ctrl-N  go line down
Up  Up, Ctrl-P  go line up
Ctrl-End  Command-End, Command-Down  go to end
Left  Left, Ctrl-B  go to left
Ctrl-L  Command-L  go to line
Alt-Right, End  Command-Right, End, Ctrl-E  go to line end
Alt-Left, Home  Command-Left, Home, Ctrl-A  go to line start
Ctrl-P    go to matching bracket
PageDown  Option-PageDown, Ctrl-V  go to page down
PageUp  Option-PageUp  go to page up
Right  Right, Ctrl-F  go to right
Ctrl-Home  Command-Home, Command-Up  go to start
Ctrl-Left  Option-Left  go to word left
Ctrl-Right  Option-Right  go to word right
Tab  Tab  indent
Ctrl-Alt-E    macros recording
Ctrl-Shift-E  Command-Shift-E  macros replay
Alt-Down  Option-Down  move lines down
Alt-Up  Option-Up  move lines up
Ctrl-Alt-Shift-Up  Ctrl-Option-Shift-Up  move multicursor from current line to the line above
Ctrl-Alt-Shift-Down  Ctrl-Option-Shift-Down  move multicursor from current line to the line below
Shift-Tab  Shift-Tab  outdent
Insert  Insert  overwrite
Ctrl-Shift-Z, Ctrl-Y  Command-Shift-Z, Command-Y  redo
Ctrl-Alt-Shift-Right  Ctrl-Option-Shift-Right  remove current occurrence from multi-selection and move to next
Ctrl-Alt-Shift-Left  Ctrl-Option-Shift-Left  remove current occurrence from multi-selection and move to previous
Ctrl-D  Command-D  remove line
Alt-Delete  Ctrl-K  remove to line end
Alt-Backspace  Command-Backspace  remove to linestart
Ctrl-Backspace  Option-Backspace, Ctrl-Option-Backspace  remove word left
Ctrl-Delete  Option-Delete  remove word right
Ctrl-R  Command-Option-F  replace
Ctrl-Shift-R  Command-Shift-Option-F  replace all
Ctrl-Down  Command-Down  scroll line down
Ctrl-Up    scroll line up
Option-PageDown  scroll page down
Option-PageUp  scroll page up
Ctrl-A  Command-A  select all
Ctrl-Shift-L  Ctrl-Shift-L  select all from multi-selection
Shift-Down  Shift-Down  select down
Shift-Left  Shift-Left  select left
Shift-End  Shift-End  select line end
Shift-Home  Shift-Home  select line start
Shift-PageDown  Shift-PageDown  select page down
Shift-PageUp  Shift-PageUp  select page up
Shift-Right  Shift-Right  select right
Ctrl-Shift-End  Command-Shift-Down  select to end
Alt-Shift-Right  Command-Shift-Right  select to line end
Alt-Shift-Left  Command-Shift-Left  select to line start
Ctrl-Shift-P    select to matching bracket
Ctrl-Shift-Home  Command-Shift-Up  select to start
Shift-Up  Shift-Up  select up
Ctrl-Shift-Left  Option-Shift-Left  select word left
Ctrl-Shift-Right  Option-Shift-Right  select word right
Ctrl-O  split line
Ctrl-/  Command-/  toggle comment
Ctrl-T  Ctrl-T  transpose letters
Ctrl-Z  Command-Z  undo
Alt-Shift-L, Ctrl-Shift-F1  Command-Option-Shift-L, Command-Shift-F1  unfold
Alt-Shift-0  Command-Option-Shift-0  unfold all
Ctrl-Enter  Command-Enter  enter full screen

CodeMirror

name::
* McsEngl.CodeMirror@cptIt,
* McsEngl.pgmCodemirror@cptIt,
* McsEngl.pgmCmr@cptIt, {2014-07-28}
* McsEngl.pgmCdr@cptIt, {2014-06-11}

_ADDRESS.WPG:
* http://codemirror.net//
* https://github.com/marijnh/codemirror,
* http://en.wikipedia.org/wiki/Comparison_of_JavaScript-based_source_code_editors#CodeMirror_powered,
* http://jagthedrummer.github.io/codemirror-ui// user-interface,
* https://github.com/xosystem/XOS-IDE-Framework, with php online.

cmrpgm'shortcut

name::
* McsEngl.cmrpgm'shortcut@cptIt,

_ADDRESS.WPG:
* https://github.com/adobe/brackets/wiki/Brackets-Shortcuts,

_DESCRIPTION:
The CodeMirror distributions comes with Emacs, Vim, and Sublime Text-style keymaps.
[http://codemirror.net/doc/manual.html#keymaps]

_Sublime:
var bindings = {
"Alt-Left": "goSubwordLeft",
"Alt-Right": "goSubwordRight",
"Ctrl-Up": "scrollLineUp",
"Ctrl-Down": "scrollLineDown",
"Shift-Ctrl-L": "splitSelectionByLine",
"Shift-Tab": "indentLess",
"Esc": "singleSelectionTop",
"Ctrl-L": "selectLine",
"Shift-Ctrl-K": "deleteLine",
"Ctrl-Enter": "insertLineAfter",
"Shift-Ctrl-Enter": "insertLineBefore",
"Ctrl-D": "selectNextOccurrence",
"Shift-Ctrl-Space": "selectScope",
"Shift-Ctrl-M": "selectBetweenBrackets",
"Ctrl-M": "goToBracket",
"Shift-Ctrl-Up": "swapLineUp",
"Shift-Ctrl-Down": "swapLineDown",
"Ctrl-/": "toggleComment",
"Ctrl-J": "joinLines",
"Shift-Ctrl-D": "duplicateLine",
"Ctrl-T": "transposeChars",
"F9": "sortLines",
"Ctrl-F9": "sortLinesInsensitive",
"F2": "nextBookmark",
"Shift-F2": "prevBookmark",
"Ctrl-F2": "toggleBookmark",
"Shift-Ctrl-F2": "clearBookmarks",
"Alt-F2": "selectBookmarks",
"Alt-Q": "wrapLines",
"Shift-Alt-Up": "selectLinesUpward",
"Shift-Alt-Down": "selectLinesDownward",
"Ctrl-F3": "findUnder",
"Shift-Ctrl-F3": "findUnderPrevious",
"Shift-Ctrl-[": "fold",
"Shift-Ctrl-]": "unfold",
"Ctrl-H": "replace",
"Ctrl-K Ctrl-Backspace": "delLineLeft",
"Ctrl-K Ctrl-K": "delLineRight",
"Ctrl-K Ctrl-U": "upcaseAtCursor",
"Ctrl-K Ctrl-L": "downcaseAtCursor",
"Ctrl-K Ctrl-Space": "setSublimeMark",
"Ctrl-K Ctrl-A": "selectToSublimeMark",
"Ctrl-K Ctrl-W": "deleteToSublimeMark",
"Ctrl-K Ctrl-X": "swapWithSublimeMark",
"Ctrl-K Ctrl-Y": "sublimeYank",
"Ctrl-K Ctrl-G": "clearBookmarks",
"Ctrl-K Ctrl-C": "showInCenter",
"Ctrl-K Ctrl-j": "unfoldAll",
"Ctrl-K Ctrl-0": "unfoldAll",
}

pgmJs.editor.code.Brackets

name::
* McsEngl.pgmJs.editor.code.Brackets@cptIt,
* McsEngl.Brackets@cptIt,
* McsEngl.pgmBks@cptIt,

_DESCRIPTION:
Based on CodeMirror#ql:pgmcodemirror#.
Brackets is built with HTML, CSS and JS, but currently runs as a desktop application in a thin native shell that can access your local files.

_ADDRESS.WPG:
* https://github.com/adobe/brackets,
* https://github.com/adobe/brackets/wiki/How-to-Use-Brackets,
* https://github.com/adobe/brackets/wiki/Brackets-Extensions,

pgmBks'code-convention

name::
* McsEngl.pgmBks'code-convention@cptIt,

_ADDRESS.WPG:
* https://github.com/adobe/brackets/wiki/Brackets-Coding-Conventions,

pgmBks'extention

name::
* McsEngl.pgmBks'extention@cptIt,

_ADDRESS.WPG:
* https://brackets-registry.aboutweb.com//
* https://github.com/adobe/brackets/wiki/Brackets-Extensions,
* https://github.com/adobe/brackets/wiki/Extension-package-format,

pgmBks'shortcut

name::
* McsEngl.pgmBks'shortcut@cptIt,

_DOING:
* match-bracket:  ctrl+shift+, selects inside and then with arrows go start/end.

_KEY:
* ctrl+shift+,  selects parent (then go to bracket)

pgmJs.KEYBOARD.VIRTUAL

name::
* McsEngl.pgmJs.KEYBOARD.VIRTUAL@cptIt,

_ADDRESS.WPG:
* Javascript VirtualKeyboard: http://freecode.com/projects/jsvk,

pgmJs.PARSER

name::
* McsEngl.pgmJs.PARSER@cptIt,
* McsEngl.ljs'parser@cptIt,
* McsEngl.ljs'parser-writen-in-javascript@cptIt,

ljb'parser.HTML

name::
* McsEngl.ljb'parser.HTML@cptIt,

John Resig is a JavaScript Tool Developer for the Mozilla Corporation and the author of the book Pro JavaScript Techniques. He’s also the creator and lead developer of the jQuery JavaScript library.
* http://ejohn.org/blog/pure-javascript-html-parser//
While this library doesn't cover the full gamut of possible weirdness that HTML provides, it does handle a lot of the most obvious stuff. All of the following are accounted for:
Unclosed Tags:
HTMLtoXML("<p><b>Hello") == '<p><b>Hello</b></p>'
Empty Elements:
HTMLtoXML("<img src=test.jpg>") == '<img src="test.jpg"/>'
Block vs. Inline Elements:
HTMLtoXML("<b>Hello <p>John") == '<b>Hello </b><p>John</p>'
Self-closing Elements:
HTMLtoXML("<p>Hello<p>World") == '<p>Hello</p><p>World</p>'
Attributes Without Values:
HTMLtoXML("<input disabled>") == '<input disabled="disabled"/>'
Note: It does not take into account where in the document an element should exist. Right now you can put block elements in a head or th inside a p and it'll happily accept them. It's not entirely clear how the logic should work for those, but it's something that I'm open to exploring.

/*
* HTML Parser By John Resig (ejohn.org)
* Original code by Erik Arvidsson, Mozilla Public License
* http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
*
* // Use like so:
* HTMLParser(htmlString, {
* start: function(tag, attrs, unary) {},
* end: function(tag) {},
* chars: function(text) {},
* comment: function(text) {}
* });
*
* // or to get an XML string:
* HTMLtoXML(htmlString);
*
* // or to get an XML DOM Document
* HTMLtoDOM(htmlString);
*
* // or to inject into an existing document/DOM node
* HTMLtoDOM(htmlString, document);
* HTMLtoDOM(htmlString, document.body);
*
*/

(function(){

 // Regular Expressions for parsing tags and attributes
 var startTag = /^<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,
   endTag = /^<\/(\w+)[^>]*>/,
   attr = /(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
   
 // Empty Elements - HTML 4.01
 var empty = makeMap("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed");

 // Block Elements - HTML 4.01
 var block = makeMap("address,applet,blockquote,button,center,dd,del,dir,div,dl,dt,fieldset,form,frameset,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul");

 // Inline Elements - HTML 4.01
 var inline = makeMap("a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var");

 // Elements that you can, intentionally, leave open
 // (and which close themselves)
 var closeSelf = makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");

 // Attributes that have their values filled in disabled="disabled"
 var fillAttrs = makeMap("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected");

 // Special Elements (can contain anything)
 var special = makeMap("script,style");

 var HTMLParser = this.HTMLParser = function( html, handler ) {
   var index, chars, match, stack = [], last = html;
   stack.last = function(){
     return this[ this.length - 1 ];
   };

   while ( html ) {
     chars = true;

     // Make sure we're not in a script or style element
     if ( !stack.last() || !special[ stack.last() ] ) {

       // Comment
       if ( html.indexOf("<!--") == 0 ) {
         index = html.indexOf("-->");
 
         if ( index >= 0 ) {
           if ( handler.comment )
             handler.comment( html.substring( 4, index ) );
           html = html.substring( index + 3 );
           chars = false;
         }
 
       // end tag
       } else if ( html.indexOf("</") == 0 ) {
         match = html.match( endTag );
 
         if ( match ) {
           html = html.substring( match[0].length );
           match[0].replace( endTag, parseEndTag );
           chars = false;
         }
 
       // start tag
       } else if ( html.indexOf("<") == 0 ) {
         match = html.match( startTag );
 
         if ( match ) {
           html = html.substring( match[0].length );
           match[0].replace( startTag, parseStartTag );
           chars = false;
         }
       }

       if ( chars ) {
         index = html.indexOf("<");
         
         var text = index < 0 ? html : html.substring( 0, index );
         html = index < 0 ? "" : html.substring( index );
         
         if ( handler.chars )
           handler.chars( text );
       }

     } else {
       html = html.replace(new RegExp("(.*)<\/" + stack.last() + "[^>]*>"), function(all, text){
         text = text.replace(/<!--(.*?)-->/g, "$1")
           .replace(/<!\[CDATA\[(.*?)]]>/g, "$1");

         if ( handler.chars )
           handler.chars( text );

         return "";
       });

       parseEndTag( "", stack.last() );
     }

     if ( html == last )
       throw "Parse Error: " + html;
     last = html;
   }
   
   // Clean up any remaining tags
   parseEndTag();

   function parseStartTag( tag, tagName, rest, unary ) {
     if ( block[ tagName ] ) {
       while ( stack.last() && inline[ stack.last() ] ) {
         parseEndTag( "", stack.last() );
       }
     }

     if ( closeSelf[ tagName ] && stack.last() == tagName ) {
       parseEndTag( "", tagName );
     }

     unary = empty[ tagName ] || !!unary;

     if ( !unary )
       stack.push( tagName );
     
     if ( handler.start ) {
       var attrs = [];
 
       rest.replace(attr, function(match, name) {
         var value = arguments[2] ? arguments[2] :
           arguments[3] ? arguments[3] :
           arguments[4] ? arguments[4] :
           fillAttrs[name] ? name : "";
         
         attrs.push({
           name: name,
           value: value,
           escaped: value.replace(/(^|[^\\])"/g, '$1\\\"') //"
         });
       });
 
       if ( handler.start )
         handler.start( tagName, attrs, unary );
     }
   }

   function parseEndTag( tag, tagName ) {
     // If no tag name is provided, clean shop
     if ( !tagName )
       var pos = 0;
       
     // Find the closest opened tag of the same type
     else
       for ( var pos = stack.length - 1; pos >= 0; pos-- )
         if ( stack[ pos ] == tagName )
           break;
     
     if ( pos >= 0 ) {
       // Close all the open elements, up the stack
       for ( var i = stack.length - 1; i >= pos; i-- )
         if ( handler.end )
           handler.end( stack[ i ] );
       
       // Remove the open elements from the stack
       stack.length = pos;
     }
   }
 };
 
 this.HTMLtoXML = function( html ) {
   var results = "";
   
   HTMLParser(html, {
     start: function( tag, attrs, unary ) {
       results += "<" + tag;
   
       for ( var i = 0; i < attrs.length; i++ )
         results += " " + attrs[i].name + '="' + attrs[i].escaped + '"';
   
       results += (unary ? "/" : "") + ">";
     },
     end: function( tag ) {
       results += "</" + tag + ">";
     },
     chars: function( text ) {
       results += text;
     },
     comment: function( text ) {
       results += "<!--" + text + "-->";
     }
   });
   
   return results;
 };
 
 this.HTMLtoDOM = function( html, doc ) {
   // There can be only one of these elements
   var one = makeMap("html,head,body,title");
   
   // Enforce a structure for the document
   var structure = {
     link: "head",
     base: "head"
   };
 
   if ( !doc ) {
     if ( typeof DOMDocument != "undefined" )
       doc = new DOMDocument();
     else if ( typeof document != "undefined" && document.implementation && document.implementation.createDocument )
       doc = document.implementation.createDocument("", "", null);
     else if ( typeof ActiveX != "undefined" )
       doc = new ActiveXObject("Msxml.DOMDocument");
     
   } else
     doc = doc.ownerDocument ||
       doc.getOwnerDocument && doc.getOwnerDocument() ||
       doc;
   
   var elems = [],
     documentElement = doc.documentElement ||
       doc.getDocumentElement && doc.getDocumentElement();
       
   // If we're dealing with an empty document then we
   // need to pre-populate it with the HTML document structure
   if ( !documentElement && doc.createElement ) (function(){
     var html = doc.createElement("html");
     var head = doc.createElement("head");
     head.appendChild( doc.createElement("title") );
     html.appendChild( head );
     html.appendChild( doc.createElement("body") );
     doc.appendChild( html );
   })();
   
   // Find all the unique elements
   if ( doc.getElementsByTagName )
     for ( var i in one )
       one[ i ] = doc.getElementsByTagName( i )[0];
   
   // If we're working with a document, inject contents into
   // the body element
   var curParentNode = one.body;
   
   HTMLParser( html, {
     start: function( tagName, attrs, unary ) {
       // If it's a pre-built element, then we can ignore
       // its construction
       if ( one[ tagName ] ) {
         curParentNode = one[ tagName ];
         return;
       }
     
       var elem = doc.createElement( tagName );
       
       for ( var attr in attrs )
         elem.setAttribute( attrs[ attr ].name, attrs[ attr ].value );
       
       if ( structure[ tagName ] && typeof one[ structure[ tagName ] ] != "boolean" )
         one[ structure[ tagName ] ].appendChild( elem );
       
       else if ( curParentNode && curParentNode.appendChild )
         curParentNode.appendChild( elem );
         
       if ( !unary ) {
         elems.push( elem );
         curParentNode = elem;
       }
     },
     end: function( tag ) {
       elems.length -= 1;
       
       // Init the new parentNode
       curParentNode = elems[ elems.length - 1 ];
     },
     chars: function( text ) {
       curParentNode.appendChild( doc.createTextNode( text ) );
     },
     comment: function( text ) {
       // create comment node
     }
   });
   
   return doc;
 };

 function makeMap(str){
   var obj = {}, items = str.split(",");
   for ( var i = 0; i < items.length; i++ )
     obj[ items[i] ] = true;
   return obj;
 }
})();

ljb'parser.JavaScript#ql:ljstool.parser_cpt#

name::
* McsEngl.ljb'parser.JavaScript@cptIt,

ljbalgo'code.MODULE#ql:ljs'module_cpt#

name::
* McsEngl.ljbalgo'code.MODULE@cptIt,

ljbalgo'code'UNITS-STRUCTURE

name::
* McsEngl.ljbalgo'code'UNITS-STRUCTURE@cptIt,
* McsEngl.ljsunit-structure@cptIt,
* McsEngl.ljsunt-structure@cptIt,

_DESCRIPTION:
relation of units.
[hmnSngo.2014-04-12]

_SPECIFIC:
* if-sentence-structure##
* sentence#linkL#

ljb'file-of-code

name::
* McsEngl.ljb'file-of-code@cptIt,

_DESCRIPTION:
JavaScript Files
JavaScript programs should be stored in and delivered as .js files.

JavaScript code should not be embedded in HTML files unless the code is specific to a single session. Code in HTML adds significantly to pageweight with no opportunity for mitigation by caching and compression.

<script src=filename.js> tags should be placed as late in the body as possible. This reduces the effects of delays imposed by script loading on other page components. There is no need to use the language or type attributes. It is the server, not the script tag, that determines the MIME type.
[http://javascript.crockford.com/code.html]

jsclass'relation-to-module

name::
* McsEngl.jsclass'relation-to-module@cptIt,

_DESCRIPTION:
Modules are more like packages (to use the Java term) than classes. You don't instantiate a module; there is only one copy of it. It's a tool for organizing related functionality, but it doesn't typically encapsulate the data of a particular instance of an object.

Probably the closest analogue to a class (setting aside those libraries that actually construct class-based inheritance in JavaScript) is just a constructor function. You can of course put such functions inside a module.

function Car() {
this.colour = 'red';
}
Car.prototype.getColour = function() { return this.colour; };

var myCar = new Car();
myCar.getColour(); // returns 'red'
You use both modules and classes for encapsulation, but the nature of that encapsulation is different.
[http://stackoverflow.com/a/6914765]

ljbalgo'code'unitS.COLLECTION

name::
* McsEngl.ljbalgo'code'unitS.COLLECTION@cptIt,
* McsEngl.ljs'archetype-collection@cptIt,
* McsEngl.ljs'collection-archetype@cptIt,

_SPECIFIC:
* array##
* object##

ljbalgo'code'unitS.COLLECTION.NO

name::
* McsEngl.ljbalgo'code'unitS.COLLECTION.NO@cptIt,
* McsEngl.ljscollectionNo@cptIt,

_SPECIFIC:
* boolean#linkL#
* null#linkL#
* number#linkL#
* regexp#linkL#
* string#linkL#
* undefined#linkL#

ljbalgo'code'unitS.COMMENT

name::
* McsEngl.ljbalgo'code'unitS.COMMENT@cptIt,
* McsEngl.ljscomment@cptIt, {2014-03-17}
* McsEngl.ljs'Comment-of-program@cptIt,
* McsEngl.ljs'comment@cptIt,
* McsEngl.ljs'unit.COMMENT@cptIt,

_GENERIC:
* js-input-element#ql:js'input_element#

_SPECIFIC:
JavaScript has two forms of comments:
* Single-line comments begin with a double slash (//).
* Multi-line comments begin with "/*" and end with "*/".
Syntax
// This is a single-line comment

/*
This is
a multi-line
comment.
*/
[http://www.learn-javascript-tutorial.com/JavaScriptBasics.cfm#HTMLDom]
===
Comments are delimited with /* and */, or you can use // to indicate that any following characters to the end of a line comprise a comment.
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

_Notation:
Use comments judiciously
* Add meaningful comments
* Avoid obvious comments
* Prefer inline comments //
===
Generally use line comments. Save block comments for formal documentation and for commenting out.
[http://javascript.crockford.com/code.html]

jscomment.MULTILINE

name::
* McsEngl.jscomment.MULTILINE@cptIt,

_CODE.LJS:
   /**
    * Open dialog with textarea to edit file
    *
    * @param String id dialog id
    * @param Object file file object
    * @param String content file content
    * @return $.Deferred
    **/
   dialog = function(id, file, content) {

ljbalgo'code'unitS.INFORMATION

_CREATED: {2014-02-14}

name::
* McsEngl.ljbalgo'code'unitS.INFORMATION@cptIt,
* McsEngl.ljs'archetype-information@cptIt,
* McsEngl.ljs'information-archetype@cptIt,

_DESCRIPTION:
Information-archetype is any information (symbols, images, sounds) a computer MANIPULATES (= computates).
[hmnSngo.2014-02-14]

_SPECIFIC:
* boolean##
* null##
* number##
* string##
* time##

ljbalgo'code'unitS.MIXED (x)

_CREATED: {2015-04-28}

name::
* McsEngl.ljbalgo'code'unitS.MIXED (x)@cptIt,
* McsEngl.ljstype.mixed@cptIt,
* McsEngl.ljstype.multiple@cptIt,
* McsEngl.ljsx@cptIt,

ljbalgo'code'unitS.NAMED (variable)

_CREATED: {2014-02-14}

name::
* McsEngl.ljbalgo'code'unitS.NAMED (variable)@cptIt,
* McsEngl.bound-name.archonode@cptIt,
* McsEngl.ljs'archetype-named@cptIt, {2014-02-14}
* McsEngl.ljs'archetype-variable@cptIt, {2014-02-14}
* McsEngl.ljs'named-archetype@cptIt, {2014-02-14}
* McsEngl.ljsarchovariable@cptIt, {2014-06-19}
* McsEngl.ljs'named-meaningunit@cptIt, {2014-11-11}
* McsEngl.ljsvariable@cptIt, {2014-02-21}

_DESCRIPTION:
Named-archetype is a name-archetype-pair. Archetype-construct with a name.
[hmnSngo.2014-02-14]
===
Variables can be thought of as named containers. You can place data into these containers and then refer to the data simply by naming the container.
Before you use a variable in a JavaScript program, you must declare it. Variables are declared with the var keyword
[http://www.tutorialspoint.com/javascript/javascript_variables.htm]

_CODE:
* variable##

jsvariable'code

name::
* McsEngl.jsvariable'code@cptIt,
* McsEngl.ljsvariable@cptIt, {2014-02-21}
* McsEngl.ljs'code.VARIABLE@cptIt,
* McsEngl.ljs'data'type@cptIt554i@deleted, {2014-02-14}
* McsEngl.ljs'name-code-pair@cptIt, {2014-02-14}
* McsEngl.ljs'variable@cptIt,
====== lagoGreek:
* McsElln.τσ'μεταβλητή@cptIt554,

_GENERIC:
* code-container,
* code#ql:js'code#

_DEFINITION:
A variable is an 'object#ql:js'object#' with ONE name-value where the value does not process values as a 'function'.
[hmnSngo.2013-12-23,]
===
Variable is a NAME-VALUE-PAIR in which we can change the value.
[hmnSngo.2013-10-27]
===
* In any language there are two fundamental "parts of speech". In spoken languages these are called nouns and verbs. In many programming languages including JavaScript they are called variables and operators.
[http://javascript.about.com/od/variablesandoperators/a/vop01.htm?once=true&]
===
* Οι μεταβλητές (variables) είναι ΠΟΣΟΤΗΤΕΣ μνήμης στις οποίες έχουμε δώσει ένα όνομα και τις χρησιμοποιούμε για τη φύλαξη τιμών.
[Λιακέας, Η γλώσσα JavaScript. 2002, 43]
===
A variable is indicated by a word name and is case sensitive. Variable names also allow for the use of the underscore character (_), but nothing else other than ASCII alphanumeric characters. Also, variable names can begin only with an alphabetic character, not a number or underscore. The example below shows several variables being assigned values.
myvariable = "A line of text";
count = 0;
Super_Long_VariableNamethatishardtoread = "";
WorldIsRound = true;
The first variable is a string. The second variable stores a numerical value, and the third is another string (currently blank). The last is a boolean value that can be either true or false. With these basic types it is possible to do much of the work. In addition, there are two more advanced data types known as the array and the function pointer.
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

jsvariable'case-sensitivity

name::
* McsEngl.jsvariable'case-sensitivity@cptIt,

_DESCRIPTION:
A variable is indicated by a word name and is case sensitive.
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

jsvariable'casting

name::
* McsEngl.jsvariable'casting@cptIt,
* McsEngl.ljs'casting@cptIt,

_DESCRIPTION:
JavaScript has functions specifically for casting variables to numbers. Both string concatenation and addition is done with "+". If mixing a string and a number with "+", concatenation will take precedence over addition.

var foo = '3.5 kg';
var bar = parseFloat(foo); // 3.5
bar = parseInt(foo); // 3
var baz = '3';

alert(bar + baz); // '33'
alert(bar + parseInt(baz)); // 6
[http://www.lullabot.com/blog/articles/learning-javascript-php-comparison]

jsvariable'doing.ASSIGNING

name::
* McsEngl.jsvariable'doing.ASSIGNING@cptIt,
* McsEngl.ljsvariable'assigning@cptIt,

jsvariable'doing.checking-existance

name::
* McsEngl.jsvariable'doing.checking-existance@cptIt,

_CODE.LJS:
The code at the very top of the next sample demonstrates the different ways in which you can check to see if a variable (object namespace) already exists before defining it. You'll commonly see developers using Option 1, however Options 3 and 5 may be considered more thorough and Option 4 is considered a good best-practice.

// This doesn't check for existence of 'myApplication' in
// the global namespace. Bad practice as you can easily
// clobber an existing variable/namespace with the same name
var myApplication = {};
/*
The following options *do* check for variable/namespace existence.
If already defined, we use that instance, otherwise we assign a new
object literal to myApplication.
Option 1: var myApplication = myApplication || {};
Option 2 if(!MyApplication) MyApplication = {};
Option 3: var myApplication = myApplication = myApplication || {}
Option 4: myApplication || (myApplication = {});
Option 5: var myApplication = myApplication === undefined ? {} : myApplication;
*/
[http://addyosmani.com/blog/essential-js-namespacing/1]

jsvariable'doing.CREATING

name::
* McsEngl.jsvariable'doing.CREATING@cptIt,
* McsEngl.ljs'var-keyword@cptIt,
* McsEngl.ljs'var@cptIt,
* McsEngl.ljs'var-statement@cptIt,
* McsEngl.ljsvar@cptIt,
* McsEngl.ljsvariable'declaration@cptIt,

_DESCRIPTION:
common mistake: a-variable declaration without the-var-keyword, is a-global, posibly unwanted variable.
[hmnSngo.2016-03-28]
===
Variables in JavaScript behave the same as variables in most popular programming languages (C, C++, etc) do, but in JavaScript you don't have to declare variables before you use them.
[http://www.tizag.com/javascriptT/javascriptvariables.php]
===
Variable Declarations
All variables should be declared before used. JavaScript does not require this, but doing so makes the program easier to read and makes it easier to detect undeclared variables that may become implied globals. Implied global variables should never be used.

The var statements should be the first statements in the function body.

It is preferred that each variable be given its own line and comment. They should be listed in alphabetical order.
var currentEntry; // currently selected table entry
var level; // indentation level
var size; // size of table
JavaScript does not have block scope, so defining variables in blocks can confuse programmers who are experienced with other C family languages. Define all variables at the top of the function.

Use of global variables should be minimized. Implied global variables should never be used.
[http://javascript.crockford.com/code.html]

jsvariable'doing.HOISTING

name::
* McsEngl.jsvariable'doing.HOISTING@cptIt,
* McsEngl.ljshoisting@cptIt,

_DESCRIPTION:
// JavaScript "hoists" variables to the top of
// their scope. So the following function:
function printName() {
console.log('Hello, ' + name);
var name = 'Bob';
}

// is equivalent to this function:
function printName() {
var name;
console.log('Hello, ' + name);
name = 'Bob';
}

printName();
// Hello, undefined
[https://www.dartlang.org/docs/synonyms/]

_ADDRESS.WPG:
* https://bitsofco.de/variable-and-function-hoisting-in-es2015//

jsvariable'identifier (NAME)

name::
* McsEngl.jsvariable'identifier (NAME)@cptIt,
* McsEngl.ljs'key@cptIt,
* McsEngl.ljs'name@cptIt,
* McsEngl.ljs'name-of-variable@cptIt,
* McsEngl.ljsvariable'identifier@cptIt,
* McsEngl.ljs'code.IDENTIFIER@cptIt,
* McsEngl.identifier-js@cptIt,
* McsEngl.ljsidentifier@cptIt,
* McsEngl.ljsname@cptIt,
* McsEngl.ljs'identifier@cptIt,
* McsEngl.ljs'name.identifier@cptIt,
* McsEngl.ljs'notation.identifier@cptIt,
* McsEngl.ljs'code.NAME@cptIt,
* McsEngl.ljs'identifier@cptIt,

_WHOLE:
* js-variable#ql:js'variable#

_GENERIC:
An Identifier is an IdentifierName that is not a ReservedWord#ql:lcpjs'reserved_word# (see 7.6.1).
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.6P1]

_DEFINITION:
Identifier ::
IdentifierName but not ReservedWord
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.6.SyntaxDiv1]

_DESCRIPTION:
When naming variables there are some rules that must be obeyed:
Upper case and lower case letters of the alphabet, underscores, and dollar signs can be used
Numbers are allowed after the first character
No other characters are allowed
Variable names are case sensitive: different case implies a different name
A variable may not be a reserved word
[http://en.wikibooks.org/wiki/JavaScript/Variables_and_Types]
===
Names should be formed from
- the 26 upper and lower case letters (A .. Z, a .. z),
- the 10 digits (0 .. 9),
- and _ (underbar). Avoid use of international characters because they may not read well or be understood everywhere. Do not use $ (dollar sign) or \ (backslash) in names.
Do not use _ (underbar) as the first character of a name. It is sometimes used to indicate privacy, but it does not actually provide privacy. If privacy is important, use the forms that provide private members. Avoid conventions that demonstrate a lack of competence.
[http://javascript.crockford.com/code.html]
===
Naming your identifiers:
* Use only A-Za-z0-9_ for identifiers
* Don't start identifiers with _
* Don't use $ or \
* Start constructors with upper case
* Global variables in ALL_CAPS
* Start all other identifiers with lower case
===
Start constructor functions with a capital letter
Since constructor functions need to be called preceded by the new operator, we use its initial upper case character as a reminder that we are dealing with a constructor. This should help us remembering to use the new operator.

jsname'namespace

name::
* McsEngl.jsname'namespace@cptIt,
* McsEngl.ljsnamespace@cptIt,
* McsEngl.ljs'code.NAMESPACE@cptIt,
* McsEngl.ljs'identifier'namespace@cptIt,
* McsEngl.ljs'namespace@cptIt,

_DESCRIPTION:
What's a namespace? I hear you ask. Well, it's kinda hard to explain. Not because they are especially complicated, but because every language does them differently. The concept is pretty straightforward, a namespace is a space or region, within a program, where a name (variable, class etc) is valid. We actually use this idea in everyday life. Suppose you work in a big company and there is a colleague called Joe. In the accounts department there is another guy called Joe who you see occasionally but not often. In that case you refer to your colleague as "Joe" and the other one as "Joe in Accounts". You also have a colleague called Susan and there is another Susan in Engineering with whom you work closely. When referring to them you might say "Our Susan" or "Susan from Engineering". Do you see how you use the department name as a qualifier? That's what namespaces do in a program, they tell both programmers and the translator which of several identical names is being referred to.

They came about because early programming languages (like BASIC) only had Global Variables, that is, ones which could be seen throughout the program - even inside functions. This made maintenance of large programs difficult since it was easy for one bit of a program to modify a variable without other parts of the program realizing it - this was called a side-effect. To get round this, later languages (including modern BASICs) introduced the concept of namespaces. (C++ has taken this to extremes by allowing the programmer to create their own namespaces anywhere within a program. This is useful for library creators who might want to keep their function names unique when mixed with libraries provided by another supplier)

Another term used to describe a namespace is scope. The scope of a name is the extent of a program whereby that name can be unambiguously used, for example inside a function or a module. A name's namespace is exactly the same as it's scope. There are a few very subtle differences between the terms but only a Computer Scientist pedant would argue with you, and for our purposes namespace and scope are identical.
[http://www.alan-g.me.uk/tutor/tutname.htm]
===
Whilst JavaScript doesn't really have built-in support for namespaces like other languages, it does have objects and closures which can be used to achieve a similar effect.
[http://addyosmani.com/blog/essential-js-namespacing/]
===
One of the ways to stop polluting the global environment in Javascript is namespacing - holding all your objects and data in a hierarchy inside of one variable.
[http://hangar.runway7.net/javascript/namespacing]
===
Namespaces (or named scopes) are widely used in many programming languages. Namespaces help to group a set of identifiers into a logical group. An identifier can be a named class, named interface or any other language element that is contained inside the namespace. Since the same identifier can be used in more than one namespace but with a different meaning, using namespaces can help reduce name collisions.
Creating a JavaScript Namespace
JavaScript doesn’t include namespaces. On the other hand, JavaScript includes function scopes which means that every function which is created in the JavaScript global scope holds its own scope. With this information in mind, we can mimic namespace scope by creating a function scope. Doing so will help to reduce the number of objects associated with the global scope and help to avoid collisions between identifiers created for an application when using external libraries for example.
[http://www.codeproject.com/Articles/320764/Quick-Tip-JavaScript-Namespaces]
Creating namespaces in JavaScript
By KEVAN STANNARD | Published: JANUARY 14, 2011
In the past it was very common to see global variables in snippets of JavaScript code across the web, such as:
name = "Spock";
function greeting() {
 return "Hello " + name;
}
A better approach is to place all of your code within a namespace; an object that contains all of your code and helps to prevent name clashes with JavaScript code written by others.

The simplest method of creating a namespace is to use an object literal.
var foo = {};
foo.name = "Spock";
foo.greeting = function() {
 return "Hello " + foo.name;
}
This can also be specified using a different syntax.

var foo = {
 name: "Spock",
 greeting: function() {
   return "Hello " + foo.name;
 }
};
This approach is better that having outright global variables, but it exposes everything within the namespace as global. In other words both foo.name and foo.greeting are available everywhere.

Another problem with this approach is that greeting needs to refer to ‘foo.name’ rather than just ‘name’.
[http://blog.stannard.net.au/2011/01/14/creating-namespaces-in-javascript/]

===
Namespacing with the singleton
In JavaScript, namespacing is done by adding objects as properties of another object, so that it is one or more layers deep. This is useful for organizing code into logical sections. While the YUI JavaScript library does this to a degree that I feel is nearly excessive with numerous levels of namespacing, in general it is considered best practice to limit nesting namespaces to only a few lavels or less. The code below is an example of namespacing.

var Namespace = {
Util: {
util_method1: function() {…},
util_method2: function() {…}
},
Ajax: {
ajax_method: function() {…}
},
some_method: function() {…}
};

// Here's what it looks like when it's used
Namespace.Util.util_method1();
Namespace.Ajax.ajax_method();
Namespace.some_method();
The use of namespacing, as I said earlier, keeps global variables to a minumum. Heck, you can even have entire applications attached to a single object namespace named app if that's your perogative.
[http://www.adobe.com/devnet/html5/articles/javascript-design-patterns-pt1-singleton-composite-facade.html]

jsnamespace'alias

name::
* McsEngl.jsnamespace'alias@cptIt,

A shortcut would be easier. We can achieve this by simply aliasing the namespace in a local variable:
[http://www.kenneth-truyers.net/2013/04/27/javascript-namespaces-and-modules/]

jsnamespace'creating

name::
* McsEngl.jsnamespace'creating@cptIt,

_DESCRIPTION:
Safely creating namespaces

Since we still have one global object, there’s still a possibility that we are overwriting another global object with the same name. Therefore, we need to build in some safety:

// not safe, if there's another object with this name we will overwrite it
var MYAPPLICATION = {};

// We need to do a check before we create the namespace
if (typeof MYAPPLICATION === "undefined") {
var MYAPPLICATION = {};
}

// or a shorter version
var MAYAPPLICATION = MYAPPLICATION || {};
As you can see in this example, if we want to safely create namespaces it can be quite cumbersome and require a bit of boilerplate code. Wouldn’t it be nice if we could avoid all of this?
[http://www.kenneth-truyers.net/2013/04/27/javascript-namespaces-and-modules/]
===

var yourNamespace = {

foo: function() {
},

bar: function() {
}
};

...

yourNamespace.foo();
[http://stackoverflow.com/a/881556]
===
Another way to do it, which I consider it to be a little bit less restrictive than the object literal form, is this:

var ns = new function() {

var internalFunction = function() {

};

this.publicFunction = function() {

};
};
The above is pretty much like the module pattern and whether you like it or not, it allows you to expose all your functions as public, while avoiding the rigid structure of an object literal.
[http://stackoverflow.com/a/881611]

jsnamespace'disadvantage

name::
* McsEngl.jsnamespace'disadvantage@cptIt,

Disadvantages

Although this pattern is easy to use and perfectly valid for many tasks and scenarios there is one big disadvantage:

The one global instance is vulnerable. This means that anyone could access its internals. For example, the product has a property price and a method getPrice(). However, nothing prevents us from directly accessing the price property. We don’t want this, we want to expose only the method so we can control the access to our private variable.
[http://www.kenneth-truyers.net/2013/04/27/javascript-namespaces-and-modules/]

jsnamespace'importance

name::
* McsEngl.jsnamespace'importance@cptIt,

_DESCRIPTION:
Anyone that comes from a C#, Java background knows the importance of namespaces. It's the primary way to keep your code organized. JavaScript doesn't support namespaces, or does it?
[http://www.codeproject.com/Articles/553922/JavaScript-namespacing]
===
One of the ways to stop polluting the global environment in Javascript is namespacing - holding all your objects and data in a hierarchy inside of one variable.
[http://hangar.runway7.net/javascript/namespacing]

jsnamespace'resource

name::
* McsEngl.jsnamespace'resource@cptIt,

_ADDRESS.WPG:
* http://addyosmani.com/blog/essential-js-namespacing//
* http://javascriptweblog.wordpress.com/2010/12/07/namespacing-in-javascript//
* http://michaux.ca/articles/javascript-namespacing,
* http://blog.millermedeiros.com/namespaces-are-old-school//

jsname'resource

name::
* McsEngl.jsname'resource@cptIt,

_ADDRESS.WPG:
* http://addyosmani.com/blog/essential-js-namespacing//
* http://javascriptweblog.wordpress.com/2010/12/07/namespacing-in-javascript//
* http://michaux.ca/articles/javascript-namespacing,
* https://github.com/tekool/objs/wiki,

jsname'scope

name::
* McsEngl.jsname'scope@cptIt,
* McsEngl.ljsscope@cptIt,
* McsEngl.ljs'identifier'scope@cptIt,
* McsEngl.ljs'scope@cptIt,
* McsEngl.ljs'scope-of-variable@cptIt,
* McsEngl.ljsvariable'lifetime@cptIt,

_ADDRESS.WPG:
* http://toddmotto.com/everything-you-wanted-to-know-about-javascript-scope//

_DESCRIPTION:
in JavaScript, the scope of a variable is defined by its location within the source code (it is apparent lexically) and nested functions have access to variables declared in their outer scope.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FClosures]
===
The scope of a variable is the region of your program in which it is defined. JavaScript variable will have only two scopes.

Global Variables: A global variable has global scope which means it is defined everywhere in your JavaScript code.

Local Variables: A local variable will be visible only within a function where it is defined. Function parameters are always local to that function.

Within the body of a function, a local variable takes precedence over a global variable with the same name. If you declare a local variable or function parameter with the same name as a global variable, you effectively hide the global variable. Following example explains it:

<script type="text/javascript">
<!--
var myVar = "global"; // Declare a global variable
function checkscope( ) {
var myVar = "local"; // Declare a local variable
document.write(myVar);
}
//-->
[http://www.tutorialspoint.com/javascript/javascript_variables.htm]
===
Provides scope for variables
Variables are scoped at the function level in javascript. This is different to what you might be used to in a language like C# or Java where the variables are scoped to the block. What this means is if you declare a variable inside a loop or an if statement, it will be available to the entire function.

If you ever find yourself needing to explicitly scope a variable inside a function you can use an anonymous function to do this. You can actually create an anonymous function and then execute it straight away and all the variables inside will be scoped to the anonymous function:

(function() {
var myProperty = "hello world";
alert(myProperty);
})();
alert(typeof(myProperty)); // undefined
[http://helephant.com/2008/08/23/javascript-anonymous-functions//]
===

The Lifetime of JavaScript Variables

If you declare a variable, using "var", within a function, the variable can only be accessed within that function. When you exit the function, the variable is destroyed. These variables are called local variables. You can have local variables with the same name in different functions, because each is recognized only by the function in which it is declared.

If you declare a variable outside a function, all the functions on your page can access it. The lifetime of these variables starts when they are declared, and ends when the page is closed.
[http://www.w3schools.com/js/js_functions.asp]
===
A scope is a region of a program in which a variable is defined and accessible. Scopes can be nested inside of other scopes. Variables defined in a scope are not visible outside of the scope.
[http://javascript.crockford.com/tdop/tdop.html]

jsscope'hoisting

name::
* McsEngl.jsscope'hoisting@cptIt,
* McsEngl.ljshoisting@cptIt,

_DESCRIPTION:
Common Mistake#2: Thinking there is block-level scope

As discussed in our JavaScript Hiring Guide, a common source of confusion among JavaScript developers (and therefore a common source of bugs) is assuming that JavaScript creates a new scope for each code block. Although this is true in many other languages, it is not true in JavaScript. Consider, for example, the following code:

for (var i = 0; i < 10; i++) {
/* ... */
}
console.log(i); // what will this output?
If you guess that the console.log() call would either output undefined or throw an error, you guessed incorrectly. Believe it or not, it will output 10. Why?

In most other languages, the code above would lead to an error because the “life” (i.e., scope) of the variable i would be restricted to the for block. In JavaScript, though, this is not the case and the variable i remains in scope even after the for loop has completed, retaining its last value after exiting the loop. (This behavior is known, incidentally, as variable hoisting).

It is worth noting, though, that support for block-level scopes is making its way into JavaScript through the new let keyword. The let keyword is already available in JavaScript 1.7 and is slated to become an officially supported JavaScript keyword as of ECMAScript 6.
[http://www.toptal.com/javascript/10-most-common-javascript-mistakes]

jsscope'resource

name::
* McsEngl.jsscope'resource@cptIt,

_ADDRESS.WPG:
* http://www.digital-web.com/articles/scope_in_javascript//
* http://toddmotto.com/everything-you-wanted-to-know-about-javascript-scope//
* http://www.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope//

jsscope.BLOCK

name::
* McsEngl.jsscope.BLOCK@cptIt,

_DESCRIPTION:
Current version of ECMAScript does not support block-level scope:

var x = 10;
if (true) {
var x = 20;
console.log(x); // 20
}
console.log(x); // 20

However, some implementations (e.g. SpiderMonkey since 1.7 version) support alternative let instruction which allows the block-level scope. This instruction will be standardize in the future ES6 (aka Harmony) version:

let x = 10;

if (true) {
let x = 20;
console.log(x); // 20
}

console.log(x); // 10
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-3-1-lexical-environments-common-theory/#scope]
===
An important difference from other languages like Java is that in JavaScript, blocks do not have scope; only functions have scope. So if a variable is defined using var in a compound statement (for example inside an if control structure), it will be visible to the entire function.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Variables]

jsscope.FUNCTION#ql:jsfcn'scope#

name::
* McsEngl.jsscope.FUNCTION@cptIt,

jsscope.OBJECT

name::
* McsEngl.jsscope.OBJECT@cptIt,

_DESCRIPTION:
IF js does not understands the-members of an-object, WRAP it in a-self-executing-function and it works.
[hmnSngo.2015-11-26]

jsname'start-character

name::
* McsEngl.jsname'start-character@cptIt,
* McsEngl.ljsidentifier'first-character@cptIt,

_SPECIFIC:
* The first character cannot be a number.
* unicode-letter
* _
* $

_CODE.LJS:
> var n = 2
undefined
> var _n = 2
undefined
> var $n = 3
undefined
$n
> var ξυνό = 2
undefined
ξυνό
2
===
> var &n = 2
SyntaxError: Unexpected token &
> var 23 = 2
SyntaxError: Unexpected number
> function &text(){}
SyntaxError: Unexpected token &

_DESCRIPTION:
- A JavaScript identifier must start with a letter, underscore (_), or dollar sign ($); subsequent characters can also be digits (0-9). Because JavaScript is case sensitive, letters include the characters "A" through "Z" (uppercase) and the characters "a" through "z" (lowercase).
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals]
===

jsname'startNo-character

name::
* McsEngl.jsname'startNo-character@cptIt,

_SPECIFIC:
* unicode-letter
* number
* _
* $
* unicode-escape-sequence (\uXXXX)

_CODE.LJS:
> var n_test
undefined
> var vΣtest
undefined
===
> var n-test
SyntaxError: Unexpected token -
> var n.test
SyntaxError: Unexpected token .
> var v'test
SyntaxError: Unexpected token ILLEGAL
> var 2test
SyntaxError: Unexpected token ILLEGAL
===
> var v\u0103test = 5
5
> v\u0103test
5

===
> var o = {"p1/a":1, "p1/b":2}
undefined
> o["p1/a"]
1
> o[p1/a]
ReferenceError: p1 is not defined
> var o = {p1/a:1, p1/b:2}
SyntaxError: Unexpected token /
> o."p1/a"
SyntaxError: Unexpected string
> o.p1/a
SyntaxError: Unexpected token ILLEGAL

_DESCRIPTION:
You use variables as symbolic names for values in your application. The names of variables, called identifiers, conform to certain rules.
- A JavaScript identifier must start with a letter, underscore (_), or dollar sign ($); subsequent characters can also be digits (0-9). Because JavaScript is case sensitive, letters include the characters "A" through "Z" (uppercase) and the characters "a" through "z" (lowercase).
- Starting with JavaScript 1.5, you can use ISO 8859-1 or Unicode letters such as ε and ό in identifiers. You can also use the \uXXXX Unicode escape sequences as characters in identifiers.
- Some examples of legal names are Number_hits, temp99, and _name.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals]
===
While naming your variables in JavaScript keep following rules in mind.
1. You should not use any of the JavaScript reserved-keyword#ql:js'keyword# as variable name. These keywords are mentioned in the next section. For example, break or boolean variable names are not valid.
2. JavaScript variable names should not start with a numeral (0-9). They must begin with a letter or the underscore character. For example, 123test is an invalid variable name but _123test is a valid one.
3. JavaScript variable names are case sensitive. For example, Name and name are two different variables.
[http://www.tutorialspoint.com/javascript/javascript_variables.htm]
===
JavaScript is case sensitive. It is common to start the name of a constructor with a capitalised letter, and the name of a function or variable with a lower-case letter.
[http://en.wikipedia.org/wiki/JavaScript_syntax]
===
A good rule of thumb is to have your variable names start with a lowercase letter (a-z) and use underscores to separate a name with multiple words (i.e. my_var, strong_man, happy_coder, etc).
[http://www.tizag.com/javascriptT/javascriptvariables.php]
===
The instructions that we give in JavaScript will contain actions to be performed as well as variables. In order for JavaScript to be understand which parts of you code are variables, the names you use for variables must obey the following rules
* JavaScript variable names start with a letter, $, or underscore.
* Names can only contain contains letters, numbers, $ and underscores so no spaces or other special characters.
* You can't use a specific set of words called reserved words (which have special meanings) as variable names.
* JScript (Internet Explorer's equivalent to JavaScript) automatically maps HTML fields with names and ids to the equivalent variable in JScript so you need to avoid using the same name in both places. This is one of the most common reasons for scripts, that run quite nicely in most web browsers, to malfunction when you test them in Internet Explorer.

Variable names in JavaScript are case sensitive which means that variables that are the same except for some letters being capitalized in one and not the other are considered to be different variable names. Here are some examples of valid variable names.

1 i
2 an_apple
3 numberOfMonkeysThatFitInABarrel
4 $floater
5 harry03

[http://javascript.about.com/od/variablesandoperators/a/vop04.htm]
===

The $ in the variable name is only part of the name, but the convention is to use it to start variable names when the variable represents a jQuery object.

var $myHeaderDiv = $('#header');
var myHeaderDiv = document.getElementById('header');
Now later in your code, you know the $myHeaderDiv is already a jQuery object, so you can call jQuery functions:

$myHeaderDiv.fade();
To get from the DOM-variable to the jQuery variable:

var $myHeaderDiv = jQuery(myHeaderDiv); //assign to another variable
jQuery(myHeaderDiv).fade(); //use directly

//or, as the $ is aliased to the jQuery object if you don't specify otherwise:
var $myHeaderDiv = jQuery(myHeaderDiv); //assign
$(myHeaderDiv).fade(); //use
To get from the jQuery variable to the DOM-variable.

var myHeaderDiv = $myHeaderDiv.get(0);
[http://stackoverflow.com/a/3360883]

jsname.INDIVIDUAL

name::
* McsEngl.jsname.INDIVIDUAL@cptIt,
* McsEngl.ljs'identifer-name@cptIt,

_GENERIC:
* js-token#ql:lcpjs'token@cptIt#

_DEFINITION:
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

lcpJs'IdentifierStart ::
UnicodeLetter
$
_
\ UnicodeEscapeSequence

lcpJs'IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
<ZWNJ>
<ZWJ>

lcpJs'UnicodeLetter ::
any character in the Unicode categories “Uppercase letter (Lu)”, “Lowercase letter (Ll)”, “Titlecase letter (Lt)”, “Modifier letter (Lm)”, “Other letter (Lo)”, or “Letter number (Nl)”.

lcpJs'UnicodeCombiningMark ::
any character in the Unicode categories “Non-spacing mark (Mn)” or “Combining spacing mark (Mc)”

lcpJs'UnicodeDigit ::
any character in the Unicode category “Decimal number (Nd)”

lcpJs'UnicodeConnectorPunctuation ::
any character in the Unicode category “Connector punctuation (Pc)”
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec7.6.SyntaxDiv2]

jsname.NESTED

name::
* McsEngl.jsname.NESTED@cptIt,
* McsEngl.nested-namespace.js@cptIt,

_CODE.LJS:
> var o={p1:{p3:3,p4:4}, p5:5}
undefined
> o.p1.p4
4
> var o2=o.p1
undefined
> o2.p4
4
===
> var o={s:"string",n:1,oF:{s1:o.s},oS:{s2:o.oF.s1}}
undefined
> o
Object {s: "string", n: 1, oF: Object, oS: Object}
> o.oS.s2
"string"
===
As you're probably aware, a nested namespace provides an organized hierarchy of structures in an application and an example of such a namespace could be the following: application.utilities.drawing.canvas.2d. In JavaScript the equivalent of this definition using the object literal pattern would be:
var application = {
utilities:{
drawing:{
canvas:{
2d:{
/*...*/
}
}
}
}
};
[http://addyosmani.com/blog/essential-js-namespacing/]

drawback

_DESCRIPTION:
The only real caveat however is that it requires your browser's JavaScript engine first locating the myApp object and then digging down until it gets to the function you actually wish to use.
This can mean an increased amount of work to perform lookups, however developers such as Juriy Zaytsev have previously tested and found the performance differences between single object namespacing vs the 'nested' approach to be quite negligible.
[http://addyosmani.com/blog/essential-js-namespacing/]

jsname.TYPENAME

name::
* McsEngl.jsname.TYPENAME@cptIt,
* McsEngl.ljs'typename@cptIt,
* McsEngl.ljsvaluename@cptIt,
* McsEngl.ljstypename@cptIt,
* McsEngl.typename@cptIt,
* McsEngl.valuename@cptIt,

_DESCRIPTION:
Typename is name|identifier that denotes the TYPE of its value (array, function, number, ...)
[hmnSngo.2014-11-11]
===
* http://synagonism.net/hitp/index.html#idEvolPara10d, 2014-08-05.

_JS-NAME:
aName denotes Array.
bName denotes Boolean.
fName denotes Function.
nName denotes Number.
oName denotes Object.
rName denotes Regular-expression.
sName denotes String.
xName denotes miXed-values.

jsvariable'scope#ql:js'scope#

name::
* McsEngl.jsvariable'scope@cptIt,

jsvariable'type

name::
* McsEngl.jsvariable'type@cptIt,
* McsEngl.ljs'type-of-variable@cptIt,

_DESCRIPTION:
type-of-variable is the type-of-its-value#ql:js'value'type#.
[hmnSngo.2013-10-31]
===
If you declare a variable without assigning any value to it, its type is undefined.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Variables]
===
We can store many different types of value in JavaScript variables, just as there are different types of coat that can be left in the restaurant cloakroom. JavaScript, unlike a number of other programming languages, even allows us to change the type of the information that is stored in a particular variable when we change its value. Some examples of different types of information that can be stored in variables include numbers, text strings, Boolean values (true and false), special values - null and undefined - as well as more advanced types such as dates and arrays.
Warning: JavaScript is what is known as a weakly typed language. This means that you can store different types of information in the same variable at different times. While you might be using a particular variable to store a number at one spot in the script, you may be using the same variable to store some text later in the same script. With a strongly typed language this would generate an error condition, which you would resolve by changing one of the variable's names. JavaScript allows us to reuse the same variable for different values and leaves us to keep track of what type of information we have stored in a given variable at a given time. It is not a good idea to reuse variables like this. That JavaScript allows it just means that we have to be more careful to make sure what type of information we are processing. The same calculation may produce completely different results if, for example, a variable contains a text string and we expected it to contain a number.
[http://javascript.about.com/od/variablesandoperators/a/vop03.htm]
===
All values are objects, except "null" and "undefined".
[http://www.youtube.com/watch?v=RO1Wnu-xKoY&feature=bf_next&list=PL7664379246A246CB&lf=plpp_video]

TYPE-DECLARATION:
Programmers in the classic C, Pascal, and even Java worlds are familiar with strong type declarations where you have to specify that a variable is a string, an integer, etc. In JavaScript, similar to how it works in the Perl language, you simply use a variable as necessary and it is up to the programmer to remember not to suddenly change a string into an integer or boolean. This lenient factor is partially due to the fact that the designers do not expect users to write too intensively detailed a program. For run of the mill scripting, it is easier to live without strong type declarations.
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

ljb'loosely-typed-language

name::
* McsEngl.ljb'loosely-typed-language@cptIt,

JavaScript is a loosely-typed language. This means that you do not specify the data type of a variable when declaring it. It also means that a single variable can hold different data types at different times and that JavaScript can change the variable type on the fly. For example, the age variable above is an integer. However, the variable strAge below would be a string (text) because of the quotes.

var strAge = "34";
If you were to try to do a math function on strAge (e.g, multiply it by 4), JavaScript would dynamically change it to an integer. Although this is very convenient, it can also cause unexpected results, so be careful.
[http://www.learn-javascript-tutorial.com/VariablesArraysOperators.cfm]

jsvariable'value#ql:lcpjs'value#

_CREATED: {2014-02-14} {2013-10-27}

name::
* McsEngl.jsvariable'value@cptIt,
* McsEngl.ljsvalue@cptIt,
* McsEngl.ljs'value@cptIt,
* McsEngl.ljs'value-of-variable@cptIt, {2013-10-27}
* McsEngl.ljs'code.VALUE@cptIt,
== wrong ==
* McsEngl.ljs-data-instance@cptIt554i, {2011-09-24}
* McsEngl.ljs-instance-data@cptIt554i, {2011-09-24}
====== lagoGreek:
* McsElln.τιμή-της-ΤζάβαΣκρίπτ@cptIt,

_DESCRIPTION:
Value is CODE binded to a name.
[hmnSngo.2015-06-27]
===
Value is INSTANCES of code.
[hmnSngo.2014-02-14]
===
Value is CODE we put in variables#ql:js'variable#. Operator for example is not a value.
[hmnSngo.2013-10-27]
===
Inside the computer's world, there is only data. That which is not data, does not exist. Although all data is in essence just a sequence of bits1, and is thus fundamentally alike, every piece of data plays its own role. In JavaScript's system, most of this data is neatly separated into things called values. Every value has a type, which determines the kind of role it can play. There are six basic types of values: Numbers, strings, booleans, objects, functions, and undefined values.
[http://eloquentjavascript.net/chapter2.html#pf16a700] 2013-10-29
===
* Value is CODE (data or processing) holded by a variable.
[hmnSngo.2011-10-16]
===
* An INSTANCE of "data" are called value or literal.
[hmnSngo.2011-09-24]
===
* Στη γλώσσα JS, κάθε ΤΜΗΜΑ δεδομένων ονομάζεται "τιμή" (value).
[Λιακέας, Η γλώσσα JavaScript. 2002, 41]

SPECIFIC

name::
* McsEngl.ljs'type@cptIt,
* McsEngl.ljs'value.specific@cptIt,
* McsEngl.ljs'value'type@cptIt,

_DESCRIPTION:
Properties are containers that hold other objects, primitive values, or functions.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2P2]
===
Inside the computer's world, there is only data. That which is not data, does not exist. Although all data is in essence just a sequence of bits1, and is thus fundamentally alike, every piece of data plays its own role. In JavaScript's system, most of this data is neatly separated into things called values. Every value has a type, which determines the kind of role it can play. There are six basic types of values: Numbers, strings, booleans, objects, functions, and undefined values.
[http://eloquentjavascript.net/chapter2.html#pf16a700] 2013-10-29

SPECIFIC:
* array#ql:js'array#
* boolean#ql:js'boolean#
* function#ql:js'function#
* null#ql:js'null#
* number#ql:js'number#
* object#ql:js'object#
* string#ql:js'string#
* undefined#ql:js'undefined#
===
Inside the computer's world, there is only data. That which is not data, does not exist. Although all data is in essence just a sequence of bits1, and is thus fundamentally alike, every piece of data plays its own role. In JavaScript's system, most of this data is neatly separated into things called values. Every value has a type, which determines the kind of role it can play. There are six basic types of values: Numbers, strings, booleans, objects, functions, and undefined values.
[http://eloquentjavascript.net/chapter2.html#pf16a700] 2013-10-29

_CODE:
> Array.isArray([])
true
Array.isArray({})
false
> typeof true
"boolean"
> typeof Object
"function"
> typeof 4
"number"
> typeof null
"object"
typeof []
"object"
typeof {}
"object"
> typeof "string"
"string"
> typeof undefined
"undefined"
typeof true

jsvalue.SPECIFIC-DIVISION.primitivenss

name::
* McsEngl.jsvalue.SPECIFIC-DIVISION.primitivenss@cptIt,

_SPECIFIC:
* primitive-value#linkL#
* primitiveNo-value#linkL#

jsvalue.SPECIFIC-DIVISION.instanceness

name::
* McsEngl.jsvalue.SPECIFIC-DIVISION.instanceness@cptIt,

_SPECIFIC:
* instance-value#ql:js'value.instance#
* instanceNo-value#ql:js'value.instance.no#

jsvalue.INSTANCE

name::
* McsEngl.jsvalue.INSTANCE@cptIt,

_SPECIFIC:
* array-instance
* boolean-instance
* function-instance
* null-instance
* number-instance
* object-instance
* string-instance
* undefined-instance

jsvalue.INSTANCE.NO

name::
* McsEngl.jsvalue.INSTANCE.NO@cptIt,
* McsEngl.ljs'type-of-value@cptIt,
* McsEngl.ljs'value.type@cptIt,

jsvalue.LITERAL

_CREATED: {2013-11-16}

name::
* McsEngl.jsvalue.LITERAL@cptIt,
* McsEngl.ljs'literal-value@cptIt,

_DESCRIPTION:
You use literals to represent values in JavaScript. These are fixed values, not variables, that you literally provide in your script. This section describes the following types of literals:
Array literals
Boolean literals
Floating-point literals
Integers
Object literals
String literals
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals]

_SPECIFIC:
Array literal
Boolean literal
null literal
Number literal
Object literal
RegExp literal
String literal
undefined literal

jsvalue.LITERAL.NO

_CREATED: {2013-11-16}

name::
* McsEngl.jsvalue.LITERAL.NO@cptIt,
* McsEngl.ljs'non-literal-value@cptIt,

_SPECIFIC:
* constructor-object##
* function##

jsvalue.PRIMITIVE

name::
* McsEngl.jsvalue.PRIMITIVE@cptIt,
* McsEngl.ljs'primitive-value@cptIt,

jsvalue.PRIMITIVE.NO

name::
* McsEngl.jsvalue.PRIMITIVE.NO@cptIt,
* McsEngl.ljs'non-primitive-value@cptIt,

_SPECIFIC:
* function (instance or type)
* object (instance or type)

jsvalue.TYPE

_CREATED: {2013-11-01}

name::
* McsEngl.jsvalue.TYPE@cptIt,
* McsEngl.ljs'type-of-value@cptIt,

_SPECIFIC:
===
Coming back to the six types used by ECMAScript programs, first five of them: Undefined, Null, Boolean, String and Number are types of primitive values.
[http://dmitrysoshnikov.com/ecmascript/chapter-7-2-oop-ecmascript-implementation/#primitive-value-types]

SPECIFIC

name::
* McsEngl.ljsvariable.SPECIFIC@cptIt,

_SPECIFIC:
* array-variable##
* collection##
* collectionNo##
* data-variable##
* decleared-variable##
* declearedNo-variable##
* function-variable##
* functionNo-variable##
* global-variable##
* globalNo-variable##
* mixed-variable#linkL#
* object-variable##

jsvariable.ASSIGNED

name::
* McsEngl.jsvariable.ASSIGNED@cptIt,

jsvariable.ASSIGNED.NO

name::
* McsEngl.jsvariable.ASSIGNED.NO@cptIt,

jsvariable.DECLEARED

name::
* McsEngl.jsvariable.DECLEARED@cptIt,

_DESCRIPTION:
Decleared is a-variable with the 'var' keyword.
[hmnSngo.2015-06-27]
===
Decleared is
- a-variable inside a-function with the 'var' keyword, which is local to the-function,
- a-variable outside of a-function assigned a-value, which is global, (inside a-function give an-error)
- a-variable inside an-object, which is local to object.
[hmnSngo.2015-06-26]

jsvariable.DECLEARED.NO

name::
* McsEngl.jsvariable.DECLEARED.NO@cptIt,
* McsEngl.ljsvariable.undecleared@cptIt,

_DESCRIPTION:
Declared and undeclared global variables

The mechanism for storing and accessing them is the same, but JavaScript treats them differently in some cases based on the value of the configurable attribute (described below). In regular usage, they should behave the same.

Both exist in the global object

Below are some comparisons of declared and undeclared global variables.

var declared = 1; // Explicit global variable (new variable)
undeclared = 1; // Implicit global variable (property of default global object)

window.hasOwnProperty('declared') // true
window.hasOwnProperty('undeclared') // true

window.propertyIsEnumerable('declared') // true
window.propertyIsEnumerable('undeclared') // true

window.declared // 1
window.undeclared // 1

window.declared = 2;
window.undeclared = 2;

declared // 2
undeclared // 2

delete declared // false
delete undeclared // true
delete undeclared // true (same result if delete it again)

delete window.declared // false
delete window.undeclared // true (same result if delete it yet again)
delete window.undeclared // true (still true)
Both declared and undeclared global variables are properties of the window object (the default global object). Neither one is inherited from a different object through the prototype chain. They both exist directly in the window object (since window.hasOwnProperty returns true for both).

The configurable attribute

For declared global variables, the configurable attribute is false. For undeclared global variables, it's true. The value of the configurable attribute can be retrieved using the getOwnPropertyDescriptor method, as shown below.

var declared = 1;
undeclared = 1;

(Object.getOwnPropertyDescriptor(window, 'declared')).configurable // false
(Object.getOwnPropertyDescriptor(window, 'undeclared')).configurable // true
If the configurable attribute of a property is true, the attributes of the property can be changed using the defineProperty method, and the property can be deleted using the delete operator. Otherwise, the attributes cannot be changed, and the property cannot be deleted in this manner.

In non-strict mode, the delete operator returns true if the property is configurable, and returns false if it's non-configurable.
Declared global variable
- Is a property of the default global object (window)
- The property attributes cannot be changed.
- Cannot be deleted using the delete operator
Undeclared global variable
- Is a property of the default global object (window)
- The property attributes can be changed.
- Can be deleted using the delete operator
[http://stackoverflow.com/a/16007360]

jsvariable.FREE

name::
* McsEngl.jsvariable.FREE@cptIt,

_DESCRIPTION:
Free variables are simply the variables that are neither locally declared nor passed as parameter.
Source:
In computer programming, the term free variable refers to variables used in a function that are not local variables nor parameters of that function.1 The term non-local variable is often a synonym in this context.
[http://stackoverflow.com/a/12934971]

jsvariable.GLOBAL

name::
* McsEngl.jsvariable.GLOBAL@cptIt,
* McsEngl.ljs'global-variable@cptIt554i,
====== lagoGreek:
* McsElln.τσ'καθολική-μεταβλητή@cptIt554i,

_DESCRIPTION:
GLOBAL is a-variable NOT inside a-function or an-object, AND a-variable decleared INSIDE a-function WITHOUT the-'var' keyword.
With the-var but outside a function IS global:
> n=5
5
> var n=6
undefined
> n
6
[hmnSngo.2015-06-13]
==
Global variables are in fact properties of the global object. In web pages the global object is window, so you can set and access global variables using the window.variable syntax.
Consequently, you can access global variables declared in one window or frame from another window or frame by specifying the window or frame name. For example, if a variable called phoneNumber is declared in a FRAMESET document, you can refer to this variable from a child frame as parent.phoneNumber.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals]
===
JavaScript's biggest problem is its dependence on global variables, particularly implied global variables. If a variable is not explicitly declared (usually with the var statement), then JavaScript assumes that the variable was global. This can mask misspelled names and other problems.
[http://www.jslint.com/lint.html]
===
Μια καθολική μεταβλητή μπορεί να οριστεί με ή χωρίς τη χρήση της λέξης "var".
[Λιακέας, Η γλώσσα JavaScript. 2002, 107]
===
All variables should be declared before used. JavaScript does not require this, but doing so makes the program easier to read and makes it easier to detect undeclared variables that may become implied globals. Implied global variables should never be used.
[http://javascript.crockford.com/code.html]

_NOTATION:
Global variables should be in all caps. (JavaScript does not have macros or constants, so there isn't much point in using all caps to signify features that JavaScript doesn't have.)
[http://javascript.crockford.com/code.html]

_Avoid_globals_at_all_costs

Global variables are the hallmark of badly structured code. They might be acceptable when the use of JavaScript in the page is limited, but as the usage grows, global variables are dangerous and can produce unexpected behavior.

Especially when we have more than one external .js file being used in the page, nothing prevents the code in one file from declaring a global variable or function with the same name as in another file.

To remove this problem from our code we suggest, interestingly enough, that we create global namespacing objects. See the following example.

//in wc_library.js
var COMPANY_NAME = 'Webucator';
function doSomething() {
//...
}

//in amazon.js
var COMPANY_NAME = 'Amazon.com';
function doSomething() {
//...
}
As we can see, if we include both files (wc_library.js and amazon.js) in the same page they will clobber each other and who knows what the consequences will be. See how namespacing objects would avoid that problem.

//in wc_library.js
var WEBUCATOR = {
companyName: 'Webucator'
doSomething: function () {
//...
}
};

//in amazon.js
var AMAZON = {
companyName: 'Amazon.com',
doSomething: function () {
//...
}
};
Now, instead of globals, we have methods and properties, locked inside well-organized objects. They are the only type of global objects we want to encourage.
[http://www.learn-javascript-tutorial.com/Production-Grade-JS.cfm]

SPECIFIC

_SPECIFIC:
* js-property#ql:js'property#
===
globals (e.g jQuery, Underscore)
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript]

ljb'global.IMPLIED

name::
* McsEngl.ljb'global.IMPLIED@cptIt,
* McsEngl.ljs'implied-global@cptIt,

_DESCRIPTION:
Global Import

JavaScript has a feature known as implied globals. Whenever a name is used, the interpreter walks the scope chain backwards looking for a var statement for that name. If none is found, that variable is assumed to be global. If it’s used in an assignment, the global is created if it doesn’t already exist. This means that using or creating global variables in an anonymous closure is easy. Unfortunately, this leads to hard-to-manage code, as it’s not obvious (to humans) which variables are global in a given file.

Luckily, our anonymous function provides an easy alternative. By passing globals as parameters to our anonymous function, we import them into our code, which is both clearer and faster than implied globals. Here’s an example:

(function ($, YAHOO) {
 // now have access to globals jQuery (as $) and YAHOO in this code
}(jQuery, YAHOO));
[http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html]

jsvariable.GLOBAL.NO

name::
* McsEngl.jsvariable.GLOBAL.NO@cptIt,
* McsEngl.ljsvariable.local@cptIt,
* McsEngl.ljs'local-variable@cptIt,
====== lagoGreek:
* McsElln.τσ'τοπική-μεταβλητή-advb@cptIt,

_DESCRIPTION:
Local is a-variable decleared INSIDE a-function with the 'var' keyword.
[hmnSngo.2015-06-13]
===
Η δήλωση της τοπικής μεταβλητής μέσα στη συνάρτηση γίνεται με τη χρήση της λέξης "var". Εάν δε χρησιμοποιηθεί η λέξη "var", τότε η μεταβλητή θεωρείται καθολική.
[Λιακέας, Η γλώσσα JavaScript. 2002, 108]

jsvariable.MIXED

_CREATED: {2015-06-27}

name::
* McsEngl.jsvariable.MIXED@cptIt,
* McsEngl.ljsmixed-variable@cptIt,

jsvariable.MIXED.NO

_CREATED: {2015-06-27}

name::
* McsEngl.jsvariable.MIXED.NO@cptIt,
* McsEngl.ljsmixedNo-variable@cptIt,

jsvariable.NULL

_CREATED: {2014-11-11}

name::
* McsEngl.jsvariable.NULL@cptIt,
* McsEngl.ljsvariable.null@cptIt,

_DESCRIPTION:
* Null-variable is a variable with VALUE null.

jsvariable.OBJECT#ql:jsobt'property#

name::
* McsEngl.jsvariable.OBJECT@cptIt,

jsvariable.PARAMETER

name::
* McsEngl.jsvariable.PARAMETER@cptIt,

jsvariable.PROPERTY#ql:jsproperty@cptIt#

name::
* McsEngl.jsvariable.PROPERTY@cptIt,

jsvariable.value.WITH-VALUE

_CREATED: {2015-06-13}

name::
* McsEngl.jsvariable.value.WITH-VALUE@cptIt,
* McsEngl.ljsvariable.defined@cptIt,
* McsEngl.ljsvariable.with-value@cptIt,

_DESCRIPTION:
A variable with a value.

_CODE.LJS
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
ReferenceError: n is not defined
> var n
undefined
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
FALSE
> n=undefined
undefined
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
FALSE
> n=5
5
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
TRUE
> n=null
null
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
TRUE
> n=NaN
NaN
> if (n !== undefined) {console.log('TRUE')} else {console.log('FALSE')}
TRUE
[hmnSngo.2013-06-13]

jsvariable.value.WITHOUT-VALUE-UNDEFINED

name::
* McsEngl.jsvariable.value.WITHOUT-VALUE-UNDEFINED@cptIt,
* McsEngl.ljs'undefined@cptIt,
* McsEngl.ljs'undefined-instance@cptIt,
* McsEngl.ljs'undefined-value@cptIt,
* McsEngl.ljs'atom.undefined@cptIt,
* McsEngl.ljs'value.undefined@cptIt,
* McsEngl.ljs'undefined@cptIt,
* McsEngl.undefined-js-variable@cptIt,

_GENERIC:
* instance-value#ql:js'value.instance#

_DESCRIPTION:
Undefined is a-decleared-variable with no value or the value 'undefined'.
[hmnSngo.2015-06-26]
===
Undefined is a VARIABLE with NO value assigned to it.
[hmnSngo.2014-11-11]
===
undefined is a VALUE not set, a variable in which its name is set but not its value.
[hmnSngo.2014-08-20]
===
undefined is the return value from methods that do not pass anything to the return statement.
It is also the value returned from a property that has not been set.
[http://www.javascripture.com/undefined]
===
Vars which are not explicitly initialized are given the value undefined.
[http://javascript.crockford.com/survey.html]
===
A property, when it has no definition, is undefined.
[http://saladwithsteve.com/2008/02/javascript-undefined-vs-null.html]
===
A variable declared using the var statement with no initial value specified has the value undefined.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals]
===
Επιστρέφεται όταν στο προγραμμά μας χρησιμοποιούμε μια μεταβλητή που δεν υπάρχει, ή που υπάρχει αλλά δεν της έχουμε δώσει κάποια τιμή.
[Λιακέας, Η γλώσσα JavaScript. 2002, 42]

_Type:
>>> typeof undefined
"undefined"
>>> typeof UNDEFINED
"undefined"

_CODE.LJS:
===
// undecleared
> if (n === undefined) {console.log('TRUE')} else {console.log('FALSE')}
ReferenceError: n is not defined
// decleared
> var n
undefined
> if (n === undefined) {console.log('TRUE')} else {console.log('FALSE')}
TRUE
// value undefined
> n = undefined
undefined
> if (n === undefined) {console.log('TRUE')} else {console.log('FALSE')}
TRUE
//value 5
> n=5
5
> if (n === undefined) {console.log('TRUE')} else {console.log('FALSE')}
FALSE
//value null
> n=null
null
> if (n === undefined) {console.log('TRUE')} else {console.log('FALSE')}
FALSE
//value NaN
> n=NaN
NaN
> if (n === undefined) {console.log('TRUE')} else {console.log('FALSE')}
FALSE
[hmnSngo.2015-06-26]
===
> var o;
undefined
> o === undefined
true
> o === "undefined"
false
===
> var o;
undefined
> if (o === undefined) {console.log('true')} else {console.log('false')}
true
===
function f(value) {
if (typeof(value) === "undefined") {
...
===
function f(state) {
var self = this, undef;
if (state !== undef) {

jsvariable.value.WITHOUT-VALUE-NULL-NaN

name::
* McsEngl.jsvariable.value.WITHOUT-VALUE-NULL-NaN@cptIt,
* McsEngl.ljsvariable.null-or-undefined@cptIt,

_CODE.LJS:
> var x;
> if (!!x === false) {console.log("YES")} else {console.log("NO")}
YES
> var x = null;
> if (!!x === false) {console.log("YES")} else {console.log("NO")}
YES
> var x = NaN;
> if (!!x === false) {console.log("YES")} else {console.log("NO")}
YES
===
if (!!xVariable === false) {...}
> !!undefined
false
> !!null
false
===
> var x = null;
> if (x === false) {console.log("yes")} else {console.log("no")}
no
> if (!!x === false) {console.log("yes")} else {console.log("no")}
yes

ljbalgo'code'unitS.NULL-OR-UNDEFINED

name::
* McsEngl.ljbalgo'code'unitS.NULL-OR-UNDEFINED@cptIt,
* McsEngl.ljsnull-or-undefined@cptIt,
* McsEngl.ljsundefined-or-null@cptIt,

_CODE.LJS:
> if (undefined) {console.log("true")} else {console.log("false")}
false
> if (null) {console.log("true")} else {console.log("false")}
false

ljbalgo'code'unitS.REGULAR-EXPRESSION#ql:jsr@cptIt#

name::
* McsEngl.ljbalgo'code'unitS.REGULAR-EXPRESSION@cptIt,

ljbalgo'code'unitS.TIME

name::
* McsEngl.ljbalgo'code'unitS.TIME@cptIt,
* McsEngl.ljs'archetype-time@cptIt,
* McsEngl.ljs'time-archetype@cptIt,

ljbalgo'code'unitS.TYPE (instanceNo)

_CREATED: {2014-02-14}

name::
* McsEngl.ljbalgo'code'unitS.TYPE (instanceNo)@cptIt,
* McsEngl.ljs-part-of-speech@cptIt,
* McsEngl.ljspos@cptIt, {2014-07-06}
* McsEngl.ljstype@cptIt,
* McsEngl.ljs'archtype@cptIt, {2014-02-14}
* McsEngl.ljs'archtype@cptIt, {2014-02-14}
* McsEngl.ljs'archetype-type@cptIt, {2014-02-14}
* McsEngl.ljs-conceptual-uint@cptIt,

_DESCRIPTION:
The DIFFERENT unit-entities used to process information.
[hmnSngo.2014-07-01]
===
Archtypes are the numbers, strings, variables, objects, ... and
code-units, atoms, sentences, programs, libraries are codetypes.
[hmnSngo.2014-02-14]

_SPECIFIC:
* 1. array-type    a
* 2. boolean-type    b
* 3. function-type    f
* 4. null-type    null
* 5. number-type    n
* 6. object-type    o
* 7. regexp-type    r
* 8. string-type    s
* 9. undefined-type    undefined
* 10. multiple-types    x [2014-07-06]
===
7 main: a, b, f, n, o, r, s.
3 additional: null, undefined, multiple.
- null = no value
- undefined = no name
[hmnSngo.2015-04-23]

_CODE.LJS:
Object.prototype.toString.call(2)
"[object Number]"
Object.prototype.toString.call(Object)
"[object Function]"
Object.prototype.toString.call([])
"[object Array]"
Object.prototype.toString.call(//)
SyntaxError: Unexpected token }
Object.prototype.toString.call("//")
"[object String]"
Object.prototype.toString.call(/re/)
"[object RegExp]"
Object.prototype.toString.call(null)
"[object Null]"
Object.prototype.toString.call(undefined)
"[object Undefined]"
Object.prototype.toString.call(Null)
ReferenceError: Null is not defined
Object.prototype.toString.call(Undefined)
ReferenceError: Undefined is not defined
Object.prototype.toString.call(true)
"[object Boolean]"
===
Object.prototype.toString.call(new Date())
"[object Date]"
Object.prototype.toString.call(document.body)
"[object HTMLBodyElement]"
Object.prototype.toString.call(document)
"[object HTMLDocument]"

ljbalgo'code'unitS.TYPE.NO (instance)

name::
* McsEngl.ljbalgo'code'unitS.TYPE.NO (instance)@cptIt,
* McsEngl.ljsalgo'instance-unit@cptIt,
* McsEngl.ljsliteral@cptIt,
* McsEngl.ljs'literal@cptIt,

_DESCRIPTION:
In computer science, a literal is a notation for representing a fixed value in source code. Almost all programming languages have notations for atomic values such as integers, floating-point numbers, and strings, and usually for booleans and characters; some also have notations for elements of enumerated types and compound values such as arrays, records, and objects.
In contrast to literals, variables or constants are symbols that can take on one of a class of fixed values, the constant being constrained not to change. Literals are often used to initialize variables, for example, in the following, 1 is an integer literal and the three letter string in "cat" is a string literal:
int a = 1;
String s = "cat";
In lexical analysis, literals of a given type are generally a token type, with a grammar rule, like "a string of digits" for an integer literal. Some literals are specific keywords, like true for the boolean literal "true".
In some object-oriented languages (like ECMAScript), objects can also be represented by literals. Methods of this object can be specified in the object literal using function literals. The brace notation below, which is also used for array literals, is typical for object literals:
{"cat","dog"}
{name:"cat",length:57}
[http://en.wikipedia.org/wiki/Literal_(computer_programming)]
===
You use literals to represent values in JavaScript. These are fixed values, not variables, that you literally provide in your script.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals]

ljbalgo'code'unitS.OPERATOR

name::
* McsEngl.ljbalgo'code'unitS.OPERATOR@cptIt,
* McsEngl.ljsoperator@cptIt,
* McsEngl.ljs'operator@cptIt,
* McsEngl.operator.js@cptIt,
* McsEngl.operator-js@cptIt554i,
* McsEngl.ljs'operator@cptIt,
====== lagoGreek:
* McsElln.τσ'τελεστής@cptIt554,

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators,

_DESCRIPTION:
Use the default operator ||
The use of the default operator is very common in high-quality JavaScript libraries and we should get used to employ it in our code as well.

===
Do not use assignments as expressions

Assignments used as expressions can be hard to understand and, worse, be confused with bugs. Do not use them like that. See how the following if statement looks like a bug where the developer forgot to use a == (or a ===).

if (flag = getFlag() ) {
alert(flag);
}

_SPECIFIC:
* infix,
* prefix,
* suffix,
===
ECMAScript also defines a set of built-in operators. ECMAScript operators include various
- unary operations,
- multiplicative operators,
- additive operators,
- bitwise shift operators,
- relational operators,
- equality operators,
- binary bitwise operators,
- binary logical operators,
- assignment operators, and
- the comma operator.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2P4]
[http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf, p3]

jsoperator'operand

name::
* McsEngl.jsoperator'operand@cptIt,

jsoperator'precedence

name::
* McsEngl.jsoperator'precedence@cptIt,

_DESCRIPTION:
Operator Precedence
Operator precedence defines the order in which operators are evaluated.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators]

jsoperator'resource

name::
* McsEngl.jsoperator'resource@cptIt,

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators,

SPECIFIC

name::
* McsEngl.ljsoperator.specific@cptIt,

_SPECIFIC:

jsoperator.ASSIGNMENT

name::
* McsEngl.jsoperator.ASSIGNMENT@cptIt,
* McsEngl.ljs'assignment-operator@cptIt,

_DESCRIPTION:
Assignment Operators
(=, *=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |=)

An assignment operator assigns a value to its left operand based on the value of its right operand.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators]
===
The assignment operator = is used to assign values to JavaScript variables.

jsoperator.ASSIGNMENT.SIMPLE (=)

name::
* McsEngl.jsoperator.ASSIGNMENT.SIMPLE (=)@cptIt,
* McsEngl.ljs'simple-assignment-operator@cptIt,

jsoperator.ASSIGNMENT.COMPOUND (*= /= %= += -= <<= >>= &= ^= |=)

name::
* McsEngl.jsoperator.ASSIGNMENT.COMPOUND (*= /= %= += -= <<= >>= &= ^= |=)@cptIt,
* McsEngl.ljs'compound-assignment-operator@cptIt,

_DESCRIPTION:
compound assignment statements such as += and -=. These extend out to x = x operator y.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Operators]

jsoperator.BINARY-BITWISE (& ^ |)

name::
* McsEngl.jsoperator.BINARY-BITWISE (& ^ |)@cptIt,
* McsEngl.ljs'Binary-Bitwise-Operator@cptIt,

jsoperator.BINARY-LOGICAL (&& ||)

name::
* McsEngl.jsoperator.BINARY-LOGICAL (&& ||)@cptIt,
* McsEngl.ljs'Binary-logical-Operator@cptIt,

jsoperator.BITWISE

name::
* McsEngl.jsoperator.BITWISE@cptIt,

_DESCRIPTION:
Bitwise Operators
(&, |, ^, ~, <<, >>, >>>)

Bitwise operators treat their operands as a set of 32 bits (zeros and ones) and return standard JavaScript numerical values.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators]

jsoperator.COMMA (;)

name::
* McsEngl.jsoperator.COMMA (;)@cptIt,
* McsEngl.ljs'comma-operator@cptIt,

jsoperator.COMPARISON

name::
* McsEngl.jsoperator.COMPARISON@cptIt,

_DESCRIPTION:
Comparison Operators
(==, !=, ===, !==, >, >=, <, <=)

A comparison operator compares its operands and returns a logical value based on whether the comparison is true.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators]
===
Operator  Description  Example
==  is equal to  x==8 is false
===  is exactly equal to (value and type)  x===5 is true
x==="5" is false
!=  is not equal  x!=8 is true
>  is greater than  x>8 is false
<  is less than  x<8 is true
>=  is greater than or equal to  x>=8 is false
<=  is less than or equal to  x<=8 is true
===
For example, because of type coercion., 1 == true is true, but 1 === true is false. The == operator can hide type errors.
Watch out for type coercion when using ==.
[http://javascript.crockford.com/style2.html]

jsoperator.BITWISE-SHIFT (>> << >>>)

name::
* McsEngl.jsoperator.BITWISE-SHIFT (>> << >>>)@cptIt,
* McsEngl.ljs'addition-operator@cptIt,

jsoperator.CONDITIONAL

name::
* McsEngl.jsoperator.CONDITIONAL@cptIt,

_DESCRIPTION:
Use the question mark (?) and the colon (:) to create a conditional statement. After the question mark (?) you have two statements divided up by the colon (:). The first statement (before the colon) will be executed if the condition is true and the second (after the colon) if the condition is false.

For example:
numberOne == 1 ? x = true : x = false;

This illustrates the short-hand way of creating the following "if" statement:
if (numberOne == 1) {
x = true;
} else {
x = false;
}

jsoperator.EQUALITY (== != === !==)

name::
* McsEngl.jsoperator.EQUALITY (== != === !==)@cptIt,
* McsEngl.ljs'equality-operator@cptIt,

_DESCRIPTION:
The result of evaluating an equality operator is always of type Boolean, reflecting whether the relationship named by the operator holds between its two operands.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec11.9.SemanticsP1]

jsoperator.DOES-NOT-EQUALS (!= )

name::
* McsEngl.jsoperator.DOES-NOT-EQUALS (!= )@cptIt,
* McsEngl.ljs'does-not-equals-operator@cptIt,

jsoperator.EQUALS (== )

name::
* McsEngl.jsoperator.EQUALS (== )@cptIt,
* McsEngl.ljs'double-equals@cptIt,
* McsEngl.ljs'equals-operator@cptIt,

_CODE.LJS:
The double-equals operator performs type coercion if you give it different types, with sometimes interesting results:

> "dog" == "dog"
true
> 1 == true
true
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Operators]

jsoperator.STRICT-DOES-NOT-EQUALS (!== )

name::
* McsEngl.jsoperator.STRICT-DOES-NOT-EQUALS (!== )@cptIt,
* McsEngl.ljs'strict-does-not-equals-operator@cptIt,

jsoperator.STRICT-EQUALS (=== )

name::
* McsEngl.jsoperator.STRICT-EQUALS (=== )@cptIt,
* McsEngl.ljs'strict-equals-operator@cptIt,

_CODE.LJS:
To avoid type coercion, use the triple-equals operator:

> 1 === true
false
> true === true
true
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Operators]

jsoperator.SAMENESS (==; ===)

name::
* McsEngl.jsoperator.SAMENESS (==; ===)@cptIt,
* McsEngl.ljsoperator.double-equals@cptIt,
* McsEngl.ljsoperator.identity@cptIt,
* McsEngl.ljsoperator.equality@cptIt,
* McsEngl.ljsoperator.triple-equals@cptIt,

_DESCRIPTION:
Using the == operator (Equality)
true == 1; //true, because 'true' is converted to 1 and then compared
"2" == 2; //true, because 2 is converted to "2" and then compared

Using the === operator (Identity)
true === 1; //false
"2" === 2; //false

This is because the equality operator == does type coercion, meaning that the interpreter implicitly tries to convert the values before comparing.
On the other hand, the identity operator === does not do type coercion, and thus does not convert the values when comparing.
[http://stackoverflow.com/a/359547]

jsoperator.LOGICAL

name::
* McsEngl.jsoperator.LOGICAL@cptIt,
* McsEngl.ljsoperator.boolean@cptIt,

_DESCRIPTION:
(&&, ||, !)

Logical operators are typically used with boolean (logical) values, and when they are, they return a boolean value.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators]

What is the !! (not not) operator in JavaScript?
It's a horribly obscure way to do a type conversion.

! is NOT. So !true is false, and !false is true. !0 is true, and !1 is false.

So you're converting a value to a boolean, then inverting it, then inverting it again.

// Maximum Obscurity:
val.enabled = !!userId;

// Partial Obscurity:
val.enabled = (userId != 0) ? true : false;

// And finally, much easier to understand:
val.enabled = (userId != 0);
[http://stackoverflow.com/a/1406618]
===
One neat thing that I picked up from James Padolsey was the use of the double not-operator (!!) to convert truthy / falsey values into strict Boolean data types.
The not-operator (!) takes true values and makes them false or false values and makes them true. When you apply this operator to a piece of data, Javascript must type-cast that piece of data to a Boolean value before it can "not" it. By using the double not-operator, you allow the first one to make the data-type cast and not-conversion; and then, you use the second not-operator to flip the resultant Boolean back to the appropriate value.
[http://www.bennadel.com/blog/1784-Using-Double-Not-Operator-For-Boolean-Type-Casting.htm]

jsoperator.and (&&)

name::
* McsEngl.jsoperator.and (&&)@cptIt,
* McsEngl.ljsand@cptIt,

_CODE.LJS:
> true && false
false
===
> 1 && 2
2
> "a" && "b"
"b"

jsoperator.or (||)

name::
* McsEngl.jsoperator.or (||)@cptIt,
* McsEngl.ljs'or-operator@cptIt,
* McsEngl.ljsor@cptIt,

_CODE.LJS:
> var s = "sss" || "yyy"
undefined
> s
"sss"
> var s = null || "yyy"
undefined
> s
"yyy"
> var s = undefined || "yyy"
undefined
> s
"yyy"
===
> n = 0 || 0 || 3 || 0 || 4
3

jsoperator.in

name::
* McsEngl.jsoperator.in@cptIt,
* McsEngl.jsin@cptIt,
* McsEngl.ljsin@cptIt,

_DESCRIPTION:
The in operator returns true if the specified property is in the specified object.

Operator
Implemented in:  JavaScript 1.4

Syntax
prop in objectName

Parameters
prop
A string or numeric expression representing a property name or array index.
objectName
Name of an object.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in]

_CODE.LJS:
> "Range" in window
true
> "range" in window
false
> Range in window
false
===
> 1 in [1,2]
true
> 2 in [1,2]
false
> 2 in {2:1, b:3}
true
> 2 in {3:1, b:3}
false
===
> onmousedown in document
false
> "onmousedown" in document
true

jsoperator.instanceof

name::
* McsEngl.jsoperator.instanceof@cptIt,
* McsEngl.jsinstanceo@cptIt,
* McsEngl.ljs'instanceof@cptIt,
* McsEngl.ljsinstanceof@cptIt,

_ADDRESS.WPG:
* http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray//
* synagonism: instanceof => objectof: http://www.codeproject.com/Articles/687093/Understanding-JavaScript-Object-Creation-Patterns?msg=4867657#xx4867657xx,

_DESCRIPTION:
JavaScript functions are "MULTIPLE(2) PERSONALITIES"!!!

They are regular-functions with input and output, which we call like function().

Also they are constructors of JS-objects, when we use the new keyword. >>>BUT<<< the new created objects are NOT INSTANCES of the constructors (like the objects of classes in class-based inheritance). The new objects are instances of the object of the prototype property of the constructor.

Then in WeatherWidget.prototype = you put the object you want to inherit its properties to the objects the constructor will create, which usually is new function() and not a function.

JavaScript created HUGE confusion in the programming community by naming the objects created by constructors, INSTANCES of them with the instanceof keyword.
> function f(){}
undefined
> new f() instanceof f
true
[http://stackoverflow.com/a/25826276]
===
'instancof' is a BAD NAME for javascript which it get from 'class based inheritance' ool (java).
'objectof' is a better name, saying FROM which constructor an object is created.
[hmnSngo.2014-07-23]
===
Syntax
object instanceof constructor
Parameters
object
The object to test.
constructor
Function to test against
Description
The instanceof operator tests presence of constructor.prototype in object prototype chain.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof]
===
The instanceof operator tests whether an object has in its prototype chain the prototype property of a constructor.
Operator
Implemented in:  JavaScript 1.4
ECMAScript Edition:  ECMA-262 ? Edition
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FOperators%2Finstanceof]
===
instanceof operator essentially checks whether anything from left-hand object’s prototype chain is the same object as what’s referenced by prototype property of right-hand object. It sounds somewhat complicated but is easily understood from a simple example:
var arr = [];
arr instanceof Array; // true
This statement returns `true` because Array.prototype (being a prototype property of a right-hand object) references the same object as an internal [[Prototype]] of left-hand object ([[Prototype]] is “visible” via arr.__proto__ in clients that have __proto__ extension).
[http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/]

_CODE.LJS:
wrong: document instanceof HTMLDocument > true
right: HTMLDocument.isPrototypeOf(document) > false
HTMLDocument.prototype.isPrototypeOf(document) > true
===
> HTMLDocument instanceof Document
false
> document instanceof HTMLDocument
true
> document instanceof HTMLDocument.prototype
Error
===
> "str" instanceof String
false
> typeof "str"
"string"
> (new String) instanceof String
true
> typeof new String
"object"
===
> Function instanceof Function
true
> Function instanceof Object
true

> Object instanceof Object
true
>
(function f(){}) instanceof Function
true
===
> var o={}
undefined
> o instanceof Object
true
> {} instanceof Object
SyntaxError: Unexpected token instanceof
> ({}) instanceof Object
true
> [] instanceof Array
true
> /re/ instanceof Object
true
===
> 5 instanceof Object
false
> "str" instanceof Object
false
> true instanceof Object
false
===
> function Person(){}
undefined
> var person1 = new Person()
undefined
> person1 instanceof Person
true
> person1.constructor
function Person(){}
> document instanceof Node
true

===
> var oCar = {}
undefined
> var oCarOperl = {}
undefined
> oCarOperl.__proto__= oCar
Object {}
> oCarOperl instanceof oCar
TypeError: Expecting a function in instanceof check, but got#<Object>
===
> var o={p1:1}
undefined
> o
Object {p1: 1}
> o2=Object.create(o)
Object {p1: 1}
> o2
Object {p1: 1}
> o2 instanceof o
TypeError: Expecting a function in instanceof check, but got#<Object
>

jsinstanceof'relation-to-typeof

name::
* McsEngl.jsinstanceof'relation-to-typeof@cptIt,
* McsEngl.ljsinstanceof'relation-to-typeof@cptIt,
* McsEngl.ljstypeof'relation-to-instanceof@cptIt,

_DESCRIPTION:
Checking types in Javascript is a big mess. Although it's really not that hard to check for any one particular type, it is definitely not consistent across types, and you probably have had to make a lot of choices along the way. So it helps to know about all the different options.
[http://tobyho.com/2011/01/28/checking-types-in-javascript/]

_ADDRESS.WPG:
* http://tobyho.com/2011/01/28/checking-types-in-javascript/

jsinstanceof'typeof

name::
* McsEngl.jsinstanceof'typeof@cptIt,
* McsEngl.ljsoperator.typeof@cptIt,
* McsEngl.ljs'typeof-keyword@cptIt, (operator)
* McsEngl.ljs'typeof@cptIt,
* McsEngl.ljs'typeof-operator@cptIt,
* McsEngl.ljs'typeof-statement@cptIt,
* McsEngl.ljs'typeof@cptIt,
* McsEngl.ljstypeof@cptIt,

_DESCRIPTION:
typeof returns one of the following strings:
- number
- string
- boolean
- object
- function
- undefined
typeof(typeof(x)) is always string, no matter what x actually is.
[http://www.adp-gmbh.ch/web/js/operators/typeof.html]

_CODE.LJS:
//be carefull of functions:
> typeof o.constructor
"function"
> typeof o.constructor()
"object"
===
// string
> typeof "string"
"string"
> typeof 'string'
"string"
===
//undefined
> typeof bool
"undefined"
> typeof undefined
"undefined"
===
// boolean
> typeof true
"boolean"
===
// number
> typeof 5
"number"
=== function
> typeof Object
"function"
===
// object
> typeof null;
"object"
> typeof []
"object"
> typeof {}
"object"
> typeof /re/
"object"
> typeof new Object
"object"
===
if (typeof Object.create !== 'function') {
[http://javascript.crockford.com/prototypal.html]
===
> Object.prototype.toString.call({})
"[object Object]"
> Object.prototype.toString.call([])
"[object Array]"
> Object.prototype.toString.call(Object)
"[object Function]"
Object.prototype.toString.call("string")
"[object String]"
Object.prototype.toString.call(5)
"[object Number]"
Object.prototype.toString.call(true)
"[object Boolean]"
Object.prototype.toString.call(null)
"[object Null]"
Object.prototype.toString.call(undefined)
"[object Undefined]"
Object.prototype.toString.call(/re/)
"[object RegExp]"
Object.prototype.toString.call(RegExp)
"[object Function]"
> Object.prototype.toString.call(Date)
"[object Function]"

jsoperator.MEMBER

name::
* McsEngl.jsoperator.MEMBER@cptIt,

_DESCRIPTION:
Member Operators
(object.property and object["property"])

Member operators provide access to a property or method of an object.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators]

jsoperator.NUMERIC (+ - * / %)

name::
* McsEngl.jsoperator.NUMERIC (+ - * / %)@cptIt,

_SPECIFIC:
JavaScript's numeric operators are +, -, *, / and % - which is the remainder operator.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Operators]

jsoperator.ADDITIVE (+ -)

name::
* McsEngl.jsoperator.ADDITIVE (+ -)@cptIt,
* McsEngl.ljs'additive-operator@cptIt,

jsoperator.ADDITION (+)

name::
* McsEngl.jsoperator.ADDITION (+)@cptIt,
* McsEngl.ljsaddition-operator@cptIt,
* McsEngl.ljsplus-operator@cptIt,
* McsEngl.ljs'addition-operator@cptIt,

_CODE.LJS:
> +'a' + 1
NaN
> 'a' + 1
"a1"

jsoperator.SUBTRACTION (-)

name::
* McsEngl.jsoperator.SUBTRACTION (-)@cptIt,
* McsEngl.ljs'subtraction-operator@cptIt,

jsoperator.MULTIPLICATIVE (/ * %)

name::
* McsEngl.jsoperator.MULTIPLICATIVE (/ * %)@cptIt,
* McsEngl.ljs'multiplicative-operator@cptIt,

jsoperator.REMAINDER (%)

name::
* McsEngl.jsoperator.REMAINDER (%)@cptIt,
* McsEngl.ljs'remainder-operator@cptIt,

jsoperator.operad.1 (unary)

name::
* McsEngl.jsoperator.operad.1 (unary)@cptIt,
* McsEngl.ljs'unary-operator@cptIt,

_SPECIFIC:
* Bitwise NOT Operator ( ~ )
* delete#linkL#
* Logical NOT Operator ( ! )
* Prefix Decrement Operator (--)
* Prefix Increment Operator (++)
* typeof##
* Unary +
* Unary -
* void#ql:lcpjs'void_operator#

jsoperator.operad.2 (binary)

name::
* McsEngl.jsoperator.operad.2 (binary)@cptIt,
* McsEngl.ljs'binary-operator@cptIt,

jsoperator.operad.3 (ternary)

name::
* McsEngl.jsoperator.operad.3 (ternary)@cptIt,
* McsEngl.ljs'ternary-operator@cptIt,

_CODE.LJS:
Use the ternary operator for value selection

The ternary operator is a good space saver. Use it instead of trivial if / else blocks.

//instead of this:
var x;
if (flag) {
x = 'success';
} else {
x = 'failure';
}

//prefer this:
var x = flag ? 'success' : 'failure';

jsoperator.RELATIONAL (< > <= >= instanceof in)

name::
* McsEngl.jsoperator.RELATIONAL (< > <= >= instanceof in)@cptIt,
* McsEngl.ljs'relational-operator@cptIt,

jsoperator.GREATER-THAN (>)

name::
* McsEngl.jsoperator.GREATER-THAN (>)@cptIt,
* McsEngl.ljs'greater-than-operator@cptIt,

jsoperator.GREATER-THAN-OR-EQUAL (>=)

name::
* McsEngl.jsoperator.GREATER-THAN-OR-EQUAL (>=)@cptIt,
* McsEngl.ljs'greater-than-or-equal-operator@cptIt,

jsoperator.LESS-THAN (<)

name::
* McsEngl.jsoperator.LESS-THAN (<)@cptIt,
* McsEngl.ljs'less-than-operator@cptIt,

jsoperator.LESS-THAN-OR-EQUAL (<=)

name::
* McsEngl.jsoperator.LESS-THAN-OR-EQUAL (<=)@cptIt,
* McsEngl.ljs'less-than-or-equal-operator@cptIt,

jsoperator.SPECIAL

name::
* McsEngl.jsoperator.SPECIAL@cptIt,

_SPECIFIC:
* comma-operator##
* conditional-operator##
* delete-operator
* in-operator##
* instanceof-operator##
* new-operator##
* typeof-operator##
* void-operator##
* yield-operator##
===
Special Operators
Conditional Operator
(condition ? ifTrue : ifFalse)
The conditional operator returns one of two values based on the logical value of the condition.

Comma Operator
(,)
The comma operator allows multiple expressions to be evaluated in a single statement and returns the result of the last expression.

delete Operator
(delete)
The delete operator deletes a property from an object.

in Operator
(in)
The in operator determines whether an object has a given property.

instanceof Operator
(instanceof)
The instanceof operator determines whether an object is an instance of another object.

new Operator
(new)
The new operator creates an instance of a constructor.

typeof Operator
(typeof)
The typeof operator determines the type of a given object.

void Operator
(void)
The void operator discards an expressions return value.

yield Operator
(yield)
The yield operator determines what is returned in a generator by that generator's iterator.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators]

jsoperator.delete

name::
* McsEngl.jsoperator.delete@cptIt,
* McsEngl.ljs'delete@cptIt,

_DESCRIPTION:
Delete operator in JavaScript

One of the lesser known operators in JavaScript is the 'delete' operator. I came to know about this operator when I was searching for a way to delete an element of an associative array.

The Mozilla Reference Docs have this to say about the delete operator...

The delete operator deletes an object, an object's property, or an element at a specified index in an array.
Usage
var arr = {
 "number": 42,
 "year"  : 2007,
 "hello"  : "world",
 "foo"  : "bar"
}
for(var ele in arr) {
 alert(ele + " : " + arr[ele]);
}
delete arr['hello']; //Removes the 'hello' key of the array

for(var ele in arr) {
 alert(ele + " : " + arr[ele]); //The 'hello' key and its value will be missing
}
[http://www.openjs.com/articles/delete.php]

_DEFINITION:
One of the lesser known operators in JavaScript is the 'delete' operator. I came to know about this operator when I was searching for a way to delete an element of an associative array.

The Mozilla Reference Docs have this to say about the delete operator...

The delete operator deletes an object, an object's property, or an element at a specified index in an array.
[http://www.openjs.com/articles/delete.php]

jsoperator.STRING

name::
* McsEngl.jsoperator.STRING@cptIt,

_DESCRIPTION:
String Operators
(+ and +=)
The string operators concatenate two string values together, returning another string that is the union of the two strings.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators]

_CODE.LJS:
> "hello" + " world"
hello world
> "3" + 4 + 5
345
> 3 + 4 + "5"
75
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Operators]

jsoperator.void

name::
* McsEngl.jsoperator.void@cptIt,
* McsEngl.ljsvoid@cptIt,
* McsEngl.ljs'void-operator@cptIt,

_DESCRIPTION:
The void operator evaluates the given expression and then returns undefined.

Operator
Implemented in:  JavaScript 1.1
ECMA Version:  ECMA-262

Syntax
void expression

Uses
This operator allows inserting expressions that produce side effects into places where an expression that evaluates to undefined is desired.
The void operator is often used merely to obtain the undefined primitive value, usually using "void(0)" (which is equivalent to "void 0"). In these cases, the global variable undefined can be used instead (assuming it has not been assigned to a non-default value).
When wrapping an entire script in an immediately-invoked function expression, void can be used to force the function keyword to be treated as an expression instead of a declaration.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void]

ljb'BINARY-CODE

name::
* McsEngl.ljb'BINARY-CODE@cptIt,
* McsEngl.ljs'bcode@cptIt, {2014-11-01}
* McsEngl.ljs'binary-code@cptIt,
* McsEngl.ljs'second-code@cptIt,
* McsEngl.ljsbcode@cptIt, {2014-11-01}
* McsEngl.ljs'binary-code@cptIt,
* McsEngl.ljs'machine-code@cptIt,

* McsEngl.ljsbcd@cptIt, {2016-05-10}
* McsEngl.ljscdb@cptIt,

_DESCRIPTION:
The sourcecode to be executed must be-translated#ql:lcpjs'interpreter# in a binary form inside the machine.
[hmnSngo.2014-10-29]

ljbbcd'unit

_CREATED: {2014-11-11}

name::
* McsEngl.ljbbcd'unit@cptIt,
* McsEngl.ljsbunit@cptIt, {2014-11-11}

ljb'evaluation

name::
* McsEngl.ljb'evaluation@cptIt,
* McsEngl.ljs'criticism@cptIt,
* McsEngl.ljs'evaluation@cptIt,

Design Errors:
No programming language is perfect. JavaScript has its share of design errors, such as the overloading of + to mean both addition and concatenation with type coercion, and the error-prone with statement should be avoided. The reserved word policies are much too strict. Semicolon insertion was a huge mistake, as was the notation for literal regular expressions. These mistakes have led to programming errors, and called the design of the language as a whole into question. Fortunately, many of these problems can be mitigated with a good lint program.
The design of the language on the whole is quite sound. Surprisingly, the ECMAScript committee does not appear to be interested in correcting these problems. Perhaps they are more interested in making new ones.
[http://javascript.crockford.com/javascript.html]

_Prototype_operator:
Prototyping is a way to create objects by replicating another object (the so called prototype.) The new object may or may not have a link to the original object, depending on the language implementation. JavaScript maintains a link between the two as we will see shortly.
In prototype-based languages there's usually an operator to effect the object creation by copying another object. Surprisingly JavaScript does not offer such operator, which is often consider a design flaw of the language.
[http://www.learn-javascript-tutorial.com/Prototype-Based-Inheritance.cfm]

ljb'compatibility

name::
* McsEngl.ljb'compatibility@cptIt,
* McsEngl.ljs'compatibility@cptIt,
* McsEngl.ljs'incompatibility@cptIt,
* McsEngl.ljs'interoperability@cptIt,

_DESCRIPTION:
Compatibility considerations[edit]
Main article: Web interoperability
Because JavaScript runs in widely varying environments, an important part of testing and debugging is to test and verify that the JavaScript works across multiple browsers.
The DOM interfaces for manipulating web pages are not part of the ECMAScript standard, or of JavaScript itself. Officially, the DOM interfaces are defined by a separate standardization effort by the W3C; in practice, browser implementations differ from the standards and from each other, and not all browsers execute JavaScript.
To deal with these differences, JavaScript authors can attempt to write standards-compliant code which will also be executed correctly by most browsers; failing that, they can write code that checks for the presence of certain browser features and behaves differently if they are not available.[57] In some cases, two browsers may both implement a feature but with different behavior, and authors may find it practical to detect what browser is running and change their script's behavior to match.[58][59] Programmers may also use libraries or toolkits which take browser differences into account.
Furthermore, scripts may not work for some users. For example, a user may:
use an old or rare browser with incomplete or unusual DOM support,
use a PDA or mobile phone browser which cannot execute JavaScript,
have JavaScript execution disabled as a security precaution,
use a speech browser due to, for example, a visual disability.
To support these users, web authors can try to create pages which degrade gracefully on user agents (browsers) which do not support the page's JavaScript. In particular, the page should remain usable albeit without the extra features that the JavaScript would have added. An alternative approach that many find preferable is to first author content using basic technologies that work in all browsers, then enhance the content for users that have JavaScript enabled. This is known as progressive enhancement.
[http://en.wikipedia.org/wiki/JavaScript#Compatibility_considerations] 2014-06-29

ljb'design-flaw

name::
* McsEngl.ljb'design-flaw@cptIt,
* McsEngl.ljs'design-fault@cptIt,
* McsEngl.ljs'flaw@cptIt,
* McsEngl.ljs'problem@cptIt,

html-element-objects

_DESCRIPTION:
All inherit from HTMLElement.prototype chain, but ALL have COMMON attributes like 'nodeName', 'parentNode' NOT inherited from an object.
[hmnSngo.2014-07-24]
===
> Object.getOwnPropertyNames(HTMLElement.prototype).sort()
["click", "constructor"]
> from Element.prototype:
Object.getOwnPropertyNames(HTMLElement.prototype.__proto__).sort()
["ALLOW_KEYBOARD_INPUT", "animate", "blur", "constructor", "createShadowRoot", "focus", "getAttribute", "getAttributeNS", "getAttributeNode", "getAttributeNodeNS", "getBoundingClientRect", "getClientRects", "getDestinationInsertionPoints", "getElementsByClassName", "getElementsByTagName", "getElementsByTagNameNS", "hasAttribute", "hasAttributeNS", "hasAttributes", "insertAdjacentElement", "insertAdjacentHTML", "insertAdjacentText", "matches", "querySelector", "querySelectorAll", "remove", "removeAttribute", "removeAttributeNS", "removeAttributeNode", "scrollByLines", "scrollByPages", "scrollIntoView", "scrollIntoViewIfNeeded", "setAttribute", "setAttributeNS", "setAttributeNode", "setAttributeNodeNS", "webkitMatchesSelector", "webkitRequestFullScreen", "webkitRequestFullscreen", "webkitRequestPointerLock"]
> from Node.prototype:
Object.getOwnPropertyNames(HTMLElement.prototype.__proto__.__proto__).sort()
["ATTRIBUTE_NODE", "CDATA_SECTION_NODE", "COMMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "appendChild", "cloneNode", "compareDocumentPosition", "constructor", "contains", "hasChildNodes", "insertBefore", "isDefaultNamespace", "isEqualNode", "isSameNode", "lookupNamespaceURI", "lookupPrefix", "normalize", "removeChild", "replaceChild"]
> from EventTarget.prototype:
Object.getOwnPropertyNames(HTMLElement.prototype.__proto__.__proto__.__proto__).sort()
["addEventListener", "constructor", "dispatchEvent", "removeEventListener"]
> form Object.prototype:
Object.getOwnPropertyNames(HTMLElement.prototype.__proto__.__proto__.__proto__.__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
===
* click, HTMLElement.prototype,
* constructor, HTMLElement.prototype,
* ALLOW_KEYBOARD_INPUT, Element.prototype,
* animate, Element.prototype,
* blur, Element.prototype,
* constructor, Element.prototype,
* createShadowRoot, Element.prototype,
* focus, Element.prototype,
* getAttribute, Element.prototype,
* getAttributeNS, Element.prototype,
* getAttributeNode, Element.prototype,
* getAttributeNodeNS, Element.prototype,
* getBoundingClientRect, Element.prototype,
* getClientRects, Element.prototype,
* getDestinationInsertionPoints, Element.prototype,
* getElementsByClassName, Element.prototype,
* getElementsByTagName, Element.prototype,
* getElementsByTagNameNS, Element.prototype,
* hasAttribute, Element.prototype,
* hasAttributeNS, Element.prototype,
* hasAttributes, Element.prototype,
* insertAdjacentElement, Element.prototype,
* insertAdjacentHTML, Element.prototype,
* insertAdjacentText, Element.prototype,
* matches, Element.prototype,
* querySelector, Element.prototype,
* querySelectorAll, Element.prototype,
* remove, Element.prototype,
* removeAttribute, Element.prototype,
* removeAttributeNS, Element.prototype,
* removeAttributeNode, Element.prototype,
* scrollByLines, Element.prototype,
* scrollByPages, Element.prototype,
* scrollIntoView, Element.prototype,
* scrollIntoViewIfNeeded, Element.prototype,
* setAttribute, Element.prototype,
* setAttributeNS, Element.prototype,
* setAttributeNode, Element.prototype,
* setAttributeNodeNS, Element.prototype,
* webkitMatchesSelector, Element.prototype,
* webkitRequestFullScreen, Element.prototype,
* webkitRequestFullscreen, Element.prototype,
* webkitRequestPointerLock, Element.prototype,
* ATTRIBUTE_NODE, Node.prototype,
* CDATA_SECTION_NODE, Node.prototype,
* COMMENT_NODE, Node.prototype,
* DOCUMENT_FRAGMENT_NODE, Node.prototype,
* DOCUMENT_NODE, Node.prototype,
* DOCUMENT_POSITION_CONTAINED_BY, Node.prototype,
* DOCUMENT_POSITION_CONTAINS, Node.prototype,
* DOCUMENT_POSITION_DISCONNECTED, Node.prototype,
* DOCUMENT_POSITION_FOLLOWING, Node.prototype,
* DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, Node.prototype,
* DOCUMENT_POSITION_PRECEDING, Node.prototype,
* DOCUMENT_TYPE_NODE, Node.prototype,
* ELEMENT_NODE, Node.prototype,
* ENTITY_NODE, Node.prototype,
* ENTITY_REFERENCE_NODE, Node.prototype,
* NOTATION_NODE, Node.prototype,
* PROCESSING_INSTRUCTION_NODE, Node.prototype,
* TEXT_NODE, Node.prototype,
* appendChild, Node.prototype,
* cloneNode, Node.prototype,
* compareDocumentPosition, Node.prototype,
* constructor, Node.prototype,
* contains, Node.prototype,
* hasChildNodes, Node.prototype,
* insertBefore, Node.prototype,
* isDefaultNamespace, Node.prototype,
* isEqualNode, Node.prototype,
* isSameNode, Node.prototype,
* lookupNamespaceURI, Node.prototype,
* lookupPrefix, Node.prototype,
* normalize, Node.prototype,
* removeChild, Node.prototype,
* replaceChild, Node.prototype,
* addEventListener, EventTarget.prototype,
* constructor, EventTarget.prototype,
* dispatchEvent, EventTarget.prototype,
* removeEventListener, EventTarget.prototype,
* __defineGetter__, Object.prototype,
* __defineSetter__, Object.prototype,
* __lookupGetter__, Object.prototype,
* __lookupSetter__, Object.prototype,
* __proto__, Object.prototype,
* constructor, Object.prototype,
* hasOwnProperty, Object.prototype,
* isPrototypeOf, Object.prototype,
* propertyIsEnumerable, Object.prototype,
* toLocaleString, Object.prototype,
* toString, Object.prototype,
* valueOf, Object.prototype,

===
* ALLOW_KEYBOARD_INPUT, Element.prototype,
* ATTRIBUTE_NODE, Node.prototype,
* CDATA_SECTION_NODE, Node.prototype,
* COMMENT_NODE, Node.prototype,
* DOCUMENT_FRAGMENT_NODE, Node.prototype,
* DOCUMENT_NODE, Node.prototype,
* DOCUMENT_POSITION_CONTAINED_BY, Node.prototype,
* DOCUMENT_POSITION_CONTAINS, Node.prototype,
* DOCUMENT_POSITION_DISCONNECTED, Node.prototype,
* DOCUMENT_POSITION_FOLLOWING, Node.prototype,
* DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, Node.prototype,
* DOCUMENT_POSITION_PRECEDING, Node.prototype,
* DOCUMENT_TYPE_NODE, Node.prototype,
* ELEMENT_NODE, Node.prototype,
* ENTITY_NODE, Node.prototype,
* ENTITY_REFERENCE_NODE, Node.prototype,
* NOTATION_NODE, Node.prototype,
* PROCESSING_INSTRUCTION_NODE, Node.prototype,
* TEXT_NODE, Node.prototype,
* __defineGetter__, Object.prototype,
* __defineSetter__, Object.prototype,
* __lookupGetter__, Object.prototype,
* __lookupSetter__, Object.prototype,
* __proto__, Object.prototype,
* addEventListener, EventTarget.prototype,
* animate, Element.prototype,
* appendChild, Node.prototype,
* blur, Element.prototype,
* click, HTMLElement.prototype,
* cloneNode, Node.prototype,
* compareDocumentPosition, Node.prototype,
* constructor, Element.prototype,
* constructor, EventTarget.prototype,
* constructor, HTMLElement.prototype,
* constructor, Node.prototype,
* constructor, Object.prototype,
* contains, Node.prototype,
* createShadowRoot, Element.prototype,
* dispatchEvent, EventTarget.prototype,
* focus, Element.prototype,
* getAttribute, Element.prototype,
* getAttributeNS, Element.prototype,
* getAttributeNode, Element.prototype,
* getAttributeNodeNS, Element.prototype,
* getBoundingClientRect, Element.prototype,
* getClientRects, Element.prototype,
* getDestinationInsertionPoints, Element.prototype,
* getElementsByClassName, Element.prototype,
* getElementsByTagName, Element.prototype,
* getElementsByTagNameNS, Element.prototype,
* hasAttribute, Element.prototype,
* hasAttributeNS, Element.prototype,
* hasAttributes, Element.prototype,
* hasChildNodes, Node.prototype,
* hasOwnProperty, Object.prototype,
* insertAdjacentElement, Element.prototype,
* insertAdjacentHTML, Element.prototype,
* insertAdjacentText, Element.prototype,
* insertBefore, Node.prototype,
* isDefaultNamespace, Node.prototype,
* isEqualNode, Node.prototype,
* isPrototypeOf, Object.prototype,
* isSameNode, Node.prototype,
* lookupNamespaceURI, Node.prototype,
* lookupPrefix, Node.prototype,
* matches, Element.prototype,
* normalize, Node.prototype,
* propertyIsEnumerable, Object.prototype,
* querySelector, Element.prototype,
* querySelectorAll, Element.prototype,
* remove, Element.prototype,
* removeAttribute, Element.prototype,
* removeAttributeNS, Element.prototype,
* removeAttributeNode, Element.prototype,
* removeChild, Node.prototype,
* removeEventListener, EventTarget.prototype,
* replaceChild, Node.prototype,
* scrollByLines, Element.prototype,
* scrollByPages, Element.prototype,
* scrollIntoView, Element.prototype,
* scrollIntoViewIfNeeded, Element.prototype,
* setAttribute, Element.prototype,
* setAttributeNS, Element.prototype,
* setAttributeNode, Element.prototype,
* setAttributeNodeNS, Element.prototype,
* toLocaleString, Object.prototype,
* toString, Object.prototype,
* valueOf, Object.prototype,
* webkitMatchesSelector, Element.prototype,
* webkitRequestFullScreen, Element.prototype,
* webkitRequestFullscreen, Element.prototype,
* webkitRequestPointerLock, Element.prototype,

instanceof

_DESCRIPTION:
the confusion in JavaScript comes from phrases "the object INSTANCE of a construction function". In class-based-inheritance ool, the objects ARE INSTANCES of their classes because the objects inherit the 'attributes' of the classes. In JS the JS-objects do not inherit from its constructor, but from its 'constructor.prototype'. Then JS-objects are instances of its constructor's prototype object. Then the keyword instanceof must become 'objectof'.

scope

_DESCRIPTION:
JS does not support block-scope, so MANY TIMES we need to wrap in self-executing-functions, code in order to have common variables.
[hmnSngo.2014-07-24]

ljb'undefined

name::
* McsEngl.ljb'undefined@cptIt,

_DESCRIPTION:
They MEAN 'valueless'.
> var n;
undefined
> n === undefined
true
> n in window
true
> x === undefined
Uncaught ReferenceError: x is not defined (here means not created, not valueless)
> x in window
Uncaught ReferenceError: x is not defined
[hmnSngo.2015-06-13]

ljb'inconsistency

name::
* McsEngl.ljb'inconsistency@cptIt,
* McsEngl.ljs'inconsistency@cptIt,

//__proto__ must apply to ALL literals
> 2.__proto__
SyntaxError: Unexpected token ILLEGAL
> (2).__proto__
Number {}
> 'st'.__proto__
String {length: 0}

// ALL primitives must be of the same 'type'.
> typeof null
"object"
> typeof undefined
"undefined"
> typeof 2
"number"

//DEFINE 'type' and 'instance'.
> [] instanceof Array
true
> "string" instanceof String
false
===
> Object.getOwnPropertyNames(null).sort()
TypeError: Object.getOwnPropertyNames called on non-object
> typeof null
"object"
===
//you can't have the "string" not be an instanceof String
//AND its prototype!!! to to be the String.prototype.
> "string".__proto__ === String.prototype
true
> "str" instanceof String
false
> Object.getOwnPropertyNames(String.prototype).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "concat", "constructor", "fixed", "fontcolor", "fontsize", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "replace", "search", "slice", "small", "split", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]
> Object.getOwnPropertyNames("string").sort()
TypeError: Object.getOwnPropertyNames called on non-object
> Object.getOwnPropertyNames("string".__proto__).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "concat", "constructor", "fixed", "fontcolor", "fontsize", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "replace", "search", "slice", "small", "split", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]
as
> Object.getOwnPropertyNames(({}).__proto__).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]
> Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

ljb'human

name::
* McsEngl.ljb'human@cptIt,
* McsEngl.ljshuman@cptIt,
* McsEngl.ljshmn@cptIt,

lcpJs'human.Eich.Brendan:
Brendan Eich (/'a?k/; born 1961)[1] is an American computer programmer and creator of the JavaScript scripting language. He is the chief technology officer at the Mozilla Corporation.
[http://en.wikipedia.org/wiki/Brendan_Eich]

lcpJs'Crockford.Douglas (JSON):
* http://javascript.crockford.com//
* http://crockford.com//
* douglas@crockford.com,
* JSLint:
* JSMin:

lcpJs'Johansson.Anton (EasyReader crx):
Anton Johansson:
* http://portfolio.antonj.se/
* http://twitter.com/antonjohansson
* email – hello@antonj.se
* EasyReader: https://chrome.google.com/extensions/detail/boamfheepdiallipiieadpmnklbhadhc

lcpJs'Resig.John (jQuery):
John Resig is a JavaScript Tool Developer for the Mozilla Corporation and the author of the book Pro JavaScript Techniques. He's also the creator and lead developer of the jQuery JavaScript library.
* http://ejohn.org/about//

ljb'Zakas.Nicholas

name::
* McsEngl.ljb'Zakas.Nicholas@cptIt,
* McsEngl.Zakas.Nicholas@cptIt,

_email:
* contact@nczonline.net

_DESCRIPTION:
Nicholas C. Zakas is a web software engineer who specializes in user interface design and implementation for web applications using JavaScript, Dynamic HTML, CSS, XML, and XSLT. He is currently principal front end engineer for the Yahoo! homepage and is a contributor to the Yahoo! User Interface (YUI) library, having written the Cookie Utility, Profiler, and YUI Test.
* http://www.nczonline.net/about//
* autosuggest,

ljb'Stefanov.Stoyan

name::
* McsEngl.ljb'Stefanov.Stoyan@cptIt,

_DESCRIPTION:
Stoyan Stefanov is a Facebook engineer, ex-Yahoo, architect of the YSlow 2.0 performance tool and creator of the smush.it image optimization tool!

He's the author of
- JavaScript for PHP developers (O'Reilly),
- JavaScript Patterns (O'Reilly),
- Object-Oriented JavaScript (Packt Publishing),
- The Book of Speed (online), and a
- contributor to High-Performance JavaScript (O'Reilly) and Even Faster Web Sites (O'Reilly).

Stoyan is a Zend-certified engineer, blogs at phpied.com and jspatterns.com and speaks at conferences and meetups around the world (Velocity, JSConf, OSCON, Web Directions, Fronteers...)

A Bulgarian-Canadian, Stoyan lives in Los Angeles with his wife and daughters and spends his time biking between home, office, the beach, band practice, flying lessons and kids birthday parties.
[http://www.phpied.com/bio/]

ljb'creator

name::
* McsEngl.ljb'creator@cptIt,
* McsEngl.Brendan.Eich@cptIt,
* McsEngl.Eich-Brendan@cptIt,
* McsEngl.ljs'Eich-Brendan@cptIt,
* McsEngl.ljs'inventor@cptIt,

_DESCRIPTION:
* http://en.wikipedia.org/wiki/Brendan_Eich
Brendan Eich (pronounced /'aik/) (born 1961[1]) is a computer programmer and creator of the JavaScript scripting language. He is the chief technology officer at the Mozilla Corporation.
===
a joint effort from Sun and Netscape.
===
Brendan Eich, a technical staff member of Netscape Communications who has been working on the Navigator 2.0 project and was hired to do "the scripting language," which has evolved into what is now known as JavaScript.
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

ljb'language-that-compile-to-JavaScript

_CREATED: {2013-12-18}

name::
* McsEngl.ljb'language-that-compile-to-JavaScript@cptIt,
* McsEngl.language-that-compile-to-JavaScript@cptIt,
* McsEngl.pgmlng-to-js@cptIt,

_ADDRESS.WPG:
* https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS.

SPECIFIC

_SPECIFIC:
* Amber Smalltalk#https://github.com/amber-smalltalk/amber#
* CoffeeScript##
* haXe##
* Objective-J##
===
In fact, there’s already quite a few languages that compile to JavaScript, the most popular being CoffeeScript, haXe and Objective-J.
[http://guide.roylang.org/en/latest/introduction.html#what-can-we-do]

ljb'issue

name::
* McsEngl.ljb'issue@cptIt,
* McsEngl.ljsissue@cptIt,

js'mistake

name::
* McsEngl.js'mistake@cptIt,
* McsEngl.ljsmistake@cptIt,

_ADDRESS.WPG:
* http://www.toptal.com/javascript/10-most-common-javascript-mistakes,

_SPECIFIC:
* this keyword#ql:jsthis#

ljb'notation

name::
* McsEngl.ljb'notation@cptIt,
* McsEngl.ljs'notation@cptIt,

_DESCRIPTION:
* units of code:
01) a - array#ql:jsarray@cptIt#
02) b - boolean#ql:lcpjs'boolean.literal#
03) f - function#linkL#
04) n - number#ql:lcpjs'number_atom@cptIt#
05) o - object#linkL#
06) s - string#ql:lcpjs'string_literal@cptIt#
07) r - regexp#ql:jsr@cptIt#
08) x - multiple-meaningunit
===
* Function--Object-of-function:
fName, oName,
fParserSax, oParserSax.
[hmnSngo.2014-12-07]
===
* parameters of function:
sInName, oInName, fInName, ...
[hmnSngo.2014-12-07]

ljb'relation-to-JSON

name::
* McsEngl.ljb'relation-to-JSON@cptIt,
* McsEngl.conceptIt554.6,
* McsEngl.JavaScript'json@cptIt,
* McsEngl.JavaScript'relation-to-json@cptIt,
* McsEngl.json'JavaScript@cptIt,

_ENTITY:
* JSON#cptItsoft204.19#

_DESCRIPTION:
JSON-object and JavaScript-object are DIFFERENT creatures.
[hmnSngo.2014-08-01]
===
Despite the widespread belief that JSON is a JavaScript subset, this is not the case. Specifically, JSON allows the Unicode line terminators U+2028 line separator and U+2029 paragraph separator to appear unescaped in quoted strings, while JavaScript does not.[8] This is a consequence of JSON disallowing only "control characters". This subtlety is important when generating JSONP.
[http://en.wikipedia.org/wiki/JSON] 2013-10-19.
===
JSON is a subset of the object literal notation of JavaScript. Since JSON is a subset of JavaScript, it can be used in the language with no muss or fuss.
[http://www.json.org/js.html]

ljb'performance

name::
* McsEngl.ljb'performance@cptIt,

_DESCRIPTION:
Performance implications

The presence of JavaScript in our pages directly affects how the browser loads and renders the page. As soon as the browser finds a script tag in the HTML, it will stop rendering the HTML and will process that JavaScript, which may involve downloading an external .js file. Even if the file had been previously cached by the browser, it will still fetch it from the cache and then evaluate its contents.

The pauses in the page rendering can become quite noticeable depending on how many script tags we have and where in the page they are located. This is compounded by the fact that many browsers only retrieve 2 files at most simultaneously.
[http://www.learn-javascript-tutorial.com/Production-Grade-JS.cfm]

ljb'resource

name::
* McsEngl.ljb'resource@cptIt,
* McsEngl.ljsresource@cptIt,

_WEBPAGE.JS:
* book: functional-programming: https://github.com/DrBoolean/mostly-adequate-guide,
* jsresource.mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference,
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/JavaScript_technologies_overview,
* jsresource.microsoft: http://msdn.microsoft.com/en-us/library/d1et7k7c(v=vs.94).aspx,
* http://dmitrysoshnikov.com//
* http://svg.dmi.unict.it/~web/download/DOM.pdf,
* Reading local files in JavaScript http://www.html5rocks.com/tutorials/file/dndfiles/
* Tree: http://www.jstree.com//
* Splitter: jQuery Splitter Plugin http://methvin.com/splitter/index.html,

* {2017-07-27} https://monades.roperzh.com/bootstrapping-javascript-library/,
* Welcome to the home of JxLib, a javascript library for creating graphical user interaces based on the fabulous MooTools library. http://www.jxlib.org//
* UI.Layout – The Ultimate Page Layout Manager http://layout.jquery-dev.net/index.cfm,
* INDEX from DevGuru:
- lcpJs'reference,
http://www.devguru.com/technologies/ecmascript/quickref/javascript_index.html
The primary goal of DevGuru is to gather into a single Web site all the reference, learning, and component resources that are required by professional ASP developers on a daily basis. In doing so we hope to foster an active community of interested individuals and corporations that will help us develop DevGuru into the extensive resource that we all need.
* Crockford on JavaScript - Volume 1: The Early Years:
http://www.youtube.com/watch?v=JxAXlJEmNMg&list=PL7664379246A246CB&index=1&feature=plpp_video,
http://yuiblog.com/crockford//

* Advanced:
- http://ejohn.org/apps/learn//
- examples we can edit.

* http://www.javascripter.net/index.htm,

* JavaScript Authoring Info (John W. M. Russell)
- http://home.cogeco.ca/~ve3ll/jsintro.htm,
* http://www.javascript.com/:: JavaScript.com (TM) - The Definitive JavaScript Resource JavaScript Tutorials and Free Java Scripts:
www.javascript.com.
* http://www.beginnersjavascript.co.uk/learning/index.html:: Learning Javascript - Beginners Javascript Β©2000:
beginnersjavascript: www.beginnersjavascript.co.uk.
* http://developer.netscape.com/docs/manuals/js/client/jsguide/contents.htm::Netscape Client-Side JavaScript Guide:
developer.netscape.com.
* http://web.bentley.edu/empl/c/rcrooks/toolbox/javascript/js_000.html:: tutorial web.bentley.edu empl c rcrooks toolbox javascript:
web.bentley.edu.
* WDVL JavaScript Tutorial for Programmers:: http://www.wdvl.com/Authoring/JavaScript/Tutorial/:
www.wdvl.com:
* PPK: JavaScript - Table of contents
The JavaScript part of my site contains all JavaScript pages. It is by far the largest section of my site.
I have created seven JavaScript categories that follow my book's subdivision: General (chapters 1-4), Core (5), BOM (6), Events (7), DOM (8), CSS modification (9), and Data Retrieval (10).
General | Core | BOM | Events | DOM | CSS modification | Data retrieval
- http://www.quirksmode.org/js/contents.html,

_ADDRESS.WEB.js.Reference:
* https://developer.mozilla.org/en/JavaScript/Reference,

_ADDRESS.WEB.js.faq:
* faq: http://www.javascripter.net/faq/index.htm,
* http://jibbering.com/faq//

_ADDRESS.WEB.Html5Rocks:
* http://www.html5rocks.com//

_ADDRESS.WEB.hunlock:
* http://www.hunlock.com/archives.php

_ADDRESS.WEB.js.jQuery:

_ADDRESS.WEB.js.Ajax:
* Ajax tutorial - dynamic content
http://www.dhtmlgoodies.com/index.html?whichTutorial=ajax-basics

_ADDRESS.WEB.js.YUI3_library:
* YUI 3 is Yahoo!'s next-generation JavaScript and CSS library. It powers the new Yahoo! homepage, Yahoo! Mail, and many other Yahoo! sites.
http://developer.yahoo.com/yui/3//

_ADDRESS.WEB.js.FileSystem:
* http://www.html5rocks.com/tutorials/file/filesystem//

_ADDRESS.WEB.js.Blog:
* Katz-Yehuda: http://yehudakatz.com/tags/javascript//

ljb'resource.BOOK

name::
* McsEngl.ljb'resource.BOOK@cptIt,
* McsEngl.ljsbook@cptIt,
* McsEngl.ljs'book@cptIt,

_SPECIFIC:
* lcpJs'book.Eloquent_JavaScript: http://eloquentjavascript.net/contents.html,

* lcpJs'book.DOM_Enlightment: http://domenlightenment.com//

* http://en.wikibooks.org/wiki/JavaScript,

* lcpJs'book.Object_Oriented_JavaScript_by_yours_truly (Packt Publishing)

• lcpJs'book.JavaScript_The_Definitive_Guide by David Flanagan (O’Reilly)

• lcpJs'book.JavaScript_The_Good_Parts by Douglas Crockford (O’Reilly)

• lcpJs'book.Pro_JavaScript_Design_Patterns by Ross Hermes and Dustin Diaz (Apress)

• lcpJs'book.High_Performance_JavaScript by Nicholas Zakas (O’Reilly)

• lcpJs'book.Professional_JavaScript_for_Web_Developers by Nicholas Zakas (Wrox)

* lcpJs'book.Learning_JavaScript_Design_Patterns, 2012: http://addyosmani.com/resources/essentialjsdesignpatterns/book//

* lcpJs'book.JavaScript_Patterns, Stoyan Stefanov,
http://it-ebooks.info/read/275//
https://docs.google.com/gview?url=http://it-ebooks.info/read.php?id%3D275-1385227433-b422abab0861c18ba467b7f69f0fbfbd&chrome=true,

jsbook.Eloquent-JavaScript {2007}

name::
* McsEngl.jsbook.Eloquent-JavaScript {2007}@cptIt,

_ADDRESS.WPG:
* http://eloquentjavascript.net//

_AUTHOR:
Marijn Haverbeke (license), written March to July 2007, last modified on November 28 2013.

ljb'resource.TUTORIAL

name::
* McsEngl.ljb'resource.TUTORIAL@cptIt,
* McsEngl.ljs'tutorial@cptIt,

_ADDRESS.WEB.js.Tutorial:
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript,
* http://referencedesigner.com/tutorials/js/js_1.php,
* Html5Rocks: http://www.html5rocks.com/tutorials//
* hunlock: http://www.hunlock.com/blogs/Essential_Javascript_--_A_Javascript_Tutorial,
* Douglas Crockford: "Theory of the DOM " (1 of 3)
http://video.yahoo.com/watch/111582/992708 (1)
http://video.yahoo.com/watch/111583/996002 (2)
(3)
* http://www.pageresource.com/jscript/index.html:: Beginning JavaScript Tutorials: pageresource: www.pageresource.com:
* JavaScript Source Free JavaScripts, Tutorials, Example Code, Reference, Resources, And Help::

http://javascript.internet.com/:
javascript.internet.com:
* JavaScript Tutorial (w3schools.com):
httpadrs.w3schools: www.w3schools.com:
http://www.w3schools.com/js/default.asp,
* javascripter: http://www.javascripter.net/faq/index.htm,
* javascript.info: http://javascript.info//
* http://dom-tutorials.appspot.com/static/index.html,

lcpJs'W3SCHOOLS:
JavaScript and HTML DOM Reference
* http://www.w3schools.com/jsref/default.asp

lcpJs'HowToCreate:
* http://www.howtocreate.co.uk/tutorials/javascript/important

lcpJs'Garden:
* http://bonsaiden.github.com/JavaScript-Garden/#intro/

lcpJs'Webucator:
* http://www.learn-javascript-tutorial.com//

JavaScript for the Total Non-Programmer
* http://www.webteacher.com/javascript/

JavaScript Kit
This is your one-stop site for all our JavaScript needs, featuring award-winning JavaScript tutorials and free scripts.
*

Brian Lesser
Assistant Director, Application Development and Integration
Computing and Communications Services
Ryerson University
350 Victoria St.
Toronto, Ontario
* http://www.ryerson.ca/JavaScript/lectures/newIndex.html

lcpJs'WebReference / javascript / tips:
* JavaScript and Ajax Tips & Tutorials - 2009
- http://www.webreference.com/programming/javascript//
* http://www.webreference.com/js/tips//

lcpJs'WebDevelopersNotes:
* http://www.webdevelopersnotes.com/tutorials/javascript/index.php3
Online JavaScript Tutorial
This online Javascript tutorial been very well received judging by the number of emails I get. JavaScript is a vast language and it is not possible to teach everything in these 35 tutorial sessions, however, we will cover most of the basics - statements commands and functions. This Javascript tutorial was written for someone who has no programming experience.
I had taken off this tutorial for a little while simply to correct errors, however, if you do find some, please report them here; and if you simply like this javascript tutorial, please do let me know.

ljb'security

name::
* McsEngl.ljb'security@cptIt,
* McsEngl.ljssecurity@cptIt,

_Security:
JavaScript and the DOM provide the potential for malicious authors to deliver scripts to run on a client computer via the web. Browser authors contain this risk using two restrictions.
First, scripts run in a sandbox in which they can only perform web-related actions, not general-purpose programming tasks like creating files.
Second, scripts are constrained by the same origin policy: scripts from one web site do not have access to information such as usernames, passwords, or cookies sent to another site. Most JavaScript-related security bugs are breaches of either the same origin policy or the sandbox.
[http://en.wikipedia.org/wiki/JavaScript]
===
However, the possibility of JavaScript being malicious becomes more clear when you consider the following facts:
* JavaScript has access to some of the user's sensitive information, such as cookies.
* JavaScript can send HTTP requests with arbitrary content to arbitrary destinations by using XMLHttpRequest and other mechanisms.
* JavaScript can make arbitrary modifications to the HTML of the current page by using DOM manipulation methods.
These facts combined can cause very serious security breaches, as we will explain next.
[http://excess-xss.com/]

Cookie-theft

The attacker can access the victim's cookies associated with the website using document.cookie, send them to his own server, and use them to extract sensitive information like session IDs.
[http://excess-xss.com/]

Keylogging

The attacker can register a keyboard event listener using addEventListener and then send all of the user's keystrokes to his own server, potentially recording sensitive information such as passwords and credit card numbers.
[http://excess-xss.com/]

Phishing

The attacker can insert a fake login form into the page using DOM manipulation, set the form's action attribute to target his own server, and then trick the user into submitting sensitive information.
[http://excess-xss.com/]

ljb'specification

name::
* McsEngl.ljb'specification@cptIt,
* McsEngl.ljsspc@cptIt, {2016-05-14}
* McsEngl.ljs'spec@cptIt,
* McsEngl.ljs'standard@cptIt,

_ELEMENT.SPAN:
<span class="nt"><a class="popupTrigger" href="#idSec6-SyntaxH2">SourceCharacter</a></span>
===
<span class="geq">::</span>
===
<span class="prod"><span class="nt">DecimalLiteral</span> <span class="geq">::</span> <span class="nt">DecimalIntegerLiteral</span></span>

_ELEMENT.I:
<i>DecimalIntegerLiteral</i>

_ELEMENT.CODE:
<code class="t">}</code>

ljbspc.ECMAScript.6.0 {June 2015}

name::
* McsEngl.ljbspc.ECMAScript.6.0 {June 2015}@cptIt,
* McsEngl.ecma-262-6.0@cptIt,
* McsEngl.es6.0-spec@cptIt,
* McsEngl.ljs'es6.0-spec@cptIt,

_ADDRESS.WPG:
* http://www.ecma-international.org/ecma-262/6.0/ECMA-262.pdf,
* http://www.ecma-international.org/ecma-262/6.0/index.html,

ljbspc.ECMAScript.5.1 {June 2011}

name::
* McsEngl.ljbspc.ECMAScript.5.1 {June 2011}@cptIt,
* McsEngl.ecma-262-5.1@cptIt,
* McsEngl.es5.1@cptIt,
* McsEngl.ljs'es5.1@cptIt,

_DESCRIPTION:
Standard ECMA-262
5.1 Edition / June 2011
ECMAScript® Language Specification
* http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf,
* HTML version: http://ecma-international.org/ecma-262/5.1//
* http://synagonism.net/standard/techInfo/ecma.262.51.2011.html,
* http://synagonism.net/standard/techInfo/ecma.262.51.2011.html,
* annotated: http://es5.github.io//

ljbspc.ECMAScript5 {December 2009}

name::
* McsEngl.ljbspc.ECMAScript5 {December 2009}@cptIt,
* McsEngl.ecma-262-5@cptIt,
* McsEngl.es5@cptIt,

_DESCRIPTION:
the 5th edition is just the improvement of the previous 3rd version — without completely new and innovating approach.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-0-introduction/]
===
ECMAScript Language Specification
STANDARD ECMA-262
5th Edition / December 2009

_BROWSER_COMPATIBILITY:
* http://kangax.github.io/es5-compat-table//

ljbspc.ECMAScript4

name::
* McsEngl.ljbspc.ECMAScript4@cptIt,
* McsEngl.ecma-262-4@cptIt,
* McsEngl.es4@cptIt,

_DESCRIPTION:
As we know ECMAScript 4 (aka JavaScript 2.0) with concept of classes has been canceled.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-0-introduction/]

ljbspc.ECMAScript3 {December 1999}

name::
* McsEngl.ljbspc.ECMAScript3 {December 1999}@cptIt,
* McsEngl.ecma-262-3@cptIt,
* McsEngl.es3@cptIt,

_ADDRESS.WPG:
* Standard ECMA-262 3rd Edition -December 1999: http://bclary.com/2004/11/07//
Brief History

This ECMA Standard is based on several originating technologies, the most well known being JavaScript (Netscape) and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in that company's Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers from Microsoft starting with Internet Explorer 3.0.

The development of this Standard started in November 1996. The first edition of this ECMA Standard was adopted by the ECMA General Assembly of June 1997.

That ECMA Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved as international standard ISO/IEC 16262, in April 1998. The ECMA General Assembly of June 1998 approved the second edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the second edition are editorial in nature.

The current document defines the third edition of the Standard and includes powerful regular expressions, better string handling, new control statements, try/catch exception handling, tighter definition of errors, formatting for numeric output and minor changes in anticipation of forthcoming internationalisation facilities and future language growth.

Work on the language is not complete. The technical committee is working on significant enhancements, including mechanisms for scripts to be created and used across the Internet, and tighter coordination with other standards bodies such as groups within the World Wide Web Consortium and the Wireless Application Protocol Forum.

This Standard has been adopted as 3rd Edition of ECMA-262 by the ECMA General Assembly in December, 1999.

ljbspc.JSON-GRAMMAR

name::
* McsEngl.ljbspc.JSON-GRAMMAR@cptIt,
* McsEngl.ljs'JSON-grammar@cptIt,

_DESCRIPTION:
The JSON grammar is used to translate a String describing a set of ECMAScript objects into actual objects. The JSON grammar is given in 15.12.1.

The JSON grammar consists of the JSON lexical grammar and the JSON syntactic grammar. The JSON lexical grammar is used to translate character sequences into tokens and is similar to parts of the ECMAScript lexical grammar. The JSON syntactic grammar describes how sequences of tokens from the JSON lexical grammar can form syntactically correct JSON object descriptions.

Productions of the JSON lexical grammar are distinguished by having two colons “::” as separating punctuation. The JSON lexical grammar uses some productions from the ECMAScript lexical grammar. The JSON syntactic grammar is similar to parts of the ECMAScript syntactic grammar. Productions of the JSON syntactic grammar are distinguished by using one colon “:” as separating punctuation.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec5.1.5]

ljbspc.LEXICAL-GRAMMAR

name::
* McsEngl.ljbspc.LEXICAL-GRAMMAR@cptIt,
* McsEngl.ljs'lexical-grammar@cptIt,

_PRODUCTION:
Productions of the lexical and RegExp grammars are distinguished by having two colons “::” as separating punctuation. The lexical and RegExp grammars share some productions.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec5.1.2P4]

ljbspc.NUMERIC-STRING-GRAMMAR

name::
* McsEngl.ljbspc.NUMERIC-STRING-GRAMMAR@cptIt,
* McsEngl.ljs'numeric-string-grammar@cptIt,

ljbspc.RegExp-GRAMMAR

name::
* McsEngl.ljbspc.RegExp-GRAMMAR@cptIt,
* McsEngl.ljs'RegExp-grammar@cptIt,

_PRODUCTION:
Productions of the lexical and RegExp grammars are distinguished by having two colons “::” as separating punctuation. The lexical and RegExp grammars share some productions.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec5.1.2P4]

ljbspc.SYNTACTIC-GRAMMAR

name::
* McsEngl.ljbspc.SYNTACTIC-GRAMMAR@cptIt,
* McsEngl.ljs'syntactic-grammar@cptIt,

_DESCRIPTION:
The syntactic grammar for ECMAScript is given in clauses 11, 12, 13 and 14. This grammar has ECMAScript tokens defined by the lexical grammar as its terminal symbols (5.1.2). It defines a set of productions, starting from the goal symbol Program, that describe how sequences of tokens can form syntactically correct ECMAScript programs.

When a stream of characters is to be parsed as an ECMAScript program, it is first converted to a stream of input elements by repeated application of the lexical grammar; this stream of input elements is then parsed by a single application of the syntactic grammar. The program is syntactically in error if the tokens in the stream of input elements cannot be parsed as a single instance of the goal nonterminal Program, with no tokens left over.

Productions of the syntactic grammar are distinguished by having just one colon “:” as punctuation.

The syntactic grammar as presented in clauses 11, 12, 13 and 14 is actually not a complete account of which token sequences are accepted as correct ECMAScript programs. Certain additional token sequences are also accepted, namely, those that would be described by the grammar if only semicolons were added to the sequence in certain places (such as before line terminator characters). Furthermore, certain token sequences that are described by the grammar are not considered acceptable if a terminator character appears in certain “awkward” places.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec5.1.4]

_PRODUCTION:

_TERMINAL_SYMBOL:
* token#ql:lcpjs'token@cptIt#
===
Input elements other than white space and comments form the terminal symbols for the syntactic grammar for ECMAScript and are called ECMAScript tokens.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec5.1.2P2]

ljb'tool

name::
* McsEngl.ljb'tool@cptIt,
* McsEngl.ljbtoo@cptIt,
* McsEngl.ljb'tool@cptIt,
* McsEngl.ljbtool@cptIt,
* McsEngl.ljs'development-tool@cptIt,
* McsEngl.ljs'Program-development-tool@cptIt,
* McsEngl.ljs'programer-tool@cptIt,
* McsEngl.ljs'developer-tool@cptIt,
* McsEngl.ljs'ptl@cptIt, {2013-09-08}

SPECIFIC

lcpJs'tool.specific:
* beautifier: https://www.npmjs.org/package/js-beautify,
* minifier:
* obfuscator: http://javascriptobfuscator.com//

ljbtool.ANALYZER

name::
* McsEngl.ljbtool.ANALYZER@cptIt,
* McsEngl.ljb'analyzer-tool@cptIt,
* McsEngl.ljb'linting@cptIt,

_SPECIFIC:
* ESLint##
* JSHint##
* JSLint##

ljbtool.API-doc-generator

name::
* McsEngl.ljbtool.API-doc-generator@cptIt,

ljb'editor-tool

name::
* McsEngl.ljb'editor-tool@cptIt,

_DESCRIPTION:
Editor to WRITE js.

ljb'escodegen

name::
* McsEngl.ljb'escodegen@cptIt,
* McsEngl.escodegen@cptIt,

_DESCRIPTION:
ECMAScript code generator
[https://github.com/Constellation/escodegen]

_ADDRESS.WPG:
* https://github.com/Constellation/escodegen,
* https://constellation.github.io/escodegen/demo/index.html,

escodegen'executing

name::
* McsEngl.escodegen'executing@cptIt,

AST_TO_JS:
> node bin/esgenerate test.json

ljb'execution-environment

name::
* McsEngl.ljb'execution-environment@cptIt,
* McsEngl.ljs'host-environment@cptIt,

_DESCRIPTION:
4.1 Web Scripting
A web browser provides an ECMAScript host environment for client-side computation including, for instance, objects that represent windows, menus, pop-ups, dialog boxes, text areas, anchors, frames, history, cookies, and input/output. Further, the host environment provides a means to attach scripting code to events such as change of focus, page and image loading, unloading, error and abort, selection, form submission, and mouse actions. Scripting code appears within the HTML and the displayed page is a combination of user interface elements and fixed and computed text and images. The scripting code is reactive to user interaction and there is no need for a main program.

A web server provides a different host environment for server-side computation including objects representing requests, clients, and files; and mechanisms to lock and share data. By using browser-side and server-side scripting together, it is possible to distribute computation between the client and server while providing a customised user interface for a Web-based application.

Each Web browser and server that supports ECMAScript supplies its own host environment, completing the ECMAScript execution environment.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.1]

ljb'engine (implementation)

name::
* McsEngl.ljb'engine (implementation)@cptIt,
* McsEngl.ljs'engine@cptIt,
* McsEngl.ljs'interpreter@cptIt,
* McsEngl.ljs'implementation@cptIt,
* McsEngl.JavaScript-engine@cptIt554i,
* McsEngl.ljs-interpreter@cptIt,
* McsEngl.ljs-implementation@cptIt,
* McsEngl.ljs'engine@cptIt,
* McsEngl.ljs'interpreter@cptIt,
* McsEngl.ljs'implementation@cptIt,
* McsEngl.ljsengine@cptIt,

=== _NOTES: Before the second browser war in 2008-2009, the JavaScript engine (also known as JavaScript interpreter or JavaScript implementation) was known simply as an interpreter that read and executed JavaScript source code.
[http://en.wikipedia.org/wiki/JavaScript_engine]

_DESCRIPTION:
A JavaScript engine is specialized computer software which interprets and executes JavaScript (or ECMAScript). Although there are several uses for a JavaScript engine, it is most commonly used in web browsers.[1][2]
[http://en.wikipedia.org/wiki/JavaScript_engine]

_ENTITY:
* js-browser-manipulation#ql:jsbrowser_managing#

ljb'browser-support

name::
* McsEngl.ljb'browser-support@cptIt,
* McsEngl.ljs'browser-compatibility@cptIt,
* McsEngl.ljsbrowser-compatibility@cptIt,
* McsEngl.ljs'browser-support@cptIt,

SPECIFIC

_SPECIFIC:
* Nitro, Safari.
* Rhino, java, Mozilla.
* SpiderMonkey, is implemented in C, Netscape
* V8, Chrome, Google.
===
Major implementations  KJS, Rhino, SpiderMonkey, V8, WebKit
[http://en.wikipedia.org/wiki/JavaScript]

Peter Jipsen:
* http://math.chapman.edu/~jipsen/js//

lcpJs'mochi_interpreter:
* http://mochi.github.com/mochikit/examples/interpreter//

ljb'implementation.Rhino (java)

name::
* McsEngl.ljb'implementation.Rhino (java)@cptIt,
* McsEngl.Rhino-jsengine@cptIt,

_DESCRIPTION:
Rhino is a JavaScript engine developed entirely in Java and managed by the Mozilla Foundation as open source software. It is separate from the SpiderMonkey engine, which is also developed by Mozilla, but is written in C++ and is used in Mozilla Firefox.
[http://en.wikipedia.org/wiki/Rhino_(JavaScript_engine)]

ljb'implementation.V8 (C++ Chrome)

name::
* McsEngl.ljb'implementation.V8 (C++ Chrome)@cptIt,
* McsEngl.V8-jsengine@cptIt,

_DESCRIPTION:
The V8 JavaScript Engine is an open source JavaScript engine developed by Google for the Google Chrome web browser.[4] It has since seen use in many other projects. As of 2012, the head programmer is Lars Bak.[5] The first version of the V8 engine was released at the same time as the first version of Chrome, September 2, 2008.
V8 compiles JavaScript to native machine code (IA-32, x86-64, ARM, or MIPS ISAs)[3][6] before executing it, instead of more traditional techniques such as interpreting bytecode or compiling the whole program to machine code and executing it from a filesystem. The compiled code is additionally optimized (and re-optimized) dynamically at runtime, based on heuristics of the code's execution profile. Optimization techniques used include inlining, elision of expensive runtime properties, and inline caching, among many others.
[http://en.wikipedia.org/wiki/V8_(JavaScript_engine)]

ljb'implementation.SpiderMonkey (C/C++ Firefox)

name::
* McsEngl.ljb'implementation.SpiderMonkey (C/C++ Firefox)@cptIt,
* McsEngl.SpiderMonkey@cptIt,
* McsEngl.ljssm@cptIt,

_DESCRIPTION:
SpiderMonkey is the code name for the first-ever JavaScript engine, written by Brendan Eich at Netscape Communications, later released as open source and now[when?] maintained by the Mozilla Foundation. SpiderMonkey currently[when?] provides JavaScript support for Mozilla Firefox and various embeddings such as the GNOME 3 desktop.
[http://en.wikipedia.org/wiki/SpiderMonkey_(software)]

jssm'PARSER-API

name::
* McsEngl.jssm'PARSER-API@cptIt,

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Parser_API,

Syntax:
FunctionDeclaration: 'FunctionDeclaration',
VariableDeclaration: 'VariableDeclaration',

AssignmentExpression: 'AssignmentExpression',
ArrayExpression: 'ArrayExpression',
ArrowFunctionExpression: 'ArrowFunctionExpression',
BinaryExpression: 'BinaryExpression',
CallExpression: 'CallExpression',
ConditionalExpression: 'ConditionalExpression',
FunctionExpression: 'FunctionExpression',
LogicalExpression: 'LogicalExpression',
MemberExpression: 'MemberExpression',
NewExpression: 'NewExpression',
ObjectExpression: 'ObjectExpression',
SequenceExpression: 'SequenceExpression',
ThisExpression: 'ThisExpression',
UnaryExpression: 'UnaryExpression',
UpdateExpression: 'UpdateExpression',

CatchClause: 'CatchClause',
Identifier: 'Identifier',
Literal: 'Literal',
Program: 'Program',
Property: 'Property',
SwitchCase: 'SwitchCase',
VariableDeclarator: 'VariableDeclarator',

BlockStatement: 'BlockStatement',
BreakStatement: 'BreakStatement',
ContinueStatement: 'ContinueStatement',
DoWhileStatement: 'DoWhileStatement',
DebuggerStatement: 'DebuggerStatement',
EmptyStatement: 'EmptyStatement',
ExpressionStatement: 'ExpressionStatement',
ForStatement: 'ForStatement',
ForInStatement: 'ForInStatement',
IfStatement: 'IfStatement',
LabeledStatement: 'LabeledStatement',
ReturnStatement: 'ReturnStatement',
SwitchStatement: 'SwitchStatement',
ThrowStatement: 'ThrowStatement',
TryStatement: 'TryStatement',
WhileStatement: 'WhileStatement',
WithStatement: 'WithStatement'

Parser API
Redirected from https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API

This article is in need of a technical review.
This article covers features introduced in SpiderMonkey 1.8.5
Recent builds of the standalone SpiderMonkey shell include a reflection of the SpiderMonkey parser, made available as a JavaScript API. This makes it easier to write tools in JavaScript that manipulate JavaScript source programs, such as syntax highlighters, static analyses, translators, compilers, obfuscators, etc.

NOTE: Several projects are using this specification. Please do not make changes to it without consulting with the authors of Esprima, Escodegen, and Acorn.

Example:

> var expr = Reflect.parse("obj.foo + 42").body[0].expression
> expr.left.property
({loc:null, type:"Identifier", name:"foo"})
> expr.right
({loc:{source:null, start:{line:1, column:10}, end:{line:1, column:12}}, type:"Literal", value:42})
It is also available since Firefox 7; it can be imported into the global object via:

Components.utils.import("resource://gre/modules/reflect.jsm")
or into a specified object via:

Components.utils.import("resource://gre/modules/reflect.jsm", obj)
Built-in objects
Whether in SpiderMonkey shell or Firefox (after importing), the global singleton object Reflect currently contains just the parse method.

Properties of the Reflect object
The Reflect object currently consists of a single method.

Reflect.parse(src[, options])

Coerces src to a string and parses the result as a JavaScript program. By default, the parsing returns a Program object (see below) representing the parsed abstract syntax tree (AST).

Additional options may be provided via the options object, which can include any of the following properties:

loc  Boolean  Default: true
When loc is true, the parser includes source location information in the returned AST nodes.
source  String  Default: null
A description of the input source; typically a filename, path, or URL. This string is not meaningful to the parsing process, but is produced as part of the source location information in the returned AST nodes.
line  Number  Default: 1
The initial line number to use for source location information.
builder  Builder  Default: null
A builder object, which can be used to produce AST nodes in custom data formats. The expected callback methods are described under Builder Objects.

If parsing fails due to a syntax error, an instance of SyntaxError is thrown. The syntax error object thrown by Reflect.parse() has the same message property as the syntax error that would be thrown by eval(src). The lineNumber and fileName properties of the syntax error object indicate the source location of the syntax error.

jssm'Node objects

name::
* McsEngl.jssm'Node objects@cptIt,

By default, Reflect.parse() produces Node objects, which are plain JavaScript objects (i.e., their prototype derives from the standard Object prototype). All node types implement the following interface:

interface jssm'Node {
type:  string;
loc:  SourceLocation#ql:jssm'sourcelocation# | null;
}
The type field is a string representing the AST variant type. Each subtype of Node is documented below with the specific string of its type field. You can use this field to determine which interface a node implements.

The loc field represents the source location information of the node. If the parser produced no information about the node's source location, the field is null; otherwise it is an object consisting of a start position (the position of the first character of the parsed source region) and an end position (the position of the first character after the parsed source region):

interface jssm'SourceLocation {
source:  string | null;
start:  Position;
end:  Position;
}

Each Position object consists of a line number (1-indexed) and a column number (0-indexed):

interface jssm'Position {
line:  uint32 >= 1;
column:  uint32 >= 0;
}

jssm'Programs

name::
* McsEngl.jssm'Programs@cptIt,

interface jssm'Program <: Node#ql:jssm'node# {
type:  "Program";
body:  [ Statement#ql:jssm'Statement# ];
}
A complete program source tree.

jssm'Functions

name::
* McsEngl.jssm'Functions@cptIt,

interface jssm'Function <: Node#ql:jssm'node# {
id:    Identifier | null;
params:    [ Pattern ];
defaults:    [ Expression ];
rest:    Identifier | null;
body:    BlockStatement | Expression;
generator:  boolean;
expression:  boolean;
}
A function declaration or expression. The body of the function may be a block statement, or in the case of an expression closure, an expression.
Note: Expression closures are SpiderMonkey-specific.
If the generator flag is true, the function is a generator function, i.e., contains a yield expression in its body (other than in a nested function).
Note: Generators are SpiderMonkey-specific.
If the expression flag is true, the function is an expression closure and the body field is an expression.

jssm'Statements

name::
* McsEngl.jssm'Statements@cptIt,

interface jssm'Statement <: Node#ql:jssm'node# { }
Any statement.
=== specific:
* block#ql:jssm'blockstatement#
* break#ql:jssm'breakstatement#
* continue#ql:jssm'continuestatement#
* dowhile#ql:jssm'dowhilestatement#
* empty#ql:jssm'emptystatement#
* expression#ql:jssm'exnstatement#
* for#ql:jssm'forstatement#
* forin#ql:jssm'forinstatement#
* if#ql:jssm'ifstatement#
* labeled#ql:jssm'labeledstatement#
* switch#ql:jssm'switchstatement#
* try#linkL#E
* while#ql:jssm'whilestatement#
* with#ql:jssm'withstatement#

interface jssm'EmptyStatement <: Statement {
type: "EmptyStatement";
}
An empty statement, i.e., a solitary semicolon.
===
//;
{
"type": "EmptyStatement"
},

interface jssm'BlockStatement <: Statement {
type:  "BlockStatement";
body:  [ Statement ];
}
A block statement, i.e., a sequence of statements surrounded by braces.
===
//{}
{
"type": "BlockStatement",
"body": []
}

interface jssm'ExpressionStatement <: Statement { //jssm'exnstatement
type:    "ExpressionStatement";
expression:  Expression#ql:jssm'Expression#;
}
An expression statement, i.e., a statement consisting of a single expression.
===
//s="\u0061"
{
"type": "ExpressionStatement",
"expression": {
"type": "AssignmentExpression",
"operator": "=",
"left": {
"type": "Identifier",
"name": "s"
},
"right": {
"type": "Literal",
"value": "a",
"raw": "\"\\u0061\""
}
}
}
===
//"\u0061"
{
"type": "ExpressionStatement",
"expression": {
"type": "Literal",
"value": "a",
"raw": "\"\\u0061\""
}
}
===
//a=[]
{
"type": "ExpressionStatement",
"expression": {
"type": "AssignmentExpression",
"operator": "=",
"left": {
"type": "Identifier",
"name": "a"
},
"right": {
"type": "ArrayExpression",
"elements": []
}
}
}
===
//0X04
{
"type": "ExpressionStatement",
"expression": {
"type": "Literal",
"value": 4,
"raw": "0X04"
}
}
===
//(function(){})
{
"type": "ExpressionStatement",
"expression": {
"type": "FunctionExpression",
"id": null,
"params": [],
"defaults": [],
"body": {
"type": "BlockStatement",
"body": []
},
"rest": null,
"generator": false,
"expression": false
}
}

interface jssm'IfStatement <: Statement {
type:    "IfStatement";
test:    Expression;
consequent:  Statement;
alternate:  Statement | null;
}
An if statement.
===
//if (true) 2; else;
{
"type": "IfStatement",
"test": {
"type": "Literal",
"value": true,
"raw": "true"
},
"consequent": {
"type": "ExpressionStatement",
"expression": {
"type": "Literal",
"value": 2,
"raw": "2"
}
},
"alternate": {
"type": "EmptyStatement"
}
}

interface jssm'LabeledStatement <: Statement {
type:  "LabeledStatement";
label:  Identifier;
body:  Statement;
}
A labeled statement, i.e., a statement prefixed by a break/continue label.
===
//start: for (;;) break start
//start: while (true) break start
==
//start: x
{
"type": "LabeledStatement",
"label": {
"type": "Identifier",
"name": "start"
},
"body": {
"type": "ExpressionStatement",
"expression": {
"type": "Identifier",
"name": "x"
}
}
}

interface jssm'BreakStatement <: Statement {
type:  "BreakStatement";
label:  Identifier | null;
}
A break statement.
===
{
"type": "BreakStatement",
"label": null
}

interface jssm'ContinueStatement <: Statement {
type:  "ContinueStatement";
label:  Identifier | null;
}
A continue statement.
===
{
"type": "ContinueStatement",
"label": null
}

interface jssm'WithStatement <: Statement {
type:  "WithStatement";
object:  Expression;
body:  Statement;
}
A with statement.
===
//with (x) {}
{
"type": "WithStatement",
"object": {
"type": "Identifier",
"name": "x"
},
"body": {
"type": "BlockStatement",
"body": []
}
}

interface jssm'SwitchStatement <: Statement {
type:    "SwitchStatement";
discriminant:  Expression;
cases:    [ SwitchCase#ql:jssm'switchcase# ];
lexical:    boolean;
}
A switch statement. The lexical flag is metadata indicating whether the switch statement contains any unnested let declarations (and therefore introduces a new lexical scope).
===
//switch (answer) { case 42: hi(); break; default: break }
{
"type": "SwitchStatement",
"discriminant": {
"type": "Identifier",
"name": "answer"
},
"cases": [
{
"type": "SwitchCase",
"test": {
"type": "Literal",
"value": 42,
"raw": "42"
},
"consequent": [
{
"type": "ExpressionStatement",
"expression": {
"type": "CallExpression",
"callee": {
"type": "Identifier",
"name": "hi"
},
"arguments": []
}
},
{
"type": "BreakStatement",
"label": null
}
]
},
{
"type": "SwitchCase",
"test": null,
"consequent": [
{
"type": "BreakStatement",
"label": null
}
]
}
]
}

interface jssm'ReturnStatement <: Statement {
type:    "ReturnStatement";
argument:  Expression | null;
}
A return statement.
=== whole:
* function-declaration#ql:jssm'functiondeclaration#
===
//return x;
{
"type": "ReturnStatement",
"argument": {
"type": "Identifier",
"name": "x"
}
}

interface jssm'ThrowStatement <: Statement {
type: "ThrowStatement";
argument: Expression;
}
A throw statement.
===
//throw []
{
"type": "ThrowStatement",
"argument": {
"type": "ArrayExpression",
"elements": []
}
}

interface jssm'TryStatement <: Statement#ql:jssm'statement# {
type:    "TryStatement";
block:    BlockStatement#ql:jssm'BlockStatement#;
handler:    CatchClause | null;
guardedHandlers: [ CatchClause ];
finalizer:    BlockStatement | null;
}
A try statement.
Note: Multiple catch clauses are SpiderMonkey-specific.
===
//try { } catch (e) { }
{
"type": "TryStatement",
"block": {
"type": "BlockStatement",
"body": []
},
"guardedHandlers": [],
"handlers": [
{
"type": "CatchClause",
"param": {
"type": "Identifier",
"name": "e"
},
"body": {
"type": "BlockStatement",
"body": []
}
}
],
"finalizer": null
}

interface jssm'WhileStatement <: Statement#ql:jssm'statement# {
type:  "WhileStatement";
test:  Expression;
body:  Statement;
}
A while statement.
===
//while (true) { continue }
{
"type": "WhileStatement",
"test": {
"type": "Literal",
"value": true,
"raw": "true"
},
"body": {
"type": "BlockStatement",
"body": [
{
"type": "ContinueStatement",
"label": null
}
]
}
}
===
//while (true) {break}
{
"type": "WhileStatement",
"test": {
"type": "Literal",
"value": true,
"raw": "true"
},
"body": {
"type": "BlockStatement",
"body": [
{
"type": "BreakStatement",
"label": null
}
]
}
}

interface jssm'DoWhileStatement <: Statement#ql:jssm'statement# {
type: "DoWhileStatement";
body: Statement;
test: Expression;
}
A do/while statement.
===
//do {} while (false)
{
"type": "DoWhileStatement",
"body": {
"type": "BlockStatement",
"body": []
},
"test": {
"type": "Literal",
"value": false,
"raw": "false"
}
}

interface jssm'ForStatement <: Statement#ql:jssm'statement# {
type:  "ForStatement";
init:  VariableDeclaration | Expression | null;
test:  Expression | null;
update:  Expression | null;
body:  Statement;
}
A for statement.
===
//for(x = 0; x < 42; x++);
{
"type": "ForStatement",
"init": {
"type": "AssignmentExpression",
"operator": "=",
"left": {
"type": "Identifier",
"name": "x"
},
"right": {
"type": "Literal",
"value": 0,
"raw": "0"
}
},
"test": {
"type": "BinaryExpression",
"operator": "<",
"left": {
"type": "Identifier",
"name": "x"
},
"right": {
"type": "Literal",
"value": 42,
"raw": "42"
}
},
"update": {
"type": "UpdateExpression",
"operator": "++",
"argument": {
"type": "Identifier",
"name": "x"
},
"prefix": false
},
"body": {
"type": "EmptyStatement"
}
}

interface jssm'ForInStatement <: Statement#ql:jssm'statement# {
type:  "ForInStatement";
left:  VariableDeclaration | Expression;
right:  Expression;
body:  Statement;
each:  boolean;
}
A for/in statement, or, if each is true, a for each/in statement.
Note: The for each form is SpiderMonkey-specific.
===
//for (var x in list) ;
{
"type": "ForInStatement",
"left": {
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "x"
},
"init": null
}
],
"kind": "var"
},
"right": {
"type": "Identifier",
"name": "list"
},
"body": {
"type": "EmptyStatement"
},
"each": false
}

interface jssm'ForOfStatement <: Statement {
type: "ForOfStatement";
left: VariableDeclaration | Expression;
right: Expression;
body: Statement;
}
A for/of statement.

interface jssm'LetStatement <: Statement {
type: "LetStatement";
head: [ { id: Pattern, init: Expression | null } ];
body: Statement;
}
A let statement.

Note: The let statement form is SpiderMonkey-specific.

interface jssm'DebuggerStatement <: Statement {
type: "DebuggerStatement";
}
A debugger statement.

Note: The debugger statement is new in ECMAScript 5th edition, although SpiderMonkey has supported it for years.

jssm'Declarations

name::
* McsEngl.jssm'Declarations@cptIt,

interface jssm'Declaration <: Statement#ql:jssm'Statement# { }
Any declaration node. Note that declarations are considered statements; this is because declarations can appear in any statement context in the language recognized by the SpiderMonkey parser.
Note: Declarations in arbitrary nested scopes are SpiderMonkey-specific.

interface jssm'FunctionDeclaration <: Function, Declaration {
type:    "FunctionDeclaration";
id:    Identifier;
params:    [ Pattern ];
defaults:    [ Expression ];
rest:    Identifier | null;
body:    BlockStatement | Expression;
generator:  boolean;
expression:  boolean;
}
A function declaration.
Note: The id field cannot be null.
===
* function-expression#ql:jssm'functionexpression#
===
//function f(){}
{
"type": "FunctionDeclaration",
"id": {
"type": "Identifier",
"name": "f"
},
"params": [],
"defaults": [],
"body": {
"type": "BlockStatement",
"body": []
},
"rest": null,
"generator": false,
"expression": false
}

interface jssm'VariableDeclaration <: Declaration#ql:jssm'Declaration# {
type: "VariableDeclaration";
declarations: [ VariableDeclarator#ql:jssm'VariableDeclarator# ];
kind: "var" | "let" | "const";
}
A variable declaration, via one of var, let, or const.
===
{
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "a"
},
"init": {
"type": "ArrayExpression",
"elements": []
}
}
],
"kind": "var"
}
===
//var a, n=2;
{
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "a"
},
"init": null
},
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "n"
},
"init": {
"type": "Literal",
"value": 2,
"raw": "2"
}
}
],
"kind": "var"
}

interface jssm'VariableDeclarator <: Node {
type: "VariableDeclarator";
id: Pattern#ql:jssm'Pattern#;
init: Expression#ql:jssm'Expression# | null;
}
A variable declarator.

Note: The id field cannot be null.
Note: let and const are SpiderMonkey-specific.
===
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "n"
},
"init": {
"type": "Literal",
"value": 2,
"raw": "2"
}
}

jssm'Expressions

name::
* McsEngl.jssm'Expressions@cptIt,

interface jssm'Expression <: Node#ql:jssm'node#, Pattern#ql:jssm'Pattern# { }
Any expression node. Since the left-hand side of an assignment may be any expression in general, an expression can also be a pattern.
=== specific:
* array#ql:jssm'arrayexpression#
* arrow#ql:jssm'arrowexpression#
* assignment#ql:jssm'assignmentexpression#
* binary#linkL#
* function#ql:jssm'functionexpression#
* literal#ql:jssm'literal#
* identifier#ql:jssm'identifier#
* member#ql:jssm'memberexpression#
* new#ql:jssm'newexpression#
* object#ql:jssm'objectexpression#
* sequence#ql:jssm'sequenceexpression#
* this#ql:jssm'thisexpression#
* unary#linkL#
* update#ql:jssm'updateexpression#

interface jssm'ThisExpression <: Expression {
type: "ThisExpression";
}
A this expression.
===
//this
"expression": {
"type": "ThisExpression"
}

interface jssm'ArrayExpression <: Expression#ql:jssm'Expression# {
type: "ArrayExpression";
elements: [ Expression | null ];
}
An array expression.
===
//[]
"expression": {
"type": "ArrayExpression",
"elements": []
}

interface jssm'ObjectExpression <: Expression#ql:jssm'expression# {
type:    "ObjectExpression";
properties:  [ { key: Literal | Identifier,
  value: Expression,
  kind: "init" | "get" | "set" } ];
}
An object expression. A literal property in an object expression can have either a string or number as its value. Ordinary property initializers have a kind value "init"; getters and setters have the kind values "get" and "set", respectively.
===
//o={p1:1}
"right": {
"type": "ObjectExpression",
"properties": [
{
"type": "Property",
"key": {
"type": "Identifier",
"name": "p1"
},
"value": {
"type": "Literal",
"value": 1,
"raw": "1"
},
"kind": "init"
}
]
}

interface jssm'FunctionExpression <: Function, Expression#ql:jssm'Expression# {
type:    "FunctionExpression";
id:    Identifier | null;
params:    [ Pattern ];
defaults:    [ Expression ];
rest:    Identifier | null;
body:    BlockStatement | Expression;
generator:  boolean;
expression:  boolean;
}
A function expression.
===
* function-declaration#ql:jssm'functiondeclaration#
===
//test = function(x) { }
"type": "FunctionExpression",
"id": null,
"params": [
{
"type": "Identifier",
"name": "x"
}
],
"defaults": [],
"body": {
"type": "BlockStatement",
"body": []
},
"rest": null,
"generator": false,
"expression": false
}

interface jssm'ArrowExpression <: Function, Expression#ql:jssm'Expression# {
type:    "ArrowExpression";
params:    [ Pattern ];
defaults:    [ Expression ];
rest:    Identifier | null;
body:    BlockStatement | Expression;
generator:  boolean;
expression:  boolean;
}
A fat arrow function expression, i.e., `let foo = (bar) => { /* body */ }`.
===
//f=(a)=>{}
"right": {
"type": "ArrowFunctionExpression",
"id": null,
"params": [
{
"type": "Identifier",
"name": "a"
}
],
"defaults": [],
"body": {
"type": "BlockStatement",
"body": []
},
"rest": null,
"generator": false,
"expression": false
}

interface jssm'SequenceExpression <: Expression#ql:jssm'Expression# {
type: "SequenceExpression";
expressions: [ Expression ];
}
A sequence expression, i.e., a comma-separated sequence of expressions.
===
//x,y
{
"type": "SequenceExpression",
"expressions": [
{
"type": "Identifier",
"name": "x"
},
{
"type": "Identifier",
"name": "y"
}
]
}

interface jssm'UnaryExpression <: Expression#ql:jssm'Expression# {
type:    "UnaryExpression";
operator:    UnaryOperator;
prefix:    boolean;
argument:  Expression;
}
A unary operator expression.
===
//typeof x
"expression": {
"type": "UnaryExpression",
"operator": "typeof",
"argument": {
"type": "Identifier",
"name": "x"
},
"prefix": true
}

interface jssm'BinaryExpression <: Expression#ql:jssm'Expression# {
type: "BinaryExpression";
operator: BinaryOperator;
left: Expression;
right: Expression;
}
A binary operator expression.
===
// x - y + z
{
"type": "BinaryExpression",
"operator": "+",
"left": {
"type": "BinaryExpression",
"operator": "-",
"left": {
"type": "Identifier",
"name": "x"
},
"right": {
"type": "Identifier",
"name": "y"
}
},
"right": {
"type": "Identifier",
"name": "z"
}
}

interface jssm'AssignmentExpression <: Expression#ql:jssm'Expression# {
type:    "AssignmentExpression";
operator:    AssignmentOperator#ql:jssm'AssignmentOperator#;
left:    Expression;
right:    Expression;
}
An assignment operator expression.
===
//n=1
"expression": {
"type": "AssignmentExpression",
"operator": "=",
"left": {
"type": "Identifier",
"name": "n"
},
"right": {
"type": "Literal",
"value": 1,
"raw": "1"
}
}

interface jssm'UpdateExpression <: Expression#ql:jssm'Expression# {
type:    "UpdateExpression";
operator:    UpdateOperator;
argument:  Expression;
prefix:    boolean;
}
An update (increment or decrement) operator expression.
===
//x++
{
"type": "UpdateExpression",
"operator": "++",
"argument": {
"type": "Identifier",
"name": "x"
},
"prefix": false
}

interface jssm'LogicalExpression <: Expression#ql:jssm'Expression# {
type:    "LogicalExpression";
operator:    LogicalOperator;
left:    Expression;
right:    Expression;
}
A logical operator expression.
===
//x&&b
"expression": {
"type": "LogicalExpression",
"operator": "&&",
"left": {
"type": "Identifier",
"name": "x"
},
"right": {
"type": "Identifier",
"name": "b"
}
}

interface jssm'ConditionalExpression <: Expression#ql:jssm'Expression# {
type: "ConditionalExpression";
test: Expression;
alternate: Expression;
consequent: Expression;
}
A conditional expression, i.e., a ternary ?/: expression.
===
//b ? 1 : 2
{
"type": "ConditionalExpression",
"test": {
"type": "Identifier",
"name": "b"
},
"consequent": {
"type": "Literal",
"value": 1,
"raw": "1"
},
"alternate": {
"type": "Literal",
"value": 2,
"raw": "2"
}
}

interface jssm'NewExpression <: Expression#ql:jssm'Expression# {
type:    "NewExpression";
callee:    Expression;
arguments:  [ Expression ];
}
A new expression.
===
//new Button
{
"type": "NewExpression",
"callee": {
"type": "Identifier",
"name": "Button"
},
"arguments": []
}
===
//new foo()
"expression": {
"type": "NewExpression",
"callee": {
"type": "Identifier",
"name": "foo"
},
"arguments": []
}

interface jssm'CallExpression <: Expression#ql:jssm'Expression# {
type: "CallExpression";
callee: Expression;
arguments: [ Expression ];
}
A function or method call expression.
===
//f()
"expression": {
"type": "CallExpression",
"callee": {
"type": "Identifier",
"name": "f"
},
"arguments": []
}
===
//(function(){})()
"expression": {
"type": "CallExpression",
"callee": {
"type": "FunctionExpression",
"id": null,
"params": [],
"defaults": [],
"body": {
"type": "BlockStatement",
"body": []
},
"rest": null,
"generator": false,
"expression": false
},
"arguments": []
}

interface jssm'MemberExpression <: Expression#ql:jssm'Expression# {
type:    "MemberExpression";
computed:  boolean;
object:    Expression;
property:  Identifier | Expression;
}
A member expression. If computed === true, the node corresponds to a computed e1[e2] expression and property is an Expression. If computed === false, the node corresponds to a static e1.x expression and property is an Identifier.
===
//o.foo
"expression": {
"type": "MemberExpression",
"computed": false,
"object": {
"type": "Identifier",
"name": "o"
},
"property": {
"type": "Identifier",
"name": "foo"
}
}
===
//o[foo]
"expression": {
"type": "MemberExpression",
"computed": true,
"object": {
"type": "Identifier",
"name": "o"
},
"property": {
"type": "Identifier",
"name": "foo"
}
}
===
//universe.milkyway
{
"type": "MemberExpression",
"computed": false,
"object": {
"type": "Identifier",
"name": "universe"
},
"property": {
"type": "Identifier",
"name": "milkyway"
}
}

interface jssm'YieldExpression <: Expression#ql:jssm'Expression# {
argument: Expression | null;
}
A yield expression.

Note: yield expressions are SpiderMonkey-specific.

interface jssm'ComprehensionExpression <: Expression#ql:jssm'Expression# {
body: Expression;
blocks: [ ComprehensionBlock#ql:jssm'ComprehensionBlock# ];
filter: Expression | null;
}
An array comprehension. The blocks array corresponds to the sequence of for and for each blocks. The optional filter expression corresponds to the final if clause, if present.

Note: Array comprehensions are SpiderMonkey-specific.

interface jssm'GeneratorExpression <: Expression#ql:jssm'Expression# {
body: Expression;
blocks: [ ComprehensionBlock ];
filter: Expression | null;
}
A generator expression. As with array comprehensions, the blocks array corresponds to the sequence of for and for each blocks, and the optional filter expression corresponds to the final if clause, if present.

Note: Generator expressions are SpiderMonkey-specific.

interface jssm'GraphExpression <: Expression#ql:jssm'Expression# {
index: uint32;
expression: Literal;
}
A graph expression, aka "sharp literal," such as#1={ self:#1# }.

Note: Graph expressions are SpiderMonkey-specific.

interface jssm'GraphIndexExpression <: Expression#ql:jssm'Expression# {
index: uint32;
}
A graph index expression, aka "sharp variable," such as#1#.

Note: Graph index expressions are SpiderMonkey-specific.

interface jssm'LetExpression <: Expression#ql:jssm'Expression# {
type:  "LetExpression";
head:  [ { id: Pattern, init: Expression | null } ];
body:  Expression;
}
A let expression.

Note: The let expression form is SpiderMonkey-specific.

jssm'Patterns

name::
* McsEngl.jssm'Patterns@cptIt,

interface jssm'Pattern <: Node#ql:jssm'node# { }
JavaScript 1.7 introduced destructuring assignment and binding forms. All binding forms (such as function parameters, variable declarations, and catch block headers) accept array and object destructuring patterns in addition to plain identifiers. The left-hand sides of assignment expressions can be arbitrary expressions, but in the case where the expression is an object or array literal, it is interpreted by SpiderMonkey as a destructuring pattern.

Since the left-hand side of an assignment can in general be any expression, in an assignment context, a pattern can be any expression. In binding positions (such as function parameters, variable declarations, and catch headers), patterns can only be identifiers in the base case, not arbitrary expressions.

interface jssm'ObjectPattern <: Pattern {
type: "ObjectPattern";
properties: [ { key: Literal | Identifier, value: Pattern } ];
}
An object-destructuring pattern. A literal property in an object pattern can have either a string or number as its value.

interface jssm'ArrayPattern <: Pattern {
type: "ArrayPattern";
elements: [ Pattern | null ];
}
An array-destructuring pattern.

jssm'Clauses

name::
* McsEngl.jssm'Clauses@cptIt,

interface jssm'SwitchCase <: Node {
type:    "SwitchCase";
test:    Expression | null;
consequent:  [ Statement ];
}
A case (if test is an Expression) or default (if test === null) clause in the body of a switch statement.
=== _whole:
* switch-statement#ql:jssm'switchstatement#
===
//default: break
===
//case 42: hi(); break;
{
"type": "SwitchCase",
"test": {
"type": "Literal",
"value": 42,
"raw": "42"
},
"consequent": [
{
"type": "ExpressionStatement",
"expression": {
"type": "CallExpression",
"callee": {
"type": "Identifier",
"name": "hi"
},
"arguments": []
}
},
{
"type": "BreakStatement",
"label": null
}
]
},

interface jssm'CatchClause <: Node {
type:  "CatchClause";
param:  Pattern;
guard:  Expression | null;
body:  BlockStatement;
}
A catch clause following a try block. The optional guard property corresponds to the optional expression guard on the bound variable.
Note: The guard expression is SpiderMonkey-specific.
=== whole:
* try-statement#ql:jssm'trystatement#
===
//catch (e) {}
{
"type": "TryStatement",
"block": {
"type": "BlockStatement",
"body": []
},
"guardedHandlers": [],
"handlers": [
{
"type": "CatchClause",
"param": {
"type": "Identifier",
"name": "e"
},
"body": {
"type": "BlockStatement",
"body": []
}
}
],
"finalizer": null
}

interface jssm'ComprehensionBlock <: Node {
left: Pattern;
right: Expression;
each: boolean;
}
A for or for each block in an array comprehension or generator expression.
Note: Array comprehensions and generator expressions are SpiderMonkey-specific.

jssm'Miscellaneous

name::
* McsEngl.jssm'Miscellaneous@cptIt,

interface jssm'Identifier <: Node, Expression#ql:jssm'expression#, Pattern#ql:jssm'pattern# {
type: "Identifier";
name: string;
}
An identifier. Note that an identifier may be an expression or a destructuring pattern.
===
{
"type": "Identifier",
"name": "Button"
}

interface jssm'Literal <: Node, Expression#ql:jssm'expression# {
type: "Literal";
value: string | boolean | null | number | RegExp;
}
A literal token. Note that a literal can be an expression.
=== specific:
* jssm'boolean
* jssm'null
* jssm'number
* jssm'regexp
* jssm'string
===
//boolean
{
"type": "Literal",
"value": true,
"raw": "true"
}
===
//null
{
"type": "Literal",
"value": null,
"raw": "null"
}
===
//number
{
"type": "Literal",
"value": 2,
"raw": "2"
}
---
{
"type": "Literal",
"value": 41,
"raw": "0x29"
}
===
//regexp
{
"type": "Literal",
"value": "/./g",
"raw": "/./g"
}
===
//string
{
"type": "Literal",
"value": "string",
"raw": "'string'"
}

[jssm'Operator]:
* AssignmentOperator
* BinaryOperator
* LogicalOperator
* UnaryOperator
* UpdateOperator

enum jssm'UnaryOperator {
"-" | "+" | "!" | "~" | "typeof" | "void" | "delete"
}
A unary operator token.
=== _generic:
* operator#ql:jssm'operator#

enum jssm'BinaryOperator {
"==" | "!=" | "===" | "!=="
| "<" | "<=" | ">" | ">="
| "<<" | ">>" | ">>>"
| "+" | "-" | "*" | "/" | "%"
| "|" | "^" | "&" | "in"
| "instanceof" | ".."
}
A binary operator token.

Note: The .. operator is E4X-specific.
=== _generic:
* operator#ql:jssm'operator#

enum jssm'LogicalOperator {
"||" | "&&"
}
A logical operator token.
=== _generic:
* operator#ql:jssm'operator#

enum jssm'AssignmentOperator {
"=" | "+=" | "-=" | "*=" | "/=" | "%="
| "<<=" | ">>=" | ">>>="
| "|=" | "^=" | "&="
}
An assignment operator token.
=== _generic:
* operator#ql:jssm'operator#

enum jssm'UpdateOperator {
"++" | "--"
}
An update (increment or decrement) operator token.
=== _generic:
* operator#ql:jssm'operator#

jssm'E4X

name::
* McsEngl.jssm'E4X@cptIt,

This section describes node types that are provided for E4X support. E4X has since been removed as of Gecko 21.

Obsolete
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
Note: E4X is not part of the ECMAScript standard (ECMA-262), but is a separate standard of its own (ECMA-357).
Declarations

interface jssm'XMLDefaultDeclaration <: Declaration {
type: "XMLDefaultDeclaration";
namespace: Expression;
}
A default xml namespace declaration.

Expressions

interface jssm'XMLAnyName <: Expression {
type: "XMLAnyName";
}
The special E4X wildcard pseudo-identifier *.

interface jssm'XMLQualifiedIdentifier <: Expression {
type: "XMLQualifiedIdentifier";
left: Identifier | XMLAnyName;
right: Identifier | Expression;
computed: boolean;
}
An E4X qualified identifier, i.e., a pseudo-identifier using the namespace separator ::. If the qualified identifier has a computed name (i.e., the id::[expr] form), then computed is true and the right property is an expression.

interface jssm'XMLFunctionQualifiedIdentifier <: Expression {
type: "XMLFunctionQualifiedIdentifier";
right: Identifier | Expression;
computed: boolean;
}
An E4X identifier qualified by the function keyword, e.g., function::id.

Note: function-qualified identifiers are SpiderMonkey-specific.
interface jssm'XMLAttributeSelector <: Expression {
type: "XMLAttributeSelector";
attribute: Expression;
}
An E4X attribute selector expression, i.e., an @ expression.

interface jssm'XMLFilterExpression <: Expression {
type: "XMLFilterExpression";
left: Expression;
right: Expression;
}
An E4X list filter expression, i.e., an expression of the form expr.(expr).

interface jssm'XMLElement <: XML, Expression {
type: "XMLElement";
contents: [ XML ];
}
An E4X literal representing a single XML element.

interface jssm'XMLList <: XML, Expression {
type: "XMLList";
contents: [ XML ];
}
An E4X literal representing a list of XML elements.

XML

interface jssm'XML <: Node { }
XML data.

interface jssm'XMLEscape <: XML {
type "XMLEscape";
expression: Expression;
}
XML data with an escaped JavaScript expression.

interface jssm'XMLText <: XML {
type: "XMLText";
text: string;
}
Literal XML text.

interface jssm'XMLStartTag <: XML {
type: "XMLStartTag";
contents: [ XML ];
}
An XML start tag.

interface jssm'XMLEndTag <: XML {
type: "XMLEndTag";
contents: [ XML ];
}
An XML end tag.

interface jssm'XMLPointTag <: XML {
type: "XMLPointTag";
contents: [ XML ];
}
An XML point tag.

interface jssm'XMLName <: XML {
type: "XMLName";
contents: string | [ XML ];
}
An XML name.

interface jssm'XMLAttribute <: XML {
type: "XMLAttribute";
value: string;
}
An XML attribute value.

interface jssm'XMLCdata <: XML {
type: "XMLCdata";
contents: string;
}
An XML CDATA node.

interface jssm'XMLComment <: XML {
type: "XMLComment";
contents: string;
}
An XML comment.

interface jssm'XMLProcessingInstruction <: XML {
type: "XMLProcessingInstruction";
target: string;
contents: string | null;
}
An XML processing instruction.

jssm'Builder objects

name::
* McsEngl.jssm'Builder objects@cptIt,

The optional builder parameter to Reflect.parse() makes it possible to construct user-specified data from the parser, rather than the default Node objects. Builder objects may contain any of the callback methods described in this section.

Each callback can produce any custom, user-defined datatype; these are referred to below as CustomExpression, CustomStatement, etc.

Note: Because this library uses null for optional nodes, it is recommended that user-defined datatypes not use null as a representation of an AST node.
If the loc option is enabled (see the Reflect.parse() options above), then each callback is provided with the source location information of the parsed node as an extra parameter.

All builder callbacks are optional. When a callback is missing, the default format is used, but the provided builder methods are still used recursively for sub-nodes.

Programs

program(body[, loc])
body: [ CustomStatement ]
loc: SourceLocation
Returns: CustomProgram

Callback to produce a custom program node.

Statements

emptyStatement([loc])
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom empty statement node.

blockStatement(body[, loc])
body: CustomStatement
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom block statement node.

expressionStatement(expr[, loc])
expr: CustomExpression
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom expression statement node.

labeledStatement(label, body[, loc])
label: CustomIdentifier
body: CustomStatement
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom labeled statement node.

ifStatement(test, cons, alt[, loc])
test: CustomExpression
cons: CustomStatement
alt: CustomStatement | null
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom if statement node.

switchStatement(disc, cases, isLexical[, loc])
disc: CustomExpression
cases: [ CustomSwitchCase ]
isLexical: boolean
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom switch statement node. The isLexical flag is metadata indicating whether the switch statement contains any unnested let declarations (and therefore introduces a new lexical scope).

whileStatement(test, body[, loc])
test: CustomExpression
body: CustomStatement
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom while statement node.

doWhileStatement(body, test[, loc])
body: CustomStatement
test: CustomExpression
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom do-while statement node.

forStatement(init, test, update, body[, loc])
init: CustomVariableDeclaration | CustomExpression | null
test: CustomExpression | null
update: CustomExpression | null
body: CustomStatement
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom for statement node.

forInStatement(left, right, body, isForEach[, loc])
left: CustomVariableDeclaration | CustomExpression
right: CustomExpression
body: CustomStatement
isForEach: boolean
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom for-in statement node. The isForEach flag indicates whether the node is a for each statement.

breakStatement(label[, loc])
label: CustomIdentifier | null
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom break statement node.

continueStatement(label[, loc])
label: CustomIdentifier | null
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom continue statement node.

withStatement(obj, body[, loc])
obj: CustomExpression
body: CustomStatement
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom with statement node.

returnStatement(arg[, loc])
arg: CustomExpression | null
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom return statement node.

tryStatement(body, handlers, fin[, loc])
body: CustomStatement
handlers: [ CustomCatchClause ]
fin: CustomStatement | null
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom try statement node.

throwStatement(arg[, loc])
arg: CustomExpression
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom throw statement node.

debuggerStatement([loc])
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom debugger statement node.

letStatement(head, body[, loc])
head: [ CustomDeclarator ]
body: CustomStatement
loc: SourceLocation
Returns: CustomStatement

Callback to produce a custom let statement node.

Declarations

functionDeclaration(name, args, body, isGenerator, isExpression[, loc])
name: string
args: [ CustomPattern ]
body: CustomStatement | CustomExpression
isGenerator: boolean
isExpression: boolean
loc: SourceLocation
Returns: CustomDeclaration

Callback to produce a custom function declaration node.

variableDeclaration(kind, dtors[, loc])
kind: "const" | "let" | "var"
dtors: [ CustomDeclarator ]
loc: SourceLocation
Returns: CustomDeclaration

Callback to produce a custom variable declaration node.

variableDeclarator(patt, init[, loc])
patt: CustomPattern
init: CustomExpression | null
loc: SourceLocation
Returns: CustomDeclarator

Callback to produce a custom variable declarator node.

Expressions

sequenceExpression(exprs[, loc])
exprs: [ CustomExpression ]
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom sequence expression node.

conditionalExpression(test, cons, alt[, loc])
test: CustomExpression
cons: CustomExpression
alt: CustomExpression
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom conditional expression node.

unaryExpression(op, arg, isPrefix[, loc])
op: UnaryOperator
arg: CustomExpression
isPrefix: boolean
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom unary expression node.

binaryExpression(op, left, right[, loc])
op: BinaryOperator
left: CustomExpression
right: CustomExpression
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom binary expression node.

assignmentExpression(op, left, right[, loc])
op: AssignmentOperator
left: CustomExpression
right: CustomExpression
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom assignment expression node.

logicalExpression(op, left, right[, loc])
op: LogicalOperator
left: CustomExpression
right: CustomExpression
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom logical expression node.

updateExpression(op, arg, isPrefix[, loc])
op: UpdateOperator
arg: CustomExpression
isPrefix: boolean
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom update expression node.

newExpression(callee, args[, loc])
callee: CustomExpression
args: [ CustomExpression ]
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom new-expression node.

callExpression(callee, args[, loc])
callee: CustomExpression
args: [ CustomExpression ]
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom function call node.

memberExpression(obj, prop, isComputed[, loc])
obj: CustomExpression
prop: CustomIdentifier | CustomExpression
isComputed: boolean
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom member expression node.

functionExpression(name, args, body, isGenerator, isExpression[, loc])
name: CustomIdentifier | null
args: [ CustomPattern ]
body: CustomStatement | CustomExpression
isGenerator: boolean
isExpression: boolean
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom function expression node.

arrayExpression(elts[, loc])
elts: [ CustomExpression | null ]
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom array expression node.

objectExpression(props[, loc])
props: [ CustomObjectProperty ]
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom object expression node.

thisExpression([loc])
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom this expression node.

graphExpression(index, expr[, loc])
index: uint32 >= 1
expr: CustomExpression
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom graph expression node.

graphIndexExpression(index[, loc])
index: uint32 >= 1
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom graph index expression node.

comprehensionExpression(body, blocks, filter[, loc])
body: CustomExpression
blocks: [ CustomComprehensionBlock ]
filter: CustomExpression | null
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom comprehension expression node.

generatorExpression(body, blocks, filter[, loc])
body: CustomExpression
blocks: [ CustomComprehensionBlock ]
filter: CustomExpression | null
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom generator expression node.

yieldExpression(arg[, loc])
arg: CustomExpression
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom yield expression node.

letExpression(head, body[, loc])
head: [ CustomDeclarator ]
body: CustomExpression
loc: SourceLocation
Returns: CustomExpression

Callback to produce a custom let expression node.

Patterns

arrayPattern(elts[, loc])
elts: [ CustomPattern | null ]
loc: SourceLocation
Returns: CustomPattern

Callback to produce a custom array destructuring pattern node.

objectPattern(props[, loc])
props: [ CustomPropertyPattern ]
loc: SourceLocation
Returns: CustomPattern

Callback to produce a custom object destructuring pattern node.

propertyPattern(key, patt[, loc])
key: CustomLiteral | CustomIdentifier
patt: CustomPattern
loc: SourceLocation
Returns: CustomPropertyPattern

Callback to produce a custom object property destructuring pattern node.

Clauses

switchCase(test, cons[, loc])
test: CustomExpression | null
cons: [ CustomStatement ]
loc: SourceLocation
Returns: CustomSwitchCase

Callback to produce a custom case or default clause node. The test argument is null if and only if the node is a default clause.

catchClause(arg, guard, body[, loc])
arg: CustomPattern
guard: CustomExpression
body: CustomStatement
loc: SourceLocation
Returns: CustomCatchClause

Callback to produce a custom catch clause node.

comprehensionBlock(left, right, isForEach[, loc])
left: CustomPattern
right: CustomExpression
isForEach: boolean
loc: SourceLocation
Returns: CustomComprehensionBlock

Callback to produce a custom comprehension block node. The isForEach flag indicates whether the node is a for each block.

Miscellaneous

identifier(name[, loc])
name: string
loc: SourceLocation
Returns: CustomIdentifier/CustomPattern/CustomExpression

Callback to produce a custom identifier node.

literal(val[, loc])
val: string | boolean | null | number | RegExp
loc: SourceLocation
Returns: CustomLiteral / CustomExpression

Callback to produce a custom literal node.

property(kind, key, val[, loc])
kind: "init" | "get" | "set"
key: CustomLiteral | CustomIdentifier
val: CustomExpression
loc: SourceLocation
Returns: CustomObjectProperty

Callback to produce a custom object property initializer node.

E4X

Declarations

xmlDefaultDeclaration(ns[, loc])
loc: SourceLocation
Returns: CustomDeclaration

Callback to produce a custom XML default namespace declaration node.

Expressions

xmlAnyName([loc])
loc: SourceLocation
Returns: CustomXMLAnyName/CustomXML/CustomExpression

Callback to produce a custom XML node for the wildcard pseudo-identifier *.

xmlAttributeSelector(expr[, loc])
expr: CustomExpression
loc: SourceLocation
Returns: CustomXML/CustomExpression

Callback to produce a custom XML attribute selector node.

xmlFilterExpression(left, right[, loc])
left: CustomExpression
right: CustomExpression
loc: SourceLocation
Returns: CustomXML/CustomExpression

Callback to produce a custom XML filter expression node.

xmlQualifiedIdentifier(left, right, isComputed[, loc])
left: CustomIdentifier | CustomXMLAnyName
right: CustomIdentifier | CustomExpression
isComputed: boolean
loc: SourceLocation
Returns: CustomXML/CustomExpression

Callback to produce a custom qualified identifier node.

xmlFunctionQualifiedIdentifier(right, isComputed[, loc])
right: CustomIdentifier | CustomExpression
isComputed: boolean
loc: SourceLocation
Returns: CustomXML/CustomExpression

Callback to produce a custom XML function-qualified identifier node.

xmlElement(contents[, loc])
contents: [ CustomXML ]
loc: SourceLocation
Returns: CustomXML/CustomExpression

Callback to produce a custom XML element node.

xmlList(contents[, loc])
contents: [ CustomXML ]
loc: SourceLocation
Returns: CustomXML/CustomExpression

Callback to produce a custom XML list node.

XML

xmlEscape(expr[, loc])
expr: CustomExpression
loc: SourceLocation
Returns: CustomXML

Callback to produce a custom XML escape node.

xmlText(text[, loc])
text: string
loc: SourceLocation
Returns: CustomXML

Callback to produce a custom XML text node.

xmlStartTag(contents[, loc])
contents: [ CustomXML ]
loc: SourceLocation
Returns: CustomXML

Callback to produce a custom XML start-tag node.

xmlEndTag(contents[, loc])
contents: [ CustomXML ]
loc: SourceLocation
Returns: CustomXML

Callback to produce a custom XML end-tag node.

xmlPointTag(contents[, loc])
contents: [ CustomXML ]
loc: SourceLocation
Returns: CustomXML

Callback to produce a custom XML point tag node.

xmlName(contents[, loc])
contents: string | [ CustomXML ]
loc: SourceLocation
Returns: CustomXML

Callback to produce a custom XML name node.

xmlAttribute(value[, loc])
value: string
loc: SourceLocation
Returns: CustomXML

Callback to produce a custom XML attribute node.

xmlCdata(contents[, loc])
contents: string
loc: SourceLocation
Returns: CustomXML

Callback to produce a custom XML CDATA node.

xmlComment(contents[, loc])
contents: string
loc: SourceLocation
Returns: CustomXML

Callback to produce a custom XML comment node.

xmlProcessingInstruction(target, contents[, loc])
target: string
contents: string | null
loc: SourceLocation
Returns: CustomXML

Callback to produce a custom XML processing instruction node.

Document Tags and Contributors
Tags: GuideAPISpiderMonkeyJavaScript

jssm'token

name::
* McsEngl.jssm'token@cptIt,

_SPECIFIC:
TokenName[Token.BooleanLiteral] = 'Boolean';
TokenName[Token.EOF] = '<end>';
TokenName[Token.Identifier] = 'Identifier';
TokenName[Token.Keyword] = 'Keyword';
TokenName[Token.NullLiteral] = 'Null';
TokenName[Token.NumericLiteral] = 'Numeric';
TokenName[Token.Punctuator] = 'Punctuator';
TokenName[Token.StringLiteral] = 'String';
TokenName[Token.RegularExpression] = 'RegularExpression';

jssm'token.EOF, jssm'EOF_token:

jssm'token.Identifer, jssm'Identifier_token:
{ type: 'Identifier', value: 'a' },

jssm'token.Keyword, jssm'Keyword_token:

jssm'token.LiteralBoolean, jssm'Boolean_token:

jssm'token.LiteralNull, jssm'Null_token:

jssm'token.LiteralNumeric, jssm'Numeric:

jssm'token.LiteralString, jssm'String_token:

jssm'token.Punctuator, jssm'Punctuator_token:
{ type: 'Punctuator', value: '=' },
{ type: 'Punctuator', value: '[' },
{ type: 'Punctuator', value: ']' } ]

jssm'token.RegularExpression, jssm'RegularExpression_token:

ljb'IDE

name::
* McsEngl.ljb'IDE@cptIt,
* McsEngl.ljside@cptIt,

Comparison of JavaScript-based source code editors
* http://en.wikipedia.org/wiki/Comparison_of_JavaScript-based_source_code_editors

lcpJs'Aksell:
Online IDE
There's nothing to download or install. Create your first app with a single click.
Create web apps in JavaScript right from your browser
[http://www.akshell.com//]
===
closed, 2015-05-28 checked.

Aptana-Studio

_DESCRIPTION:
Aptana Studio 3 is a customized free and (mostly) open source installation of Eclipse for Mac OS X, Windows, and Linux, with much better JavaScript and JavaScript library editing than JSDT (JavaScript Development Tools). It is also available as a plug-in for Eclipse.
Years ago I used Aptana heavily for both JavaScript and Ruby on Rails development, but in recent years development of Aptana has slowed, mostly because Aptana became the underlying technology for Appcelerator Titanium Studio (follow the link to my review). There are currently two committers and 15 contributors on the Aptana GitHub project.
[http://www.infoworld.com/article/2925050/javascript/review-7-javascript-ides-put-to-the-test.html?nsdr=true, Martin Heller, May 27, 2015]

NetBeans-IDE

_DESCRIPTION:
NetBeans has good support for client-side JavaScript, HTML5, and CSS3, and it supports the Cordova/PhoneGap framework for building JavaScript-based mobile applications. Though NetBeans isn’t the fastest IDE on the block, it’s one of the more complete, and it’s available free under an open source license. However, for server-side JavaScript programming, you’ll want to look elsewhere.

The NetBeans JavaScript editor provides syntax highlighting, autocompletion, and code folding, as you’d expect. The JavaScript editing features also work for JavaScript code embedded in PHP, JSP, and HTML files. jQuery support is baked into the editor. While NetBeans 8 was updated to support RequireJS and has a community plug-in for Node.js, attempting to work on a Node.js project or a JavaScript library project is a frustrating experience.

Code analysis runs in the background as you edit, providing warnings and hints. Debugging works in the embedded WebKit browser and in Chrome with the NetBeans Connector installed. The debugger can set DOM, line, event, and XMLHttpRequest breakpoints, and it will display variables, watches, and the call stack. An integrated browser log window displays browser exceptions, errors, and warnings.
[http://www.infoworld.com/article/2925050/javascript/review-7-javascript-ides-put-to-the-test.html?nsdr=true, Martin Heller, May 27, 2015]

Komodo IDE

_DESCRIPTION:
Komodo IDE

I have been a user and fan of Komodo IDE since it was first introduced in 2001. Although newer products such as Sublime Text and WebStorm have surpassed it in some areas, it is still a good editor and IDE.

Komodo IDE provides advanced JavaScript editing, syntax highlighting, navigation, and debugging, but it doesn’t include JavaScript code checking. For that, you can always run JSHint in a shell.

Komodo supports dozens of programming and markup languages, with emphasis on Perl, Python, PHP, Ruby, Tcl, and XSLT. With its wide range of programming and markup language support, including refactoring, debugging, and profiling, Komodo IDE is a very good choice for end-to-end development in open source languages.
[http://www.infoworld.com/article/2925050/javascript/review-7-javascript-ides-put-to-the-test.html?nsdr=true, Martin Heller, May 27, 2015]

Visual-Studio-Code

Visual Studio Code, a new lightweight product currently in Preview, combines many of the strengths of Visual Studio with the open source Atom “Electron” shell, and it runs on Mac OS X and Linux as well as Windows. It’s early days, but Visual Studio Code has the potential to become the new king among JavaScript IDEs.
[http://www.infoworld.com/article/2925050/javascript/review-7-javascript-ides-put-to-the-test.html?nsdr=true, Martin Heller, May 27, 2015]

WebStorm

Today, however, the crown belongs to WebStorm. With excellent editing features, on-the-fly code analysis, strong ALM integration, and support for the leading JavaScript frameworks, WebStorm checks all of the boxes for professional JavaScript developers -- and then some.
[http://www.infoworld.com/article/2925050/javascript/review-7-javascript-ides-put-to-the-test.html?nsdr=true, Martin Heller, May 27, 2015]

ljb'loader

name::
* McsEngl.ljb'loader@cptIt,
* McsEngl.ljs'script-loader@cptIt,

_DESCRIPTION:
What is an asynchronous loader?
Web apps, especially large ones, require many modules and resources. Most of these modules and resources need to be loaded at page load, but some may be loaded later, either in the background or “just in time”. They also need to be loaded as quickly as possible.

The traditional way to load javascript modules is via a <SCRIPT> element in an HTML page. Similarly, CSS files are loaded via a <LINK> element, and text resources are either loaded in the page or via XHR calls.

The problem with <SCRIPT> and <LINK> elements is that a browser must execute them sequentially since it has no idea if one may depend on another. It just assumes the developer has placed them in the correct order and that there are dependencies. (The term “synchronous loading” is used to describe this process since the elements are executed in a single timeline. I think “sequential” is a much better word, but nobody asked me.)

If there are no dependencies between two files, loading them sequentially is a waste of time. These files could be loaded and executed in parallel (i.e at the same time).

An asynchronous loader does just that: it loads javascript files (and other types of files) in parallel as much as possible.

curl.js has lots of company. Other async loaders include LABjs, Steal.js, yepnope.js, $script.js, bdLoad, and RequireJS.
[http://unscriptable.com/2011/03/30/curl-js-yet-another-amd-loader/]

ljb'loader'resource

name::
* McsEngl.ljb'loader'resource@cptIt,

_ADDRESS.WPG:
* http://msdn.microsoft.com/en-us/magazine/hh227261.aspx,

SPECIFIC

name::
* McsEngl.ljs'loader.specific@cptIt,

_SPECIFIC:
* asynchronous-loader##
* curl.js##
* RequireJS##
* synchronous-loader##
===
There are a number of great loaders for handling module loading in the AMD and CommonJS formats, but my personal preferences are RequireJS and curl.js.
[http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modularjavascript]
===
First, I'd suggest knowing how big the scope of your application will be, and how big it might get in the future. This way you can break the list of loaders more or less in half. There are the dependency management loaders like RequireJS, LoadRunner, Dojo, and CurlJS. And there are the smaller more generic script loaders like LabJS, YepnopeJS and A.getJS. The dependency management options generally require some adherence to a module system to actually get the benefit of dependency management, and the generics just load scripts (or avoid loading them) in the order that you provide.
I can't make the actual decision for you. You'll need to look into things like caching headers that are required, memory footprint, fallback support, etc. and grade the loader that you think best fits your requirements. I would however suggest that you get the class of loader correct, as I would not suggest people use Yepnope for super large applications, and RequireJS might be overkill for a small splash page.
[http://msdn.microsoft.com/en-us/magazine/hh227261.aspx]

ljb'loader.AMD

name::
* McsEngl.ljb'loader.AMD@cptIt,

_DESCRIPTION:
Not all async loaders are AMD-compliant. Of the list above, only the following are AMD-compliant:

curl.js http://github.com/unscriptable/curl

RequireJS http://requirejs.org/

bdLoad http://bdframework.org/bdLoad

(there are a few others in that google spreadsheet link)

The beauty of AMD loaders is their ability to remove the drudgery of manually managing dependencies. Since all dependencies are listed within the modules, the loader will ensure that everything is loaded into the browser — and in the right order.

Even better: the modules are always loaded in parallel without blocking the loading process of the rest of the page.
[http://unscriptable.com/2011/03/30/curl-js-yet-another-amd-loader/]

ljb'loader.ASYNCHRONOUS

name::
* McsEngl.ljb'loader.ASYNCHRONOUS@cptIt,

_DESCRIPTION:
If there are no dependencies between two files, loading them sequentially is a waste of time. These files could be loaded and executed in parallel (i.e at the same time).
[http://unscriptable.com/2011/03/30/curl-js-yet-another-amd-loader/]

_CODE.LJS:
// Very simple asynchronous script-loader

// Create a new script element
var script = document.createElement('script');

// Find an existing script element on the page (usually the one this code is in)
var firstScript = document.getElementsByTagName('script')[0];

// Set the location of the script
script.src = "http://example.com/myscript.min.js";

// Inject with insertBefore to avoid appendChild errors
firstScript.parentNode.insertBefore( script, firstScript );

// That's it!
[http://msdn.microsoft.com/en-us/magazine/hh227261.aspx]

ljb'loader.curl

name::
* McsEngl.ljb'loader.curl@cptIt,
* McsEngl.curlJS@cptIt,

_ADDRESS.WPG:
* http://github.com/unscriptable/curl,
* http://unscriptable.com/2011/03/30/curl-js-yet-another-amd-loader//

_HUMAN:
John Hann
@unscriptable
http://unscriptable.com/
creator of curl.js (AMD loader)
Front-end Architect, lifeIMAGE, Inc.
@lifeimageinc
http://lifeimage.com/
[http://unscriptable.com/code/AMD-module-patterns/#0]

ljb'loader.RequireJS

name::
* McsEngl.ljb'loader.RequireJS@cptIt,
* McsEngl.ljs'library.RequireJS@cptIt,
* McsEngl.ljs'RequireJS@cptIt,
* McsEngl.RequireJS@cptIt,

_DESCRIPTION:
RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node. Using a modular script loader like RequireJS will improve the speed and quality of your code.
[http://requirejs.org/]
===
RequireJS, the most popular web-side module system to date, by JR Burke
[http://urequire.org/acknowledgements]

ljb'MINIFIER

name::
* McsEngl.ljb'MINIFIER@cptIt,
* McsEngl.ljs'compressor@cptIt,
* McsEngl.ljs'minifier@cptIt,

ljb'package-manager

name::
* McsEngl.ljb'package-manager@cptIt,
* McsEngl.ljspackage-manager@cptIt,

_ADDRESS.WPG:
* http://wibblycode.wordpress.com/2013/01/01/the-state-of-javascript-package-management//

_SPECIFIC:
* Bower (client)
* npm (server)#ql:npm@cptIt#

Bower

_DESCRIPTION:
client-side packaging
That brings us to client-side packaging. One popular package manager for doing this is called Bower. It introduces this config file called bower.json which is like package.json (or setup.py) but then for declaring front-end package metadata and dependencies. Bower also introduces its own package registry and you have a command-line tool to install packages, which end up in a components directory, much like the way npm installs server-side packages into node_modules.
[http://blog.startifact.com/posts/overwhelmed-by-javascript-dependencies.html]

ljb'PARSER

name::
* McsEngl.ljb'PARSER@cptIt,
* McsEngl.ljsparser@cptIt,
* McsEngl.parser-that-parses-javascript@cptIt,

_ADDRESS.WPG:
* http://ariya.ofilabs.com/2012/07/behind-esprima.html,
* http://www.cjihrig.com/development/jsparser// (jison)
http://cjihrig.com/blog/creating-a-javascript-parser//

_SPECIFIC:
* acorn (written in js)
* esprima (written in js)
* ZeParser (written in js https://github.com/qfox/ZeParser)

ljb'task-runner#ql:ljs'task-runner-cpt#

name::
* McsEngl.ljb'task-runner@cptIt,

ljbtool.TESTING

name::
* McsEngl.ljbtool.TESTING@cptIt,
* McsEngl.ljbtool.testing@cptIt,
* McsEngl.ljb'testing@cptIt,
* McsEngl.ljb'unit-testing@cptIt,

_GENERIC:
* ljs-testing#ql:ljs'testing_cpt#

_ADDRESS.WPG:
* http://devexpress.github.io/testcafe// Automated browser testing for the modern web development stack
TestCafe is a pure node.js solution for testing web apps. It takes care of all the stages: starting browsers, running tests, gathering test results and generating reports. TestCafe doesn’t need browser plugins - it works in all popular modern browsers out-of-the-box.
* https://philipwalton.com/articles/learning-how-to-set-up-automated-cross-browser-javascript-unit-testing//

ljbtool.QUnit

name::
* McsEngl.ljbtool.QUnit@cptIt,
* McsEngl.QUnit@cptIt,

_DESCRIPTION:
What is QUnit?
QUnit is a powerful, easy-to-use JavaScript unit testing framework. It's used by the jQuery, jQuery UI and jQuery Mobile projects and is capable of testing any generic JavaScript code, including itself!

Getting Started
A minimal QUnit test setup:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>QUnit Example</title>
<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.0.1.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<script src="https://code.jquery.com/qunit/qunit-2.0.1.js"></script>
<script src="tests.js"></script>
</body>
</html>
The contents of tests.js:

QUnit.test( "hello test", function( assert ) {
assert.ok( 1 == "1", "Passed!" );
});

The result:

Browser Support

QUnit currently supports the same browsers as jQuery 3.x.

For legacy browser support, including Internet Explorer versions lower than IE9, please use the 1.x series of QUnit.
[http://qunitjs.com/]

ljb'translator

name::
* McsEngl.ljb'translator@cptIt,

ljb'user-interface

name::
* McsEngl.ljb'user-interface@cptIt,
* McsEngl.ljb'user-interface@cptIt,
* McsEngl.ljbui@cptIt,

_GENERIC:
* lwp-ui##

_ADDRESS.WPG:
* http://materializecss.com// (CSS, javascript)
* https://getmdl.io/started/index.html, (CSS, javascript)
* https://material.angularjs.org/latest//
* https://www.polymer-project.org/1.0//
===
* https://haroen.me/floating.js//

js'dialog-box

name::
* McsEngl.js'dialog-box@cptIt,

_ALERT_BOX#ql:jsalert#

_CONFIRM_BOX#ql:jsconfirm#

_PROMPT_BOX#ql:jsprompt#

ljb'view

name::
* McsEngl.ljb'view@cptIt,
* McsEngl.ljscodebase@cptIt,
* McsEngl.ljsview@cptIt,

ljb'macro

name::
* McsEngl.ljb'macro@cptIt,
* McsEngl.ljsmacro@cptIt,

_DESCRIPTION:
You can think of macros as functions that work on syntax. Much like a normal function you write a macro definition and then later invoke the macro with a syntax argument to produce new syntax. Running sweet.js code through the compiler will expand all macros and produce pure JavaScript that can be run in any JS environment.
[http://sweetjs.org/doc/main/sweet.html]

_ADDRESS.WPG:
* http://sweetjs.org/doc/main/sweet.html,

ljs.ECMAScript {1997}

_CREATED: {2013-06-25}

name::
* McsEngl.ljs.ECMAScript {1997}@cptIt,
* McsEngl.ECMAScript@cptIt,
* McsEngl.lcpEs@cptIt, {2014-02-11}
* McsEngl.ljsEm@cptIt, {2013-08-18}
* McsEngl.ljsEs@cptIt, {2013-06-25}

_DESCRIPTION:
ECMAScript is the scripting language standardized by Ecma International in the ECMA-262 specification and ISO/IEC 16262. The language is widely used for client-side scripting on the web, in the form of several well-known implementations such as JavaScript, JScript and ActionScript.
[http://en.wikipedia.org/wiki/ECMAScript]

lcpEs'resource

name::
* McsEngl.lcpEs'resource@cptIt,

_ADDRESS.WPG:
* http://people.mozilla.org/~jorendorff/es6-draft.html,
* http://synagonism.net/standard/techInfo/ecma.262.51.2011.html,
* http://www.ecma-international.org/ecma-262/5.1//
===
ECMA-262   ECMAScript® Language Specification, 5.1 edition (June 2011)  ISO/IEC 16262 *
ECMA-402  ECMAScript® Internationalization API Specification (December 2012)
ECMA-327   ECMAScript 3rd Edition Compact Profile (June 2001)
ECMA-357  ECMAScript for XML (E4X) Specification, 2nd edition (December 2005)  ISO/IEC 22537

lcpEs'TC39

name::
* McsEngl.lcpEs'TC39@cptIt,

TC39 - ECMAScript (formerly TC39-TG1)

Scope - Programme of work - Activities

Scope:

Standardization of the general purpose, cross platform, vendor-neutral programming language ECMAScript. This includes the language syntax, semantics, and libraries and complementary technologies that support the language.


Programme of work:

To maintain and update the standard for the ECMAScript programming language.
To identify, develop and maintain standards for libraries that extend the capabilities of ECMAScript.
To develop test suites that may be used to verify correct implementation of these standards.
To contribute selected standards to ISO/IEC JTC 1.
To evaluate and consider proposals for complementary or additional technologies.

Chairman
Mr. J. Neumann (Microsoft/Yahoo/Mozilla)
Vice-Chairman
Vacant
Secretary
Dr. Istvan Sebestyen (Ecma)
[http://ecma-international.org/memento/TC39.htm]

SPECIFIC

lcpEs.6 {2015.06}

name::
* McsEngl.lcpEs.6 {2015.06}@cptIt,
* McsEngl.les2015@cptIt,
* McsEngl.les6@cptIt,
* McsEngl.es2015@cptIt,
* McsEngl.ECMA-262-6th-Edition@cptIt,
* McsEngl.ECMAScript2015@cptIt,
* McsEngl.es.6.2015@cptIt,
* McsEngl.es2015@cptIt,
* McsEngl.es6v@cptIt,
* McsEngl.es6@cptIt,
* McsEngl.es6.2015@cptIt,
* McsEngl.es.harmony@cptIt,
* McsEngl.es.next@cptIt,

_ADDRESS.WPG:
* http://www.ecma-international.org/ecma-262/6.0/ECMA-262.pdf,
* http://www.ecma-international.org/ecma-262/6.0/index.html,
===
* https://babeljs.io/docs/learn-es2015//
* http://addyosmani.com/blog/tracking-es6-support//
* http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts,
* http://people.mozilla.org/~jorendorff/es6-draft.html,

_DESCRIPTION:
ECMAScript 2015 (6th Edition) is the current version of the ECMAScript Language Specification standard. Commonly referred to as "ES6", it defines the standard for the JavaScript implementation in SpiderMonkey, the engine used in Firefox and other Mozilla applications.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla]

es6v'Attribute

name::
* McsEngl.es6v'Attribute@cptIt,

_SPECIFIC:
* arrow-function##
* object-[key]-syntax#ql:ljsmbr'name.es6#

es6v'implementation

name::
* McsEngl.es6v'implementation@cptIt,
* McsEngl.es6v'support@cptIt,

_ADDRESS.WPG:
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla,

lcpEs.5.1 {2011.06}

name::
* McsEngl.lcpEs.5.1 {2011.06}@cptIt,
* McsEngl.ecma-262@cptIt,
* McsEngl.es5.1@cptIt,

=== _NOTES: ECMA-262, the ECMAScript Language Specification (currently 5.1 Edition).
[http://test262.ecmascript.org/]

_ADDRESS.WPG:
* http://synagonism.net/standard/techInfo/ecma.262.51.2011.html,
* http://www.ecma-international.org/ecma-262/5.1//

_CHARACTERISTIC:
However, without changing the syntax, ES5 provides some important semantic innovations, as e.g. ability to control property attributes, objects extensibility, already mentioned accessor properties, etc. All these features are the good addition for the ES3.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-2-strict-mode/]

synagonism.net.ecma.262.51.2011

name::
* McsEngl.synagonism.net.ecma.262.51.2011@cptIt,

_SPAN:
<span class="geq">::</span>
<span class="nt">
<span class="prod">
<span class="secnum"><a class="popupTrigger" href="#idSec11-13-2" title="link to this section">11.13.2</a></span>
===
_NON_TERMINAL:
<span class="nt">Expression</span> <span class="geq">
===
<span class="nt">Identifier</span>
<span class="nt"><a class="popupTrigger" href="#idSec7-6-Syntax">Identifier</a></span>

_CODE:
<code>eval</code>
<code class="t">

_I:
<i>FunctionBody</i>

lcpEs.3 {2002.06}

name::
* McsEngl.lcpEs.3 {2002.06}@cptIt,

_DESCRIPTION:
The third edition of the Standard introduced powerful regular expressions, better string handling, new control statements, try/catch exception handling, tighter definition of errors, formatting for numeric output and minor changes in anticipation of forthcoming internationalisation facilities and future language growth. The third edition of the ECMAScript standard was adopted by the Ecma General Assembly of December 1999 and published as ISO/IEC 16262:2002 in June 2002.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idIntroP4]

lcpEs.IMPLEMENTATION

name::
* McsEngl.lcpEs.IMPLEMENTATION@cptIt,

_DESCRIPTION:
A conforming implementation of ECMAScript must provide and support all the types, values, objects, properties, functions, and program syntax and semantics described in this specification.

A conforming implementation of this Standard shall interpret characters in conformance with the Unicode Standard, Version 3.0 or later and ISO/IEC 10646-1 with either UCS-2 or UTF-16 as the adopted encoding form, implementation level 3. If the adopted ISO/IEC 10646-1 subset is not otherwise specified, it is presumed to be the BMP subset, collection 300. If the adopted encoding form is not otherwise specified, it presumed to be the UTF-16 encoding form.

A conforming implementation of ECMAScript is permitted to provide additional types, values, objects, properties, and functions beyond those described in this specification. In particular, a conforming implementation of ECMAScript is permitted to provide properties not described in this specification, and values for those properties, for objects that are described in this specification.

A conforming implementation of ECMAScript is permitted to support program and regular expression syntax not described in this specification. In particular, a conforming implementation of ECMAScript is permitted to support program syntax that makes use of the “future reserved words” listed in 7.6.1.2 of this specification.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec2]

ljs.DESKTOP (Ljd)

name::
* McsEngl.ljs.DESKTOP (Ljd)@cptIt,
* McsEngl.Ljd@cptIt,

_DESCRIPTION:
Various web-based desktop app frameworks such as node-webkit, Chrome Apps, Titanium, TideSDK and Atom Shell have been developed over recent years and node-webkit remains one of the best.
[http://yedingding.com/2014/08/01/node-webkit-intro-en.html]

_SPECIFIC:
* Electron (Atom-Shell)#ql:idLjel#,
* NW.js#ql:idLjnw#,
* XULRunner,

ljs.JsType

_CREATED: {2015-05-07}

name::
* McsEngl.ljs.JsType@cptIt,
* McsEngl.ljs.typename@cptIt, {2015-07-31}
* McsEngl.ljs.valuename@cptIt, {2015-07-31}
* McsEngl.JsType@cptIt,
* McsEngl.JsValuename@cptIt, {2015-07-31}
* McsEngl.type-js@cptIt,
* McsEngl.typename-js@cptIt, {2015-07-31}
* McsEngl.valuename-js@cptIt, {2015-07-31}

_DESCRIPTION:
JsType is JS that uses http://synagonism.net/hitp/index.html#idEvolPara10d.
[hmnSngo.2015-05-07]
===
1) TYPENAMES: makes the language typed with a simple method.
2) 'this' => oNameThis. So you see if a member fits a correct type.
3) Member-names begin with an abbreviation of its type, sTypName.
4) Objects have the-name of its constructor eg oHTMLElement
[hmnSngo.2015-03-29]
===
5) Inner-functions have an-undersore: f_Inner.
[hmnSngo.2015-04-19]

_JS-NAME:
aName denotes Array.
bName denotes Boolean.
fName denotes Function.
nName denotes Number.
oName denotes Object.
rName denotes Regular-expression.
sName denotes String.
xName denotes miXed-values.

{time.2014-08-05}:
=== hitp w valunames.
[http://synagonism.net/hitp/index.html#idEvolPara10d]

ljs.Node.js (ljn) {2009}

name::
* McsEngl.ljs.Node.js (ljn) {2009}@cptIt,
* McsEngl.ljn@cptIt,
* McsEngl.Node-JavaScript@cptIt,
* McsEngl.nodejs-lag@cptIt,

* McsEngl.languageJavaScriptNode.js@cptIt,
* McsEngl.lcpNodejs@cptIt,
* McsEngl.nodeJS@cptIt554,
* McsEngl.node@cptIt554i,
* McsEngl.node.js@cptIt554i,
* McsEngl.ssjs'Node.js@cptIt,
* McsEngl.ljn@cptIt, {2016-05-27}
* McsEngl.lnj@cptIt, {2016-05-10}
* McsEngl.ljsNd@cptIt, {2014-02-16}
* McsEngl.ndjs@cptIt,

_DESCRIPTION:
Node.js-language is a-JavaScript language that understands the-Node.js-runtime.
[hmnSngo.2016-07-01]
===
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.
Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
[https://nodejs.org/en//]
===
Node.js is a server-side JavaScript environment that uses an asynchronous event-driven model. This allows Node.js to get excellent performance based on the architectures of many Internet applications.
[https://github.com/joyent/node/wiki]
===
Ignore the name: Node.js isn’t a JavaScript library. Instead, Node.js is a
JavaScript interpreter (powered by V8, the engine used by Google’s Chrome
browser) that interfaces with the underlying operating system. That way,
JavaScript run by Node.js can read and write files, spawn processes,
and—most enticingly—send and receive HTTP requests.
[http://media.pragprog.com/titles/tbcoffee/server.pdf]
===
An important thing to realize is that Node is not a webserver. By itself it doesn't do anything. It doesn't work like Apache. There is no config file where you point it to you HTML files. If you want it to be a HTTP server, you have to write an HTTP server (with the help of its built-in libraries). Node.js is just another way to execute code on your computer. It is simply a JavaScript runtime.
[http://blog.modulus.io/absolute-beginners-guide-to-nodejs]
===
Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
[http://nodejs.org/]
===
Node is a JavaScript environment running in Google’s V8 JavaScript engine.
[http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/]
===
Joyent is the corporate steward of Node.js, the world’s best runtime for today's data-intensive, real-time applications. Joyent offers exclusive debugging and performance analysis tools for Node.js applications.
[https://www.joyent.com/technology/nodejs]
===
Node.js is a native JavaScript server application running right up against the OS. Node.js builds directly on Chrome V8 and uses event-driven, asynchronous JavaScript to create a very distinctive development environment. Node.js has very few dependencies, runs very fast, and has a very active community. Most of all, its fun! I ported the Google Wave Gadget API implementation from Apache Wookie over to Node.js in a couple of days (you can download it here). Node also seems to use very little memory regardless of demand - this is due to it using a threadless, event driven server model rather than a more traditional thread pool approach. On the downside, there is some skepticism of the hype around the speed of Node.js. Also, while being very lightweight has its advantages, being so close to the OS makes it harder to manage and track server performance without a lot of Linux Jujitsu: there are, as yet, no simple graphical management tools or utilities for handling deployed applications, for example. However, if you need a platform to prototype demanding real-time applications such as multiplayer games then Node.js is well worth looking at.
[http://zope.cetis.ac.uk/members/scott/blogview?entry=20110124133546]
===
Node.js is an event-driven I/O framework for the V8 JavaScript engine on Unix-like platforms. It is intended for writing scalable network programs such as web servers[1]. It was created by Ryan Dahl in 2009, and its growth is sponsored by Joyent, which employs Dahl[2].
Node.js is similar in purpose to Twisted for Python, Perl Object Environment for Perl, and EventMachine for Ruby. Unlike most JavaScript, it is not executed in a web browser, but it is rather related to server-side JavaScript. Node.js implements some CommonJS specifications[3]. Node.js includes a REPL environment for interactive testing.
[http://en.wikipedia.org/wiki/Node.js]

ljn'Archetype

name::
* McsEngl.ljn'Archetype@cptIt,
* McsEngl.ljn'usage@cptIt,

_DESCRIPTION:
NodeJs is a perfect candidate for real time communication over internet.
[https://www.quora.com/What-are-the-pros-and-cons-of-Node-js-versus-Apache-web-server]

_ADDRESS.WPG:
* https://blog.risingstack.com/node-js-examples-how-enterprises-use-node-in-2016//

ljn'Model (algorithm)

name::
* McsEngl.ljn'Model (algorithm)@cptIt,
* McsEngl.ljn'archetype.ALGORITHM@cptIt,
* McsEngl.ljn'algo@cptIt,
* McsEngl.ljnalgo@cptIt, {2014-03-10}

* McsEngl.ljnalgo@cptIt,

_GENERIC:
* lcp-archetype#ql:lcp'archetype#

ljnalgo'code

_CREATED: {2014-02-16} ?

name::
* McsEngl.ljnalgo'code@cptIt,
* McsEngl.ljn'code@cptIt,
* McsEngl.ljncode@cptIt,

_GENERIC:
* pgmlng-code#ql:lcp'code#

_SPECIFIC:
* dir-code##
* example-code##
* file-code##
* module-code##
* processing-code##

ljn'code'FILE

name::
* McsEngl.ljn'code'FILE@cptIt,

_DESCRIPTION:
So far we've only been using a single file, which isn't very maintainable. In most applications your code will be split into several files. There's no standard or enforced organization to what files go where. This isn't Rails. There's no concept of views go here and controllers go there. You can do whatever you want.
[http://blog.modulus.io/absolute-beginners-guide-to-nodejs]

ljnalgo'doing.TESTING

name::
* McsEngl.ljnalgo'doing.TESTING@cptIt,

_ADDRESS.WPG:
* https://blog.risingstack.com/node-hero-node-js-unit-testing-tutorial//

ljnalgo'mistake

name::
* McsEngl.ljnalgo'mistake@cptIt,

_ADDRESS.WPG:
* https://www.airpair.com/node.js/posts/top-10-mistakes-node-developers-make,

ljnalgo'UNIT

name::
* McsEngl.ljnalgo'UNIT@cptIt,

ljnalgo'WORD

name::
* McsEngl.ljnalgo'WORD@cptIt,

ljnalgo'SEMANTIC-UNIT (sut)

name::
* McsEngl.ljnalgo'SEMANTIC-UNIT (sut)@cptIt,

SPECIFIC

_SPECIFIC:
* ljn-array##
* ljn-boolean##
* ljn-function##
* ljn-null##

ljnalgo'sut.API'WHOLE-PART-TREE (global)

name::
* McsEngl.ljnalgo'sut.API'WHOLE-PART-TREE (global)@cptIt,
* McsEngl.ljnAPI's-whole-part-tree@cptIt,
* McsEngl.ljnwpt@cptIt,

_DESCRIPTION:
The-builtin-semantic-units have many relations.
The-whole-part-relations create a-whole-part-tree with 'global' the-most-generic-node.
[hknm.2016-07-02]

ljn'global object

name::
* McsEngl.ljn'global object@cptIt,
* McsEngl.ljn'object.global@cptIt,
* McsEngl.ljn'algo'sut.object.GLOBAL@cptIt,
* McsEngl.ljn'object.global@cptIt,
* McsEngl.ljn'global-object@cptIt,
* McsEngl.ljnglobal@cptIt,
* McsEngl.ljnglobal-scope@cptIt,

* McsEngl.ljngbl@cptIt, {2016-07-01}

=== _NOTES: > DeprecationWarning: 'GLOBAL' is deprecated, use 'global'

_DESCRIPTION:
These objects are available in all modules. Some of these objects aren't actually in the global scope but in the module scope - this will be noted.
[http://nodejs.org/api/all.html#all_global_objects]
===
Node module has a number of variables which are available by default. These are documented in the API docs: globals and process.
[http://book.mixu.net/node/single.html]
===
Unlike the browser, Node does not have a window global object, but instead has two others: globals and process.
[https://www.airpair.com/javascript/node-js-tutorial#3-1-modules]
===
The global object is determined by the execution environment. It is the window object in a web browser and the process object in a NodeJS script.
[http://rainsoft.io/gentle-explanation-of-this-in-javascript/]
===
global#
{Object} The global namespace object.
In browsers, the top-level scope is the global scope. That means that in browsers if you're in the global scope var something will define a global variable. In Node this is different. The top-level scope is not the global scope; var something inside a Node module will be local to that module.
[http://nodejs.org/api/all.html#all_global]
===
the global object, which is "DomWindow" in the browser and "global" in Node.
[http://book.mixu.net/node/single.html]

_GENERIC:
> global.__proto__.__proto__ === Object.prototype
true

_SPECIFIC:
However, Node module has a number of variables which are available by default. These are documented in the API docs: globals and process.
Some of the more interesting ones are:
* __filename  The filename of the code being executed.
* __dirname  The name of the directory that the currently executing script resides in.
* process  A object which is associated with the currently running process. In addition to variables, it has methods such as process.exit, process.cwd and process.uptime.
* process.argv.  An array containing the command line arguments. The first element will be 'node', the second element will be the name of the JavaScript file. The next elements will be any additional command line arguments.
* process.stdin, process.stout, process.stderr.  Streams which correspond to the standard input, standard output and standard error output for the current process.
* process.env  An object containing the user environment of the current process.
* require.main  When a file is run directly from Node, require.main is set to its module.
[http://book.mixu.net/node/single.html]

ljngbl'PART (member)

name::
* McsEngl.ljngbl'PART (member)@cptIt,
* McsEngl.ljnglobal-object@cptIt,

_DESCRIPTION:
The-members of the-global-object are-called also 'globals'.
[hknm.2016-07-02]

ljnglobal.MEMBER:
//v6.2.2
> Object.getOwnPropertyNames(global).sort()
[ 'Array',
'ArrayBuffer',
'Boolean',
'Buffer',
'COUNTER_HTTP_CLIENT_REQUEST',
'COUNTER_HTTP_CLIENT_RESPONSE',
'COUNTER_HTTP_SERVER_REQUEST',
'COUNTER_HTTP_SERVER_RESPONSE',
'COUNTER_NET_SERVER_CONNECTION',
'COUNTER_NET_SERVER_CONNECTION_CLOSE',
'DTRACE_HTTP_CLIENT_REQUEST',
'DTRACE_HTTP_CLIENT_RESPONSE',
'DTRACE_HTTP_SERVER_REQUEST',
'DTRACE_HTTP_SERVER_RESPONSE',
'DTRACE_NET_SERVER_CONNECTION',
'DTRACE_NET_STREAM_END',
'DataView',
'Date',
'Error',
'EvalError',
'Float32Array',
'Float64Array',
'Function',
'GLOBAL',
'Infinity',
'Int16Array',
'Int32Array',
'Int8Array',
'Intl',
'JSON',
'Map',
'Math',
'NaN',
'Number',
'Object',
'Promise',
'Proxy',
'RangeError',
'ReferenceError',
'Reflect',
'RegExp',
'Set',
'String',
'Symbol',
'SyntaxError',
'TypeError',
'URIError',
'Uint16Array',
'Uint32Array',
'Uint8Array',
'Uint8ClampedArray',
'WeakMap',
'WeakSet',
'_',
'assert',
'buffer',
'child_process',
'clearImmediate',
'clearInterval',
'clearTimeout',
'cluster',
'console',
'crypto',
'decodeURI',
'decodeURIComponent',
'dgram',
'dns',
'domain',
'encodeURI',
'encodeURIComponent',
'escape',
'eval',
'events',
'fs',
'global',
'http',
'https',
'isFinite',
'isNaN',
'module',
'net',
'os',
'parseFloat',
'parseInt',
'path',
'process',
'punycode',
'querystring',
'readline',
'repl',
'require',
'root',
'setImmediate',
'setInterval',
'setTimeout',
'stream',
'string_decoder',
'tls',
'tty',
'undefined',
... 6 more items ]

ljngbl.Buffer-function (2.stable)

name::
* McsEngl.ljngbl.Buffer-function (2.stable)@cptIt,
* McsEngl.ljnBuffer@cptIt,
* McsEngl.ljn'api'Buffer-class@cptIt,
* McsEngl.ljn'Buffer-class@cptIt,

_DESCRIPTION:
The Buffer class is a global type for dealing with binary data directly. It can be constructed in a variety of ways
[http://nodejs.org/api/all.html#all_class_buffer_1]
===
Pure JavaScript is Unicode friendly but not nice to binary data. When dealing with TCP streams or the file system, it's necessary to handle octet streams. Node has several strategies for manipulating, creating, and consuming octet streams.
Raw data is stored in instances of the Buffer class. A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized.
The Buffer class is a global, making it very rare that one would need to ever require('buffer').
Converting between Buffers and JavaScript string objects requires an explicit encoding method.
[http://nodejs.org/api/all.html#all_buffer]

ljngbl.Math object

name::
* McsEngl.ljngbl.Math object@cptIt,
* McsEngl.ljnMath@cptIt,

ljnMath.member:
//ljn6.2.2
> Object.getOwnPropertyNames(Math).sort()
[ 'E',
'LN10',
'LN2',
'LOG10E',
'LOG2E',
'PI',
'SQRT1_2',
'SQRT2',
'abs',
'acos',
'acosh',
'asin',
'asinh',
'atan',
'atan2',
'atanh',
'cbrt',
'ceil',
'clz32',
'cos',
'cosh',
'exp',
'expm1',
'floor',
'fround',
'hypot',
'imul',
'log',
'log10',
'log1p',
'log2',
'max',
'min',
'pow',
'random',
'round',
'sign',
'sin',
'sinh',
'sqrt',
'tan',
'tanh',
'trunc' ]

ljngbl.console object

name::
* McsEngl.ljngbl.console object@cptIt,
* McsEngl.ljnconsole@cptIt,
* McsEngl.ljn'api'console-object@cptIt,
* McsEngl.ljn'console-object@cptIt,

_DESCRIPTION:
Node provides a global 'console' object to which you can output strings using:
console.log('Hello');
[http://nodetuts.com/pdf/handson-nodejs-sample.pdf 36/147]

_WHOLE.CHAIN:
* global,

_GENERIC.CHAIN:
* Console.prototype
* Object.prototype (> Object.getPrototypeOf(console.__proto__) === Object.prototype
true)

ljngbl.module object#ql:ljn'module-object#

name::
* McsEngl.ljngbl.module object@cptIt,

ljngbl.process object

name::
* McsEngl.ljngbl.process object@cptIt,
* McsEngl.ljn'api'process-object@cptIt,
* McsEngl.ljn'process-object@cptIt,
* McsEngl.ljnglobal.process@cptIt,
* McsEngl.ljnprocess@cptIt,

_WHOLE:
* ljn-global,

_GENERIC:
> Object.getPrototypeOf(process.__proto__) === events.EventEmitter.prototype
true
> process.__proto__.__proto__.__proto__ === Object.prototype
true

_DESCRIPTION:
The process object is a global object and can be accessed from anywhere. It is an instance of EventEmitter.
[http://nodejs.org/api/all.html#all_process_1]

ljnprocess.member

name::
* McsEngl.ljnprocess.member@cptIt,

_MEMBER:
//{ljn6.2.2}
> Object.getOwnPropertyNames(process).sort()
[ 'EventEmitter',
'_debugEnd',
'_debugPause',
'_debugProcess',
'_events',
'_eventsCount',
'_exiting',
'_fatalException',
'_getActiveHandles',
'_getActiveRequests',
'_kill',
'_linkedBinding',
'_maxListeners',
'_needImmediateCallback',
'_promiseRejectEvent',
'_rawDebug',
'_startProfilerIdleNotifier',
'_stopProfilerIdleNotifier',
'_tickCallback',
'_tickDomainCallback',
'abort',
'arch',
'argv',
'assert',
'binding',
'chdir',
'config',
'cpuUsage',
'cwd',
'debugPort',
'dlopen',
'domain',
'emitWarning',
'env',
'execArgv',
'execPath',
'exit',
'features',
'hrtime',
'kill',
'memoryUsage',
'moduleLoadList',
'nextTick',
'openStdin',
'pid',
'platform',
'reallyExit',
'release',
'stderr',
'stdin',
'stdout',
'title',
'umask',
'uptime',
'version',
'versions' ]

ljnprocess.argv

name::
* McsEngl.ljnprocess.argv@cptIt,

An array containing the command line arguments. The first element will be 'node', the second element will be the name of the JavaScript file. The next elements will be any additional command line arguments.

// print process.argv
process.argv.forEach(function(val, index, array) {
console.log(index + ': ' + val);
});
This will generate:

$ node process-2.js one two=three four
0: node
1: /Users/mjr/work/node/process-2.js
2: one
3: two=three
4: four
[http://nodejs.org/api/process.html#process_process_argv]

ndprocess.exit(1)

ndprocess.cwd():
//returns current working dir

ljnprocess.versions

name::
* McsEngl.ljnprocess.versions@cptIt,

> process.versions
{ http_parser: '2.7.0',
node: '6.2.2',
v8: '5.0.71.52',
uv: '1.9.1',
zlib: '1.2.8',
ares: '1.10.1-DEV',
icu: '57.1',
modules: '48',
openssl: '1.0.2h' }

ljngbl.require-function#ql:ljn'require-function@cptIt#

name::
* McsEngl.ljngbl.require-function@cptIt,

ljngbl.timer-functions (core 5=locked)

name::
* McsEngl.ljngbl.timer-functions (core 5=locked)@cptIt,
* McsEngl.ljn'module.timers@cptIt,
* McsEngl.ljn'timers-api@cptIt,
* McsEngl.ljnglobal.timer@cptIt,

_DESCRIPTION:
All of the timer functions are globals. You do not need to require() this module in order to use them.
[http://nodejs.org/api/all.html#all_timers]

ljnalgo'sut.API'GENERIC-SPECIFIC-TREE (Object.prototype)

name::
* McsEngl.ljnalgo'sut.API'GENERIC-SPECIFIC-TREE (Object.prototype)@cptIt,
* McsEngl.ljnAPI's-generic-specific-tree@cptIt,
* McsEngl.lljngst@cptIt,
* McsEngl.ljninheritance-tree@cptIt,

ljn'Object.prototype

name::
* McsEngl.ljn'Object.prototype@cptIt,
* McsEngl.ljnObject.prototype@cptIt,
* McsEngl.ljnotp@cptIt,
* McsEngl.ljnobtp@cptIt,

ljnObject.prototype.member:
> Object.getOwnPropertyNames(Object.prototype).sort()
[ '__defineGetter__',
'__defineSetter__',
'__lookupGetter__',
'__lookupSetter__',
'__proto__',
'constructor',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'toLocaleString',
'toString',
'valueOf' ]

ljnObject.prototype.specific:
* Array.prototype,
* Console.prototype,
* Function.prototype,
* Math,
* Module.prototype,
* RegExp.prototype,
* Set.prototype,
* String.prototype,
* events.EventEmitter.prototype,
* fs,
* http,
* https,
* os,
* repl,

ljnalgo'sut.FUNCTION

name::
* McsEngl.ljnalgo'sut.FUNCTION@cptIt,
* McsEngl.ljn'api'function@cptIt,
* McsEngl.ljn'function@cptIt,

* McsEngl.ljnf@cptIt,

_DESCRIPTION:
Because JavaScript is event-oriented rather than thread-oriented, events
only run when all other execution has stopped. Imagine how frustrating it
would be if every time your application made a request (say, to the file system
or to an HTTP server), it froze up completely until the request was completed!
For that reason, nearly every function in the Node.js API uses a callback:
you make your request, Node.js quickly passes it along, and your application
continues as if nothing happened. When your request is completed (or goes
awry), the function you passed to Node.js gets called.
[http://media.pragprog.com/titles/tbcoffee/server.pdf]

ljn'api'function.ASYNCHRONOUS

name::
* McsEngl.ljn'api'function.ASYNCHRONOUS@cptIt,

_DESCRIPTION:
Node API is not all asynchronous. Some parts of it are synchronous but they are very well marked: they always terminate in "Sync" - lik fs.readFileSync...
One function that is synchronous and does not end in Sync is 'require' which should only be used when initializing an app or module.
[http://nodetuts.com/pdf/handson-nodejs-sample.pdf 30/147]

ljnalgo'sut.MODULE (ljnm)

name::
* McsEngl.ljnalgo'sut.MODULE (ljnm)@cptIt,

ljnm'NAME

name::
* McsEngl.ljnm'NAME@cptIt,
* McsEngl.ljn'api'module@cptIt,
* McsEngl.ljn'code.API@cptIt,
* McsEngl.ljn'code.MODULE@cptIt,
* McsEngl.ljn'code.module@cptIt,
* McsEngl.ljn'library@cptIt,
* McsEngl.ljn'module@cptIt,
* McsEngl.ljnmodule@cptIt, {2014-03-10}
* McsEngl.npm'module@cptIt,
* McsEngl.ljnm@cptIt, {2016-06-27}
* McsEngl.ljnmdl@cptIt, {2016-06-14}
* McsEngl.ljnmdl@cptIt,
* McsEngl.ljnmdl@cptIt,

* McsEngl.ljn'module@cptIt,
* McsEngl.ljsmodule.nodejs@cptIt,
* McsEngl.nodejs'module@cptIt,
* McsEngl.mdlNode@cptIt,

_NOTATION:
* m?Name, where ? = f, o, ... a-module exports.
[hmnSngo.2016-12-02]

ljnm'GENERRIC

name::
* McsEngl.ljnm'GENERRIC@cptIt,

_GENERIC:
* CommonJS-module#ql:jsmodule.commonjs#

ljnm'DESCRIPTION

name::
* McsEngl.ljnm'DESCRIPTION@cptIt,

_DESCRIPTION:
Module is an OBJECT importing/exporting from a file or directory code-structure.
It can have explicitly defined properties with 'exports.property' code
or it can be a single exported function/object with the 'module.exports' code.
[hmnSngo.2014-04-22]
===
Node.js modules are one kind of package which can be published to npm.
[https://docs.npmjs.com/getting-started/creating-node-modules]
===
Modules make it possible to include other Javascript files into your applications.
... Modules are crucial to building applications in Node, as they allow you to include external libraries, such as database access libraries - and they help in organizing your code into separate parts with limited responsibilities. You should try to identify reusable parts in your own code and turn them into separate modules to reduce the amount of code per file and to make it easier to read and maintain your code.
[http://book.mixu.net/node/single.html]
===
Node has a simple module loading system. In Node, files and modules are in one-to-one correspondence.
[http://nodejs.org/api/all.html#all_modules]
===
Node.js uses a module architecture to simplify the creation of complex applications. Modules are akin to libraries in C, or units in Pascal. Each module contains a set of functions related to the “subject” of the module. For example, the http module contains functions specific to HTTP. Node.js provides a few core modules out of the box to help you access files on the file system, create HTTP and TCP/UDP servers, and perform other useful functions.
Including a module is easy; simply call the require() function, like this:
> var http = require('http');
The require() function returns the reference to the specified module. In the case of this code, a reference to the http module is stored in the http variable.
[http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/]

ljnm'casching

name::
* McsEngl.ljnm'casching@cptIt,

_DESCRIPTION:
Caching#
Modules are cached after the first time they are loaded. This means (among other things) that every call to require('foo') will get exactly the same object returned, if it would resolve to the same file.

Multiple calls to require('foo') may not cause the module code to be executed multiple times. This is an important feature. With it, "partially done" objects can be returned, thus allowing transitive dependencies to be loaded even when they would cause cycles.

If you want to have a module execute code multiple times, then export a function, and call that function.
Module Caching Caveats#
Modules are cached based on their resolved filename. Since modules may resolve to a different filename based on the location of the calling module (loading from node_modules folders), it is not a guarantee that require('foo') will always return the exact same object, if it would resolve to different files.
[http://nodejs.org/api/modules.html#modules_caching]

ljnm'compatibility

name::
* McsEngl.ljnm'compatibility@cptIt,
* McsEngl.ljn'library-compatibility@cptIt,

_DESCRIPTION:
Library compatibility
Node is under heavy development and its API changes rapidly. Instead of simply a listing of modules which may or may not work with the version of Node installed on one’s computer, this [webpage] will provide a list of module versions which are known to work with specific versions of node.
[https://github.com/joyent/node/wiki/Library-compatibility]

ljnm'converting-amd-to-nodejs

name::
* McsEngl.ljnm'converting-amd-to-nodejs@cptIt,

_ADDRESS.WPG:
* https://github.com/millermedeiros/nodefy,
* http://corner.squareup.com/2013/02/es6-module-transpiler.html,
https://github.com/square/es6-module-transpiler,

ljnm'doing.EXPORTING

name::
* McsEngl.ljnm'doing.EXPORTING@cptIt,
* McsEngl.ljnmdl'exporting@cptIt,
* McsEngl.ljnmdl'exposing@cptIt,

ljnm'exporting.MODULE-with-MANY-PROPERTIES

name::
* McsEngl.ljnm'exporting.MODULE-with-MANY-PROPERTIES@cptIt,

_FILE.OUT:
exports.strX = 'a string'; //IF strX is NOT used internally in out.js
===
var strX = 'a string';
exports.strX = strX; //IF strX is used internally in out.js

===
// exports an imported-module
// the imported-module is obviously an object
var key, val, _ref;
_ref = require('./coffee-script');
for (key in _ref) {
val = _ref[key];
exports[key] = val;
}

[coffeescript src/index.coffee]

_FILE.IN:
var mdlOut = require('./out.js');
//mdlOut.strX

ljnm'exporting.MODULE'S-PART

name::
* McsEngl.ljnm'exporting.MODULE'S-PART@cptIt,

_FILE.OUT:
===
//IF strX is NOT used internally in out.js
exports.strX = 'a string';
===
//IF strX is used internally in out.js
var strX = 'a string';
exports.strX = strX;

_FILE.IN:
var strX = require('./out.js').strX;
//strX

ljnm'exporting.MODULE-as-SINGLE-UNIT

name::
* McsEngl.ljnm'exporting.MODULE-as-SINGLE-UNIT@cptIt,

_CODE.LJN:
=== exporting as a single function:
//in out.js
module.exports = dUser;
var dUser = function(name, email) {
this.name = name;
this.email = email;
};
//in in.js
var dUser = require('./out');
var u = new dUser();

=== exporting as a single object:
// in config.js
var oConfig = {
foo: 'bar'
};
module.exports = oConfig;
// in server.js
var oConfig = require('./config.js');
console.log(oConfig.foo);

ljnm'exports-function

name::
* McsEngl.ljnm'exports-function@cptIt,
* McsEngl.ljn'exports-function@cptIt,

_DESCRIPTION:
module.exports.varX = x;
module.exports.fcnAddX = addX;
Now we can use our loaded module:
var misc = require('./misc');
console.log("Adding %d to 10 gives us %d", misc.varX, misc.fcnAddX(10));
[http://openmymind.net/2012/2/3/Node-Require-and-Exports/]

ljnm'module.exports

name::
* McsEngl.ljnm'module.exports@cptIt,
* McsEngl.module.exports@cptIt,

_DESCRIPTION:
If you want the root of your module's export to be a function (such as a constructor) or if you want to export a complete object in one assignment instead of building it one property at a time, assign it to module.exports instead of exports.
[http://nodejs.org/api/all.html#all_modules]

_CODE.LJS:
// Export the Parser constructor from this module.
module.exports = Parser;
===
//SHARING VARIABLES:
// in config.js
var config = {
foo: 'bar'
};
module.exports = config;

In a different module:
// in server.js
var config = require('./config.js');
console.log(config.foo);

ljnm'doing.IMPORTING

name::
* McsEngl.ljnm'doing.IMPORTING@cptIt,
* McsEngl.ljnmdl'loading@cptIt,
* McsEngl.ljnmdl'using@cptIt,

_FROM_CORE_MODULES:
> const os = require('os');
Without a leading '/' or './' to indicate a file, the module is either a "core module" or is loaded from a node_modules folder.
[http://nodejs.org/api/modules.html#modules_file_modules]

_FROM_ABSOLUTE_PATH:
> require('/home/marco/foo.js')
A module prefixed with '/' is an absolute path to the file. For example, require('/home/marco/foo.js') will load the file at /home/marco/foo.js.
[http://nodejs.org/api/modules.html#modules_file_modules]

_FROM_CURRENT_DIRECTORY:
> require('./circle')
A module prefixed with './' is relative to the file calling require(). That is, circle.js must be in the same directory as foo.js for require('./circle') to find it.
[http://nodejs.org/api/modules.html#modules_file_modules]

_FROM_node_modules:
> require('pkg')
If the module identifier passed to require() is not a native module, and does not begin with '/', '../', or './', then node starts at the parent directory of the current module, and adds /node_modules, and attempts to load the module from that location.
If it is not found there, then it moves to the parent directory, and so on, until the root of the tree is reached.
[http://nodejs.org/api/all.html#all_loading_from_node_modules_folders]

_MODULE_NOT_FOUND:
If the given path does not exist, require() will throw an Error with its code property set to 'MODULE_NOT_FOUND'.
[http://nodejs.org/api/modules.html#modules_file_modules]

ljnm'require-function

name::
* McsEngl.ljnm'require-function@cptIt,
* McsEngl.ljnrequire@cptIt,
* McsEngl.ljn'api'require-function@cptIt,
* McsEngl.ljn'require@cptIt,
* McsEngl.ljn'require-function@cptIt,
* McsEngl.ljnrequire@cptIt,
* McsEngl.ljn'require@cptIt,

_DESCRIPTION:
Node has a simple module loading system. In Node, files and modules are in one-to-one correspondence. As an example, foo.js loads the module circle.js in the same directory.
The contents of foo.js:
var circle = require('./circle.js');
...
The module system is implemented in the require("module") module.
[http://nodejs.org/api/all.html#all_modules]
===
require
{ [Function: require]
resolve: [Function: resolve],
main: undefined,
extensions: { '.js': [Function], '.json': [Function], '.node': [Function] },
cache: {} }

_CODE.LJN:
* var fs = require('fs');
* var hello = require(‘./hello.js’);
* require('./users') //users.js is a file in the same directory.
* var EventEmitter = require(‘events’).EventEmitter;
* var mdlHelpers = require('lib/coffee-script/helpers'); //subdirectory
===
There are three ways in which you can require() files:
using a relative path: foo = require('./lib/bar.js');
using an absolute path: foo = require('/home/foo/lib/bar.js')
using a search: foo = require('bar')
The first two are easy to understand. In the third case, Node starts at the current directory, and adds ./node_modules/, and attempts to load the module from that location. If the module is not found, then it moves to the parent directory and performs the same check, until the root of the filesystem is reached.
[http://book.mixu.net/node/single.html]

ljn'require.cache object

name::
* McsEngl.ljn'require.cache object@cptIt,
* McsEngl.ljnglobal.require.cache@cptIt,
* McsEngl.ljnrequire.cache@cptIt,

_DESCRIPTION:
Object
Modules are cached in this object when they are required.
By deleting a key value from this object, the next require will reload the module.
[http://nodejs.org/api/all.html#all_require_resolve]

ljnrequire.resolve-function

name::
* McsEngl.ljnrequire.resolve-function@cptIt,
* McsEngl.ljnglobal.require.resolve@cptIt,
* McsEngl.ljnrequire.resolve@cptIt,

_DESCRIPTION:
require.resolve()#
Use the internal require() machinery to look up the location of a module, but rather than loading the module, just return the resolved filename.
[http://nodejs.org/api/all.html#all_require_resolve]

_CODE.LJN:
console.log require.resolve sCs_path
//\File1a\lcpCpt\lib\coffee-script\index.js

ljnm'implementing

name::
* McsEngl.ljnm'implementing@cptIt,

_DESCRIPTION:
The module system is implemented in the require("module") module.
[http://nodejs.org/api/modules.html]

ljnm'member

name::
* McsEngl.ljnm'member@cptIt,
* McsEngl.ljnm'member@cptIt,

ljnmmbr.PUBLIC

name::
* McsEngl.ljnmmbr.PUBLIC@cptIt,
* McsEngl.ljnmmber.public@cptIt,
* McsEngl.ljnm'member.local@cptIt,

_DESCRIPTION:
'module.exports' is the-public-member of a-module.
IF it is an-object, all its members are public.
[hmnSngo.2016-12-17]

ljnmmbr.PUBLIC.NO

name::
* McsEngl.ljnmmbr.PUBLIC.NO@cptIt,
* McsEngl.ljnm'member.private@cptIt,
* McsEngl.ljnm'member.local@cptIt,

_DESCRIPTION:
In browsers, the top-level scope is the global scope.
That means that in browsers if you're in the global scope var something will define a global variable.
In Node.js this is different.
The top-level scope is not the global scope; var something inside an Node.js module will be local to that module.
[https://nodejs.org/api/globals.html#globals_global]

ljnmmbr.--dirname string

name::
* McsEngl.ljnmmbr.--dirname string@cptIt,
* McsEngl.ljndirname@cptIt,

_CODE.LJN:
console.log __dirname
//\File1a\lcpCpt

ljnmmbr.--filename string

name::
* McsEngl.ljnmmbr.--filename string@cptIt,
* McsEngl.ljnfilename@cptIt,

_DESCRIPTION:
__filename
{String}
The filename of the code being executed. This is the resolved absolute path of this code file. For a main program this is not necessarily the same filename used in the command line. The value inside a module is the path to that module file.

Example: running node example.js from /Users/mjr

console.log(__filename);
// /Users/mjr/example.js
__filename isn't actually a global but rather local to each module.
[http://nodejs.org/api/all.html#all_filename]

ljnm'module-object

name::
* McsEngl.ljnm'module-object@cptIt,
* McsEngl.ljnmodule@cptIt,
* McsEngl.ljn'module-object@cptIt,
* McsEngl.ljnglobal.module@cptIt,

_DESCRIPTION:
The module Object#
{Object}
In each module, the module free variable is a reference to the object representing the current module. For convenience, module.exports is also accessible via the exports module-global. module isn't actually a global but rather local to each module.
[http://nodejs.org/api/all.html#all_the_module_object]

ljnmodule.member

name::
* McsEngl.ljnmodule.member@cptIt,

ljnmodule.member:
//ljn6.2.2
> Object.getOwnPropertyNames(module).sort()
[ 'children',
'exports',
'filename',
'id',
'loaded',
'parent',
'paths' ]
> Object.getOwnPropertyNames(module.__proto__).sort()
[ '_compile', 'constructor', 'load', 'require' ]
> Object.getOwnPropertyNames(module.__proto__.__proto__).sort()
[ '__defineGetter__',
'__defineSetter__',
'__lookupGetter__',
'__lookupSetter__',
'__proto__',
'constructor',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'toLocaleString',
'toString',
'valueOf' ]

ljnmodule.children array

name::
* McsEngl.ljnmodule.children array@cptIt,

_DESCRIPTION:
module.children
<Array>
The module objects required by this one.
[https://nodejs.org/api/modules.html#modules_module_children]

ljnmodule.exports object

name::
* McsEngl.ljnmodule.exports object@cptIt,

_DESCRIPTION:
module.exports#
Object
The module.exports object is created by the Module system. Sometimes this is not acceptable; many want their module to be an instance of some class. To do this, assign the desired export object to module.exports. Note that assigning the desired object to exports will simply rebind the local exports variable, which is probably not what you want to do.

For example suppose we were making a module called a.js
const EventEmitter = require('events');
module.exports = new EventEmitter();

// Do some work, and after some time emit
// the 'ready' event from the module itself.
setTimeout(() => {
module.exports.emit('ready');
}, 1000);

Then in another file we could do
const a = require('./a');
a.on('ready', () => {
console.log('module a is ready');
});
Note that assignment to module.exports must be done immediately. It cannot be done in any callbacks. This does not work:
x.js:

setTimeout(() => {
module.exports = { a: 'hello' };
}, 0);
y.js:

const x = require('./x');
console.log(x.a);

exports alias#
The exports variable that is available within a module starts as a reference to module.exports. As with any variable, if you assign a new value to it, it is no longer bound to the previous value.

To illustrate the behavior, imagine this hypothetical implementation of require():

function require(...) {
// ...
((module, exports) => {
// Your module code here
exports = some_func; // re-assigns exports, exports is no longer
// a shortcut, and nothing is exported.
module.exports = some_func; // makes your module export 0
})(module, module.exports);
return module;
}
As a guideline, if the relationship between exports and module.exports seems like magic to you, ignore exports and only use module.exports.
[https://nodejs.org/api/modules.html#modules_module_exports]

ljnm'npm-tool

name::
* McsEngl.ljnm'npm-tool@cptIt,

ljnm'Relation-to-package

name::
* McsEngl.ljnm'Relation-to-package@cptIt,
* McsEngl.ljn'package@cptIt,

_DESCRIPTION:
An-npm-package needs 'package.json'
An-lnj-module needs 'require()'
Some modules are and packages.
Some packages are and modules.
[hmnSngo.2016-11-28]
===
What is a package?
A package is:
a) a folder containing a program described by a package.json file
b) a gzipped tarball containing (a)
c) a url that resolves to (b)
d) a <name>@<version> that is published on the registry with (c)
e) a <name>@<tag> that points to (d)
f) a <name> that has a "latest" tag satisfying (e)
g) a git url that, when cloned, results in (a).
Even if you never publish your package, you can still get a lot of benefits of using npm if you just want to write a node program (a), and perhaps if you also want to be able to easily install it elsewhere after packing it up into a tarball (b).

Git urls can be of the form:
git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish
The commit-ish can be any tag, sha, or branch which can be supplied as an argument to git checkout. The default is master.

What is a module?
A module is anything that can be loaded with require() in a Node.js program.
The following things are all examples of things that can be loaded as modules:
- A folder with a package.json file containing a main field.
- A folder with an index.js file in it.
- A JavaScript file.
Most npm packages are modules, because they are libraries that you load with require.
However, there's no requirement that an npm package be a module!
Some only contain an executable command-line interface, and don't provide a main field for use in Node programs.

Almost all npm packages (at least, those that are Node programs) contain many modules within them (because every file they load with require() is a module).

In the context of a Node program, the module is also the thing that was loaded from a file. For example, in the following program:

var req = require('request')
we might say that "The variable req refers to the request module".
[https://www.npmjs.org/doc/faq.html#What-is-a-package]

ljnm'package.json#ql:npm'package.json#

name::
* McsEngl.ljnm'package.json@cptIt,

ljnm'part

name::
* McsEngl.ljnm'part@cptIt,
* McsEngl.ljnmdl'constituent@cptIt,
* McsEngl.ljnmdl'element@cptIt,

_DESCRIPTION:
In Node, things are only visible to other things in the same file. By things, I mean variables, functions, classes and class members.
[http://openmymind.net/2012/2/3/Node-Require-and-Exports/]

ljnm'repository

name::
* McsEngl.ljnm'repository@cptIt,

_ADDRESS.WPG:
* https://www.npmjs.org//
* http://eirikb.github.io/nipster//

ljnm'npm-registry (npmjs.org)

name::
* McsEngl.ljnm'npm-registry (npmjs.org)@cptIt,
* McsEngl.ljn'npmjs.org@cptIt,

_ADDRESS.WPG:
* https://www.npmjs.org//

Node Packaged Modules:
2014-02-16: Total Packages: 59 377

node-modules.com

name::
* McsEngl.node-modules.com@cptIt,

_ADDRESS.WPG:
* http://node-modules.com//

ljnm'resource

name::
* McsEngl.ljnm'resource@cptIt,

_ADDRESS.WPG:
* https://blog.risingstack.com/node-js-at-scale-module-system-commonjs-require//
* https://www.nczonline.net/blog/2016/04/es6-module-loading-more-complicated-than-you-think//
* http://www.hacksparrow.com/how-to-write-node-js-modules.html,
* http://openmymind.net/2012/2/3/Node-Require-and-Exports//

NCZOnline Newsletter - JavaScript's Uncomfortable Adolescence
July 05, 2016
From nczonline.net, with love.

Hi everyone,

At around the age of 12, I had a major growth spurt. I was towering over my friends and looked older than almost everyone my age. My body, dealing with the shock of the sudden and profound growth, didn't do very well. I had a lot of trouble with my knees buckling as I walked and I had significant back pain. My doctor reassured my parents and me that these were the textbook definition of "growing pains," and that they would go away on their own once my body had completed this dramatic shift.

In a lot of ways, I see the same thing happening with JavaScript right now. ECMAScript 6 is a massive enhancement on top of ECMAScript 5, and we had to wait four years for it to complete. The anxiousness around new features led to the creation of tools like Babel, promising that we wouldn't have to wait to use the new stuff. Unfortunately, that created a tooling explosion that meant setting up new projects to use ES6 was really complicated. On top of that, the ES6 features kept changing, and tools had to keep changing to keep up.

Perhaps the most controversial and problematic aspect of ES6 is the introduction of modules as a separate compilation target. I wrote about the differences between module and scripts previously, and about why they have to be loaded in different modes. To TC39, the committee that manages ECMAScript, modules are the way that all JavaScript code will be written in the future. As such, there was a concerted effort not to leave around any syntax clues that would become obsolete in the future (for instance, forcing people to write "use module" at the top of a file wouldn't make any sense in another five years when people don't write anything other than modules). Unfortunately, the ambiguous syntax is proving complicated during this transition period where everyone is still writing scripts and wants to transition to writing modules.

All of this adds up to what people have been calling JavaScript fatigue. Things have been changing so quickly, with new tools necessary to do new things, that it's made all of our lives more complicated. The good news is that this period is temporary. Much like my growth spurt at age 12, JavaScript is going through an uncomfortable adolescence where it grew very big very fast and now we're all learning to adjust. The transition from scripts to modules is the last, and most painful, part of this adolescence.

In another two years, when you're writing modules all the time and modules are natively supported in browsers and Node.js, you'll forget all about the pain you're experiencing right now. JavaScript is growing up and we're all in the privileged position of watching it do so. There's some pain now, but things will be better than ever before you know it.

Be well.

-N

ljnm'stability-index (weak|0 - strong|5)

name::
* McsEngl.ljnm'stability-index (weak|0 - strong|5)@cptIt,
* McsEngl.ljn'api'stability-index@cptIt,
* McsEngl.ljn'stability-index-of-api@cptIt,
* McsEngl.ljnstability@cptIt,

_DESCRIPTION:
ljnStability0.Deprecated
This feature is known to be problematic, and changes are
planned. Do not rely on it. Use of the feature may cause warnings. Backwards
compatibility should not be expected.
ljnStability1.Experimental
This feature is subject to change, and is gated by a command line flag.
It may change or be removed in future versions.
ljnStability2.Stable
The API has proven satisfactory. Compatibility with the npm ecosystem
is a high priority, and will not be broken unless absolutely necessary.
ljnStability3.Locked
Only fixes related to security, performance, or bug fixes will be accepted.
Please do not suggest API changes in this area; they will be refused.
[https://nodejs.org/api/documentation.html#documentation_stability_index]
===
The stability indices are as follows:

Stability: 0 - Deprecated
This feature is known to be problematic, and changes are
planned. Do not rely on it. Use of the feature may cause warnings. Backwards
compatibility should not be expected.

Stability: 1 - Experimental
This feature was introduced recently, and may change
or be removed in future versions. Please try it out and provide feedback.
If it addresses a use-case that is important to you, tell the node core team.

Stability: 2 - Unstable
The API is in the process of settling, but has not yet had
sufficient real-world testing to be considered stable. Backwards-compatibility
will be maintained if reasonable.

Stability: 3 - Stable
The API has proven satisfactory, but cleanup in the underlying
code may cause minor changes. Backwards-compatibility is guaranteed.

Stability: 4 - API Frozen
This API has been tested extensively in production and is
unlikely to ever have to change.

Stability: 5 - Locked
Unless serious bugs are found, this code will not ever
change. Please do not suggest changes in this area; they will be refused.
[http://nodejs.org/api/all.html#all_stability_index]

ljnm'variable

name::
* McsEngl.ljnm'variable@cptIt,

_DESCRIPTION:
variables declared with the var keyword remain local to a module; those declared without it get attached to the global object.
[http://www.hacksparrow.com/global-variables-in-node-js.html]
===
Variables local to the module will be private, as though the module was wrapped in a function.
[http://nodejs.org/api/all.html#all_modules]

SPECIFIC

* ljnm.specific,
* mdlNode.specific,

_SPECIFIC:
* custom-module#ql:ndmdl.core#
* customNo-module##
===
There are three types of modules in Node.js:
internal modules (parts of Node API)
3rd party modules written in JavaScript
3rd party modules with C/C++ addons
[https://github.com/rogerwang/node-webkit/wiki/Using-Node-modules]

ljnm.CORE

name::
* McsEngl.ljnm.CORE@cptIt,
* McsEngl.ljn'core-library@cptIt,
* McsEngl.ljn'core-module@cptIt,
* McsEngl.ljn'native-node@cptIt,
* McsEngl.ljnmdl.builtIn@cptIt,
* McsEngl.ljnmdl.customNo@cptIt,
* McsEngl.ljnmdl.internal@cptIt,
* McsEngl.ljnmdl.native@cptIt,

_DESCRIPTION:
Core Modules#
Node has several modules compiled into the binary. These modules are described in greater detail elsewhere in this documentation.

The core modules are defined in node's source in the lib/ folder.

Core modules are always preferentially loaded if their identifier is passed to require(). For instance, require('http') will always return the built in HTTP module, even if there is a file by that name.
[http://nodejs.org/api/all.html#all_core_modules]

_SPECIFIC:
repl> repl._builtinLibs
===
* ndmdl.core._debugger.js
* ndmdl.core._http_agent.js
* ndmdl.core._http_client.js
* ndmdl.core._http_common.js
* ndmdl.core._http_incoming.js
* ndmdl.core._http_outgoing.js
* ndmdl.core._http_server.js
* ndmdl.core._linklist.js
* ndmdl.core._stream_duplex.js
* ndmdl.core._stream_passthrough.js
* ndmdl.core._stream_readable.js
* ndmdl.core._stream_transform.js
* ndmdl.core._stream_writable.js
* ndmdl.core._tls_legacy.js
* ndmdl.core._tls_wrap.js
* ndmdl.core.assert.js
* ndmdl.core.buffer.js
* ndmdl.core.child_process.js
* ndmdl.core.cluster.js
* ndmdl.core.console.js
* ndmdl.core.constants.js
* ndmdl.core.crypto.js
* ndmdl.core.dgram.js
* ndmdl.core.dns.js
* ndmdl.core.domain.js
* ndmdl.core.events.js
* ndmdl.core.freelist.js
* ndmdl.core.fs.js
* ndmdl.core.http.js
* ndmdl.core.https.js
* ndmdl.core.module.js
* ndmdl.core.net.js
* ndmdl.core.os.js
* ndmdl.core.path.js
* ndmdl.core.punycode.js
* ndmdl.core.querystring.js
* ndmdl.core.readline.js
* ndmdl.core.repl.js
* ndmdl.core.smalloc.js
* ndmdl.core.stream.js
* ndmdl.core.string_decoder.js
* ndmdl.core.sys.js
* ndmdl.core.timers.js
* ndmdl.core.tls.js
* ndmdl.core.tracing.js
* ndmdl.core.tty.js
* ndmdl.core.url.js
* ndmdl.core.util.js
* ndmdl.core.vm.js
* ndmdl.core.zlib.js

ljnm.CORE.NO

name::
* McsEngl.ljnm.CORE.NO@cptIt,
* McsEngl.ljn'coreNo-library@cptIt,
* McsEngl.ljn'coreNo-module@cptIt,
* McsEngl.ljn'non-native-node@cptIt,
* McsEngl.ljnmdl.3rd-party@cptIt,
* McsEngl.ljnmdl.non-builtIn@cptIt,
* McsEngl.ljnmdl.custom@cptIt,
* McsEngl.ljnmdl.internalNo@cptIt,
* McsEngl.ljnmdl.nativeNo@cptIt,

_SPECIFIC:
* 3rd party modules written in JavaScript
* 3rd party modules with C/C++ addons
[https://github.com/rogerwang/node-webkit/wiki/Using-Node-modules]

ljnm.assert-function (core 3.locked)

name::
* McsEngl.ljnm.assert-function (core 3.locked)@cptIt,
* McsEngl.ljnm.assert@cptIt,
* McsEngl.ljnassert@cptIt,
* McsEngl.ljn'assert-module@cptIt,

_DESCRIPTION:
Stability: 3 - Locked
The assert module provides a simple set of assertion tests that can be used to test invariants. The module is intended for internal use by Node.js, but can be used in application code via require('assert'). However, assert is not a testing framework, and is not intended to be used as a general purpose assertion library.
The API for the assert module is Locked. This means that there will be no additions or changes to any of the methods implemented and exposed by the module.
[https://nodejs.org/api/assert.html#assert_assert]

_GENERIC:
* Function.prototype (> Object.getPrototypeOf(assert) === Function.prototype //true)
* Object.prototype,

_MEMBER:
assert(value[, message])
assert.deepEqual(actual, expected[, message])
assert.deepStrictEqual(actual, expected[, message])
assert.doesNotThrow(block[, error][, message])
assert.equal(actual, expected[, message])
assert.fail(actual, expected, message, operator)
assert.ifError(value)
assert.notDeepEqual(actual, expected[, message])
assert.notDeepStrictEqual(actual, expected[, message])
assert.notEqual(actual, expected[, message])
assert.notStrictEqual(actual, expected[, message])
assert.ok(value[, message])
assert.strictEqual(actual, expected[, message])
assert.throws(block[, error][, message])
[https://nodejs.org/api/assert.html]

_DESCRIPTION:
This module is used for writing unit tests for your applications, you can access it with require('assert').
[http://nodejs.org/api/assert.html]
===
The assert module provides a simple set of assertion tests that can be used to test invariants. The module is intended for internal use by Node.js, but can be used in application code via require('assert'). However, assert is not a testing framework, and is not intended to be used as a general purpose assertion library.
The API for the assert module is Locked. This means that there will be no additions or changes to any of the methods implemented and exposed by the module.
[https://nodejs.org/dist/latest-v6.x/docs/api/assert.html#assert_assert]
===
There is no assert in JavaScript (yet; there's talk of adding one, but it's at an early stage). Perhaps you're using some library that provides one. The usual meaning is to throw an error if the expression passed into the function is false; this is part of the general concept of assertion checking. Usually assertions (as they're called) are used only in "testing" or "debug" builds and stripped out of production code.

Suppose you had a function that was supposed to always accept a string. You'd want to know if someone called that function with something that wasn't a string. So you might do:

assert(typeof argumentName === "string");
...where assert would throw an error if the condition were false.

A very simple version would look like this:

function assert(condition, message) {
if (!condition) {
throw message || "Assertion failed";
}
}
Better yet, make use of the Error object if the JavaScript engine supports it (really old ones might not), which has the advantage of collecting a stack trace and such:

function assert(condition, message) {
if (!condition) {
message = message || "Assertion failed";
if (typeof Error !== "undefined") {
throw new Error(message);
}
throw message; // Fallback
}
}
Even IE8 has Error (although it doesn't have the stack property, but modern engines [including modern IE] do).
[http://stackoverflow.com/a/15313435]

ljnm.child-process object (core 2=stable)

name::
* McsEngl.ljnm.child-process object (core 2=stable)@cptIt,
* McsEngl.ljnm.child-process@cptIt,
* McsEngl.ljnchild-process@cptIt,
* McsEngl.ljn'child-process-module@cptIt,

_WHOLE:
* global,

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(child_process) === Object.prototype //true)

_DESCRIPTION:
Node provides a tri-directional popen(3) facility through the child_process module.

It is possible to stream data through a child's stdin, stdout, and stderr in a fully non-blocking way. (Note that some programs use line-buffered I/O internally. That doesn't affect node.js but it means data you send to the child process is not immediately consumed.)

To create a child process use require('child_process').spawn() or require('child_process').fork(). The semantics of each are slightly different, and explained below.
[http://nodejs.org/api/all.html#all_child_process]

ljnmchild-process.spawn

name::
* McsEngl.ljnmchild-process.spawn@cptIt,

_CODE.LJN:
const spawn = require('child_process').spawn;
const ls = spawn('node',['-v']);

ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});

ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
> stdout: v6.9.2
> child process exited with code 0
===
const spawn = require('child_process').spawn;
const ls = spawn('node',['-s']);

ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});

ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
> stderr: node: bad option: -s
> child process exited with code 9

Difference-spawn-exec

Difference between spawn and exec functions of child_process

The Node.js Child Processes module (child_process) has two functions spawn and exec, using which we can start a child process to execute other programs on the system. Those new to child_process may wonder why there are two functions to do the same thing, and which one they should use. I'll explain the differences between spawn and exec to help you decide when to use what.
The most significant difference between child_process.spawn and child_process.exec is in what they return - spawn returns a stream and exec returns a buffer.
child_process.spawn returns an object with stdout and stderr streams. You can tap on the stdout stream to read data that the child process sends back to Node. stdout being a stream has the "data", "end", and other events that streams have. spawn is best used to when you want the child process to return a large amount of data to Node - image processing, reading binary data etc.
child_process.spawn is "asynchronously asynchronous", meaning it starts sending back data from the child process in a stream as soon as the child process starts executing.
You can see an example here where I used spawn to read the results of a curl request to Node.
child_process.exec returns the whole buffer output from the child process. By default the buffer size is set at 200k. If the child process returns anything more than that, you program will crash with the error message "Error: maxBuffer exceeded". You can fix that problem by setting a bigger buffer size in the exec options. But you should not do it because exec is not meant for processes that return HUGE buffers to Node. You should use spawn for that. So what do you use exec for? Use it to run programs that return result statuses, instead of data.
child_process.exec is "synchronously asynchronous", meaning although the exec is asynchronous, it waits for the child process to end and tries to return all the buffered data at once. If the buffer size of exec is not set big enough, it fails with a "maxBuffer exceeded" error.
See an example here where I used exec to execute wget to download files and update Node with the status the execution.
So there it is - the differences between span and exec of Node's child_process. Use spawn when you want the child process to return huge binary data to Node, use exec when you want the child process to return simple status messages.
[https://www.hacksparrow.com/difference-between-spawn-and-exec-of-node-js-child_process.html]

ljnm.cluster object (core 2=stable)

name::
* McsEngl.ljnm.cluster object (core 2=stable)@cptIt,
* McsEngl.ljnm.cluster@cptIt,
* McsEngl.ljncluster@cptIt,
* McsEngl.ljn'cluster-module@cptIt,

_DESCRIPTION:
A single instance of Node.js runs in a single thread. To take advantage of multi-core systems the user will sometimes want to launch a cluster of Node.js processes to handle the load.
[https://nodejs.org/dist/latest-v6.x/docs/api/cluster.html#cluster_cluster]

_GENERIC:
* events.EventEmitter.prototype (> Object.getPrototypeOf(cluster) === events.EventEmitter.prototype //true)
* Object.prototype (> Object.getPrototypeOf(cluster.__proto__) === Object.prototype //true)

ljnm.console (core 2.stable)

name::
* McsEngl.ljnm.console (core 2.stable)@cptIt,
* McsEngl.ljnm.console@cptIt,
* McsEngl.ljnconsole@cptIt,
* McsEngl.ljn'console-module@cptIt,

_GENERIC:
* console.Console.prototype (> Object.getPrototypeOf(console) === console.Console.prototype //true)
* Object.prototype (> Object.getPrototypeOf(console.__proto__) === Object.prototype //true)

_DESCRIPTION:
The console module provides a simple debugging console that is similar to the JavaScript console mechanism provided by web browsers.

The module exports two specific components:
A Console class with methods such as console.log(), console.error() and console.warn() that can be used to write to any Node.js stream.
A global console instance configured to write to stdout and stderr. Because this object is global, it can be used without calling require('console').
[https://nodejs.org/dist/latest-v6.x/docs/api/console.html#console_console]

ljnm.crypto object (core 2.stable)

name::
* McsEngl.ljnm.crypto object (core 2.stable)@cptIt,
* McsEngl.ljnm.crypto@cptIt,
* McsEngl.ljncrypto@cptIt,
* McsEngl.ljn'crypto-module@cptIt,

_DESCRIPTION:
The crypto module provides cryptographic functionality that includes a set of wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign and verify functions.
Use require('crypto') to access this module.
[https://nodejs.org/api/crypto.html#crypto_crypto]

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(crypto) === Object.prototype //true)

_DESCRIPTION:
Use require('crypto') to access this module.

The crypto module offers a way of encapsulating secure credentials to be used as part of a secure HTTPS net or http connection.

It also offers a set of wrappers for OpenSSL's hash, hmac, cipher, decipher, sign and verify methods.
[http://nodejs.org/api/all.html#all_crypto]

ljnm.dns object (core 2.stable)

name::
* McsEngl.ljnm.dns object (core 2.stable)@cptIt,
* McsEngl.ljnm.dns@cptIt,
* McsEngl.ljndns@cptIt,
* McsEngl.ljn'dnc-module@cptIt,

_DESCRIPTION:
The dns module contains functions belonging to two different categories:
[https://nodejs.org/api/dns.html#dns_dns]

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(dns) === Object.prototype //true)

ljndns.member:
// ljn6.2.2
> Object.getOwnPropertyNames(dns).sort()
[ 'ADDRCONFIG',
'ADDRGETNETWORKPARAMS',
'BADFAMILY',
'BADFLAGS',
'BADHINTS',
'BADNAME',
'BADQUERY',
'BADRESP',
'BADSTR',
'CANCELLED',
'CONNREFUSED',
'DESTRUCTION',
'EOF',
'FILE',
'FORMERR',
'LOADIPHLPAPI',
'NODATA',
'NOMEM',
'NONAME',
'NOTFOUND',
'NOTIMP',
'NOTINITIALIZED',
'REFUSED',
'SERVFAIL',
'TIMEOUT',
'V4MAPPED',
'getServers',
'lookup',
'lookupService',
'resolve',
'resolve4',
'resolve6',
'resolveCname',
'resolveMx',
'resolveNaptr',
'resolveNs',
'resolvePtr',
'resolveSoa',
'resolveSrv',
'resolveTxt',
'reverse',
'setServers' ]
> dns
{ lookup: [Function: lookup],
lookupService: [Function],
resolve4: [Function: query],
resolve6: [Function: query],
resolveCname: [Function: query],
resolveMx: [Function: query],
resolveNs: [Function: query],
resolveTxt: [Function: query],
resolveSrv: [Function: query],
resolvePtr: [Function: query],
resolveNaptr: [Function: query],
resolveSoa: [Function: query],
reverse: [Function: query],
resolve: [Function],
getServers: [Function],
setServers: [Function],
ADDRCONFIG: 1024,
V4MAPPED: 2048,
NODATA: 'ENODATA',
FORMERR: 'EFORMERR',
SERVFAIL: 'ESERVFAIL',
NOTFOUND: 'ENOTFOUND',
NOTIMP: 'ENOTIMP',
REFUSED: 'EREFUSED',
BADQUERY: 'EBADQUERY',
BADNAME: 'EBADNAME',
BADFAMILY: 'EBADFAMILY',
BADRESP: 'EBADRESP',
CONNREFUSED: 'ECONNREFUSED',
TIMEOUT: 'ETIMEOUT',
EOF: 'EOF',
FILE: 'EFILE',
NOMEM: 'ENOMEM',
DESTRUCTION: 'EDESTRUCTION',
BADSTR: 'EBADSTR',
BADFLAGS: 'EBADFLAGS',
NONAME: 'ENONAME',
BADHINTS: 'EBADHINTS',
NOTINITIALIZED: 'ENOTINITIALIZED',
LOADIPHLPAPI: 'ELOADIPHLPAPI',
ADDRGETNETWORKPARAMS: 'EADDRGETNETWORKPARAMS',
CANCELLED: 'ECANCELLED' }

ljnm.events-function (core 2.stable)

name::
* McsEngl.ljnm.events-function (core 2.stable)@cptIt,
* McsEngl.ljnm.events@cptIt,
* McsEngl.ljn'events-module@cptIt,
* McsEngl.ljnevents@cptIt,

_GENERIC:
* Function.prototype,
* Object.prototype (> Object.getPrototypeOf(events.__proto__) === Object.prototype //true)

_DESCRIPTION:
Many objects in Node emit events: a net.Server emits an event each time a peer connects to it, a fs.readStream emits an event when the file is opened. All objects which emit events are instances of events.EventEmitter. You can access this module by doing: require("events");

Typically, event names are represented by a camel-cased string, however, there aren't any strict restrictions on that, as any string will be accepted.

Functions can then be attached to objects, to be executed when an event is emitted. These functions are called listeners.
[http://nodejs.org/api/all.html#all_events]

ljnevents'member

name::
* McsEngl.ljnevents'member@cptIt,

ljnevents.MEMBER:
> Object.getOwnPropertyNames(events).sort()
[ 'EventEmitter',
'defaultMaxListeners',
'init',
'length',
'listenerCount',
'name',
'prototype',
'usingDomains' ]
> events
{ [Function: EventEmitter]
EventEmitter: [Circular],
usingDomains: true,
defaultMaxListeners: [Getter/Setter],
init: [Function],
listenerCount: [Function] }

ljnevents.EventEmitter-function

name::
* McsEngl.ljnevents.EventEmitter-function@cptIt,
* McsEngl.ljnEventEmitter@cptIt,

_DESCRIPTION:
events.EventEmitter === events
[hmnSngo.2016-07-02]
===
To access the EventEmitter class, require('events').EventEmitter.

When an EventEmitter instance experiences an error, the typical action is to emit an 'error' event. Error events are treated as a special case in node. If there is no listener for it, then the default action is to print a stack trace and exit the program.

All EventEmitters emit the event 'newListener' when new listeners are added and 'removeListener' when a listener is removed.
[http://nodejs.org/api/all.html#all_class_events_eventemitter]

ljn'listener-function

name::
* McsEngl.ljn'listener-function@cptIt,

_DESCRIPTION:
Functions can then be attached to objects, to be executed when an event is emitted. These functions are called listeners.
[http://nodejs.org/api/all.html#all_events]

ljnm.fs object (core 3=stable)

name::
* McsEngl.ljnm.fs object (core 3=stable)@cptIt,
* McsEngl.ljnm.fs@cptIt,
* McsEngl.ljn'file-system-module@cptIt,
* McsEngl.ljn'fs-module@cptIt,
* McsEngl.ljnmfs@cptIt,
* McsEngl.ljnfs@cptIt,
* McsEngl.moFs@cptIt,

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(fs) === Object.prototype //true)

_DESCRIPTION:
File I/O is provided by simple wrappers around standard POSIX functions. To use this module do require('fs'). All the methods have asynchronous and synchronous forms.

The asynchronous form always take a completion callback as its last argument. The arguments passed to the completion callback depend on the method, but the first argument is always reserved for an exception. If the operation was completed successfully, then the first argument will be null or undefined.

When using the synchronous form any exceptions are immediately thrown. You can use try/catch to handle exceptions or allow them to bubble up.
[http://nodejs.org/api/all.html#all_file_system]

_ADDRESS.WPG:
* https://nodejs.org/dist/latest/docs/api/fs.html,
* http://nodejs.org/api/all.html#all_file_system,

_MEMBER:
* moFs.FSWatcher_Class
* moFs.ReadStream_Class
* moFs.Stats_Class
* moFs.WriteStream_Class
* moFs.appendFile(filename, data, [options], callback)
* moFs.appendFileSync(filename, data, [options])
* moFs.chmod(path, mode, callback)
* moFs.chmodSync(path, mode)
* moFs.chown(path, uid, gid, callback)
* moFs.chownSync(path, uid, gid)
* moFs.close(fd, callback)
* moFs.closeSync(fd)
* moFs.createReadStream(path, [options])
* moFs.createWriteStream(path, [options])
* moFs.exists(path, callback): Synchronous version of fs.exists(). Returns true if the file exists, false otherwise.Note that fs.exists() is deprecated, but fs.existsSync() is not.
* moFs.existsSync(path)
* moFs.fchmod(fd, mode, callback)
* moFs.fchmodSync(fd, mode)
* moFs.fchown(fd, uid, gid, callback)
* moFs.fchownSync(fd, uid, gid)
* moFs.fstat(fd, callback)
* moFs.fstatSync(fd)
* moFs.fsync(fd, callback)
* moFs.fsyncSync(fd)
* moFs.ftruncate(fd, len, callback)
* moFs.ftruncateSync(fd, len)
* moFs.futimes(fd, atime, mtime, callback)
* moFs.futimesSync(fd, atime, mtime)
* moFs.lchmod(path, mode, callback)
* moFs.lchmodSync(path, mode)
* moFs.lchown(path, uid, gid, callback)
* moFs.lchownSync(path, uid, gid)
* moFs.link(srcpath, dstpath, callback)
* moFs.linkSync(srcpath, dstpath)
* moFs.lstat(path, callback)
* moFs.lstatSync(path)
* moFs.mkdir(path, [mode], callback)
* moFs.mkdirSync(path, [mode])
* moFs.open(path, flags, [mode], callback)
* moFs.openSync(path, flags, [mode])
* moFs.read(fd, buffer, offset, length, position, callback)
* moFs.readFile(filename, [options], callback)
* moFs.readFileSync(filename, [options])
* moFs.readSync(fd, buffer, offset, length, position)
* moFs.readdir(path, callback)
* moFs.readdirSync(path)
* moFs.readlink(path, callback)
* moFs.readlinkSync(path)
* moFs.realpath(path, [cache], callback)
* moFs.realpathSync(path, [cache])
* moFs.rename(oldPath, newPath, callback)
* moFs.renameSync(oldPath, newPath)
* moFs.rmdir(path, callback)
* moFs.rmdirSync(path)
* moFs.stat(path, callback)
* moFs.statSync(path)
* moFs.symlink(srcpath, dstpath, [type], callback)
* moFs.symlinkSync(srcpath, dstpath, [type])
* moFs.truncate(path, len, callback)
* moFs.truncateSync(path, len)
* moFs.unlink(path, callback)
* moFs.unlinkSync(path)
* moFs.unwatchFile(filename, [listener])
* moFs.utimes(path, atime, mtime, callback)
* moFs.utimesSync(path, atime, mtime)
* moFs.watch(filename, [options], [listener])
* moFs.watchFile(filename, [options], listener)
* moFs.write(fd, buffer, offset, length, position, callback)
* moFs.writeFile(filename, data, [options], callback)
* moFs.writeFileSync(filename, data, [options])
* moFs.writeSync(fd, buffer, offset, length, position)
[https://nodejs.org/dist/latest/docs/api/fs.html]

ljnm.http object (core 2.stable)

name::
* McsEngl.ljnm.http object (core 2.stable)@cptIt,
* McsEngl.ljnm.http@cptIt,
* McsEngl.ljnmoHttp@cptIt,
* McsEngl.ljn'http-module@cptIt,
* McsEngl.ljnhttp@cptIt,

_DESCRIPTION:
To use the HTTP server and client one must require('http').

The HTTP interfaces in Node are designed to support many features of the protocol which have been traditionally difficult to use. In particular, large, possibly chunk-encoded, messages. The interface is careful to never buffer entire requests or responses--the user is able to stream data.

HTTP message headers are represented by an object like this:
{ 'content-length': '123',
'content-type': 'text/plain',
'connection': 'keep-alive',
'accept': '*/*' }
Keys are lowercased. Values are not modified.

In order to support the full spectrum of possible HTTP applications, Node's HTTP API is very low-level. It deals with stream handling and message parsing only. It parses a message into headers and body but it does not parse the actual headers or the body.
[http://nodejs.org/api/all.html#all_http]

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(http) === Object.prototype //true)

ljnhttp'member

name::
* McsEngl.ljnhttp'member@cptIt,

ljnhttp.member:
//ljn6.2.2
> Object.getOwnPropertyNames(http).sort()
[ 'Agent',
'Client',
'ClientRequest',
'IncomingMessage',
'METHODS',
'OutgoingMessage',
'STATUS_CODES',
'Server',
'ServerResponse',
'_connectionListener',
'createClient',
'createServer',
'get',
'globalAgent',
'request' ]

ljnhttp.Agent-function

name::
* McsEngl.ljnhttp.Agent-function@cptIt,

_DESCRIPTION:
Agent:
{ [Function: Agent]
super_:
{ [Function: EventEmitter]
EventEmitter: [Circular],
usingDomains: true,
defaultMaxListeners: [Getter/Setter],
init: [Function],
listenerCount: [Function] },
defaultMaxSockets: Infinity },

ljnhttp.Client Function: deprecated

name::
* McsEngl.ljnhttp.Client Function: deprecated@cptIt,

_DESCRIPTION:
Client: [Function: deprecated],

ljnhttp.ClientRequest-function

name::
* McsEngl.ljnhttp.ClientRequest-function@cptIt,

_DESCRIPTION:
ClientRequest: { [Function: ClientRequest] super_: { [Function: OutgoingMessage] super_: [Object] } },

ljnhttp.IncomingMessage-function

name::
* McsEngl.ljnhttp.IncomingMessage-function@cptIt,

_DESCRIPTION:
IncomingMessage:
{ [Function: IncomingMessage]
super_:
{ [Function: Readable]
ReadableState: [Function: ReadableState],
super_: [Object],
_fromList: [Function: fromList] } },

ljnhttp.METHODS array

name::
* McsEngl.ljnhttp.METHODS array@cptIt,

_DESCRIPTION:
METHODS:
[ 'ACL',
'BIND',
'CHECKOUT',
'CONNECT',
'COPY',
'DELETE',
'GET',
'HEAD',
'LINK',
'LOCK',
'M-SEARCH',
'MERGE',
'MKACTIVITY',
'MKCALENDAR',
'MKCOL',
'MOVE',
'NOTIFY',
'OPTIONS',
'PATCH',
'POST',
'PROPFIND',
'PROPPATCH',
'PURGE',
'PUT',
'REBIND',
'REPORT',
'SEARCH',
'SUBSCRIBE',
'TRACE',
'UNBIND',
'UNLINK',
'UNLOCK',
'UNSUBSCRIBE' ],

ljnhttp.OutgoingMessage-function

name::
* McsEngl.ljnhttp.OutgoingMessage-function@cptIt,

_DESCRIPTION:
OutgoingMessage:
{ [Function: OutgoingMessage]
super_:
{ [Function: Stream]
super_: [Object],
Readable: [Object],
Writable: [Object],
Duplex: [Object],
Transform: [Object],
PassThrough: [Object],
Stream: [Circular] } },

ljnhttp.STATUS-CODES object

name::
* McsEngl.ljnhttp.STATUS-CODES object@cptIt,

_DESCRIPTION:
STATUS_CODES:
{ '100': 'Continue',
'101': 'Switching Protocols',
'102': 'Processing',
'200': 'OK',
'201': 'Created',
'202': 'Accepted',
'203': 'Non-Authoritative Information',
'204': 'No Content',
'205': 'Reset Content',
'206': 'Partial Content',
'207': 'Multi-Status',
'208': 'Already Reported',
'226': 'IM Used',
'300': 'Multiple Choices',
'301': 'Moved Permanently',
'302': 'Found',
'303': 'See Other',
'304': 'Not Modified',
'305': 'Use Proxy',
'307': 'Temporary Redirect',
'308': 'Permanent Redirect',
'400': 'Bad Request',
'401': 'Unauthorized',
'402': 'Payment Required',
'403': 'Forbidden',
'404': 'Not Found',
'405': 'Method Not Allowed',
'406': 'Not Acceptable',
'407': 'Proxy Authentication Required',
'408': 'Request Timeout',
'409': 'Conflict',
'410': 'Gone',
'411': 'Length Required',
'412': 'Precondition Failed',
'413': 'Payload Too Large',
'414': 'URI Too Long',
'415': 'Unsupported Media Type',
'416': 'Range Not Satisfiable',
'417': 'Expectation Failed',
'418': 'I\'m a teapot',
'421': 'Misdirected Request',
'422': 'Unprocessable Entity',
'423': 'Locked',
'424': 'Failed Dependency',
'425': 'Unordered Collection',
'426': 'Upgrade Required',
'428': 'Precondition Required',
'429': 'Too Many Requests',
'431': 'Request Header Fields Too Large',
'451': 'Unavailable For Legal Reasons',
'500': 'Internal Server Error',
'501': 'Not Implemented',
'502': 'Bad Gateway',
'503': 'Service Unavailable',
'504': 'Gateway Timeout',
'505': 'HTTP Version Not Supported',
'506': 'Variant Also Negotiates',
'507': 'Insufficient Storage',
'508': 'Loop Detected',
'509': 'Bandwidth Limit Exceeded',
'510': 'Not Extended',
'511': 'Network Authentication Required' },

ljnhttp.Server-function

name::
* McsEngl.ljnhttp.Server-function@cptIt,

_DESCRIPTION:
Server: { [Function: Server] super_: { [Function: Server] super_: [Object] } },

ljnhttp.ServerResponse function

name::
* McsEngl.ljnhttp.ServerResponse function@cptIt,

_DESCRIPTION:
ServerResponse: { [Function: ServerResponse] super_: { [Function: OutgoingMessage] super_: [Object] } },

ljnhttp.-connectionListener-function

name::
* McsEngl.ljnhttp.-connectionListener-function@cptIt,

_DESCRIPTION:
_connectionListener: [Function: connectionListener],

ljnhttp.createClient Function: deprecated

name::
* McsEngl.ljnhttp.createClient Function: deprecated@cptIt,

_DESCRIPTION:
createClient: [Function: deprecated]

ljnhttp.createServer-function

name::
* McsEngl.ljnhttp.createServer-function@cptIt,

_DESCRIPTION:
createServer: [Function],

ljnhttp.get-function

name::
* McsEngl.ljnhttp.get-function@cptIt,

_DESCRIPTION:
get: [Function],

ljnhttp.globalAgent object

name::
* McsEngl.ljnhttp.globalAgent object@cptIt,

_DESCRIPTION:
globalAgent:
Agent {
domain:
Domain {
domain: null,
_events: [Object],
_eventsCount: 1,
_maxListeners: undefined,
members: [] },
_events: { free: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 80,
protocol: 'http:',
options: { path: null },
requests: {},
sockets: {},
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256 },

ljnhttp.request-function

name::
* McsEngl.ljnhttp.request-function@cptIt,

_DESCRIPTION:
request: [Function],

ljnm.https object (core 2.stable)

name::
* McsEngl.ljnm.https object (core 2.stable)@cptIt,
* McsEngl.ljnm.https@cptIt,
* McsEngl.ljn'https-module@cptIt,
* McsEngl.ljnhttps@cptIt,

_DESCRIPTION:
HTTPS is the HTTP protocol over TLS/SSL. In Node.js this is implemented as a separate module.
[https://nodejs.org/api/https.html#https_https]

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(https) === Object.prototype //true)

ljnhttps.member:
// ljn6.2.2
> Object.getOwnPropertyNames(https).sort()
[ 'Agent',
'Server',
'createServer',
'get',
'globalAgent',
'request' ]
> https
{ Server: { [Function: Server] super_: { [Function: Server] super_: [Object] } },
createServer: [Function],
globalAgent:
Agent {
domain:
Domain {
domain: null,
_events: [Object],
_eventsCount: 1,
_maxListeners: undefined,
members: [] },
_events: { free: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: { path: null },
requests: {},
sockets: {},
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
maxCachedSessions: 100,
_sessionCache: { map: {}, list: [] } },
Agent:
{ [Function: Agent]
super_: { [Function: Agent] super_: [Object], defaultMaxSockets: Infinity } },
request: [Function],
get: [Function] }

ljnm.net object (core 2.stable)

name::
* McsEngl.ljnm.net object (core 2.stable)@cptIt,
* McsEngl.ljnm.net@cptIt,
* McsEngl.ljn'net-module@cptIt,
* McsEngl.ljnnet@cptIt,

_DESCRIPTION:
The net module provides you with an asynchronous network wrapper. It contains functions for creating both servers and clients (called streams). You can include this module with require('net');.
[https://nodejs.org/api/net.html#net_net]

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(net) === Object.prototype //true)

ljnnet.member:
// ljn6.2.2
> Object.getOwnPropertyNames(net).sort()
[ 'Server',
'Socket',
'Stream',
'_createServerHandle',
'_normalizeConnectArgs',
'_setSimultaneousAccepts',
'connect',
'createConnection',
'createServer',
'isIP',
'isIPv4',
'isIPv6' ]
> net
{ createServer: [Function],
createConnection: [Function],
connect: [Function],
_normalizeConnectArgs: [Function: normalizeConnectArgs],
Socket: { [Function: Socket] super_: { [Function: Duplex] super_: [Object] } },
Stream: { [Function: Socket] super_: { [Function: Duplex] super_: [Object] } },
Server:
{ [Function: Server]
super_:
{ [Function: EventEmitter]
EventEmitter: [Circular],
usingDomains: true,
defaultMaxListeners: [Getter/Setter],
init: [Function],
listenerCount: [Function] } },
_createServerHandle: [Function: createServerHandle],
isIP: [Function: isIP],
isIPv4: [Function],
isIPv6: [Function],
_setSimultaneousAccepts: [Function] }

ljnm.os object (core 2.stable)

name::
* McsEngl.ljnm.os object (core 2.stable)@cptIt,
* McsEngl.ljnm.os@cptIt,
* McsEngl.ljnmoOs@cptIt,

_DESCRIPTION:
The os module provides a number of operating system-related utility methods. It can be accessed using:
const os = require('os');
[https://nodejs.org/docs/latest/api/os.html#os_os]

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(os) === Object.prototype //true)

ljnos.MEMBER:
> Object.getOwnPropertyNames(os).sort()
[ 'EOL',
'arch',
'cpus',
'endianness',
'freemem',
'getNetworkInterfaces',
'homedir',
'hostname',
'loadavg',
'networkInterfaces',
'platform',
'release',
'tmpDir',
'tmpdir',
'totalmem',
'type',
'uptime',
'userInfo' ]
> os
{ hostname: [Function: getHostname],
loadavg: [Function: getLoadAvg],
uptime: [Function: getUptime],
freemem: [Function: getFreeMem],
totalmem: [Function: getTotalMem],
cpus: [Function: getCPUs],
type: [Function: getOSType],
release: [Function: getOSRelease],
networkInterfaces: [Function: getInterfaceAddresses],
homedir: [Function: getHomeDirectory],
userInfo: [Function: getUserInfo],
arch: [Function],
platform: [Function],
tmpdir: [Function],
tmpDir: [Function],
getNetworkInterfaces: [Function: deprecated],
EOL: '\r\n',
endianness: [Function] }

ljnmoOs.tmpdir_function:
>
< \Users\SYNAGO~1\AppData\Local\Temp

ljnm.path object (core 2.stable)

name::
* McsEngl.ljnm.path object (core 2.stable)@cptIt,
* McsEngl.ljnm.path@cptIt,
* McsEngl.ljn'path-module@cptIt,
* McsEngl.ljnmdlPath@cptIt,
* McsEngl.ljnpath@cptIt,
* McsEngl.moPath@cptIt,

_DESCRIPTION:
The path module provides utilities for working with file and directory paths.
It can be accessed using:
const path = require('path');
[https://nodejs.org/api/path.html#path_path]

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(path) === Object.prototype //true)

_DESCRIPTION:
This module contains utilities for handling and transforming file paths. Almost all these methods perform only string transformations. The file system is not consulted to check whether paths are valid.
Use require('path') to use this module.
[http://nodejs.org/api/all.html#all_path]

ljnmoPath'member

name::
* McsEngl.ljnmoPath'member@cptIt,

ljnmoPath.member:
//ljn6.2.2
> Object.getOwnPropertyNames(path).sort()
[ '_makeLong',
'basename',
'delimiter',
'dirname',
'extname',
'format',
'isAbsolute',
'join',
'normalize',
'parse',
'posix',
'relative',
'resolve',
'sep',
'win32' ]
> path
{ resolve: [Function: resolve],
normalize: [Function: normalize],
isAbsolute: [Function: isAbsolute],
join: [Function: join],
relative: [Function: relative],
_makeLong: [Function: _makeLong],
dirname: [Function: dirname],
basename: [Function: basename],
extname: [Function: extname],
format: [Function: format],
parse: [Function: parse],
sep: '\\',
delimiter: ';',
win32: [Circular],
posix:
{ resolve: [Function: resolve],
normalize: [Function: normalize],
isAbsolute: [Function: isAbsolute],
join: [Function: join],
relative: [Function: relative],
_makeLong: [Function: _makeLong],
dirname: [Function: dirname],
basename: [Function: basename],
extname: [Function: extname],
format: [Function: format],
parse: [Function: parse],
sep: '/',
delimiter: ':',
win32: [Circular],
posix: [Circular] } }

ljnmoPath.basename(p, [ext])#
Return the last portion of a path. Similar to the Unix basename command.

Example:
path.basename('/foo/bar/baz/asdf/quux.html')
// returns
'quux.html'

path.basename('/foo/bar/baz/asdf/quux.html', '.html')
// returns
'quux'
[http://nodejs.org/api/path.html#path_path_basename_p_ext]

ljnmoPath.dirname(stgPathfile):
* returns the path of dir.

ljnmoPath.join source, file:
Join all arguments together and normalize the resulting path.
Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown.
> path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')
// returns
'/foo/bar/baz/asdf'
[http://nodejs.org/api/path.html#path_path_join_path1_path2]
===
> moPath.join(__dirname, '../.git')
< \xampp\htdocs\dWstSgm\dirPgm\dirHitp\node_modules\hitp-apidoc-js\.git

ljnmoPath.relative(from, to):
Solve the relative path from from to to.

At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve, which means we see that:

path.resolve(from, path.relative(from, to)) == path.resolve(to)
Examples:

path.relative('\\orandea\\test\\aaa', '\\orandea\\impl\\bbb')
// returns
'..\\..\\impl\\bbb'

path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb')
// returns
'../../impl/bbb'
[http://nodejs.org/api/path.html#path_path_relative_from_to]

ljnmoPath.resolve:
* Resolves to to an absolute path.
If to isn't already absolute from arguments are prepended in right to left order, until an absolute path is found. If after using all from paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory. Non-string arguments are ignored.
[http://nodejs.org/api/path.html#path_path_resolve_from_to]
> source = mdlPath.resolve source

ljnmoPath.sep:
* returns the path separator of the os.
> blnUse_win_path_sep = mdlPath.sep is '\\'

ljnm.readline object (core 2.stable)

name::
* McsEngl.ljnm.readline object (core 2.stable)@cptIt,
* McsEngl.ljnm.readline@cptIt,
* McsEngl.ljn'readline-module@cptIt,
* McsEngl.ljnreadline@cptIt,

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(readline) === Object.prototype //true)

_DESCRIPTION:
The readline module provides an interface for reading data from a Readable stream (such as process.stdin) one line at a time. It can be accessed using:
const readline = require('readline');

The following simple example illustrates the basic use of the readline module.
const readline = require('readline');

const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});

rl.question('What do you think of Node.js? ', (answer) => {
// TODO: Log the answer in a database
console.log('Thank you for your valuable feedback:', answer);

rl.close();
});
Note Once this code is invoked, the Node.js application will not terminate until the readline.Interface is closed because the interface waits for data to be received on the input stream.
[https://nodejs.org/api/readline.html#readline_readline]

ljnreadline.member:
//ljn6.2.2
> readline
{ createInterface: [Function],
Interface:
{ [Function: Interface]
super_:
{ [Function: EventEmitter]
EventEmitter: [Circular],
usingDomains: true,
defaultMaxListeners: [Getter/Setter],
init: [Function],
listenerCount: [Function] } },
emitKeypressEvents: [Function: emitKeypressEvents],
cursorTo: [Function: cursorTo],
moveCursor: [Function: moveCursor],
clearLine: [Function: clearLine],
clearScreenDown: [Function: clearScreenDown],
codePointAt: [Function: deprecated],
getStringWidth: [Function: deprecated],
isFullWidthCodePoint: [Function: deprecated],
stripVTControlCharacters: [Function: deprecated] }
> typeof readline
'object'
> Object.getOwnPropertyNames(readline).sort()
[ 'Interface',
'clearLine',
'clearScreenDown',
'codePointAt',
'createInterface',
'cursorTo',
'emitKeypressEvents',
'getStringWidth',
'isFullWidthCodePoint',
'moveCursor',
'stripVTControlCharacters' ]

ljnm.repl object (core 2.stable)#ql:ljnrepl#

name::
* McsEngl.ljnm.repl object (core 2.stable)@cptIt,

ljnm.stream-function (core 2.stable)

name::
* McsEngl.ljnm.stream-function (core 2.stable)@cptIt,
* McsEngl.ljnm.stream@cptIt,
* McsEngl.ljn'stream-module@cptIt,
* McsEngl.ljnstream@cptIt,

_DESCRIPTION:
A stream is an abstract interface for working with streaming data in Node.js. The stream module provides a base API that makes it easy to build objects that implement the stream interface.

There are many stream objects provided by Node.js. For instance, a request to an HTTP server and process.stdout are both stream instances.

Streams can be readable, writable, or both. All streams are instances of EventEmitter.

The stream module can be accessed using:

const stream = require('stream');
While it is important for all Node.js users to understand how streams works, the stream module itself is most useful for developer's that are creating new types of stream instances. Developer's who are primarily consuming stream objects will rarely (if ever) have need to use the stream module directly.
[https://nodejs.org/api/stream.html#stream_stream]

ljnstream.member:
//ljn6.2.2
> Object.getOwnPropertyNames(stream).sort()
[ 'Duplex',
'PassThrough',
'Readable',
'Stream',
'Transform',
'Writable',
'length',
'name',
'prototype',
'super_' ]
> stream
{ [Function: Stream]
super_:
{ [Function: EventEmitter]
EventEmitter: [Circular],
usingDomains: true,
defaultMaxListeners: [Getter/Setter],
init: [Function],
listenerCount: [Function] },
Readable:
{ [Function: Readable]
ReadableState: [Function: ReadableState],
super_: [Circular],
_fromList: [Function: fromList] },
Writable: { [Function: Writable] WritableState: [Function: WritableState], super_: [Circular] },
Duplex:
{ [Function: Duplex]
super_:
{ [Function: Readable]
ReadableState: [Function: ReadableState],
super_: [Circular],
_fromList: [Function: fromList] } },
Transform: { [Function: Transform] super_: { [Function: Duplex] super_: [Object] } },
PassThrough: { [Function: PassThrough] super_: { [Function: Transform] super_: [Object] } },
Stream: [Circular] }

ljnm.string-decoder (3=stable)

name::
* McsEngl.ljnm.string-decoder (3=stable)@cptIt,
* McsEngl.ljn'string-decoder-module@cptIt,

_DESCRIPTION:
To use this module, do require('string_decoder'). StringDecoder decodes a buffer to a string. It is a simple interface to buffer.toString() but provides additional support for utf8.

var StringDecoder = require('string_decoder').StringDecoder;
var decoder = new StringDecoder('utf8');

var cent = new Buffer([0xC2, 0xA2]);
console.log(decoder.write(cent));

var euro = new Buffer([0xE2, 0x82, 0xAC]);
console.log(decoder.write(euro));
[http://nodejs.org/api/string_decoder.html]

ljnm.tls object (core 2.stable)

name::
* McsEngl.ljnm.tls object (core 2.stable)@cptIt,
* McsEngl.ljnm.tls@cptIt,
* McsEngl.ljn'tls-module@cptIt,
* McsEngl.ljntls@cptIt,

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(tls) === Object.prototype //true)

_DESCRIPTION:
The tls module provides an implementation of the Transport Layer Security (TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL. The module can be accessed using:
const tls = require('tls');
[https://nodejs.org/api/tls.html#tls_tls_ssl]

ljntls.member:
//ljn6.2.2
> Object.getOwnPropertyNames(tls).sort()
[ 'CLIENT_RENEG_LIMIT',
'CLIENT_RENEG_WINDOW',
'DEFAULT_CIPHERS',
'DEFAULT_ECDH_CURVE',
'SLAB_BUFFER_SIZE',
'SecureContext',
'Server',
'TLSSocket',
'checkServerIdentity',
'connect',
'convertALPNProtocols',
'convertNPNProtocols',
'createSecureContext',
'createSecurePair',
'createServer',
'getCiphers',
'parseCertString' ]
> tls
{ CLIENT_RENEG_LIMIT: 3,
CLIENT_RENEG_WINDOW: 600,
SLAB_BUFFER_SIZE: 10485760,
DEFAULT_CIPHERS: 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA',
DEFAULT_ECDH_CURVE: 'prime256v1',
getCiphers: [Function],
convertNPNProtocols: [Function],
convertALPNProtocols: [Function],
checkServerIdentity: [Function: checkServerIdentity],
parseCertString: [Function: parseCertString],
createSecureContext: [Function: createSecureContext],
SecureContext: [Function: SecureContext],
TLSSocket: { [Function: TLSSocket] super_: { [Function: Socket] super_: [Object] } },
Server: { [Function: Server] super_: { [Function: Server] super_: [Object] } },
createServer: [Function],
connect: [Function],
createSecurePair: [Function] }

ljnm.url object (core 2.stable)

name::
* McsEngl.ljnm.url object (core 2.stable)@cptIt,
* McsEngl.ljnm.url@cptIt,
* McsEngl.ljn'url-module@cptIt,
* McsEngl.ljnurl@cptIt,

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(url) === Object.prototype //true)

_DESCRIPTION:
The url module provides utilities for URL resolution and parsing. It can be accessed using:
const url = require('url');
[https://nodejs.org/api/url.html#url_url]

ljnurl.MEMBER:
//ljn6.2.2
> Object.getOwnPropertyNames(url).sort()
[ 'Url', 'format', 'parse', 'resolve', 'resolveObject' ]
> url
{ parse: [Function: urlParse],
resolve: [Function: urlResolve],
resolveObject: [Function: urlResolveObject],
format: [Function: urlFormat],
Url: [Function: Url] }

ljnm.util object (core 2.stable)

name::
* McsEngl.ljnm.util object (core 2.stable)@cptIt,
* McsEngl.ljnm.util@cptIt,
* McsEngl.ljn'util-module@cptIt,
* McsEngl.ljnutil@cptIt,

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(util) === Object.prototype //true)

_DESCRIPTION:
These functions are in the module 'util'. Use require('util') to access them.
[http://nodejs.org/api/all.html#all_util]

ljnutil'member

name::
* McsEngl.ljnutil'member@cptIt,

ljnutil.member:
//ljn6.2.2
> Object.getOwnPropertyNames(util).sort()
[ '_errnoException',
'_exceptionWithHostPort',
'_extend',
'debug',
'debuglog',
'deprecate',
'error',
'format',
'inherits',
'inspect',
'isArray',
'isBoolean',
'isBuffer',
'isDate',
'isError',
'isFunction',
'isNull',
'isNullOrUndefined',
'isNumber',
'isObject',
'isPrimitive',
'isRegExp',
'isString',
'isSymbol',
'isUndefined',
'log',
'print',
'puts' ]
> util
{ format: [Function],
deprecate: [Function],
debuglog: [Function],
inspect:
{ [Function: inspect]
colors:
{ bold: [Object],
italic: [Object],
underline: [Object],
inverse: [Object],
white: [Object],
grey: [Object],
black: [Object],
blue: [Object],
cyan: [Object],
green: [Object],
magenta: [Object],
red: [Object],
yellow: [Object] },
styles:
{ special: 'cyan',
number: 'yellow',
boolean: 'yellow',
undefined: 'grey',
null: 'bold',
string: 'green',
symbol: 'green',
date: 'magenta',
regexp: 'red' } },
isArray: [Function: isArray],
isBoolean: [Function: isBoolean],
isNull: [Function: isNull],
isNullOrUndefined: [Function: isNullOrUndefined],
isNumber: [Function: isNumber],
isString: [Function: isString],
isSymbol: [Function: isSymbol],
isUndefined: [Function: isUndefined],
isRegExp: [Function: isRegExp],
isObject: [Function: isObject],
isDate: [Function: isDate],
isError: [Function: isError],
isFunction: [Function: isFunction],
isPrimitive: [Function: isPrimitive],
isBuffer: [Function: isBuffer],
log: [Function],
inherits: [Function],
_extend: [Function],
print: [Function: deprecated],
puts: [Function: deprecated],
debug: [Function: deprecated],
error: [Function: deprecated],
_errnoException: [Function],
_exceptionWithHostPort: [Function] }
===
util.format(format, [...])#
util.debug(string)#
util.error([...])#
util.puts([...])#
util.print([...])#
util.log(string)#
util.inspect(object, [options])#
util.isArray(object)#
util.isRegExp(object)#
util.isDate(object)#
util.isError(object)#
util.pump(readableStream, writableStream, [callback])#
util.inherits(constructor, superConstructor)#

ljnm.vm object (core 2.stable)

name::
* McsEngl.ljnm.vm object (core 2.stable)@cptIt,
* McsEngl.ljnm.vm@cptIt,
* McsEngl.ljn'vm-module@cptIt,
* McsEngl.ljnvm@cptIt,

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(vm) === Object.prototype //true)

_DESCRIPTION:
The vm module provides APIs for compiling and running code within V8 Virtual Machine contexts. It can be accessed using:
const vm = require('vm');
JavaScript code can be compiled and run immediately or compiled, saved, and run later.
[https://nodejs.org/api/vm.html#vm_executing_javascript]

ljnvm.MEMBER:
//ljn6.2.2
> Object.getOwnPropertyNames(vm).sort()
[ 'Script',
'createContext',
'createScript',
'isContext',
'runInContext',
'runInDebugContext',
'runInNewContext',
'runInThisContext' ]
> vm
{ Script: [Function: ContextifyScript],
createScript: [Function],
createContext: [Function],
runInDebugContext: [Function],
runInContext: [Function],
runInNewContext: [Function],
runInThisContext: [Function],
isContext: [Function: isContext] }

ljnm.zlib object (core 2.stable)

name::
* McsEngl.ljnm.zlib object (core 2.stable)@cptIt,
* McsEngl.ljnm.zlib@cptIt,
* McsEngl.ljn'zlib-module@cptIt,
* McsEngl.ljnzlib@cptIt,

_DESCRIPTION:
The zlib module provides compression functionality implemented using Gzip and Deflate/Inflate. It can be accessed using:
const zlib = require('zlib');
[https://nodejs.org/api/zlib.html#zlib_zlib]

_GENERIC:
* Object.prototype (> Object.getPrototypeOf(zlib) === Object.prototype //true)

===
ljnm.DIRECTORY

name::
* McsEngl.ljnm.DIRECTORY@cptIt,
* McsEngl.ljn'directory-module@cptIt,
* McsEngl.ljnmdl.folder@cptIt,

_DESCRIPTION:
It is convenient to organize programs and libraries into self-contained directories, and then provide a single entry point to that library. There are three ways in which a folder may be passed to require() as an argument.

The first is to create a package.json file in the root of the folder, which specifies a main module. An example package.json file might look like this:

{ "name" : "some-library",
"main" : "./lib/some-library.js" }
If this was in a folder at ./some-library, then require('./some-library') would attempt to load ./some-library/lib/some-library.js.

This is the extent of Node's awareness of package.json files.

If there is no package.json file present in the directory, then node will attempt to load an index.js or index.node file out of that directory. For example, if there was no package.json file in the above example, then require('./some-library') would attempt to load:

./some-library/index.js
./some-library/index.node
[http://nodejs.org/api/all.html#all_folders_as_modules]
===
Directories as modules

You can organize your modules into directories, as long as you provide a point of entry for Node.

The easiest way to do this is to create the directory ./node_modules/mymodulename/, and put an index.js file in that directory. The index.js file will be loaded by default.

Alternatively, you can put a package.json file in the mymodulename folder, specifying the name and main file of the module:

{
"name": "mymodulename",
"main": "./lib/foo.js"
}
This would cause the file ./node_modules/mymodulename/lib/foo.js to be returned from require('mymodulename').

Generally, you want to keep a single ./node_modules folder in the base directory of your app. You can install new modules by adding files or directories to ./node_modules. The best way to manage these modules is to use npm, which is covered briefly in the next section.
[http://book.mixu.net/node/single.html]

ljnm.FILE

name::
* McsEngl.ljnm.FILE@cptIt,
* McsEngl.ljn'file-module@cptIt,

_DESCRIPTION:
If the exact filename is not found, then node will attempt to load the required filename with the added extension of .js, .json, and then .node.

.js files are interpreted as JavaScript text files, and .json files are parsed as JSON text files. .node files are interpreted as compiled addon modules loaded with dlopen.

A module prefixed with '/' is an absolute path to the file. For example, require('/home/marco/foo.js') will load the file at /home/marco/foo.js.

A module prefixed with './' is relative to the file calling require(). That is, circle.js must be in the same directory as foo.js for require('./circle') to find it.

Without a leading '/' or './' to indicate a file, the module is either a "core module" or is loaded from a node_modules folder.

If the given path does not exist, require() will throw an Error with its code property set to 'MODULE_NOT_FOUND'.
[http://nodejs.org/api/all.html#all_file_modules]

ljnalgo'sut.OBJECT (ljno)

name::
* McsEngl.ljnalgo'sut.OBJECT (ljno)@cptIt,
* McsEngl.ljn'object@cptIt,

* McsEngl.ljno@cptIt,

ljnalgo'sut.NAME-VALUE-PAIR

name::
* McsEngl.ljnalgo'sut.NAME-VALUE-PAIR@cptIt,

ljn'variable.GLOBAL

name::
* McsEngl.ljn'variable.GLOBAL@cptIt,
* McsEngl.ljn'global@cptIt,
* McsEngl.ljn'global-variable@cptIt,

_DESCRIPTION:
Node is a JavaScript environment running in Google’s V8 JavaScript engine. As such, we should follow the best practices that we use for client-side development. For example, we should avoid putting anything into the global scope. That, however, is not always possible. The global scope in Node is GLOBAL (as opposed to window in the browser), and you can easily create a global variable of function by omitting the var keyword, like this:
globalVariable = 1;
globalFunction = function () { ... };
Once again, globals should be avoided whenever possible. So be careful and remember to use var when declaring a variable.
[http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/]

ljnalgo'PHRASE

name::
* McsEngl.ljnalgo'PHRASE@cptIt,

ljnalgo'SENTENCE (stc)

name::
* McsEngl.ljnalgo'SENTENCE (stc)@cptIt,
* McsEngl.ljnstc@cptIt,

ljnstc.debugger#ql:ljndebugger#

name::
* McsEngl.ljnstc.debugger@cptIt,

ljnalgo'ROOT-TREE

name::
* McsEngl.ljnalgo'ROOT-TREE@cptIt,

ljnalgo.SPECIFIC

name::
* McsEngl.ljnalgo.SPECIFIC@cptIt,

* ljnalgo.specific,
* ndalgo.specific,

_SPECIFIC:
Node.js is an extremely powerful and flexible technology that can solve a wide variety of problems.
I want everyone to remember that Node.js is only bound by your imagination. The core libraries are very carefully designed to provide the puzzle pieces needed to build any picture. Combine those with the modules available in npm and it's amazing how quickly you can begin building very complex and compelling applications.
[http://blog.modulus.io/absolute-beginners-guide-to-nodejs]

ljnalgo.AUTHENTICATION

name::
* McsEngl.ljnalgo.AUTHENTICATION@cptIt,

_GENERIC:
* ljn'authentication,

_ADDRESS.WPG:
* http://passportjs.org//
* http://www.sitepoint.com/http-authentication-in-node-js//
* implementing authentication in a Node app using Passport and Postgres. http://mherman.org/blog/2016/09/25/node-passport-and-postgres/#.V-56_-B95Is,
* https://hackernoon.com/how-to-build-a-node-js-user-management-app-12d900695ef6#.tm8bgn25a,
* http://www.forestadmin.com/lumber,

ljnalgo.BITCOIN-NETWORK-PROCESSING

name::
* McsEngl.ljnalgo.BITCOIN-NETWORK-PROCESSING@cptIt,

_ADDRESS.WPG:
* http://blockchainpie.com/blockchain-tutorial-bitcoin-message//

ljnalgo.FILE-SYSTEM

name::
* McsEngl.ljnalgo.FILE-SYSTEM@cptIt,
* McsEngl.ljn'api'file-system@cptIt,
* McsEngl.ljn'file-system-processing@cptIt,
* McsEngl.ljn'processing.FILE-SYSTEM@cptIt,
* McsEngl.ljnalgo.fs@cptIt,

_ADDRESS.WPG:
* http://www.sitepoint.com/accessing-the-file-system-in-node-js//
* https://www.npmjs.org/package/delivery,

_DESCRIPTION:
The file system functions consist of file I/O and directory I/O functions. All of the file system functions offer both synchronous (blocking) and asynchronous (non-blocking) versions. The difference between these two is that the synchronous functions (which have “Sync” in their name) return the value directly and prevent Node from executing any code while the I/O operation is being performed
[http://book.mixu.net/node/single.html]

_PART:
* npmpks#ql:npmpkg.file_system#
* fs-module#ql:nodejs'fs_module#
* path-module#ql:nodejs'path_module#

ljnalgo.DIR-CREATING

name::
* McsEngl.ljnalgo.DIR-CREATING@cptIt,

_CODE.LJN:
var dst = moPath.join(moOs.tmpdir(), (Date.now() + Math.random()).toString());
moFs_extra.mkdirSync(dst);

ljnalgo.FILE-CREATING

name::
* McsEngl.ljnalgo.FILE-CREATING@cptIt,
* McsEngl.ljnalgo.file-writing@cptIt,

_CODE.LJN:
moFs.writeFileSync('test.file', '/**\n a-function\n */\nfunction bananas() {}');
===
var fs = require('fs');

var myData = {
name:'test',
version:'1.0'
}

var outputFilename = '/tmp/my.json';

fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
if(err) {
console.log(err);
} else {
console.log("JSON saved to ");
}
});
[http://stackoverflow.com/questions/5670752/write-pretty-json-to-file-using-node-js]

=== tmp file:
sFileTmp = moPath.join(moOs.tmpdir(), '/simple.js');

ljnalgo.FILE-EXISTS

name::
* McsEngl.ljnalgo.FILE-EXISTS@cptIt,

_CODE.LJN:
if (fs.existsSync(path)) {
// Do something
}

ljnalgo.FILE-READING

name::
* McsEngl.ljnalgo.FILE-READING@cptIt,

_CODE.LJN:
The file system functions consist of file I/O and directory I/O functions. All of the file system functions offer both synchronous (blocking) and asynchronous (non-blocking) versions. The difference between these two is that the synchronous functions (which have “Sync” in their name) return the value directly and prevent Node from executing any code while the I/O operation is being performed:

var fs = require('fs');
var data = fs.readFileSync('./index.html', 'utf8');
// wait for the result, then use it
console.log(data);
Asynchronous functions return the value as a parameter to a callback given to them:

var fs = require('fs');
fs.readFile('./index.html', 'utf8', function(err, data) {
// the data is passed to the callback in the second argument
console.log(data);
});
...
You should use the asynchronous version in most cases, but in rare cases (e.g. reading configuration files when starting a server) the synchronous version is more appropriate. Note that the asynchronous versions require a bit more thought, since the operations are started immediately and may finish in any order:

fs.readFile('./file.html', function (err, data) {
// ...
});
fs.readFile('./other.html', function (err, data) {
// ..
});
These file reads might complete in any order depending on how long it takes to read each file. The simplest solution is to chain the callbacks:

fs.readFile('./file.html', function (err, data) {
// ...
fs.readFile('./other.html', function (err, data) {
// ...
});
});
[http://book.mixu.net/node/single.html]

ljnalgo.FILE-SERVER

name::
* McsEngl.ljnalgo.FILE-SERVER@cptIt,

_CODE.LJN:
_file_server:
var sys = require("sys"),
my_http = require("http"),
path = require("path"),
url = require("url"),
filesys = require("fs");
my_http.createServer(function(request,response){
var my_path = url.parse(request.url).pathname;
var full_path = path.join(process.cwd(),my_path);
path.exists(full_path,function(exists){
if(!exists){
response.writeHeader(404, {"Content-Type": "text/plain"});
response.write("404 Not Found\n");
response.end();
}
else{
filesys.readFile(full_path, "binary", function(err, file) {
if(err) {
response.writeHeader(500, {"Content-Type": "text/plain"});
response.write(err + "\n");
response.end();

}
else{
response.writeHeader(200);
response.write(file, "binary");
response.end();
}

});
}
});
}
my_http.createServer(function(request,response){
var my_path = url.parse(request.url).pathname;
load_file(my_path,response);
}).listen(8080);
sys.puts("Server Running on 8080");
[http://www.hongkiat.com/blog/node-js-server-side-javascript/]

ljnalgo.FILE-UPLOAD

name::
* McsEngl.ljnalgo.FILE-UPLOAD@cptIt,

_ADDRESS.WPG:
* http://www.componentix.com/blog/13/file-uploads-using-nodejs-once-again,

npmpkg.FILE-SYSTEM

name::
* McsEngl.npmpkg.FILE-SYSTEM@cptIt,
* McsEngl.npmpkg.file-system@cptIt,

npmpkg.chokidar-object

name::
* McsEngl.npmpkg.chokidar-object@cptIt,
* McsEngl.ljnm.chokidar@cptIt,
* McsEngl.npmpkg.chokidar@cptIt,

_DESCRIPTION:
chokidar
A neat wrapper around node.js fs.watch / fs.watchFile / fsevents.

Why?
Node.js fs.watch:
Doesn't report filenames on OS X.
Doesn't report events at all when using editors like Sublime on OS X.
Often reports events twice.
Emits most changes as rename.
Has a lot of other issues
Does not provide an easy way to recursively watch file trees.

Node.js fs.watchFile:
Almost as bad at event handling.
Also does not provide any recursive watching.
Results in high CPU utilization.
Chokidar resolves these problems.

Initially made for brunch (an ultra-swift web app build tool), it is now used in gulp, karma, PM2, browserify, webpack, BrowserSync, Microsoft's Visual Studio Code, and many others. It has proven itself in production environments.

How?
Chokidar does still rely on the Node.js core fs module, but when using fs.watch and fs.watchFile for watching, it normalizes the events it receives, often checking for truth by getting file stats and/or dir contents.

On Mac OS X, chokidar by default uses a native extension exposing the Darwin FSEvents API. This provides very efficient recursive watching compared with implementations like kqueue available on most *nix platforms. Chokidar still does have to do some work to normalize the events received that way as well.

On other platforms, the fs.watch-based implementation is the default, which avoids polling and keeps CPU usage down. Be advised that chokidar will initiate watchers recursively for everything within scope of the paths that have been specified, so be judicious about not wasting system resources by watching much more than needed.
[https://www.npmjs.com/package/chokidar]

_API:
> Object.getOwnPropertyNames(ljnmdl).sort()
FSWatcher, watch

_CODE.NODEJS:
watcher = moChokidar.watch(argv.input);

npmpkg.fs-extra-object

name::
* McsEngl.npmpkg.fs-extra-object@cptIt,
* McsEngl.ljnm.fs-extra@cptIt,
* McsEngl.npmpkg.fs-extra@cptIt,

_DESCRIPTION:
fs-extra
fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as mkdir -p, cp -r, and rm -rf.
fs-extra adds file system methods that aren't included in the native fs module. It is a drop in replacement for fs.
[https://www.npmjs.com/package/fs-extra]

_API:
> Object.getOwnPropertyNames(ljnm).sort()
F_OK, FileReadStream, FileWriteStream, R_OK, ReadStream, Stats, W_OK, WriteStream, X_OK, _toUnixTimestamp, access, accessSync, appendFile, appendFileSync, chmod, chmodSync, chown, chownSync, close, closeSync, constants, copy, copySync, createFile, createFileSync, createLink, createLinkSync, createReadStream, createSymlink, createSymlinkSync, createWriteStream, emptyDir, emptyDirSync, emptydir, emptydirSync, ensureDir, ensureDirSync, ensureFile, ensureFileSync, ensureLink, ensureLinkSync, ensureSymlink, ensureSymlinkSync, exists, existsSync, fchmod, fchmodSync, fchown, fchownSync, fdatasync, fdatasyncSync, fstat, fstatSync, fsync, fsyncSync, ftruncate, ftruncateSync, futimes, futimesSync, gracefulify, jsonfile, lchmod, lchmodSync, lchown, lchownSync, link, linkSync, lstat, lstatSync, lutimes, lutimesSync, mkdir, mkdirSync, mkdirp, mkdirpSync, mkdirs, mkdirsSync, mkdtemp, mkdtempSync, move, open, openSync, outputFile, outputFileSync, outputJSON, outputJSONSync, outputJson, outputJsonSync, read, readFile, readFileSync, readJSON, readJSONSync, readJson, readJsonSync, readSync, readdir, readdirSync, readlink, readlinkSync, realpath, realpathSync, remove, removeSync, rename, renameSync, rmdir, rmdirSync, spaces, stat, statSync, symlink, symlinkSync, truncate, truncateSync, unlink, unlinkSync, unwatchFile, utimes, utimesSync, walk, walkSync, watch, watchFile, write, writeFile, writeFileSync, writeJSON, writeJSONSync, writeJson, writeJsonSync, writeSync
> Object.getOwnPropertyNames(ljnm.__proto__).sort()
__defineGetter__, __defineSetter__, __lookupGetter__, __lookupSetter__, __proto__, constructor, hasOwnProperty, isPrototypeOf, propertyIsEnumerable, toLocaleString, toString, valueOf
===
Methods
copy
copySync
emptyDir
emptyDirSync
ensureFile
ensureFileSync
ensureDir
ensureDirSync
ensureLink
ensureLinkSync
ensureSymlink
ensureSymlinkSync
mkdirs
mkdirsSync
move
outputFile
outputFileSync
outputJson
outputJsonSync
readJson
readJsonSync
remove
removeSync
walk
walkSync
writeJson
writeJsonSync

npmpkg.micromatch

name::
* McsEngl.npmpkg.micromatch@cptIt,
* McsEngl.ljnm.micromatch@cptIt,
* McsEngl.npmpkg.micromatch@cptIt,

_DESCRIPTION:
micromatch
Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.
Micromatch supports all of the same matching features as minimatch and multimatch.
mm() is the same as multimatch()
mm.match() is the same as minimatch.match()
use mm.isMatch() instead of minimatch()
[https://www.npmjs.com/package/micromatch]

_MEMBER:
micromatch
function
[ 'any',
'braceExpand',
'braces',
'contains',
'expand',
'filter',
'isMatch',
'length',
'makeRe',
'match',
'matchKeys',
'matcher',
'name',
'prototype' ]

npmpkg.module-deps-sortable

name::
* McsEngl.npmpkg.module-deps-sortable@cptIt,
* McsEngl.ljnm.module-deps-sortable@cptIt,
* McsEngl.npmpkg.module-deps-sortable@cptIt,

_DESCRIPTION:
module-deps-sortable
walk the dependency graph to generate json output that can be fed into browser-pack

_OUTPUT:
[
{"id":"/Users/substack/src/module-deps/example/files/foo.js",
"source":"var bar = require('./bar');...ts = function (n) {\n return n * 111 + bar(n);\n};\n",
"deps":{"./bar":"/Users/substack/src/module-deps/example/files/bar.js"},
"file":"/Users/substack/src/module-deps/example/files/foo.js",
"sortKey":"!/Users/substack/...tack/src/module-deps/example/files/foo.js"},
{"file":"/Users/substack/src/module-deps/example/files/main.js","id":"/Users/substack/src/module-deps/example/files/main.js","source":"var foo = require('./foo');\nconsole.log('main: ' + foo(5));\n","deps":{"./foo":"/Users/substack/src/module-deps/example/files/foo.js"},"sortKey":"!/Users/substack/src/module-deps/example/files/main.js","entry":true}
]

npmpkg.parse-filepath-function

name::
* McsEngl.npmpkg.parse-filepath-function@cptIt,
* McsEngl.ljnm.parse-filepath@cptIt,
* McsEngl.npmpkg.parse-filepath@cptIt,

parse-filepath
Pollyfill for node.js path.parse, parses a filepath into an object.
[https://www.npmjs.com/package/parse-filepath]

_MEMBER:
function
[ 'length', 'name', 'prototype' ]

_CODE.LJN:
var parsePath = require('parse-filepath');
console.log(parsePath('foo/bar/baz/index.js'));
Returns:

{ root: '',
dir: 'foo/bar/baz',
base: 'index.js',
ext: '.js',
name: 'index',

// aliases
extname: '.js',
basename: 'index.js',
dirname: 'foo/bar/baz',
stem: 'index',

// original path
path: 'foo/bar/baz/index.js',

// getters
absolute: [Getter/Setter],
isAbsolute: [Getter/Setter] }

npmpkg.vfile-function

name::
* McsEngl.npmpkg.vfile-function@cptIt,
* McsEngl.ljnm.vfile@cptIt,
* McsEngl.npmpkg.vfile@cptIt,

_IMPORT:
var mfVfile = require('vfile'),

_MEMBER:
[ 'length', 'name', 'prototype' ]

npmpkg.vinyl-function

name::
* McsEngl.npmpkg.vinyl-function@cptIt,
* McsEngl.ljnm.vinyl@cptIt,
* McsEngl.npmpkg.vinyl@cptIt,

_DESCRIPTION:
vinyl
Virtual file format.

What is Vinyl?
Vinyl is a very simple metadata object that describes a file. When you think of a file, two attributes come to mind: path and contents. These are the main attributes on a Vinyl object. A file does not necessarily represent something on your computer’s file system. You have files on S3, FTP, Dropbox, Box, CloudThingly.io and other services. Vinyl can be used to describe files from all of these sources.

What is a Vinyl Adapter?
While Vinyl provides a clean way to describe a file, we also need a way to access these files. Each file source needs what I call a "Vinyl adapter". A Vinyl adapter simply exposes a src(globs) and a dest(folder) method. Each return a stream. The src stream produces Vinyl objects, and the dest stream consumes Vinyl objects. Vinyl adapters can expose extra methods that might be specific to their input/output medium, such as the symlink method vinyl-fs provides.

Usage
var Vinyl = require('vinyl');

var jsFile = new Vinyl({
cwd: '/',
base: '/test/',
path: '/test/file.js',
contents: new Buffer('var x = 123')
});
[https://www.npmjs.com/package/vinyl]

npmpkg.vinyl-fs-object

name::
* McsEngl.npmpkg.vinyl-fs-object@cptIt,
* McsEngl.ljnm.vinyl-fs@cptIt,
* McsEngl.npmpkg.vinyl-fs@cptIt,

_DESCRIPTION:
vinyl-fs
Vinyl adapter for the file system

What is Vinyl?
Vinyl is a very simple metadata object that describes a file. When you think of a file, two attributes come to mind: path and contents. These are the main attributes on a Vinyl object. A file does not necessarily represent something on your computer’s file system. You have files on S3, FTP, Dropbox, Box, CloudThingly.io and other services. Vinyl can be used to describe files from all of these sources.

What is a Vinyl Adapter?
While Vinyl provides a clean way to describe a file, we now need a way to access these files. Each file source needs what I call a "Vinyl adapter". A Vinyl adapter simply exposes a src(globs) and a dest(folder) method. Each return a stream. The src stream produces Vinyl objects, and the dest stream consumes Vinyl objects. Vinyl adapters can expose extra methods that might be specific to their input/output medium, such as the symlink method vinyl-fs provides.
[https://www.npmjs.com/package/vinyl-fs]

_CODE.NODEJS:
moVinyl_fs.dest(argv.output)

moVinyl_fs.dest:
dest(folder[, options])
Takes a folder path string or a function as the first argument and an options object as the second. If given a function, it will be called with each vinyl File object and must return a folder path. Returns a stream that accepts vinyl File objects, writes them to disk at the folder/cwd specified, and passes them downstream so you can keep piping these around.
[https://www.npmjs.com/package/vinyl-fs#destfolder-options]

ljnalgo.HTML

name::
* McsEngl.ljnalgo.HTML@cptIt,
* McsEngl.ljn'code.processing.HTML@cptIt,

_ADDRESS.WPG:
* https://github.com/Marak/html: jstohtml.

ljnalgo.IMAGE-PROCESSING

name::
* McsEngl.ljnalgo.IMAGE-PROCESSING@cptIt,
* McsEngl.ljn'image-processing@cptIt,

_ADDRESS.WPG:
* An image processing library written entirely in JavaScript for Node, with zero external or native dependencies. https://github.com/oliver-moran/jimp,

ljnalgo.IO

name::
* McsEngl.ljnalgo.IO@cptIt,
* McsEngl.ljn.io@cptIt,

_DESCRIPTION:
Non-blocking I/O - every I/O call must take a callback, whether it is to retrieve information from disk, network or another process.
...
The premise of Node is that I/O is the main bottleneck of many (if not most) tasks. A single I/O operation can take millions of CPU cycles, and in traditional, non-event-loop-based frameworks the execution is blocked for that time. In Node, I/O operations such as reading a file are performed asynchronously.
[http://book.mixu.net/node/single.html]

ljnalgo.JSON-MANIPULATION

name::
* McsEngl.ljnalgo.JSON-MANIPULATION@cptIt,
* McsEngl.ljn'ex.JSON-MANIPULATION@cptIt,
* McsEngl.ljn'json-manipulation@cptIt,
* McsEngl.ljnalgo'json@cptIt,

_DESCRIPTION:
The JSON format is natively supported by Node.js. Nothing needs to be added and no module inserted using require. Converting JSON to object and object to JSON can be done using the JSON object and its parse and stringify methods.

Following code describes how to generate a string containing the JSON content for a JavaScript object.

var contact = {
id: 1,
lastName: "last name",
firstName: "first name"
};
var text = JSON.stringify(contact);
// contains {"id":1,"lastName":"last name","firstName":"first name"}

Following code describes how to get JavaScript object from a string containing the JSON content.

var text = "{\"id\":1,\"lastName\":\"last name\","
+"\"firstName\":\"first name\"}";
var contact = JSON.parse(text);
[http://templth.wordpress.com/2011/06/07/manipulating-json-and-xml-with-node-js/]

npmpkg.JSON

name::
* McsEngl.npmpkg.JSON@cptIt,
* McsEngl.npmpkg.json@cptIt,

_SPECIFIC:
* strip-json-comments##

npmpkg.strip-json-comments

name::
* McsEngl.npmpkg.strip-json-comments@cptIt,
* McsEngl.ljnm.strip-json-comments@cptIt,
* McsEngl.npmpkg.strip-json-comments@cptIt,

_DESCRIPTION:
strip-json-comments
Strip comments from JSON. Lets you use comments in your JSON files!
This is now possible:
{
// rainbows
"unicorn": /* ? */ "cake"
}
It will replace single-line comments // and multi-line comments /**/ with whitespace. This allows JSON error positions to remain as close as possible to the original source.
[https://www.npmjs.com/package/strip-json-comments]

ljnalgo.NATURAL-LANGUAGE-PROCESSING

name::
* McsEngl.ljnalgo.NATURAL-LANGUAGE-PROCESSING@cptIt,

ljnnlp'Resource

name::
* McsEngl.ljnnlp'Resource@cptIt,

_ADDRESS.WPG:
* https://egghead.io/courses/natural-language-processing-in-javascript-with-natural,

_PACKAGE:
* https://www.npmjs.com/package/natural,

ljnalgo.NETWORKING

name::
* McsEngl.ljnalgo.NETWORKING@cptIt,
* McsEngl.ljn'api'networking@cptIt,
* McsEngl.ljn'networking-api@cptIt,
* McsEngl.ljn'processing.NETWORKING@cptIt,

_DESCRIPTION:
Node's goal is to provide an easy way to build scalable network programs
[http://nodejs.org/about/]
===
Built-in support for the most important protocols (HTTP, DNS, TLS)
[http://book.mixu.net/node/single.html]

_MODULE:
* dgram: receive and send UDP packets.
* dns: asynchronous DNS resolution.
* http: create an HTTP server or client.
* https: implements http over TLS/SSL.
* net: create a TCP server client
* tls (ssl): uses OpenSSL to provide Transport Layer Security and/or Secure Socket Layer: encrypted stream communication.

_RESOURCE:
* https://www.twilio.com/blog/2017/08/http-requests-in-node-js.html,

ljnalgo.SFTP

name::
* McsEngl.ljnalgo.SFTP@cptIt,

_MODULE:
* https://www.npmjs.org/package/grunt-ssh,
* https://www.npmjs.org/package/sftp-upload,

ljnalgo.PROCESSES

name::
* McsEngl.ljnalgo.PROCESSES@cptIt,
* McsEngl.ljn'api'processes@cptIt,
* McsEngl.ljn'processes-api@cptIt,
* McsEngl.ljn'processing.PROCESSES@cptIt,

_PART:
* child-process module#ql:nodejs'module.child_process#
* process-object#ql:nodejs'api'process_object#

ljnalgo.ROBOTICS

name::
* McsEngl.ljnalgo.ROBOTICS@cptIt,

_ADDRESS.WPG:
* https://medium.com/@leo/getting-started-with-javascript-robotics-5c54e716562c,

ljnalgo.SEARCHING

name::
* McsEngl.ljnalgo.SEARCHING@cptIt,

_ADDRESS.WPG:
* https://github.com/fergiemcdowall/search-index,
* Search files and folders in parent directories.
https://github.com/IonicaBizau/node-parent-search,
* https://www.npmjs.com/package/node-search,
Quick tool for search in Node API docs from command line, built with nodejs.
* https://www.npmjs.com/package/full-text-search-light,
* https://github.com/Mitica/in-text-search-js,
* https://www.sitepoint.com/search-engine-node-elasticsearch//

ljnalgo.SECURITY

name::
* McsEngl.ljnalgo.SECURITY@cptIt,

_MODULE:
* https://www.npmjs.org/package/hashids: A small Node.js class to generate YouTube-like hashes from one or many numbers. Use hashids when you do not want to expose your database ids to the user.

ljnalgo.SPEECH-RECOGNITION

name::
* McsEngl.ljnalgo.SPEECH-RECOGNITION@cptIt,
* McsEngl.ljn'speech-recognition@cptIt,
* McsEngl.ljnalgo.speech-recognition@cptIt,

_ADDRESS.WPG:
* https://github.com/sreuter/node-speakable,

ljnalgo.STREAMING

name::
* McsEngl.ljnalgo.STREAMING@cptIt,
* McsEngl.ljn'streaming@cptIt,
* McsEngl.ljnalgo'streaming@cptIt,

_DESCRIPTION:
Stream everything; never force the buffering of data.
[http://book.mixu.net/node/single.html]

_ADDRESS.WPG:
* https://github.com/substack/stream-handbook,
* http://www.sitepoint.com/introduction-to-streams//

_CODE.LJN:
Let’s consider the following example:
var http = require('http')
, fs = require('fs')
;

var server = http.createServer(function (req, res) {
fs.readFile(__dirname + '/data.txt', function (err, data) {
res.end(data);
});
});

server.listen(8000);
This code works perfectly. Nothing is wrong with it, except for the fact that Node.js
buffers the entire contents of data.txt before sending the data back to the client. With the increase of clients requests your application could start to consume a lot of memory. In addition clients will need to wait for the entire file to be read by the server application, resulting in increased latency.

Let’s have a look at another example:
var http = require('http')
, fs = require('fs')
;

var server = http.createServer(function (req, res) {
var stream = fs.createReadStream(__dirname + '/data.txt');
stream.pipe(res);
});
server.listen(8000);
Here, to overcome the scalability issues we use the streams API. Using the stream object ensures that data.txt is sent to clients one chunk at a time as they are read from the disk, without server buffering and waiting times on the client.
[http://www.sitepoint.com/introduction-to-streams/]

ljn'stream

name::
* McsEngl.ljn'stream@cptIt,

_DESCRIPTION:
What are Streams?
Streams can be defined as a continuous flow of data that can be manipulated asynchronously as data comes in (or out). In Node.js streams can be readable or writable. A readable stream is an EventEmitter object that emits data events every time a chunk of data is received. In our previous example a readable stream has been used to pipe the content of a file down to a HTTP client. When the stream reaches the end of our file it emits an end event, indicating that no more data events will occur. In addition a readable stream can be paused and resumed.

Writable streams, on the other hand, accept streams of data. This type of stream inherits from the EventEmitter object too, and implements two methods: write() and end(). The first method writes data to a buffer and returns true if the data has been flushed correctly, or false if the buffer is full (in this case the data will be sent out later).The end() method simply indicates that the stream is finished.
[http://www.sitepoint.com/introduction-to-streams/]

npm-package#ql:npmpkg.streaming#
ljnalgo.TESTING

name::
* McsEngl.ljnalgo.TESTING@cptIt,

_MODULE:
* https://www.npmjs.org/package/nodeunit,

_ADDRESS.WPG:
* http://visionmedia.github.io/mocha//
- https://brianstoner.com/blog/testing-in-nodejs-with-mocha//
* http://caolanmcmahon.com/posts/unit_testing_in_node_js//

ljnalgo.TWITTER

name::
* McsEngl.ljnalgo.TWITTER@cptIt,

_ADDRESS.WPG:
* https://blog.risingstack.com/node-js-project-structure-tutorial-node-js-at-scale//

ljnalgo.YAML-MANIPULATION

name::
* McsEngl.ljnalgo.YAML-MANIPULATION@cptIt,

_RESOURCE:
* http://nodeexamples.com/2012/09/15/parsing-yaml-files-in-node-js-using-the-js-yaml-module//

npmpkg.yaml

name::
* McsEngl.npmpkg.yaml@cptIt,

npmpkg.js-yaml

name::
* McsEngl.npmpkg.js-yaml@cptIt,

_DESCRIPTION:
js-yaml
YAML 1.2 parser and serializer
Online Demo
This is an implementation of YAML, a human friendly data serialization language. Started as PyYAML port, it was completely rewritten from scratch. Now it's very fast, and supports 1.2 spec.
[https://www.npmjs.org/package/js-yaml]

ljnalgo.XML-MANIPULATION

name::
* McsEngl.ljnalgo.XML-MANIPULATION@cptIt,
* McsEngl.ljn'xml-manipulation@cptIt,

ljnalgo.LIBRARY (ljnlbr)

name::
* McsEngl.ljnalgo.LIBRARY (ljnlbr)@cptIt,
* McsEngl.ljn'library@cptIt,
* McsEngl.ljn'package@cptIt,
* McsEngl.ljnlbr@cptIt,

_DESCRIPTION:
Library is an-algorithm which can-not-run autonomously, but inside another algo.
[hmnSngo.2016-06-21]

ljnlbr.FILE-MANAGING

name::
* McsEngl.ljnlbr.FILE-MANAGING@cptIt,

_SPECIFIC:
* vinyl: https://www.npmjs.com/package/vinyl/
* vinyl-fs: https://www.npmjs.com/package/vinyl-fs/

ljnalgo.PROGRAM (ljnpgm)

name::
* McsEngl.ljnalgo.PROGRAM (ljnpgm)@cptIt,
* McsEngl.ljn'application@cptIt,
* McsEngl.ljn'code.PROGRAM@cptIt,
* McsEngl.ljn'apn@cptIt,
* McsEngl.ljn'code.APPLICATION@cptIt,
* McsEngl.ljn'program@cptIt,
* McsEngl.ljnpgm@cptIt, {2016-06-21}
* McsEngl.ljnapp@cptIt,
* McsEngl.ljn'program@cptIt,
* McsEngl.nodejs-program@cptIt,
* McsEngl.pgmNode@cptIt,

ljnpgm'installing

name::
* McsEngl.ljnpgm'installing@cptIt,

npm install app:
* downloads the app

npm install:
* installs the dependencies on 'package.json'

node app:
runs the app

ljnpgm'executing

name::
* McsEngl.ljnpgm'executing@cptIt,
* McsEngl.node'app'running@cptIt,

_DESCRIPTION:
$ node app
or
you can make your file directly executable by changing permisions:
$ chmod o+x app.js
and insert the following as the first line of the file:
#!/usr/bin/env node
You can then execute the file directly:
$ ./app.js
[http://nodetuts.com/pdf/handson-nodejs-sample.pdf]

ljnpgm'debugging

name::
* McsEngl.ljnpgm'debugging@cptIt,
* McsEngl.ljn'debugging@cptIt,

* McsEngl.ljndbg@cptIt,

_ADDRESS.WPG:
* https://blog.risingstack.com/node-hero-node-js-debugging-tutorial//

ljndbg'debug-module

name::
* McsEngl.ljndbg'debug-module@cptIt,

ljndbg'debugger-statement

name::
* McsEngl.ljndbg'debugger-statement@cptIt,
* McsEngl.ljndebugger@cptIt,

_DESCRIPTION:
RisingStack logo
RisingStack Engineering
Engineering blog for all-the-things JavaScript/DevOps/IoT



Search

Subscribe to our newsletter

email address
Subscribe
Follow us


Best articles
RisingStack Website
© 2016 RisingStack Inc. • All rights reserved. | Privacy Policy
Node Hero - Debugging Node.js Applications
3 days ago
Node.js · nodehero · debugging · tutorial · debug
This article is the 10th part of the tutorial series called Node Hero - in these chapters, you can learn how to get started with Node.js and deliver software products using it.

In this tutorial, you are going to learn debugging your Node.js applications using the debug module, the built-in Node debugger and Chrome's developer tools.

Upcoming and past chapters:

Getting started with Node.js
Using NPM
Understanding async programming
Your first Node.js HTTP server
Node.js database tutorial
Node.js request module tutorial
Node.js project structure tutorial
Node.js authentication using Passport.js
Node.js unit testing tutorial
Debugging Node.js applications [you are reading it now]
Securing your application
Deploying Node.js application to a PaaS
Monitoring and operating Node.js applications
Bugs, debugging

The term bug and debugging have been a part of engineering jargon for many decades. One of the first written mentions of bugs is as follows:

It has been just so in all of my inventions. The first step is an intuition, and comes with a burst, then difficulties arise — this thing gives out and [it is] then that "Bugs" — as such little faults and difficulties are called — show themselves and months of intense watching, study and labor are requisite before commercial success or failure is certainly reached.

Thomas Edison

Debugging Node.js Applications

One of the most frequently used approach to find issues in Node.js applications is the heavy usage of console.log for debugging.

"Console.log is efficient for debugging small snippets but we recommend better alternatives!” @RisingStack#nodejs

CLICK TO TWEET

Let's take a look at them!

The debug module

Some of the most popular modules that you can require into your project come with the debug module. With this module, you can enable third-party modules to log to the standard output, stdout. To check whether a module is using it, take a look at the package.json file's dependency section.

To use the debug module, you have to set the DEBUG environment variable when starting your applications. You can also use the * character to wildcard names. The following line will print all the express related logs to the standard output.

DEBUG=express* node app.js
The output will look like this:

Logfile made with the Node debug module

The Built-in Node.js Debugger

Node.js includes a full-featured out-of-process debugging utility accessible via a simple TCP-based protocol and built-in debugging client.

To start the built-in debugger you have to start your application this way:

node debug app.js
Once you have done that, you will see something like this:

using the built-in node.js debugger

Basic Usage of the Node Debugger

To navigate this interface, you can use the following commands:

c => continue with code execution
n => execute this line and go to next line
s => step into this function
o => finish function execution and step out
repl => allows code to be evaluated remotely
You can add breakpoints to your applications by inserting the debugger statement into your codebase.

function add (a, b) {
debugger
return a + b
}

var res = add('apple', 4)
[https://blog.risingstack.com/node-hero-node-js-debugging-tutorial/]

ljndbg'debugger-utility

name::
* McsEngl.ljndbg'debugger-utility@cptIt,
* McsEngl.ljn'debugger-tool@cptIt,
* McsEngl.ljndbr@cptIt,

_DESCRIPTION:
Node.js includes a full-featured out-of-process debugging utility accessible via a simple TCP-based protocol and built-in debugging client. To use it, start Node.js with the debug argument followed by the path to the script to debug; a prompt will be displayed indicating successful launch of the debugger:

$ node debug myscript.js
< debugger listening on port 5858
connecting... ok
break in /home/indutny/Code/git/indutny/myscript.js:1
1 x = 5;
2 setTimeout(() => {
3 debugger;
debug>
Node.js's debugger client is not a full-featured debugger, but simple step and inspection are possible.
[https://nodejs.org/api/debugger.html#debugger_debugger]

ljnpgm'AppFog-hosting-service

name::
* McsEngl.ljnpgm'AppFog-hosting-service@cptIt,
* McsEngl.AppFog@cptIt,
* McsEngl.afhs@cptIt,

_DESCRIPTION:
Unlimited apps within 2GB RAM
Up to 8 service instances
100MB storage per MySQL or PostgreSQL instance
10MB RAM & 6 concurrent connections for Redis, MongoDB, and RabbitMQ instances
5GB data transfer per month
100 requests per second
Community-based support
Apps limited to *.af.cm domains
[https://www.appfog.com/pricing/]
===
Here are a few resources to help you get started.

Documentation: http://docs.appfog.com

Command line tool

Creating new apps with any code on the command line with the pure REST API could not be easier:

sudo gem install af
af login
cd path/to/my/app/src
af push
Grabbing the code on another machine to edit and update it is super easy too:

af pull <appname>
cd <appname>
vim
af update <appname>
Tunneling into your Postgres, MySQL or Mongo databases is easy too:

af tunnel
Redundancy and global reach for your apps

One price per per GB RAM, no matter where you run: AWS, Rackspace, HP Cloud and Azure (private beta).

We're here to help

Our customer experience team is obsessed with making sure you are happy and taken care of. We're here 7am-7pm PST M-F via email (support@appfog.com), ticket (http://support.appfog.com), twitter (@AppFogHelp) and Live Chat (http://appfog.com/support). We've got 24/7 support options and an SLA available as well; just ask support@appfog.com us for details.

Keep in touch

Finally, here are a few additional ways of keeping up with us and what we are doing:

Our Blog: http://blog.appfog.com/
Twitter: http://twitter.com/appfog & http://twitter.com/appfogstatus
Facebook: http://on.fb.me/Pg8ppT
We're excited you've joined the AppFog community and we look forward to getting to know you better. Thanks again for choosing us.

afhs'Getting Started
afhs'target [url]  Reports current target or sets a new target
afhs'login [email] [--email, --passwd]  Login
afhs'info  System and account information

afhs'Apps
afhs'apps  List deployed applications

afhs'Application Creation
afhs'push [appname]  Create, push, map, and start a new application
afhs'push [appname] --infra  Push application to specificed infrastructure
afhs'push [appname] --path  Push application from specified path
afhs'push [appname] --url  Set the url for the application
afhs'push [appname] --instances <N>  Set the expected number <N> of instances
afhs'push [appname] --mem M  Set the memory reservation for the application
afhs'push [appname] --runtime RUNTIME  Set the runtime to use for the application
afhs'push [appname] --no-start  Do not auto-start the application

afhs'Application Operations
afhs'start <appname>  Start the application
afhs'stop <appname>  Stop the application
afhs'restart <appname>  Restart the application
afhs'delete <appname>  Delete the application
afhs'clone <src-app> <dest-app> [infra]  Clone the application and services

afhs'Application Updates
afhs'update <appname> [--path]  Update the application bits
afhs'mem <appname> [memsize]  Update the memory reservation for an application
afhs'map <appname> <url>  Register the application to the url
afhs'unmap <appname> <url>  Unregister the application from the url
afhs'instances <appname> <num|delta>  Scale the application instances up or down

afhs'Application Information
afhs'crashes <appname>  List recent application crashes
afhs'crashlogs <appname>  Display log information for crashed applications
afhs'logs <appname> [--all]  Display log information for the application
afhs'files <appname> [path] [--all]  Display directory listing or file download for path
afhs'stats <appname>  Display resource usage for the application
afhs'instances <appname>  List application instances

afhs'Application Download
afhs'pull <appname> [path]  Downloads last pushed source to <appname> or [path]
afhs'download <appname> [path]  Downloads last pushed source to zipfile

afhs'Application Environment
afhs'env <appname>  List application environment variables
afhs'env-add <appname> <variable[=]value>  Add an environment variable to an application
afhs'env-del <appname> <variable>  Delete an environment variable to an application

afhs'Services
afhs'services  Lists of services available and provisioned
afhs'create-service <service> [--name,--bind]  Create a provisioned service
afhs'create-service <service> --infra  Create a provisioned service on a specified infrastructure
afhs'create-service <service> <name>  Create a provisioned service and assign it <name>
afhs'create-service <service> <name> <app>  Create a provisioned service and assign it <name>, and bind to <app>
afhs'delete-service [servicename]  Delete a provisioned service
afhs'bind-service <servicename> <appname>  Bind a service to an application
afhs'unbind-service <servicename> <appname>  Unbind service from the application
afhs'clone-services <src-app> <dest-app>  Clone service bindings from <src-app> application to <dest-app>
afhs'export-service <service>  Unbind service from the application
afhs'import-service <service> <url>  Clone service bindings from <src-app> application to <dest-app>
afhs'tunnel <servicename> [--port]  Unbind service from the application
afhs'tunnel <servicename> <clientcmd>  Clone service bindings from <src-app> application to <dest-app>

afhs'Administration
afhs'user  Display user account information
afhs'passwd  Change the password for the current user
afhs'logout  Logs current user out of the target system
afhs'add-user [--email, --passwd]  Register a new user (requires admin privileges)
afhs'delete-user <user>  Delete a user and all apps and services (requires admin privileges)

afhs'System
afhs'runtimes  Display the supported runtimes of the target system
afhs'frameworks  Display the recognized frameworks of the target system
afhs'infras  Display the available infrastructures

afhs'Misc
afhs'aliases  List aliases
afhs'alias <alias[=]command>  Create an alias for a command
afhs'unalias <alias>  Remove an alias
afhs'targets  List known targets and associated authorization tokens

afhs'Help
afhs'help [command]  Get general help or help on a specific command
afhs'help options  Get help on available options

afhs'manifest-file

name::
* McsEngl.afhs'manifest-file@cptIt,

When you af push an app that has a manifest, af will simply read the input values from the file rather than prompt you for each configuration.
[https://docs.appfog.com/getting-started/af-cli/manifests]

ljnpgm'dependency

name::
* McsEngl.ljnpgm'dependency@cptIt,
* McsEngl.ljn'dependency@cptIt,
* McsEngl.pgmNode'dependency@cptIt,

_DEFINITION:
At the most minimal definition, a dependency is just that - a package of code your application depends on. Without this code, your application will not work correctly, and perhaps not even build.
[https://snyk.io/blog/whats-an-npm-dependency/]

_ADDRESS.WPG:
* https://snyk.io/blog/whats-an-npm-dependency//

ljnpgm'package.json#ql:npm'package.json#

name::
* McsEngl.ljnpgm'package.json@cptIt,

ljnpgm'hosting

name::
* McsEngl.ljnpgm'hosting@cptIt,
* McsEngl.ljn'hosting-application@cptIt,

_DESCRIPTION:
Node.js is a promising technology and an excellent choice for a high load application. It has been proven by corporations, like Microsoft, eBay, and Yahoo. If you’re unsure about hosting your website/application, you can always use a cheap VPS solution or various cloud-based services, such as Microsoft Azure and Amazon EC2. Both of these services provide scalable environments at a reasonable price.
[http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/]

ljnpgm'hosting.SPECIFIC

name::
* McsEngl.ljnpgm'hosting.SPECIFIC@cptIt,

_SPECIFIC:
* AppFog##
* Heroku (https://www.heroku.com/home)

_Cloudnode
Cloudnode is a free Node.js hosting platform using specialized Virtual Node Machines.
NodeCloud Ranking : 42
Alexa Traffic Rank : 2305950

Here are some provider suggestions for Node.js hosting:
bejes.us
Cloud Foundry
Cloudnode
DotCloud
Duostack
Node.js works on a v8 environment – it is a virtual machine or a JavaScript engine that runs the JavaScript code, so for hosting you can’t use the ordinary web hosts. You will need the ones that have the v8 environment.
[http://www.hongkiat.com/blog/node-js-server-side-javascript/]

ljnpgm'hosting.HEROKU

name::
* McsEngl.ljnpgm'hosting.HEROKU@cptIt,
* McsEngl.heroku-cloud-platform@cptIt,

_DESCRIPTION:
Heroku is a cloud platform that lets companies build, deliver, monitor and scale apps — we're the fastest way to go from idea to URL, bypassing all those infrastructure headaches.
[https://www.heroku.com/what]

_ADDRESS.WPG:
* https://www.heroku.com/,
* https://www.angularonrails.com/deploy-angular-cli-webpack-project-heroku//

ljnpgm'hosting.nodejitsu

name::
* McsEngl.ljnpgm'hosting.nodejitsu@cptIt,
* McsEngl.ljnpgm'nodejitsu@cptIt,
* McsEngl.ljn'nodejitsu@cptIt,
* McsEngl.nodejitsu@cptIt,
* McsEngl.ljnjts@cptIt,

_GENERIC:
* nodejs-app-hosting#ql:nodejs'app'hosting#

_DESCRIPTION:
The simplest, most reliable and intelligent Node.js hosting platform
Over 25,000 developers and 1 million deployments
[https://www.nodejitsu.com//]

_OPEN_SOURCE:
Why Open Source?
Most of Nodejitsu's technology stack is released as open source software. We choose to do this for many reasons. Aside from being able to give back to the Node.js community, releasing pieces of our stack as open-source allows other developers to review and improve our software. We've already received invaluable contributions to our platform from developers who would have never seen our code if we had not open-sourced it.
[https://www.nodejitsu.com/documentation/appendix/open-source/]

ndjts'jitsu

name::
* McsEngl.ndjts'jitsu@cptIt,
* McsEngl.jitsu.nodejitsu@cptIt,

_DESCRIPTION:
Jitsu is a Command Line Tool (CLI) for managing and deploying Node.js applications. It's open-source and easy to use. We've designed jitsu to be suitable for command line beginners, but still be powerful and extensible enough for production usage.
[https://github.com/nodejitsu/handbook/blob/master/content/jitsu/index.md#login]

_INSTALLATION:
sudo npm install jitsu -g

_jitsu_create:
Create a new application on Nodejitsu

_jitsu_deploy:
One Line Deployment

Open a terminal:
cd /home/me/myapp
jitsu deploy
This will create a new application snapshot, generate and/or update project metadata, and deploy the project in the current path to Nodejitsu. If it's your first deployment, you'll be prompted for some information such as your app's name, its nodejitsu subdomain, and its start script. It's really easy and we promise it will only take a few seconds.

prompt: subdomain: (myapp)
prompt: scripts.start: (server.js)
prompt: version: (0.0.0)
prompt: engines.node: (0.8.x)
Now just open up your favorite browser, and go to myapp.nodejitsu.com. If everything has been set up correctly, then you too, are on the path of Nodejitsu!

jitsu databases create:
Requisition a database

_jitsu_destroy:
To change the application name do jitsu destroy, confirm and finally redeploy with jitsu deploy. Both commands must be executed within the project folder.
[https://www.nodejitsu.com/documentation/a-quickstart/faq/]

_jitsu_list:
List all applications

_jitsu_login:

_jitsu_logout:

_jitsu_logs_app :appname:
View logs your application outputs

_jitsu_users_forgot :username:
Reset my forgotten password

SPECIFIC

name::
* McsEngl.pgmNode.specific@cptIt,
* McsEngl.ljn'apn.specific@cptIt,

ljnpgm.HELLO-WORLD

name::
* McsEngl.ljnpgm.HELLO-WORLD@cptIt,

Synopsis#
An example of a web server written with Node which responds with 'Hello World':

var http = require('http');

http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');
To run the server, put the code into a file called example.js and execute it with the node program

> node example.js
Server running at http://127.0.0.1:8124/
All of the examples in the documentation can be run similarly.
[http://nodejs.org/api/all.html#all_synopsis]

The Hello World App
Naturally, our first Node.js script will print the text 'Hello World!' to the console. Create a file, called hello.js, and type the following code:
1 console.log('Hello World!');
Now let’s execute the script. Open the terminal/command line, navigate to the folder that contains hello.js, and execute the following command:
1 node hello.js
You should see 'Hello World!' displayed in the console.
[http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/]

ljnpgm.CLI

name::
* McsEngl.ljnpgm.CLI@cptIt,
* McsEngl.ljnpgm.CLI@cptIt,

_DESCRIPTION:
'process.argv' is an-array containing all the-words of the-command that executes the-program.
argv[0] = the-path of node.exe,
argv[1] = the-file executed,
argv[2] = the-first argument|option.

_CODE.LJN:
//file testargv.js
console.log(process.argv);

if (process.argv[4]) {
console.log(process.argv[4]);
} else {
console.log('No 5th argument')
}
//>node testargv 3
//[ '\\Program Files\\nodejs\\node.exe',
// '\\dirFTH\\testargv',
// '3' ]
//No 5th argument

npmpkg.commander-object

name::
* McsEngl.npmpkg.commander-object@cptIt,
* McsEngl.npmpkg.commander@cptIt,

_MEMBER:
[ 'Command',
'Option',
'_allowUnknownOption',
'_args',
'_execs',
'_name',
'commands',
'options' ]

_ADDRESS.WPG:
* https://www.npmjs.com/package/commander,

npmpkg.yargs-function

name::
* McsEngl.npmpkg.yargs-function@cptIt,
* McsEngl.ljnm.yargs@cptIt,
* McsEngl.mfYargs@cptIt,
* McsEngl.npmpkg.yargs@cptIt,

_DESCRIPTION:
What's Yargs?
Yargs helps you build interactive command line tools by parsing arguments and generating an elegant user interface.
Yargs gives you:
commands and (grouped) options (like module run -n --force),
a dynamically generated help menu based on your arguments,
bash-completion shortcuts for commands and options,
and much more.
With these features, and many more, yargs allows you to focus on building your program without worrying about your args.
[http://yargs.js.org//]

mfYargs'member:
// Object.getOwnPropertyNames(mfYargs).sort()
[ '$0', '_getLoggerInstance', '_hasOutput', '_hasParseCallback',
'addHelpOpt', 'alias', 'arguments', 'argv', 'array', 'boolean',
'caller', 'check', 'choices', 'coerce', 'command', 'commandDir', 'completion', 'config', 'count',
'default', 'defaults', 'demand', 'describe', 'detectLocale',
'env', 'epilog', 'epilogue', 'example', 'exit', 'exitProcess', 'fail', 'getCommandInstance', 'getCompletion', 'getContext', 'getDemanded', 'getDetectLocale', 'getExitProcess', 'getGroups', 'getOptions', 'getStrict', 'getUsageInstance', 'getValidationInstance', 'global', 'group', 'help', 'implies', 'length', 'locale', 'name', 'nargs', 'normalize', 'number',
'option', 'options', 'parse', 'parsed', 'pkgConf', 'prototype', 'recommendCommands', 'require', 'required', 'requiresArg', 'reset', 'resetOptions',
'showCompletionScript', 'showHelp', 'showHelpOnFail', 'skipValidation', 'strict', 'string', 'terminalWidth', 'updateLocale', 'updateStrings', 'usage', 'version', 'wrap' ]

mfYargs.argv:
Get the arguments as a plain old object.
[http://yargs.js.org/docs/#methods-argv]
{
_: [ 'cmdBuild' ],
_handled: true,
'$0': 'moEntryCli.js',
access: undefined,
config: undefined,
'document-exported': false,
documentExported: false,
example: undefined,
extension: undefined,
external: null,
f: 'html',
format: 'html',
g: false,
github: false,
help: false,
'infer-private': undefined,
input: [ 'moEntry.js' ],
name: undefined,
o: 'docs\\API',
output: 'docs\\API',
p: false,
polyglot: false,
private: false,
'project-version': undefined,
shallow: false,
'sort-order': 'source',
sortOrder: 'source',
theme: undefined,
version: false,
w: false,
watch: false,
}
===
{ _: [ 'build' ],
version: false,
help: false,
watch: false,
w: false,
shallow: false,
polyglot: false,
private: false,
p: false,
github: false,
g: false,
'document-exported': false,
documentExported: false,
f: 'html',
format: 'html',
o: 'docs\\API',
output: 'docs\\API',
external: null,
'sort-order': 'source',
sortOrder: 'source',
'$0': 'bin\\documentation',
theme: undefined,
name: undefined,
'project-version': undefined,
config: undefined,
extension: undefined,
access: undefined,
'infer-private': undefined,
example: undefined }

mfYargs.command:
COMMAND(CMD, DESC, [BUILDER], [HANDLER])
.COMMAND(CMD, DESC, [MODULE])
.COMMAND(MODULE)
Define the commands exposed by your application.
...
Command Execution
When a command is given on the command line, yargs will execute the following:
1.push the command into the current context
2.reset non-global configuration
3.apply command configuration via the builder, if given
4.parse and validate args from the command line, including positional args
5.if validation succeeds, run the handler function, if given
6.pop the command from the current context
...
Providing a Command Module
For complicated commands you can pull the logic into a module. A module simply needs to export:
- exports.command: string (or array of strings) that executes this command when given on the command line, first string may contain positional args
- exports.aliases: array of strings (or a single string) representing aliases of exports.command, positional args defined in an alias are ignored
- exports.describe: string used as the description for the command in help text, use false for a hidden command
- exports.builder: object declaring the options the command accepts, or a function accepting and returning a yargs instance
- exports.handler: a function which will be passed the parsed argv.
[http://yargs.js.org/docs/#methods-commandcmd-desc-module]
===
//executes a-command
mfYargs.command(moCommands.serve)
===
.command('hello [name]', 'welcome ter yargs!', {name: {default: 'default name'}}, function (argv) {
console.log('hello', argv.name, 'welcome to yargs!')
})

mfYargs.help:
.help()
.HELP()
.HELP([OPTION | BOOLEAN])
.HELP([OPTION, [DESCRIPTION | BOOLEAN]])
.HELP([OPTION, [DESCRIPTION, [BOOLEAN]]])
Add an option (e.g. --help) and implicit command that displays the usage string and exits the process.
If present, the description parameter customizes the description of the help option in the usage string.
[http://yargs.js.org/docs/#methods-help]

mfYargs.RECOMMENDCOMMANDS()
Should yargs provide suggestions regarding similar commands if no matching command is found?

mfYargs.showHelp:
yargs.showHelp(); //prints to stderr using console.error()
yargs.showHelp("log"); //prints to stdout using console.log()

mfYargs.usage:
.usage('$0 <cmd> [args]')
.USAGE(MESSAGE, [OPTS])
Set a usage message to show which commands to use. Inside message, the string $0 will get interpolated to the current script name or node command for the present script similar to how $0 works in bash or perl.
opts is optional and acts like calling .options(opts).
[http://yargs.js.org/docs/#methods-usagemessage-opts]

mfYargs.version:
.version(function () {
return require('../package.json').version;
})

mfYargs'API

name::
* McsEngl.mfYargs'API@cptIt,

_API:
{
'$0': 'moEntryCli',
_getLoggerInstance: [Function],
_hasOutput: [Function],
_hasParseCallback: [Function],
addHelpOpt: [Function],
alias: [Function],
argv: [Getter]
array: [Function],
boolean: [Function],
check: [Function],
choices: [Function],
coerce: [Function],
command: [Function],
commandDir: [Function],
completion: [Function],
config: [Function],
count: [Function],
default: [Function],
defaults: [Function],
demand: [Function],
describe: [Function],
detectLocale: [Function],
env: [Function],
epilog: [Function],
epilogue: [Function],
example: [Function],
exit: [Function],
exitProcess: [Function],
fail: [Function],
getCommandInstance: [Function],
getCompletion: [Function],
getContext: [Function],
getDemanded: [Function],
getDetectLocale: [Function],
getExitProcess: [Function],
getGroups: [Function],
getOptions: [Function],
getStrict: [Function],
getUsageInstance: [Function],
getValidationInstance: [Function],
global: [Function],
group: [Function],
help: [Function],
implies: [Function],
locale: [Function],
nargs: [Function],
normalize: [Function],
number: [Function],
option: [Function],
options: [Function],
parse: [Function],
parsed: {
argv: { _: [], version: false, help: false, '$0': 'moEntryCli' },
error: null,
aliases: { version: [], help: [] },
newAliases: {},
configuration: {
'short-option-groups': true,
'camel-case-expansion': true,
'dot-notation': true,
'parse-numbers': true,
'boolean-negation': true
}
},
pkgConf: [Function],
recommendCommands: [Function],
require: [Function],
required: [Function],
requiresArg: [Function],
reset: [Function],
resetOptions: [Function],
showCompletionScript: [Function],
showHelp: [Function],
showHelpOnFail: [Function],
skipValidation: [Function],
strict: [Function],
string: [Function],
terminalWidth: [Function],
updateLocale: [Function],
updateStrings: [Function],
usage: [Function],
version: [Function],
wrap: [Function],
}

mfYargs'Resource

name::
* McsEngl.mfYargs'Resource@cptIt,

_ADDRESS.WPG:
* https://www.npmjs.com/package/yargs/
* https://github.com/yargs/yargs/
* http://yargs.js.org//
* http://yargs.js.org/docs//

ljnpgm.BLOG

name::
* McsEngl.ljnpgm.BLOG@cptIt,
* McsEngl.ljn'blog@cptIt,

_blogsiple:
* https://github.com/bergie/blogsiple,

ljnpgm.CMS

name::
* McsEngl.ljnpgm.CMS@cptIt,
* McsEngl.ljn'cms@cptIt,

_SPECIFIC:
* http://stackoverflow.com/questions/3684743/cms-based-on-nodejs,
===
* https://github.com/joyent/node/wiki/modules#wiki-content-management,
* https://github.com/punkave/apostrophe, mogoDB.
* https://github.com/dpirek/nodejs-mvc-cms,

_Cliste:
* https://github.com/bmarti44/Cliste,
- mogoDB,

_InvaNode:
* https://github.com/i-vetrov/InvaNode-mongo,
InvaNode is a simple CMS. It has base functionality for simple web-site with manageable content and template engine.
It is light and easy customizable.
- mogoDB.

ljnpgm.DESKTOP

name::
* McsEngl.ljnpgm.DESKTOP@cptIt,

_ADDRESS.WPG:
* http://code.tutsplus.com/tutorials/introduction-to-html5-desktop-apps-with-node-webkit--net-36296,

ljnpgm.EDITOR

name::
* McsEngl.ljnpgm.EDITOR@cptIt,
* McsEngl.editor.nodejs-app@cptIt,
* McsEngl.pgmNode.editorCode@cptIt,

_ADDRESS.WPG:
* https://www.npmjs.org/package/brackets,
* https://www.npmjs.org/package/scripted,
* https://github.com/soliton4/nodeMirror,

ljnpgm.elfinder

name::
* McsEngl.ljnpgm.elfinder@cptIt,
* McsEngl.elfinder-nodejs-app@cptIt,

elfinder
Command line app for searching in HTML files for elements that match a CSS selector
[https://npmjs.org/package/elfinder]

nodejs.app.FLATIRON

name::
* McsEngl.nodejs.app.FLATIRON@cptIt,
* McsEngl.flatiron-nodejitsu@cptIt,

_GENERIC:
* a nodejitsu-application-framework,

_DESCRIPTION:
Nodejitsu's "anti-framework" for building web and CLI applications
[https://www.nodejitsu.com/documentation/appendix/open-source/]

_ADDRESS.WPG:
* http://flatironjs.org//
* https://github.com/flatiron,

ljnpgm.FILE

name::
* McsEngl.ljnpgm.FILE@cptIt,

_CODE.LJN
/**
* modified: {2017-04-23}
* created: {2017-03-23}
*
* Input: FolioViews.fff file.
* Output: own-hml file to convert in hitp-hml.
* run: node 1fthml fileIn fileOut
*/

var oFs = require('fs'),
sFileIn = 'test0.txt',
sFileOut = 'testOut.txt',
s TxtOut = '';

if (process.argv[2]) {
sFileIn = process.argv[2];
} else {
console.log('USAGE: node 1f2hml fileIn fileOut');
process.exit();
}

if (process.argv[3]) {
sFileOut = process.argv[3];
} else {
console.log('USAGE: node 1f2hml fileIn fileOut');
process.exit();
}

var oInterface = require('readline').createInterface({
input: oFs.createReadStream(sFileIn)
});

var oWs = oFs.createWriteStream(sFileOut);

oInterface.on('line', function (sLineIn) {
sLineIn = search-replace;
sLineIn = search-replace;

oWs.write(sLineIn);
});

oInterface.on('close', function(){
oWs.close();
});

_CODE.LJN:
//SLOW
var fs = require("fs");

fs.readFileSync('filMcsBcnnet.fff').toString().split('\n').forEach(function (line) {
fs.appendFileSync("test.out", line.toString() + "\n");
});

_CODE.LJN:
/**
* created: {2017-03-23}
* run: node filRead >> out.txt
*/
var oReadline = require('readline').createInterface({
input: require('fs').createReadStream('test.txt')
});

oReadline.on('line', function (sLineIn) {
console.log('Line from file:', sLineIn);
});

ljnpgm.FTP

name::
* McsEngl.ljnpgm.FTP@cptIt,
* McsEngl.ljn'ftp-application@cptIt,

ljn'node_ftp:
node-ftp is an FTP client module for node.js that provides an asynchronous interface for communicating with an FTP server.
[https://github.com/mscdex/node-ftp]

nodejs.app.GEDDY

name::
* McsEngl.nodejs.app.GEDDY@cptIt,
* McsEngl.ljn'geddy@cptIt,

_DESCRIPTION:
An example of a popular Rails-like framework is Geddy
[http://dailyjs.com/2010/11/01/node-tutorial/]
===
A simple, structured web framework for Node
[http://geddyjs.org/]
===
Geddy is built on the same MVC principles that many popular frameworks are based on. Every Geddy app has its models, controllers, and views as well as config files and routes.
[http://geddyjs.org/documentation]

ljnpgm.IRC

name::
* McsEngl.ljnpgm.IRC@cptIt,

_ADDRESS.WPG:
* https://tennu.github.io//
Simple, Robust, Reusable IRC Bots

ljnpgm.PARSER

name::
* McsEngl.ljnpgm.PARSER@cptIt,

_ADDRESS.WPG:
* https://github.com/joyent/node/wiki/Modules#parsers,

ljnpgm.SEARCH

name::
* McsEngl.ljnpgm.SEARCH@cptIt,

ljnpgm.SEARCH-INDEX

name::
* McsEngl.ljnpgm.SEARCH-INDEX@cptIt,

_ADDRESS.WPG:
* https://github.com/fergiemcdowall/search-index#ql:https://github.com/fergiemcdowall/search-index#

{
"title":"STANDARD OIL <SRD> TO FORM FINANCIAL UNIT",
"body":"Standard Oil Co and BP North America\nInc said they plan to form a venture to manage the money market\nborrowing and investment activities of both companies.\n BP North America is a subsidiary of British Petroleum Co\nPlc <BP>, which also owns a 55 pct interest in Standard Oil.\n The venture will be called BP/Standard Financial Trading\nand will be operated by Standard Oil under the oversight of a\njoint management committee.\n\n Reuter\n\u0003",
"date":"26-FEB-1987 15:02:20.00",
"places":["usa"],
"id":"2"
}

ljnpgm.slimnode

name::
* McsEngl.ljnpgm.slimnode@cptIt,

_DESCRIPTION:
Slim Node is a blog engine that makes use of Markdown flat files as a blogging engine, making it easy to update and edit, without having to worry about having a chunky CMS like wordpress or Drupal to manage your content. It is quick and light and the entire application logic (not including node dependencies) is only 56kb in size.
You can use Git to push updates to the articles folder, making it easy to update.
[http://localhost:8080/page/about]

ljnpgm.WEB

name::
* McsEngl.ljnpgm.WEB@cptIt,

_DESCRIPTION:
Node developers mostly build web apps, hence they use async code to avoid blocking threads.
[https://www.sitepoint.com/10-tips-to-become-a-better-node-developer/]

ljnpgm.WHEAT-BLOG

name::
* McsEngl.ljnpgm.WHEAT-BLOG@cptIt,
* McsEngl.ljn'wheat@cptIt,

_DESCRIPTION:
Wheat is a blogging engine that reads a git repo full of markdown articles and presents them as a website.
[https://github.com/creationix/wheat]
===
Tim Caswell's "Wheat" blog engine
[http://n8.io/starting-over/]

ljnalgo.PACKAGE (npmpkg)

name::
* McsEngl.ljnalgo.PACKAGE (npmpkg)@cptIt,
* McsEngl.ljnpkg@cptIt,
* McsEngl.npmpkg@cptIt,

* McsEngl.ljnpkg@cptIt,
* McsEngl.npmpkg@cptIt,

_DESCRIPTION:
A-Node.js-npm-package (default) is a-library or a-program with a-package.json-file.
[hmnSngo.2016-08-08]

npmpkg'doing.Creating

name::
* McsEngl.npmpkg'doing.Creating@cptIt,
* McsEngl.npmpkg'building@cptIt,

_ADDRESS.WPG:
* https://nodesource.com/blog/your-first-nodejs-package//
* http://blog.teamtreehouse.com/build-npm-package/

npmpkg'Check-existance

name::
* McsEngl.npmpkg'Check-existance@cptIt,

Has someone already written this package?
It might be worth saving yourself some time and doing a couple of searches for the package you are looking for.
As of this writing there are ~86k packages in npm and there is a good chance someone has done something similar to what you are building.
Some good places to search are: http://npmjs.org, http://node-modules.com, and http://npmsearch.com. There is also npm search on the command-line which you may find useful.
[https://nodesource.com/blog/your-first-nodejs-package/]

npmpkg'Naming

name::
* McsEngl.npmpkg'Naming@cptIt,

Choose a name
Find a name that isn't taken and clearly describes what your package is doing. You'll probably not want to use your-first-node-package as below, but for example's sake that is what we will be using.
Choose a descriptive name!
$ npm view your-first-node-package
npm ERR! 404 'your-first-node-package' is not in the npm registry.
...
Woohoo, that name is not taken, let's take it.
[https://nodesource.com/blog/your-first-nodejs-package/]

npmpkg'Initializing

name::
* McsEngl.npmpkg'Initializing@cptIt,

npmpkg'Coding

name::
* McsEngl.npmpkg'Coding@cptIt,

Code time
A word of advice: packages should do **one thing**. If you have a `lib` directory with a grab-bag of utilities and other _stuff_ in there, you should probably break those out into their own packages. Packages should be easy to digest and focused on the task they were created to perform.
By splitting individual units of functionality out into their own packages you are being a good Node.js citizen by allowing those who come after you to pick and choose how they want to build applications. Not only that—smaller packages allow faster iteration, focused documentation, and generally better test coverage (it is easier to test small packages)!
[https://nodesource.com/blog/your-first-nodejs-package/]

npmpkg'Testing

name::
* McsEngl.npmpkg'Testing@cptIt,

NODE.JS REPL
If you run node in a terminal, you will enter an interactive JavaScript prompt called the Node.js REPL (Read Eval Print Loop). We'll be using this prompt to test our new package—it goes something like this:
$ node
> var area = require('./index.js');
undefined
> area(2,4)
8
>
(^C again to quit)
>
(Hint: press Ctrl+C twice to exit the REPL.)
Because we set module.exports to a function, it is the only thing exported. We can then call it directly!
[https://nodesource.com/blog/your-first-nodejs-package/]

npmpkg'doing.Installing

name::
* McsEngl.npmpkg'doing.Installing@cptIt,
* McsEngl.npmpkg'installing@cptIt,

_CODE.SHELL:
> npm install (pkg)
> npm install (pkg) --save //save on package.json "dependencies"
> npm install (pkg) --save-dev //save on package.json "devDependencies"

npmpkg'doing.Publishing

name::
* McsEngl.npmpkg'doing.Publishing@cptIt,
* McsEngl.npmpkg'publishing@cptIt,

_DESCRIPTION:
npm is one of the easiest ways to distribute software packages. Why not share your code and talents with the world and distribute your software too!?
[http://blog.teamtreehouse.com/build-npm-package]

_PROCESS:
1. login: 'npm login'
2. create the-package: ljs-files, package.json, readme.md.
3. test:
4. publish: npm publish

_ADDRESS.WPG:
* https://nodesource.com/blog/your-first-nodejs-package//
* https://docs.npmjs.com/getting-started/publishing-npm-packages/

npmpkg'doing.Updating

name::
* McsEngl.npmpkg'doing.Updating@cptIt,

_DESCRIPTION:
Updating local packages
Every so often, you should update the packages you depend on so you can get any changes that have been made to code upstream.

To do this, run npm update in the same directory as your package.json file.

Test: Run npm outdated. There should not be any results.
[https://docs.npmjs.com/getting-started/updating-local-packages]
===
Updating global packages

To update global packages, you can use npm update -g <package>:

npm update -g jshint
To find out which packages need to be updated, you can use npm outdated -g --depth=0.

To update all global packages, you can use npm update -g. However, for npm versions less than 2.6.1, this script is recommended to update all outdated global packages.
[https://docs.npmjs.com/getting-started/updating-global-packages]

npmpkg'License

name::
* McsEngl.npmpkg'License@cptIt,

npmpkg'npm-tool

name::
* McsEngl.npmpkg'npm-tool@cptIt,
* McsEngl.ljn'npm@cptIt,
* McsEngl.ljn'tool.npm@cptIt,
* McsEngl.npm-tool@cptIt,
* McsEngl.pgmNpm@cptIt,

* McsEngl.node'node-package-manager@cptIt,
* McsEngl.node-package-manager@cptIt,
* McsEngl.npm@cptIt,
* McsEngl.npm-tool@cptIt,
* McsEngl.npm-nodejs-package-manager@cptIt,

_DESCRIPTION:
npm is the package manager for the Node JavaScript platform. It puts modules in place so that node can find them, and manages dependency conflicts intelligently.

It is extremely configurable to support a wide variety of use cases. Most commonly, it is used to publish, discover, install, and develop node programs.

Run npm help to get a list of available commands.
[https://npmjs.org/doc/cli/npm.html]
===
Node.js has a package manager, called Node Package Manager (NPM). It is automatically installed with Node.js, and you use NPM to install new modules. To install a module, open your terminal/command line, navigate to the desired folder, and execute the following command:
1 npm install module_name
It doesn’t matter what OS you have; the above command will install the module you specify in place of module_name.
[http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/]
===
npm is a package manager for Node.js that is run through the command line and manages dependencies for an application. It is the predominant package manager for Node.js.
According to its author, npm is not an acronym for "Node Package Manager".[1]
As of Node.js version 0.6.3, npm is deployed and installed automatically with the environment.
[http://en.wikipedia.org/wiki/Npm_(software)]

npm'Synopsis (usage)

name::
* McsEngl.npm'Synopsis (usage)@cptIt,
* McsEngl.npm'usage@cptIt,

_USAGE:
> npm (command) [args]

npm'Command (npmcmd)

name::
* McsEngl.npm'Command (npmcmd)@cptIt,
* McsEngl.npm'command@cptIt,
* McsEngl.npm'cmd@cptIt,
* McsEngl.npmcmd@cptIt,

_SPECIFIC:
where <command> is one of:
add-user, adduser, apihelp, author,
bin, bugs,
c, cache, completion, config,
ddp, dedupe, deprecate, docs,
edit, explore,
faq, find, find-dupes,
get,
help, help-search, home,
i, info, init, install, isntall, issues,
la, link, list, ll, ln, login, ls,
outdated, owner,
pack, prefix, prune, publish,
r, rb, rebuild, remove, restart, rm, root, run-script,
s, se, search, set, show, shrinkwrap, star, stars, start, stop, submodule,
tag, test, tst,
un, uninstall, unlink, unpublish, unstar, up, update,
version, view,
whoami

npmcmd.info:
'npm info express version' displays the version of module 'epxress'.

npmcmd.home:
Run: npm home $package
Running the home command will open the homepage of the package you're running it against. Running against the lodash package will bring you to the Lodash website. This command can run without needing to have the package installed globally on your machine or within the current project.
[https://nodesource.com/blog/eleven-npm-tricks-that-will-knock-your-wombat-socks-off/]

npmcmd.init:
* creates a package.json file on an empty dir.

npmcmd.install, npmcmd.i:
> npm install
* installs the dependencies on 'package.json'
===
> npm install -g 'module' ==> global install
===
> npm install 'module':
* installs the specified module.
===
6. Use npm v3 with Node.js v4 LTS
Run: npm install -g npm@3
Installing npm@3 globally with npm will update your npm v2 to npm v3, including on the Node.js v4 LTS release (“Argon”) ships with the npm v2 LTS release. This will install the latest stable release of npm v3 within your v4 LTS runtime.
[https://nodesource.com/blog/eleven-npm-tricks-that-will-knock-your-wombat-socks-off/]
===
By default, NPM simply installs a package under node_modules. When you're trying to install dependencies for your app/module, you would need to first install them, and then add them (along with the appropriate version number) to the dependencies section of your package.json.

The --save option instructs NPM to include the package inside of the dependencies section of your package.json automatically, thus saving you an additional step.

In addition, there are the complementary options --save-dev and --save-optional which save the package under devDependencies and optionalDependencies, respectively. This is useful when installing development-only packages, like grunt or your testing library.
[http://stackoverflow.com/a/19578808]

npmcmd.link, npmcmd.ln:
Symlink a package folder
[]

npmcmd.login:
username:
password:
email:

npmcmd.ls:
* lists the installed modules.

npmcmd.outdated:
3. Check a package for outdated dependencies
Run: npm outdated
You can run the outdated command within a project, and it will check the npm registry to see if any of your packages are outdated. It will print out a list in your command line of the current version, the wanted version, and the latest version.
[https://nodesource.com/blog/eleven-npm-tricks-that-will-knock-your-wombat-socks-off/]

npmcmd.prune:
> npm prune
removes packages not depended on by your project according to your package.json

npmcmd.publish:
> npm publish <tarball>
> npm publish <folder>
DESCRIPTION
Publishes a package to the registry so that it can be installed by name.
<folder>: A folder containing a package.json file
<tarball>: A url or file path to a gzipped tar archive containing a single folder with a package.json file inside.
[https://npmjs.org/doc/publish.html]

npmcmd.repo:
> npm repo $package
Similar to home, the repo command will open the GitHub repository of the package you're running it against. Running against the express package will bring you to the official Express repo. Also like home, you don’t need to have the package installed.
[https://nodesource.com/blog/eleven-npm-tricks-that-will-knock-your-wombat-socks-off/]

npmcmd.rm 'module':
* removes module.

npmcmd.run: (linkL#ql:npmspt#)

npmcmd.search packagename

npmcmd.set:
> npm set init.author.name "Brent Ertz"
> npm set init.author.email "brent.ertz@gmail.com"
> npm set init.author.url "http://brentertz.com"

npmcmd.shrinkwrap:
5. Lock down your dependencies versions
Run: npm shrinkwrap
Using shrinkwrap in your project generates an npm-shrinkwrap.json file. This allows you to pin the dependencies of your project to the specific version you’re currently using within your node_modules directory. When you run npm install and there is a npm-shrinkwrap.json present, it will override the listed dependencies and any semver ranges in package.json.
If you need verified consistency across package.json, npm-shrinkwrap.json and node_modules for your project, you should consider using npm-shrinkwrap.
[https://nodesource.com/blog/eleven-npm-tricks-that-will-knock-your-wombat-socks-off/]
===
* https://docs.npmjs.com/cli/shrinkwrap,
* https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/

npmcmd.test:
Synopsis
npm test [-- <args>]
npm tst [-- <args>]
Description
This runs a-package's-"test"-script#ql:ljnpkgjsn'scripts#, if one was provided.
[https://docs.npmjs.com/cli/test]

npmcmd.uninstall 'module':
>npm uninstall documentation -g
* removes module.

npmcmd.update 'pkg':

npmcmd.v:
* version,

npmcmd.view:
> npm view (package)
* shows info on the-package.

npm'Option (npmopn)

name::
* McsEngl.npm'Option (npmopn)@cptIt,
* McsEngl.npm'arg@cptIt,
* McsEngl.npm'flag@cptIt,
* McsEngl.npm'option@cptIt,

npmopn.g:
Local mode is the default. Use -g or --global on any command to operate in global mode instead.
[https://docs.npmjs.com/cli/npm#directories]

npmopn.h:
> npm outdated -h
< npm outdated [[<@scope>/]<pkg> ...]
* help on 'cmd'

npmopn.save:
> npm install "pkg" --save

npmopn.save_dev:
> npm install "pkg" --save-dev
* saves on package.json the dependency of module installed.
[https://docs.npmjs.com/cli/install]

npm'Cach

name::
* McsEngl.npm'Cach@cptIt,

_DESCRIPTION:
When your require a package in node via the require() function, that dependency is then cached.
The next time a file requires the same dependency, the cached version used.
And herein lies the problem: when the 6.5.2 package was first required, it was cached.
Later, when the same package was needed again by a different module, this module was fed the cached version, not the version that it asked for.
All modules should have been using 6.20.0., but because 6.5.2 was available and the file that asked for 6.5.2 was read first, 6.5.2 was used to build the entire project.
[http://www.blog.distelli.com/single-post/2016/12/14/Why-we-switched-from-NPM-to-Yarn]

npm'Configuring

name::
* McsEngl.npm'Configuring@cptIt,

_DESCRIPTION:
npm is extremely configurable. It reads its configuration options from 5 places.

Command line switches:
Set a config with --key val. All keys take a value, even if they are booleans (the config parser doesn't know what the options are at the time of parsing.) If no value is provided, then the option is set to boolean true.
Environment Variables:
Set any config by prefixing the name in an environment variable with npm_config_. For example, export npm_config_key=val.
User Configs:
The file at $HOME/.npmrc is an ini-formatted list of configs. If present, it is parsed. If the userconfig option is set in the cli or env, then that will be used instead.
Global Configs:
The file found at ../etc/npmrc (from the node executable, by default this resolves to /usr/local/etc/npmrc) will be parsed if it is found. If the globalconfig option is set in the cli, env, or user config, then that file is parsed instead.
Defaults:
npm's default configuration options are defined in lib/utils/config-defs.js. These must not be changed.
See npm-config for much much more information.
[https://docs.npmjs.com/cli/npm#configuration]
===
Specify configs in the ini-formatted file:
\Users\synagonism\.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config

>npm config ls -l
; cli configs
npmcfg.long = true
npmcfg.user_agent = "npm/3.10.3 node/v6.5.0 win32 x64"

; builtin config undefined
npmcfg.prefix = "\\Users\\synagonism\\AppData\\Roaming\\npm"

; default values
npmcfg.access = null
npmcfg.also = null
npmcfg.always_auth = false
npmcfg.bin_links = true
npmcfg.browser = null
npmcfg.ca = null
npmcfg.cache = "\\Users\\synagonism\\AppData\\Roaming\\npm-cache"
npmcfg.cache_lock_retries = 10
npmcfg.cache_lock_stale = 60000
npmcfg.cache_lock_wait = 10000
npmcfg.cache_max = null
npmcfg.cache_min = 10
npmcfg.cafile = undefined
npmcfg.cert = null
npmcfg.color = true
npmcfg.depth = null
npmcfg.description = true
npmcfg.dev = false
npmcfg.dry_run = false
npmcfg.editor = "notepad.exe"
npmcfg.engine_strict = false
npmcfg.fetch_retries = 2
npmcfg.fetch_retry_factor = 10
npmcfg.fetch_retry_maxtimeout = 60000
npmcfg.fetch_retry_mintimeout = 10000
npmcfg.force = false
npmcfg.git = "git"
npmcfg.git_tag_version = true
npmcfg.global = false
npmcfg.global_style = false
npmcfg.globalconfig = "\\Users\\synagonism\\AppData\\Roaming\\npm\\etc\\npmrc"
npmcfg.globalignorefile = "\\Users\\synagonism\\AppData\\Roaming\\npm\\etc\\npmignore"
npmcfg.group = 0
npmcfg.heading = "npm"
npmcfg.https_proxy = null
npmcfg.if_present = false
npmcfg.ignore_scripts = false
npmcfg.init_author_email = ""
npmcfg.init_author_name = ""
npmcfg.init_author_url = ""
npmcfg.init_license = "ISC"
npmcfg.init_module = "\\Users\\synagonism\\.npm-init.js"
npmcfg.init_version = "1.0.0"
npmcfg.json = false
npmcfg.key = null
npmcfg.legacy_bundling = false
npmcfg.link = false
npmcfg.local_address = undefined
npmcfg.loglevel = "warn"
npmcfg.long = false (overridden)
npmcfg.maxsockets = 50
npmcfg.message = "%s"
npmcfg.node_version = "6.5.0"
npmcfg.npat = false
npmcfg.onload_script = null
npmcfg.only = null
npmcfg.optional = true
npmcfg.parseable = false
npmcfg.; prefix = "\\Program Files\\nodejs" (overridden)
npmcfg.production = false
npmcfg.progress = true
npmcfg.proprietary_attribs = true
npmcfg.proxy = null
npmcfg.rebuild_bundle = true
npmcfg.registry = "https://registry.npmjs.org/"
npmcfg.rollback = true
npmcfg.save = false
npmcfg.save_bundle = false
npmcfg.save_dev = false
npmcfg.save_exact = false
npmcfg.save_optional = false
npmcfg.save_prefix = "^"
npmcfg.scope = ""
npmcfg.searchexclude = null
npmcfg.searchopts = ""
npmcfg.searchsort = "name"
npmcfg.shell = "\\WINDOWS\\system32\\cmd.exe"
npmcfg.shrinkwrap = true
npmcfg.sign_git_tag = false
npmcfg.strict_ssl = true
npmcfg.tag = "latest"
npmcfg.tag_version_prefix = "v"
npmcfg.tmp = "\\Users\\SYNAGO~1\\AppData\\Local\\Temp"
npmcfg.umask = 0
npmcfg.unicode = false
npmcfg.unsafe_perm = true
npmcfg.usage = false
npmcfg.user = 0
npmcfg.user_agent = "npm/{npm-version} node/{node-version} {platform} {arch}" (overridden)
npmcfg.userconfig = "\\Users\\synagonism\\.npmrc"
npmcfg.version = false
npmcfg.versions = false
npmcfg.viewer = "browser"
[ _ for -]

npm'npmrc

name::
* McsEngl.npm'npmrc@cptIt,

_DESCRIPTION:
npm gets its config settings from the command line, environment variables, and npmrc files.

The npm config command can be used to update and edit the contents of the user and global npmrc files.

For a list of available configuration options, see npm-config.
[https://docs.npmjs.com/files/npmrc]
===
Specify configs in the ini-formatted file:
\Users\synagonism\.npmrc

save-exact=true //no ^ in versions.

npm'Evaluation

name::
* McsEngl.npm'Evaluation@cptIt,

_ADDRESS.WPG:
* https://www.sitepoint.com/yarn-vs-npm// {2016-10-19}

Yarn installs packages at the much more of granular level (commit SHA) while NPM installs packages based solely on what is specified in your package.json file. Yarn is also smarter about how it installs different versions of dependencies and only installs the minimum number of different versions, always upgrading dependencies that can be upgraded.
[http://www.blog.distelli.com/single-post/2016/12/14/Why-we-switched-from-NPM-to-Yarn]

Yarn is much-much-much faster than NPM. Yarn also doesn't blow up your terminal window with warnings and other output you don't care about.
[http://www.blog.distelli.com/single-post/2016/12/14/Why-we-switched-from-NPM-to-Yarn]

npm'Human

name::
* McsEngl.npm'Human@cptIt,

_AUTHOR:
* Schlueter.Isaac: original.

npm'Installing

name::
* McsEngl.npm'Installing@cptIt,

_INSTALLATION:
NPM is included by default with Node.JS, starting with version 0.6.3.

npm'Package#ql:ljnpkg_cpt#

name::
* McsEngl.npm'Package@cptIt,

npm'package.json (npmpkgjsn)

name::
* McsEngl.npm'package.json (npmpkgjsn)@cptIt,
* McsEngl.ljn'package.json@cptIt,
* McsEngl.ljn'pkgjson@cptIt,
* McsEngl.ljnpkgjsn@cptIt,
* McsEngl.npmpkgjsn@cptIt,

* McsEngl.npm'package.json@cptIt,
* McsEngl.package.json@cptIt,
* McsEngl.pkgjsn@cptIt,

_ADDRESS.WPG:
* http://synagonism.net/dirMiwMcs/dirTchInf/filMcsLjs.html#idLjnpackage_json,
* https://www.npmjs.org/doc/files/package.json.html,

_DESCRIPTION:
A package.json file contains an overview of your application. There are a lot of available fields, but this is pretty much the minimum. The dependencies section describes the name and version of the modules you'd like to install. In this case I'll accept any version of Express 3.3. You can list as many dependencies as you want in this section.
Now instead of installing each dependency separately, we can run a single command and install all of them.
> npm install
When you run this command npm will look in the current folder for a package.json file. If it finds one, it will install every dependency listed.
[http://blog.modulus.io/absolute-beginners-guide-to-nodejs]
===
This document is all you need to know about what's required in your package.json file. It must be actual JSON, not just a JavaScript object literal.
A lot of the behavior described in this document is affected by the config settings described in npm-config(7).
[https://npmjs.org/doc/files/package.json.html]

npmpkgjsn'Entry

name::
* McsEngl.npmpkgjsn'Entry@cptIt,
* McsEngl.npmpkgjsn'entry@cptIt,
* McsEngl.npmpkgjsn'field@cptIt,
* McsEngl.npmpkgjsn'member@cptIt,

npmpkgjsn'name (required):
"name": "hawk",
===
name
The most important things in your package.json are the name and version fields. Those are actually required, and your package won't install without them. The name and version together form an identifier that is assumed to be completely unique. Changes to the package should come along with changes to the version.

The name is what your thing is called. Some tips:
Don't put "js" or "node" in the name. It's assumed that it's js, since you're writing a package.json file, and you can specify the engine using the "engines" field. (See below.)
The name ends up being part of a URL, an argument on the command line, and a folder name. Any name with non-url-safe characters will be rejected. Also, it can't start with a dot or an underscore.
The name will probably be passed as an argument to require(), so it should be something short, but also reasonably descriptive.
You may want to check the npm registry to see if there's something by that name already, before you get too attached to it. http://registry.npmjs.org//
[https://docs.npmjs.com/files/package.json#name]

npmpkgjsn'version (required):
"version": "0.10.2",
===
major.minor.bug
===
version
The most important things in your package.json are the name and version fields. Those are actually required, and your package won't install without them. The name and version together form an identifier that is assumed to be completely unique. Changes to the package should come along with changes to the version.

Version must be parseable by node-semver, which is bundled with npm as a dependency. (npm install semver to use it yourself.)

More on version numbers and ranges at semver(7).

npmpkgjsn'id_underscore:
"_id": "hawk@0.10.2",

npmpkgjsn'from_underscore:
"_from": "hawk@~0.10.2",

npmpkgjsn'author:
"author": {
"name": "Eran Hammer",
"email": "eran@hueniverse.com",
"url": "http://hueniverse.com"
},

npmpkgjsn'bin:
add the bin object, which maps commands to files. This means when this module is installed, npm will set up the filesearch executable to execute index.js.
"bin": {
"filesearch": "index.js"
}
[http://javascriptplayground.com/blog/2015/03/node-command-line-tool/]

npmpkgjsn'config:
[https://docs.npmjs.com/files/package.json#config]

npmpkgjsn'contributors:
"contributors": [],

npmpkgjsn'dependencies:
"dependencies": {
"hoek": "0.7.x",
"boom": "0.3.x",
"cryptiles": "0.1.x",
"sntp": "0.1.x"
},
[https://docs.npmjs.com/files/package.json#dependencies]

npmpkgjsn'description:
"description": "HTTP Hawk Authentication Scheme",
===
Put a description in it. It's a string. This helps people discover your package, as it's listed in npm search.

npmpkgjsn'devDependencies:
"devDependencies": {
"lab": "0.0.x",
"complexity-report": "0.x.x"
},

npmpkgjsn'dist:
"dist": {
"shasum": "e40f98139beca93f25615708f8a13f4c20f20178"
},

npmpkgjsn'engines:
"engines": {
"node": "0.8.x"
},

npmpkgjsn'keywords:
"keywords": [
"http",
"authentication",
"scheme",
"hawk"
],
===
Put keywords in it. It's an array of strings. This helps people discover your package as it's listed in npm search.

npmpkgjsn'licenses:
"licenses": [
{
"type": "BSD",
"url": "http://github.com/hueniverse/hawk/raw/master/LICENSE"
}
],

npmpkgjsn'main:
"main": "index",
===
The main field is a module ID that is the primary entry point to your program. That is, if your package is named foo, and a user installs it, and then does require("foo"), then your main module's exports object will be returned.

This should be a module ID relative to the root of your package folder.

For most modules, it makes the most sense to have a main script and often not much else.

npmpkgjsn'preferGlobal:
add preferGlobal and set it to true, which means if someone installs this module through npm and doesn’t use the --global option, they will be warned that the module is designed to be installed globally.
[http://javascriptplayground.com/blog/2015/03/node-command-line-tool/]

npmpkgjsn'readme:
"readme": "![hawk Logo](https://raw.github.com/hueniverse/ ...\r\n\r\nThe **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com).\r\n",

npmpkgjsn'readmeFilename:
"readmeFilename": "README.md",

npmpkgjsn'repository:
"repository": {
"type": "git",
"url": "git://github.com/hueniverse/hawk"
},
===
"repository": {
"type": "git",
"url": "git://github.com/brentertz/scapegoat.git"
},
===
IF we clone a-git-repository, in that directory, 'npm init' creates this-repository-object.

npmpkgjsn'resolved:
"_resolved": "https://registry.npmjs.org/hawk/-/hawk-0.10.2.tgz"

npmpkgjsn'scripts:
"scripts": {
"test": "make test-cov"
},

npm'Resource

name::
* McsEngl.npm'Resource@cptIt,

_ADDRESS.WPG:
* https://docs.npmjs.com/cli/npm/
* https://docs.npmjs.com//
* https://npmjs.org//
* http://blog.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool//
* https://www.sitepoint.com/yarn-vs-npm//
* http://jarredkenny.com/blog/your_own_private_npm_registry_using_sinopia,
* https://github.com/joyent/node/wiki/modules, (deprecated)
* https://nodejsmodules.org//
* http://nodetoolbox.com//
* http://eirikb.github.io/nipster// 37,093 entries

npm'Upgrading

name::
* McsEngl.npm'Upgrading@cptIt,
* McsEngl.npm'updating@cptIt,

_DESCRIPTION:
To upgrade, run:
> [sudo] npm install npm@latest -g

npm.EVOLUTING

name::
* McsEngl.npm.EVOLUTING@cptIt,

{time.2017-05-31}
=== version5:
announcing npm@5
Isaac Schlueter <isaacs@npmjs.com>
6:03 PM (1 hour ago)

Starting today, typing `npm install npm@latest -g` will update you to npm version 5.0.1.

npm@5 is all new and packed with performance, reliability, and usability improvements we know you’ll love. These include a new approach to lockfiles, more robust caching, and incredible speed — for many common tasks, npm@5 is up to 5x faster than previous versions.

The update is available now and we recommend it for everyone. Whether you’re finding open source packages on the npm Registry, organizing your team’s code with Orgs, or installing apps behind your firewall with npm Enterprise, npm@5 will make it faster and easier than ever to build amazing things.

You can learn more about npm@5 here. After you’ve installed it, we hope you’ll let us know what you think, and if you run into trouble, just drop us a line.


npm ? you

Isaac Z. Schlueter, CEO
and the wombats of npm, Inc.


npm, Inc.
1999 Harrison Street, Suite 1150, Oakland, CA 94612

VERSION
\ljn>npm -v
3.9.5
===
1.3.22
[https://npmjs.org/doc/cli/npm.html] {2013-12-30}

npmpkg'Package.json#ql:npmpkgjsn#

name::
* McsEngl.npmpkg'Package.json@cptIt,

npmpkg'Packages-depended-on-pkg (dependents)

name::
* McsEngl.npmpkg'Packages-depended-on-pkg (dependents)@cptIt,

_ADDRESS.WPG:
* https://www.npmjs.com/browse/depended/pkg/

npmpkg'Packages-needed-in-pkg (dependencies)

name::
* McsEngl.npmpkg'Packages-needed-in-pkg (dependencies)@cptIt,
* McsEngl.npm'dependency@cptIt,

_DESCRIPTION:
Know Your npm
Many Node and event front-end developers know that there is --save (for npm install) which will not only install a module but create an entry in package.json with the version of the module. Well, there’s also --save-dev, for devDependencies (stuff you don’t need in production). But did you know you can just use -S and -D instead of --save and --save-dev? Yes, you can.

And while you’re in the module installation mode, go ahead and remove those ^ signs which -S and -D will create for you. They are dangerous because they’ll allow npm install (or its shortcut npm i) to pull the latest minor (second digit in the semantic versioning) version from npm. For example, v6.1.0 to v6.2.0 is a minor release.

npm team believes in semver, but you should not. What I mean is that they put caret ^ because they trust open source developers to not introduce breaking changes in minor releases. No one sane should trust it. Lock your versions. Even better, use shrinkwrap: npm shrinkwrap which will create a new file with exact versions of dependencies of dependencies.
[https://www.sitepoint.com/10-tips-to-become-a-better-node-developer/]

npmpkg'Resource

name::
* McsEngl.npmpkg'Resource@cptIt,

_ADDRESS.WPG:
* https://medium.com/@jdaudier/how-to-create-and-publish-your-first-node-js-module-444e7585b738#.ink074gml,
* https://quickleft.com/blog/creating-and-publishing-a-node-js-module//

npmpkg'RunKit

name::
* McsEngl.npmpkg'RunKit@cptIt,

_DESCRIPTION:
RunKit notebooks completely remove the friction of trying new ideas. With one click you'll have a sandboxed JavaScript environment where you can instantly switch node versions, use every npm module without having to wait to install it, and even visualize your results. No more configuration, just straight to coding.
[https://runkit.com/home]

SPECIFIC

name::
* McsEngl.npmpkg.specific@cptIt,
* McsEngl.ljnpkg.specific@cptIt,

npmpkg.GENERIC

name::
* McsEngl.npmpkg.GENERIC@cptIt,

_SPECIFIC:
* bundler-package##
* ftp-package##
* global-package##
* ljs-tool-package##
* markdown-package##

npmpkg.BUNDLER

name::
* McsEngl.npmpkg.BUNDLER@cptIt,
* McsEngl.npmpkg.bundler@cptIt,
* McsEngl.bundler-npmpkg@cptIt,

_DESCRIPTION:
We recommend using React from npm with a bundler like browserify or webpack.
[https://facebook.github.io/react/downloads.html]

_SPECIFIC:
* browserify#ql:browserify@cptIt#
* lasso, https://github.com/lasso-js/lasso,
* rollup, https://code.lengstorf.com/learn-rollup-js//
* webpack,

npmpkg.amdlc

name::
* McsEngl.npmpkg.amdlc@cptIt,
* McsEngl.ljnm.amdlc@cptIt,
* McsEngl.npmpkg.amdlc@cptIt,
* McsEngl.amdld@cptIt,
* McsEngl.ljn'amdlc-module@cptIt,

_DESCRIPTION:
amdlc
This is a Node.js AMD Library Compiler. It enables you to write code in an the AMD style and compile the modules into a standalone library file with all public modules exposed into the global namespace this is the opposite to application specific AMD module loaders like RequireJS.
When compiling AMD projects using this compileer you get three files: Inline minified file using Uglify-js Inline source file * Development file that loads the modules synchronous (debug)
[https://npmjs.org/package/amdlc]

_USE:
* tinyMCE,

npmpkg.FTP

name::
* McsEngl.npmpkg.FTP@cptIt,

_ADDRESS.WPG:
* https://github.com/mscdex/ssh2/
* https://github.com/rasshofer/sftploy//
* https://www.npmjs.com/package/scp2/

npmpkg.HTML-PROCESSING

name::
* McsEngl.npmpkg.HTML-PROCESSING@cptIt,

npmpkg.jsdom

name::
* McsEngl.npmpkg.jsdom@cptIt,
* McsEngl.ljnm.jsdom@cptIt,
* McsEngl.npmpkg.jsdom@cptIt,
* McsEngl.ljsdom@cptIt,
* McsEngl.ljn'jsdom-module@cptIt,

_DESCRIPTION:
A JavaScript implementation of the DOM and HTML standards
Install
$ npm install jsdom
[https://www.npmjs.com/package/jsdom]

_ADDRESS.WPG:
* Transforming HTML with Node.js and jQuery: http://www.2ality.com/2012/02/jsdom.html,

npmpkg.json-to-html

name::
* McsEngl.npmpkg.json-to-html@cptIt,
* McsEngl.ljnm.json-to-html@cptIt,
* McsEngl.npmpkg.json-to-html@cptIt,

* https://github.com/frozzare/json-to-html:

markdown-to-html

* https://github.com/vanetix/artificer:
A simple directory based static site generator
A command line static site generator.
Installation
> npm install -g artificer
Usage
> artificer ./docs ./www
[https://github.com/vanetix/artificer]

npmpkg.GLOBAL

name::
* McsEngl.npmpkg.GLOBAL@cptIt,

_SPECIFIC:
* INSTALLED:
* ember-cli@2.8.0
* eslint@3.4.0

npmpkg.LJS-TOOL

name::
* McsEngl.npmpkg.LJS-TOOL@cptIt,

_SPECIFIC:
* doctrine-jsdoc-parser#ql:ljnm.doctrine#

npmpkg.MARKDOWN#ql:ljsalgo.markdown#

name::
* McsEngl.npmpkg.MARKDOWN@cptIt,

npmpkg.PDF-MANAGING

name::
* McsEngl.npmpkg.PDF-MANAGING@cptIt,

npmpkg.pdfkit

name::
* McsEngl.npmpkg.pdfkit@cptIt,
* McsEngl.ljnm.pdfkit@cptIt,
* McsEngl.ljn'PDFKit-module@cptIt,

_DESCRIPTION:
PDFKit
A PDF generation library for Node.js.
Description
PDFKit is a PDF document generation library for Node that makes creating complex, multi-page, printable documents easy. It is written in pure CoffeeScript, but you can choose to use the API in plain 'ol JavaScript if you like. The API embraces chainability, and includes both low level functions as well as abstractions for higher level functionality. The PDFKit API is designed to be simple, so generating complex documents is often as simple as a few function calls. Check out some of the documentation and examples to see for yourself!
[https://github.com/devongovett/pdfkit]
* https://www.npmjs.com/package/pdfkit,

npmpkg.STREAMING

name::
* McsEngl.npmpkg.STREAMING@cptIt,
* McsEngl.npmpkg.streaming@cptIt,

npmpkg.stream-array-function

name::
* McsEngl.npmpkg.stream-array-function@cptIt,
* McsEngl.ljnm.stream-array@cptIt,
* McsEngl.npmpkg.stream-array@cptIt,

_DESCRIPTION:
stream-array
Pipe an Array through Node.js streams
Pipe an Array through Node.js Streams. This is rather useful for testing other streams.
[https://www.npmjs.com/package/stream-array]

_DESCRIPTION:
The result of require is a 'function()' that when invoked, will return a Readable Stream.
var streamify = require('stream-array');
The source array can contain any type as it is assumed that the receiving stream can handle it. Each element in the array will be pushed into the piped stream, without modifying the source array.

var readable = streamify(['Hello', new Buffer('World')]);
This Stream will push each element of the source array into the piped array.

readable(['1', '2', '3', os.EOL]).pipe(process.stdout);
123\n
[https://www.npmjs.com/package/stream-array]

_CODE.NODEJS:
mfStream_array(output).pipe(moVinyl_fs#ql:ljnm.vinyl_fs#.dest(argv.output));

npmpkg.TIME

name::
* McsEngl.npmpkg.TIME@cptIt,

npmpkg.timeago

name::
* McsEngl.npmpkg.timeago@cptIt,

_ADDRESS.WPG:
* http://timeago.org//
* http://github.com/hustcc/timeago.js,

_INSTALLATION:
npm install timeago.js
Load timeago.js library file with script tag:
<script src="dist/timeago.js" type="text/javascript"></script>
Or you can use ES6 style:
import timeago from 'timeago.js';
// or
var timeago = require("timeago.js");
[http://timeago.org//]

npmpkg.UTIL

name::
* McsEngl.npmpkg.UTIL@cptIt,
* McsEngl.npmpkg.util@cptIt,

npmpkg.debounce-function

name::
* McsEngl.npmpkg.debounce-function@cptIt,
* McsEngl.ljnm.debounce@cptIt,
* McsEngl.npmpkg.debounce@cptIt,
* McsEngl.ljnm.debounce@cptIt,
* McsEngl.npmpkg.debounce@cptIt,

_DESCRIPTION:
debounce
Creates and returns a new debounced version of the passed function that will postpone its execution until after wait milliseconds have elapsed since the last time it was invoked
Useful for implementing behavior that should only happen after a repeated action has completed.
[https://www.npmjs.com/package/debounce]

_CODE.NODEJS:
mfDebounce(fBuild, 300)

npmpkg.extend-function

name::
* McsEngl.npmpkg.extend-function@cptIt,
* McsEngl.ljnm.extend@cptIt,
* McsEngl.npmpkg.extend@cptIt,

_DESCRIPTION:
extend
Port of jQuery.extend for node.js and the browser

node-extend is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true.

Installation
This package is available on npm as: extend
npm install extend

Usage
Syntax: extend ( [deep], target, object1, [objectN] )

Extend one object with one or more others, returning the modified object.

Keep in mind that the target object will be modified, and will be returned from extend().

If a boolean true is specified as the first argument, extend performs a deep copy, recursively copying any objects it finds. Otherwise, the copy will share structure with the original object(s). Undefined properties are not copied. However, properties inherited from the object's prototype will be copied over. Warning: passing false as the first argument is not supported.

Arguments
deep  Boolean (optional) If set, the merge becomes recursive (i.e. deep copy).
target  Object The object to extend.
object1  Object The object that will be merged into the first.
objectN  Object (Optional) More objects to merge into the first.
[https://www.npmjs.com/package/extend]

_CODE.NODEJS:
mfExtend({}, o1, o2);

npmpkg.lodash-function

name::
* McsEngl.npmpkg.lodash-function@cptIt,
* McsEngl.ljnm.lodash@cptIt,
* McsEngl.mfLodash@cptIt,
* McsEngl.npmpkg.lodash@cptIt,

_DESCRIPTION:
Lodash
A modern JavaScript utility library delivering modularity, performance & extras.
[https://lodash.com/]
===
Lodash modular utilities.
The Lodash library exported as Node.js modules.
[https://www.npmjs.com/package/lodash]

_MEMBER:
Array
mfLodash.chunk
mfLodash.compact
mfLodash.concat
mfLodash.difference
mfLodash.differenceBy
mfLodash.differenceWith
mfLodash.drop
mfLodash.dropRight
mfLodash.dropRightWhile
mfLodash.dropWhile
mfLodash.fill
mfLodash.findIndex
mfLodash.findLastIndex
mfLodash.first -> head
mfLodash.flatten
mfLodash.flattenDeep
mfLodash.flattenDepth
mfLodash.fromPairs
mfLodash.head
mfLodash.indexOf
mfLodash.initial
mfLodash.intersection
mfLodash.intersectionBy
mfLodash.intersectionWith
mfLodash.join
mfLodash.last
mfLodash.lastIndexOf
mfLodash.nth
mfLodash.pull
mfLodash.pullAll
mfLodash.pullAllBy
mfLodash.pullAllWith
mfLodash.pullAt
mfLodash.remove
mfLodash.reverse
mfLodash.slice
mfLodash.sortedIndex
mfLodash.sortedIndexBy
mfLodash.sortedIndexOf
mfLodash.sortedLastIndex
mfLodash.sortedLastIndexBy
mfLodash.sortedLastIndexOf
mfLodash.sortedUniq
mfLodash.sortedUniqBy
mfLodash.tail
mfLodash.take
mfLodash.takeRight
mfLodash.takeRightWhile
mfLodash.takeWhile
mfLodash.union
mfLodash.unionBy
mfLodash.unionWith
mfLodash.uniq
mfLodash.uniqBy
mfLodash.uniqWith
mfLodash.unzip
mfLodash.unzipWith
mfLodash.without
mfLodash.xor
mfLodash.xorBy
mfLodash.xorWith
mfLodash.zip
mfLodash.zipObject
mfLodash.zipObjectDeep
mfLodash.zipWith
Collection
mfLodash.countBy
mfLodash.each -> forEach
mfLodash.eachRight -> forEachRight
mfLodash.every
mfLodash.filter
mfLodash.find
mfLodash.findLast
mfLodash.flatMap: Creates a flattened array of values by running each element in collection thru iteratee and flattening the mapped results. The iteratee is invoked with three arguments: (value, index|key, collection). [https://lodash.com/docs/4.17.2#flatMap]
mfLodash.flatMapDeep
mfLodash.flatMapDepth
mfLodash.forEach
mfLodash.forEachRight
mfLodash.groupBy
mfLodash.includes
mfLodash.invokeMap
mfLodash.keyBy
mfLodash.map
mfLodash.orderBy
mfLodash.partition
mfLodash.reduce
mfLodash.reduceRight
mfLodash.reject
mfLodash.sample
mfLodash.sampleSize
mfLodash.shuffle
mfLodash.size
mfLodash.some
mfLodash.sortBy
Date
mfLodash.now
Function
mfLodash.after
mfLodash.ary
mfLodash.before
mfLodash.bind
mfLodash.bindKey
mfLodash.curry
mfLodash.curryRight
mfLodash.debounce
mfLodash.defer
mfLodash.delay
mfLodash.flip
mfLodash.memoize
mfLodash.negate
mfLodash.once
mfLodash.overArgs
mfLodash.partial
mfLodash.partialRight
mfLodash.rearg
mfLodash.rest
mfLodash.spread
mfLodash.throttle
mfLodash.unary
mfLodash.wrap
Lang
mfLodash.castArray
mfLodash.clone
mfLodash.cloneDeep
mfLodash.cloneDeepWith
mfLodash.cloneWith
mfLodash.conformsTo
mfLodash.eq
mfLodash.gt
mfLodash.gte
mfLodash.isArguments
mfLodash.isArray
mfLodash.isArrayBuffer
mfLodash.isArrayLike
mfLodash.isArrayLikeObject
mfLodash.isBoolean
mfLodash.isBuffer
mfLodash.isDate
mfLodash.isElement
mfLodash.isEmpty
mfLodash.isEqual
mfLodash.isEqualWith
mfLodash.isError
mfLodash.isFinite
mfLodash.isFunction
mfLodash.isInteger
mfLodash.isLength
mfLodash.isMap
mfLodash.isMatch
mfLodash.isMatchWith
mfLodash.isNaN
mfLodash.isNative
mfLodash.isNil
mfLodash.isNull
mfLodash.isNumber
mfLodash.isObject
mfLodash.isObjectLike
mfLodash.isPlainObject
mfLodash.isRegExp
mfLodash.isSafeInteger
mfLodash.isSet
mfLodash.isString
mfLodash.isSymbol
mfLodash.isTypedArray
mfLodash.isUndefined
mfLodash.isWeakMap
mfLodash.isWeakSet
mfLodash.lt
mfLodash.lte
mfLodash.toArray
mfLodash.toFinite
mfLodash.toInteger
mfLodash.toLength
mfLodash.toNumber
mfLodash.toPlainObject
mfLodash.toSafeInteger
mfLodash.toString
Math
mfLodash.add
mfLodash.ceil
mfLodash.divide
mfLodash.floor
mfLodash.max
mfLodash.maxBy
mfLodash.mean
mfLodash.meanBy
mfLodash.min
mfLodash.minBy
mfLodash.multiply
mfLodash.round
mfLodash.subtract
mfLodash.sum
mfLodash.sumBy
Number
mfLodash.clamp
mfLodash.inRange
mfLodash.random
Object
mfLodash.assign
mfLodash.assignIn
mfLodash.assignInWith
mfLodash.assignWith
mfLodash.at
mfLodash.create
mfLodash.defaults
mfLodash.defaultsDeep
mfLodash.entries -> toPairs
mfLodash.entriesIn -> toPairsIn
mfLodash.extend -> assignIn
mfLodash.extendWith -> assignInWith
mfLodash.findKey
mfLodash.findLastKey
mfLodash.forIn
mfLodash.forInRight
mfLodash.forOwn
mfLodash.forOwnRight
mfLodash.functions
mfLodash.functionsIn
mfLodash.get
mfLodash.has
mfLodash.hasIn
mfLodash.invert
mfLodash.invertBy
mfLodash.invoke
mfLodash.keys
mfLodash.keysIn
mfLodash.mapKeys
mfLodash.mapValues
mfLodash.merge
mfLodash.mergeWith
mfLodash.omit
mfLodash.omitBy
mfLodash.pick
mfLodash.pickBy
mfLodash.result
mfLodash.set
mfLodash.setWith
mfLodash.toPairs
mfLodash.toPairsIn
mfLodash.transform
mfLodash.unset
mfLodash.update
mfLodash.updateWith
mfLodash.values
mfLodash.valuesIn
Seq
_
mfLodash.chain
mfLodash.tap
mfLodash.thru
mfLodash.prototype[Symbol.iterator]
mfLodash.prototype.at
mfLodash.prototype.chain
mfLodash.prototype.commit
mfLodash.prototype.next
mfLodash.prototype.plant
mfLodash.prototype.reverse
mfLodash.prototype.toJSON -> value
mfLodash.prototype.value
mfLodash.prototype.valueOf -> value
String
mfLodash.camelCase
mfLodash.capitalize
mfLodash.deburr
mfLodash.endsWith
mfLodash.escape
mfLodash.escapeRegExp
mfLodash.kebabCase
mfLodash.lowerCase
mfLodash.lowerFirst
mfLodash.pad
mfLodash.padEnd
mfLodash.padStart
mfLodash.parseInt
mfLodash.repeat
mfLodash.replace
mfLodash.snakeCase
mfLodash.split
mfLodash.startCase
mfLodash.startsWith
mfLodash.template
mfLodash.toLower
mfLodash.toUpper
mfLodash.trim
mfLodash.trimEnd
mfLodash.trimStart
mfLodash.truncate
mfLodash.unescape
mfLodash.upperCase
mfLodash.upperFirst
mfLodash.words
Util
mfLodash.attempt
mfLodash.bindAll
mfLodash.cond
mfLodash.conforms
mfLodash.constant
mfLodash.defaultTo
mfLodash.flow
mfLodash.flowRight
mfLodash.identity
mfLodash.iteratee
mfLodash.matches
mfLodash.matchesProperty
mfLodash.method
mfLodash.methodOf
mfLodash.mixin
mfLodash.noConflict
mfLodash.noop
mfLodash.nthArg
mfLodash.over
mfLodash.overEvery
mfLodash.overSome
mfLodash.property
mfLodash.propertyOf
mfLodash.range
mfLodash.rangeRight
mfLodash.runInContext
mfLodash.stubArray
mfLodash.stubFalse
mfLodash.stubObject
mfLodash.stubString
mfLodash.stubTrue
mfLodash.times
mfLodash.toPath
mfLodash.uniqueId
Properties
mfLodash.VERSION
mfLodash.templateSettings
mfLodash.templateSettings.escape
mfLodash.templateSettings.evaluate
mfLodash.templateSettings.imports
mfLodash.templateSettings.interpolate
mfLodash.templateSettings.variable
Methods
mfLodash.templateSettings.imports._
[https://lodash.com/docs/4.17.2#size]

npmpkg.moxie-zip

name::
* McsEngl.npmpkg.moxie-zip@cptIt,
* McsEngl.ljn'moxie-zip-module@cptIt,

_DESCRIPTION:
moxie-zip
This is another zip library for node js. We decided to write our own since we had issues with the current once that exists.

It's a very simple library:

var ZipWriter = require("moxie-zip").ZipWriter;
var zip = new ZipWriter();

zip.addFile("myfile.txt", "./myfile.txt");
zip.addData("myfile.txt", "Hello world!");
zip.addDir("mydir");

zip.toBuffer(function(buf) {
});

zip.saveAs("my.zip", function() {
console.log("zip written.");
});
[https://npmjs.org/package/moxie-zip]

npmpkg.XML-PROCESSING

name::
* McsEngl.npmpkg.XML-PROCESSING@cptIt,
* McsEngl.ljn'xml-processing@cptIt,

_ADDRESS.WPG:
* http://www.rackspace.com/blog/node-elementtree-node-js-library-to-build-and-parse-xml-documents//

_SPECIFIC:
* elementtree,

===
npmpkg.angular

name::
* McsEngl.npmpkg.angular@cptIt,
* McsEngl.npmpkg.angular@cptIt,
* McsEngl.ljnm.angular@cptIt,
* McsEngl.angularJS@cptIt,
* McsEngl.angular-npmpkg@cptIt,

_DESCRIPTION:
What Is Angular?
AngularJS is a structural framework for dynamic web apps. It lets you use HTML as your template language and lets you extend HTML's syntax to express your application's components clearly and succinctly. Angular's data binding and dependency injection eliminate much of the code you would otherwise have to write. And it all happens within the browser, making it an ideal partner with any server technology.

Angular is what HTML would have been, had it been designed for applications. HTML is a great declarative language for static documents. It does not contain much in the way of creating applications, and as a result building web applications is an exercise in what do I have to do to trick the browser into doing what I want?

The impedance mismatch between dynamic applications and static documents is often solved with:

a library - a collection of functions which are useful when writing web apps. Your code is in charge and it calls into the library when it sees fit. E.g., jQuery.
frameworks - a particular implementation of a web application, where your code fills in the details. The framework is in charge and it calls into your code when it needs something app specific. E.g., durandal, ember, etc.
Angular takes another approach. It attempts to minimize the impedance mismatch between document centric HTML and what an application needs by creating new HTML constructs. Angular teaches the browser new syntax through a construct we call directives. Examples include:

Data binding, as in {{}}.
DOM control structures for repeating, showing and hiding DOM fragments.
Support for forms and form validation.
Attaching new behavior to DOM elements, such as DOM event handling.
Grouping of HTML into reusable components.
[https://docs.angularjs.org/guide/introduction]

npmpkg.asar

name::
* McsEngl.npmpkg.asar@cptIt,
* McsEngl.asar-npmpkg@cptIt,

_DESCRIPTION:
asar
Creating Electron app packages
Asar is a simple extensive archive format, it works like tar that concatenates all files together without compression, while having random access support.
Features
Support random access
Use JSON to store files' information
Very easy to write a parser
[https://www.npmjs.com/package/asar]

_ADDRESS.WPG:
* https://github.com/electron/asar,

npmpkg.browserify#ql:browserify@cptIt#

name::
* McsEngl.npmpkg.browserify@cptIt,

npmpkg.chalk-object

name::
* McsEngl.npmpkg.chalk-object@cptIt,
* McsEngl.ljnm.chalk@cptIt,

_DESCRIPTION:
Terminal string styling done right. Much color.
[https://www.npmjs.com/package/chalk]

_API:
> Object.getOwnPropertyNames(ljnmdl).sort()
enabled, hasColor, stripColor, styles, supportsColor
> proto:
bgBlack, bgBlue, bgCyan, bgGreen, bgMagenta, bgRed, bgWhite, bgYellow, black, blue, bold, constructor, cyan, dim, gray, green, grey, hidden, inverse, italic, magenta, red, reset, strikethrough, underline, white, yellow

_CODE:
process.stderr.write(moChalk.red('Failed to read file ' + filename));

npmpkg.coverjs

name::
* McsEngl.npmpkg.coverjs@cptIt,
* McsEngl.ljnpkg.coverjs@cptIt,
* McsEngl.ljn'coverjs-module@cptIt,

_DESCRIPTION:
CoverJS (alpha)
Make sure all your code is tested, don't miss anything. CoverJS intruments your code. Using the instrumented code with your tests will result in a nice object, which can be passed through one of the reporters to create a nice graphical output of your code.
Instead of instrumenting lines (like JSCoverage), CoverJS will instrument statements, which should result in a more precise result.
[https://npmjs.org/package/coverjs]

npmpkg.delivery.js

name::
* McsEngl.npmpkg.delivery.js@cptIt,
* McsEngl.ljnm.delivery.js@cptIt,
* McsEngl.delivery.js-nodejs@cptIt,

_DESCRIPTION:
Bidirectional File Transfers For Node.js via Socket.IO
Sending files to the server, and pushing files to the client should be as easy as possible. Delivery.js uses Node.js and Socket.IO to make it easy to push files to the client, or send them to the server. Files can be pushed to the client as text (utf8) or base64 (for images and binary files).
[https://github.com/liamks/Delivery.js]

npmpkg.ember

name::
* McsEngl.npmpkg.ember@cptIt,
* McsEngl.emberJS@cptIt,
* McsEngl.Ember-npmpkg@cptIt,

emberjs'Resource

name::
* McsEngl.emberjs'Resource@cptIt,

_ADDRESS.WPG:
* https://ember-cli.com//

npmpkg.express

name::
* McsEngl.npmpkg.express@cptIt,
* McsEngl.ljnm.express@cptIt,
* McsEngl.express.nodejs@cptIt,
* McsEngl.expressjs@cptIt,
* McsEngl.ljn'express@cptIt,

_DESCRIPTION:
A simpler, Sinatra style framework is Express which has been around since June 2009, and is still regularly updated.
[http://dailyjs.com/2010/11/01/node-tutorial/]
===
Web Applications
Express is a minimal and flexible node.js web application framework, providing a robust set of features for building single and multi-page, and hybrid web applications.
[http://expressjs.com/]

_CODE.LJN:
var express = require('express');
var app = express();

app.get('/', function(req, res){
res.send('hello world');
});

app.listen(3333);
---
http://localhost:3333
[http://expressjs.com/guide.html]

jsexpress'archetype

name::
* McsEngl.jsexpress'archetype@cptIt,

jsexpress'archetype.SERVER

name::
* McsEngl.jsexpress'archetype.SERVER@cptIt,

_DESCRIPTION:
Doing Something Useful - Express
Express is a framework that makes creating most normal websites very simple. The first thing you have to do it install it. Along with the node command you also have access to a command called "npm". This tool gives you access to an enormous collection of modules created by the community, and one of them is Express.

$ cd /my/app/location
$ npm install express
When you install a module, it will put it in a node_modules folder inside your application directory. You can now require it like any built-in module. Let's create a basic static file server using Express.

my_static_file_server.js

var express = require('express'),
app = express();

app.use(express.static(__dirname + '/public'));

app.listen(8080);
$ node my_static_file_server.js
You now have a pretty capable static file server. Anything you put in the /public folder can now be requested by your browser and displayed. HTML, images, almost anything. So for example, if you put an image called "my_image.png" inside the public folder, you can access it using your browser by going to http://localhost:8080/my_image.png. Of course Express has many many more features, but you can look those up as you continue developing.
[http://blog.modulus.io/absolute-beginners-guide-to-nodejs]

jsexpress'code'API

name::
* McsEngl.jsexpress'code'API@cptIt,

_ADDRESS.WPG:
* http://expressjs.com/api.html,

jsexpress'resource

name::
* McsEngl.jsexpress'resource@cptIt,

_ADDRESS.WPG:
* http://expressjs.com/api.html,
* https://github.com/visionmedia/express/tree/master/examples,

npmpkg.gitbook-cli

name::
* McsEngl.npmpkg.gitbook-cli@cptIt,

_DESCRIPTION:
* http://toolchain.gitbook.com/setup.html,

npmpkg.glob

name::
* McsEngl.npmpkg.glob@cptIt,
* McsEngl.npmpkg.glob@cptIt,

_DESCRIPTION:
glob
a little globber
Match files using the patterns the shell uses, like stars and stuff.
[https://www.npmjs.com/package/glob]

npmpkg.glob-function

name::
* McsEngl.npmpkg.glob-function@cptIt,
* McsEngl.ljnm.glob@cptIt,
* McsEngl.ljn'glob-module@cptIt,
* McsEngl.ljnm.glob@cptIt,
* McsEngl.npmpkg.glob@cptIt,

_DESCRIPTION:
Glob
Match files using the patterns the shell uses, like stars and stuff.

This is a glob implementation in JavaScript. It uses the minimatch library to do its matching.

Attention: node-glob users!

The API has changed dramatically between 2.x and 3.x. This library is now 100% JavaScript, and the integer flags have been replaced with an options object.

Also, there's an event emitter class, proper tests, and all the other things you've come to expect from node modules.

And best of all, no compilation!
[https://npmjs.org/package/glob]

_MEMBER:
function
[ 'Glob',
'GlobSync',
'arguments',
'caller',
'glob',
'hasMagic',
'length',
'name',
'prototype',
'sync' ]

_CODE.LJN:
mfGlob.sync(moPath.join(__dirname, 'fixture/bad', '*.input.js')).forEach(function (file) {

npmpkg.json-schema

name::
* McsEngl.npmpkg.json-schema@cptIt,
* McsEngl.npmpkg.json-schema@cptIt,

_DESCRIPTION:
json-schema
JSON Schema validation and specifications
JSON Schema is a repository for the JSON Schema specification, reference schemas and a CommonJS implementation of JSON Schema (not the only JavaScript implementation of JSON Schema, JSV is another excellent JavaScript validator).

Code is licensed under the AFL or BSD license as part of the Persevere project which is administered under the Dojo foundation, and all contributions require a Dojo CLA.
[https://www.npmjs.com/package/json-schema]

npmpkg.mock-fs

name::
* McsEngl.npmpkg.mock-fs@cptIt,
* McsEngl.npmpkg.mock-fs@cptIt,

_DESCRIPTION:
mock-fs
A configurable mock file system. You know, for testing.
The mock-fs module allows Node's built-in fs module to be backed temporarily by an in-memory, mock file system. This lets you run tests against a set of mock files and directories instead of lugging around a bunch of test fixtures.
[https://www.npmjs.com/package/mock-fs]

npmpkg.moment

name::
* McsEngl.npmpkg.moment@cptIt,
* McsEngl.ljn'moment-module@cptIt,
* McsEngl.ljnm.moment@cptIt,
* McsEngl.npmpkg.moment@cptIt,
* McsEngl.momentjs@cptIt,

_DESCRIPTION:
A lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates.
[https://www.npmjs.com/package/moment]
===
Moment.js2.6.0
A javascript date library for parsing, validating, manipulating, and formatting dates.
[http://momentjs.com/]

npmpkg.npmvet

name::
* McsEngl.npmpkg.npmvet@cptIt,
* McsEngl.ljnm.npmvet@cptIt,
* McsEngl.npmpkg.npmvet@cptIt,

_DESCRIPTION:
One way to check which version of a package has been installed is to read the version from node_modules/{package name}/package.json. If you have multiple packages, or want to automate your CI builds to check for you, you can use NPM Vet to make this process much, much easier.
[https://harksys.com/labs/npm-vet-a-simple-cli-tool-for-checking-npm-package-versions//]

npmpkg.pug

name::
* McsEngl.npmpkg.pug@cptIt,
* McsEngl.ljnm.jade@cptIt,
* McsEngl.ljnm.pug@cptIt,
* McsEngl.jade@cptIt,
* McsEngl.ljn'jade-module@cptIt,

_ADDRESS.WPG:
* http://jade-lang.com//

_DESCRIPTION:
Due to a trademark issue, the project name has been changed from “Jade” to “Pug” in conjunction with the release of Pug 2. This also means that we have changed the official supported file extension from .jade to .pug. Although .jade is still supported, it is deprecated, and all users are encouraged to transition to .pug immediately.
[https://pugjs.org/api/migration-v2.html]
===
Jade is a high performance template engine heavily influenced by Haml and implemented with JavaScript for node.
[https://www.npmjs.org/package/jade]

npmpkg.React

name::
* McsEngl.npmpkg.React@cptIt,
* McsEngl.react-npmpkg@cptIt,

_ADDRESS.WPG:
* https://github.com/brillout/awesome-react-components,

npmpkg.semver-function

name::
* McsEngl.npmpkg.semver-function@cptIt,
* McsEngl.ljnm.semver@cptIt,
* McsEngl.npmpkg.semver@cptIt,
* McsEngl.mfSemver@cptIt,

_DESCRIPTION:
$ npm install semver

semver.valid('1.2.3') // '1.2.3'
semver.valid('a.b.c') // null
semver.clean(' =v1.2.3 ') // '1.2.3'
semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
semver.gt('1.2.3', '9.8.7') // false
semver.lt('1.2.3', '9.8.7') // true
Versions
A "version" is described by the v2.0.0 specification found at http://semver.org/.
A leading "=" or "v" character is stripped off and ignored.
[https://docs.npmjs.com/misc/semver]

_API:
// member
[ 'Comparator',
'Range',
'SEMVER_SPEC_VERSION',
'SemVer',
'arguments',
'caller',
'clean',
'cmp',
'compare',
'compareIdentifiers',
'compareLoose',
'diff',
'eq',
'gt',
'gte',
'gtr',
'inc',
'length',
'lt',
'lte',
'ltr',
'major',
'maxSatisfying',
'minSatisfying',
'minor',
'name',
'neq',
'outside',
'parse',
'patch',
'prerelease',
'prototype',
'rcompare',
'rcompareIdentifiers',
're',
'rsort',
'satisfies',
'sort',
'src',
'toComparators',
'valid',
'validRange' ]

npmpkg.standard-changelog

name::
* McsEngl.npmpkg.standard-changelog@cptIt,
* McsEngl.ljnm.standard-changelog@cptIt,
* McsEngl.npmpkg.standard-changelog@cptIt,

_DESCRIPTION:
Generate a changelog from git metadata with Angular commit convention

Usage
standard-changelog

Example
standard-changelog -i CHANGELOG.md --overwrite

Options
-i, --infile Read the CHANGELOG from this file
-o, --outfile Write the CHANGELOG to this file. If unspecified, it prints to stdout
-w, --overwrite Overwrite the infile
-p, --preset Name of the preset you want to use
-k, --pkg A filepath of where your package.json is located
-a, --append Should the generated block be appended
-r, --release-count How many releases to be generated from the latest
-v, --verbose Verbose output
-c, --context A filepath of a json that is used to define template variables

_ADDRESS.WPG:
* https://www.npmjs.com/package/standard-changelog,

npmpkg.tmp

name::
* McsEngl.npmpkg.tmp@cptIt,
* McsEngl.ljnm.tmp@cptIt,
* McsEngl.npmpkg.tmp@cptIt,

_DESCRIPTION:
This is a widely used library to create temporary files and directories in a node.js environment.

Tmp offers both an asynchronous and a synchronous API. For all API calls, all the parameters are optional.

Tmp uses crypto for determining random file names, or, when using templates, a six letter random identifier. And just in case that you do not have that much entropy left on your system, Tmp will fall back to pseudo random numbers.

You can set whether you want to remove the temporary file on process exit or not, and the destination directory can also be set.
[https://www.npmjs.com/package/tmp]

_REPO:
* https://github.com/raszi/node-tmp/

npmpkg.when-dom-ready-function

name::
* McsEngl.npmpkg.when-dom-ready-function@cptIt,
* McsEngl.ljnm.when-dom-ready@cptIt,

_DESCRIPTION:
$(document).ready() for the 21st century
Returns a Promise for cleaner usage, provides a Promise chain helper function and can also be used as a pure function.
Install
npm install --save when-dom-ready
Usage
import whenDomReady from 'when-dom-ready';
whenDomReady()
.then(() => console.log('DOM is ready yo!'));
You can still use callbacks if you want to:
whenDomReady(() => console.log('DOM is ready yo!'));
[https://github.com/lukechilds/when-dom-ready]

npmpkg.yargs-function#ql:npmpkg.yargs#

name::
* McsEngl.npmpkg.yargs-function@cptIt,

ljnalgo.UI

name::
* McsEngl.ljnalgo.UI@cptIt,

_ADDRESS.WPG:
* http://blog.webkid.io/react-ui-libraries//

ljn'concurency

name::
* McsEngl.ljn'concurency@cptIt,

ljn'error

name::
* McsEngl.ljn'error@cptIt,
* McsEngl.ljn'issue@cptIt,

_ADDRESS.WPG:
* https://www.toptal.com/nodejs/top-10-common-nodejs-developer-mistakes,

\pgmWEB\pgmJS\NODEJS\FS\EXPORTS\my-parser.js:11
if (err) throw err;
^
Error: ENOENT, open '\pgmWEB\pgmJS\NODEJS\FS\EXPORTS\example_log.txt'
==> the file example_log.txt was missing.

ljn'human

name::
* McsEngl.ljn'human@cptIt,

Dahl.Ryan:
It was 3 p.m. on November 8th, 2009. In a room filled with people at JSConf Europe, Ryan Dahl showed off his pet project for the first time to a sizable audience. Node.js, he called it.
[http://cloud9ide.posterous.com/our-commitment-to-the-nodejs-community]

Caswell.Tim:
* https://github.com/creationix,
* http://creationix.com//
Tim Caswell, a prominent Node.js community member, well known for his howtonode.org blog,
[http://cloud9ide.posterous.com/our-commitment-to-the-nodejs-community]

ljn'Organization

name::
* McsEngl.ljn'Organization@cptIt,

Joyent is the corporate steward of Node.js, the world’s best runtime for today's data-intensive, real-time applications. Joyent offers exclusive debugging and performance analysis tools for Node.js applications.
[https://www.joyent.com/technology/nodejs]

ljn'relation-to-browser-JavaScript

name::
* McsEngl.ljn'relation-to-browser-JavaScript@cptIt,

_DESCRIPTION:
Node.js is different from client-side Javascript in that it removes certain things, like DOM manipulation, and adds support for evented I/O, processes, streams, HTTP, SSL, DNS, string and buffer processing and C/C++ addons.
[http://book.mixu.net/node/single.html]

ljn'relation-to-PHP

name::
* McsEngl.ljn'relation-to-PHP@cptIt,
* McsEngl.php-relation-to-nodejs@cptIt,

_DESCRIPTION:
Node.js uses an event-based server execution procedure rather than the multithreaded execution in PHP.
[http://www.hongkiat.com/blog/node-js-server-side-javascript/]

ljn'resource

name::
* McsEngl.ljn'resource@cptIt,

_ADDRESS.WPG:
* http://nodejs.org//
* https://github.com/joyent/node,
* http://nodejs.org/docs/latest/api/index.html,
* http://nodemanual.org/latest//
* http://nodebits.org//
* http://howtonode.org//
* http://www.nodebeginner.org//
* http://cloud9ide.posterous.com/our-commitment-to-the-nodejs-community?utm_source=Company+List+-+Dated+End+of+August&utm_campaign=df83123ce9-AB_Split_Test_Subject_lines_Feb2_15_2012&utm_medium=email&ct=t(AB_Split_Test_Subject_lines_Feb2_15_2012))
* http://docs.nodejitsu.com//
* http://nodester.com//
* https://github.com/joyent/node/wiki/
* https://github.com/joyent/node/wiki/Node-Hosting,
* web:
* mailing: http://groups.google.com/group/nodejs
* irc:#node.js room on irc.freenode.net
* http://www.nodebeginner.org//
* http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb,

_IRC:
* http://webchat.freenode.net/?channels=node.js,

_GROUP:
* https://groups.google.com/group/nodejs?pli=1,
Send email to this group: nodejs@googlegroups.com

_TUTORIAL:
* https://hyperdev.com/help/learn-node-js-free-beginner-course//
* http://blog.modulus.io/absolute-beginners-guide-to-nodejs,

ljnrsc.Feature

name::
* McsEngl.ljnrsc.Feature@cptIt,

_ADDRESS.WPG:
* What’s New in Node.js v0.12 – Running Multiple Instances in a Single Process
February 11, 2014/in Community, How-To, Node.js v0.12, StrongNode /by Ben Noordhuis
https://strongloop.com/strongblog/whats-new-node-js-v0-12-multiple-context-execution//

ljnrsc.APPLICATION

name::
* McsEngl.ljnrsc.APPLICATION@cptIt,

_PROGRAM:
* http://stackoverflow.com/questions/3684743/cms-based-on-nodejs,
=== app creation ===
* https://github.com/rogerwang/node-webkit,
* http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners//
* http://nodetuts.com//
* http://readwrite.com/2011/04/02/6-free-e-books-on-nodejs,

ljnrsc.BOOK

name::
* McsEngl.ljnrsc.BOOK@cptIt,
* McsEngl.ljn'book@cptIt,

free: Mixu's Node Book:
* http://book.mixu.net/node/single.html,

free: MASTERING_NODE:
* http://visionmedia.github.com/masteringnode/book.html,
In Mastering Node we will discover how to write high concurrency web servers, utilizing the CommonJS module system, node's core libraries, third party modules, high level web development and more.

Professional Node.js: Building Javascript Based Scalable Software:
Pedro Teixeira
ISBN: 978-1-1181-8546-9
Paperback
408 pages
October 2012
£29.99 / €36.00
[http://eu.wiley.com/WileyCDA/WileyTitle/productCd-1118185463,descCd-google_preview.html]

ljn'Hands-on-Node.js-book

name::
* McsEngl.ljn'Hands-on-Node.js-book@cptIt,

_SAMPLE 63/147:
* http://nodetuts.com/pdf/handson-nodejs-sample.pdf,

_DESCRIPTION:
The "Hands-on Node.js" e-book
The Node.js introduction and API reference
by Pedro Teixeira
On this e-book we will analyze what makes Node a different proposal from all that is out there, why you should use it, and how to get started. It starts with an overview but quickly dives into the code, module by module. By the end of this book you should be able to build your own Node service producers and consumers, and also feel comfortable around the Node API and conventions.

You will also be able to build your own modules, and even test them (there is a chapter about unit testing).

The book is 145 pages long (including TOC) and includes more than 20 exercises with solutions.
[http://nodetuts.com/handson-nodejs-book.html]

_EVOLUTION:
Third revision, as of May 21st 2012, now with corrections, code syntax highlighting and more.
[http://nodetuts.com/handson-nodejs-book.html]

_Chapters_overview:
Why?
Analyzing why the usage of event-driven programming and why Node uses Javascript. Why Javascript is such a great language for event-driven programming.

Starting up
Showing how to install Node and NPM to get you started.

Understanding
Understanding the Event Loop and things to look out for in order not to block it. Understanding how Node loads modules.

API Quick Tour
A quick overview of the Node core modules.

Utilities
Some nice utilities first.

Buffers
Showing how you can create, modify and access buffer data, an essential part of the Node fundamentals.

Event Emitter
The Event Emitter pattern, how it is used throughout Node and how you can use it yourself to improve your code flexibility.

Timers
Node timers API, reminiscent from the browsers.

Low-level File System
How to use Node to open, read and write files.

HTTP
Details on the rich HTTP server and client implementation on Node.

Streams
Explaining the richness of this great abstraction in Node.

TCP Server
How to quickly setup a bare TCP server.

UNIX Sockets
How to use UNIX sockets and use them to pass file descriptors around.

Datagrams (UDP)
The power of datagrams on Node.

Child Processes
Launching, watching, piping and killing other processes.

Streaming HTTP Chunked Responses
HTTP in Node is streamable from the get go.

TLS / SSL
How to provide and consume secured streams.

HTTPS
How to build a HTTPS server or client.

Making Modules
How to make your app more modular.

Debugging
How to debug your Node app.

Automated Unit Testing
How to unit test your modules.

Callback Flow
How to manage intricate callback flow in a sane way.

Versions
Covers Node versions 0.8.x
[http://nodetuts.com/handson-nodejs-book.html]

ljn'security

name::
* McsEngl.ljn'security@cptIt,

_ADDRESS.WPG:
* https://blog.nodeswat.com/set-up-a-secure-node-js-web-application-9256b8790f11#.f7athp189,

Top Five Security Tips
by Karl Dόόna

Secure the environment
To build a secure system, you need to start from the ground up and invest time in securing the environment. Otherwise your code might be secure, but attackers can still compromise your application by exploiting weaknesses on your servers instead. Make sure you run up-to-date software, have secure authentication mechanisms, run the application under low privileges, and have decent logging.

Validate all input
Hacking in general means finding an unexpected usage for a system by introducing an unexpected input. The best way to defend yourself is to allow as narrow of an input range as possible. It is equally important to always validate that there is a match between the input and your expectations.

Secure your data
Data and databases are a critical part of most web applications and therefore a prime target for attackers. While Node.js applications might be more inclined towards NoSQL, the principles of data protection are the same: always use authentication mechanisms, use varying levels of access, separate your customers’ data as much as needed or possible, and encrypt the important parts of the database.

Protect your clients
Clients are probably the most valuable asset of your web application—they use the system and bring in the business. So it is natural that you must protect them with the same vigilance. This, alongside other defenses, means you must invest in protecting the client side of your application, including setting up CSRF and XSS defenses, protecting against clickjacking and unvalidated redirects.

Implement “Defense in Depth”
Cyber-defense is an asymmetrical problem: while crackers need only one of their attacks to succeed, you need all of your defenses to hold. This is unrealistic, which is why you should always opt for “Defense In Depth.” Never assume that the outer defenses of your application are impenetrable. Instead, set up layers upon layers of defensive mechanisms. Even if the attacker manages to get through one layer, the damage they can do is limited.
[https://pragprog.com/book/kdnodesec/secure-your-node-js-web-application]

ljn'tool

name::
* McsEngl.ljn'tool@cptIt,
* McsEngl.ljntool@cptIt,

_DESCRIPTION:
Any program, used to work with the language.
[hmnSngo.2013-08-07]

_GENERIC:
* ljs-tool#ql:ljstool_cpt#

ljn'Debugger

name::
* McsEngl.ljn'Debugger@cptIt,

_ADDRESS.WPG:
* https://blog.hospodarets.com/nodejs-debugging-in-chrome-devtools,

ljn'editor

name::
* McsEngl.ljn'editor@cptIt,

The Best Editor
My answer is Eclipse with Nodeclipse plugin, comparing to Visual Studio and Sublime Text.
[http://lith.me/2013/04/06/the-best-editor-for-node-js-on-windows/]

ljn'scripted

name::
* McsEngl.ljn'scripted@cptIt,
* McsEngl.scripted-editor@cptIt,

_DESCRIPTION:
Scripted is a fast and lightweight code editor with an initial focus on JavaScript editing. Scripted is a browser based editor and the editor itself is served from a locally running Node.js server instance.
[https://github.com/scripted-editor/scripted]
===
nodejs-server, js client.

ljntool.NPM#ql:ljn'npm#

name::
* McsEngl.ljntool.NPM@cptIt,

ljn'tool.REPL

name::
* McsEngl.ljn'tool.REPL@cptIt,
* McsEngl.ljn'REPL@cptIt,
* McsEngl.ljn'REPL-program@cptIt,
* McsEngl.ljn'Read-Eval-Print-Loop@cptIt,
* McsEngl.ljnrepl@cptIt,

_DESCRIPTION:
The repl module provides a Read-Eval-Print-Loop (REPL) implementation that is available both as a standalone program or includable in other applications. It can be accessed using:
const repl = require('repl');
[https://nodejs.org/api/repl.html#repl_repl]

ljnreplp'module (core 2.stable)

name::
* McsEngl.ljnreplp'module (core 2.stable)@cptIt,
* McsEngl.ljn'REPL-module@cptIt,
* McsEngl.ljn'Read-Eval-Print-Loop@cptIt,
* McsEngl.ljnrepl@cptIt,

ljnrepl.member:
// ljn6.2.2
> Object.getOwnPropertyNames(repl).sort()
[ 'REPLServer',
'REPL_MODE_MAGIC',
'REPL_MODE_SLOPPY',
'REPL_MODE_STRICT',
'Recoverable',
'_builtinLibs',
'repl',
'start',
'writer' ]
> repl
{ writer:
{ [Function: inspect]
colors:
{ bold: [Object],
italic: [Object],
underline: [Object],
inverse: [Object],
white: [Object],
grey: [Object],
black: [Object],
blue: [Object],
cyan: [Object],
green: [Object],
magenta: [Object],
red: [Object],
yellow: [Object] },
styles:
{ special: 'cyan',
number: 'yellow',
boolean: 'yellow',
undefined: 'grey',
null: 'bold',
string: 'green',
symbol: 'green',
date: 'magenta',
regexp: 'red' } },
_builtinLibs:
[ 'assert',
'buffer',
'child_process',
'cluster',
'crypto',
'dgram',
'dns',
'domain',
'events',
'fs',
'http',
'https',
'net',
'os',
'path',
'punycode',
'querystring',
'readline',
'repl',
'stream',
'string_decoder',
'tls',
'tty',
'url',
'util',
'v8',
'vm',
'zlib' ],
REPLServer: { [Function: REPLServer] super_: { [Function: Interface] super_: [Object] } },
REPL_MODE_SLOPPY: Symbol(repl-sloppy),
REPL_MODE_STRICT: Symbol(repl-strict),
REPL_MODE_MAGIC: Symbol(repl-magic),
start: [Function],
Recoverable: { [Function: Recoverable] super_: [Function: SyntaxError] },
repl:
REPLServer {
_domain:
Domain {
domain: null,
_events: [Object],
_eventsCount: 1,
_maxListeners: undefined,
members: [] },
useGlobal: true,
ignoreUndefined: false,
replMode: Symbol(repl-magic),
underscoreAssigned: false,
last: [Circular],
_inTemplateLiteral: false,
rli: [Circular],
eval: { [Function: runBound] domain: [Object] },
inputStream:
ReadStream {
connecting: false,
_hadError: false,
_handle: [Object],
_parent: null,
_host: null,
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 6,
_maxListeners: undefined,
_writableState: [Object],
writable: false,
allowHalfOpen: false,
destroyed: false,
_bytesDispatched: 0,
_sockname: null,
_writev: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
isRaw: true,
isTTY: true,
fd: 0,
read: [Function],
_consuming: true },
outputStream:
WriteStream {
connecting: false,
_hadError: false,
_handle: [Object],
_parent: null,
_host: null,
_readableState: [Object],
readable: false,
domain: null,
_events: [Object],
_eventsCount: 4,
_maxListeners: undefined,
_writableState: [Object],
writable: true,
allowHalfOpen: false,
destroyed: false,
_bytesDispatched: 39011,
_sockname: null,
_writev: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
columns: 120,
rows: 30,
_type: 'tty',
fd: 1,
_isStdio: true,
destroySoon: [Function],
destroy: [Function] },
lines:
[ 'Object.getPrototypeOf(Array.prototype) === Object.prototype',
'Object.getPrototypeOf(Set.prototype) === Object.prototype',
'Object.getPrototypeOf(RegExp.prototype) === Object.prototype',
'Object.getPrototypeOf(String.prototype) === Object.prototype',
'Object.getPrototypeOf(console) === Object.prototype',
'Object.getPrototypeOf(console.__proto__) === Object.prototype',
'Object.getPrototypeOf(module.__proto__) === Object.prototype',
'Object.getPrototypeOf(process.__proto__) === Object.prototype',
'process',
'Object.getPrototypeOf(process)',
'Object.getPrototypeOf(process.__proto__.__proto__) === Object.prototype',
'Object.getOwnPropertyNames(process.__proto__).sort()',
'Object.getPrototypeOf(process.__proto__) === process',
'Object.getPrototypeOf(process.__proto__) === events',
'events',
'Object.getPrototypeOf(process.__proto__) === events.EventEmitter',
'Object.getPrototypeOf(process.__proto__) === events.EventEmitter.prototype',
'Object.getOwnPropertyNames(process).sort()',
'typeof net',
'Object.getOwnPropertyNames(net).sort()',
'Object.getOwnPropertyNames(net.__proto__).sort()',
'net',
'Object.getOwnPropertyNames(repl.__proto__).sort()',
'Object.getOwnPropertyNames(repl).sort()',
'repl',
level: [] ],
context:
{ DTRACE_NET_SERVER_CONNECTION: [Function],
DTRACE_NET_STREAM_END: [Function],
DTRACE_HTTP_SERVER_REQUEST: [Function],
DTRACE_HTTP_SERVER_RESPONSE: [Function],
DTRACE_HTTP_CLIENT_REQUEST: [Function],
DTRACE_HTTP_CLIENT_RESPONSE: [Function],
COUNTER_NET_SERVER_CONNECTION: [Function],
COUNTER_NET_SERVER_CONNECTION_CLOSE: [Function],
COUNTER_HTTP_SERVER_REQUEST: [Function],
COUNTER_HTTP_SERVER_RESPONSE: [Function],
COUNTER_HTTP_CLIENT_REQUEST: [Function],
COUNTER_HTTP_CLIENT_RESPONSE: [Function],
global: [Circular],
process: [Object],
Buffer: [Object],
clearImmediate: [Function],
clearInterval: [Function],
clearTimeout: [Function],
setImmediate: [Function],
setInterval: [Function],
setTimeout: [Function],
console: [Getter],
module: [Object],
require: [Object] },
lineParser:
LineParser {
_literal: null,
shouldFail: false,
blockComment: false,
regExpLiteral: false },
bufferedCommand: '',
_sawReturn: true,
isCompletionEnabled: true,
domain: null,
_events:
{ close: [Object],
SIGINT: [Function],
line: [Object],
SIGCONT: [Function],
exit: [Function] },
_eventsCount: 5,
_maxListeners: undefined,
output:
WriteStream {
connecting: false,
_hadError: false,
_handle: [Object],
_parent: null,
_host: null,
_readableState: [Object],
readable: false,
domain: null,
_events: [Object],
_eventsCount: 4,
_maxListeners: undefined,
_writableState: [Object],
writable: true,
allowHalfOpen: false,
destroyed: false,
_bytesDispatched: 39011,
_sockname: null,
_writev: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
columns: 120,
rows: 30,
_type: 'tty',
fd: 1,
_isStdio: true,
destroySoon: [Function],
destroy: [Function] },
input:
ReadStream {
connecting: false,
_hadError: false,
_handle: [Object],
_parent: null,
_host: null,
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 6,
_maxListeners: undefined,
_writableState: [Object],
writable: false,
allowHalfOpen: false,
destroyed: false,
_bytesDispatched: 0,
_sockname: null,
_writev: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
isRaw: true,
isTTY: true,
fd: 0,
read: [Function],
_consuming: true },
historySize: 1000,
completer: [Function: complete],
_initialPrompt: '> ',
_prompt: '> ',
terminal: true,
line: '',
cursor: 0,
history:
[ 'repl',
'Object.getOwnPropertyNames(repl).sort()',
'Object.getOwnPropertyNames(repl.__proto__).sort()',
'net',
'Object.getOwnPropertyNames(net.__proto__).sort()',
'Object.getOwnPropertyNames(net).sort()',
'typeof net',
'Object.getOwnPropertyNames(process).sort()',
'Object.getPrototypeOf(process.__proto__) === EventEmitter.prototype',
'Object.getPrototypeOf(process.__proto__) === events.EventEmitter.prototype',
'Object.getPrototypeOf(process.__proto__) === events.EventEmitter',
'events',
'Object.getPrototypeOf(process.__proto__) === events',
'Object.getPrototypeOf(process.__proto__) === process',
'Object.getOwnPropertyNames(process.__proto__).sort()',
'Object.getPrototypeOf(process.__proto__.__proto__) === Object.prototype',
'Object.getPrototypeOf(process)',
'process',
'Object.getPrototypeOf(process.__proto__) === Object.prototype',
'Object.getPrototypeOf(module.__proto__) === Object.prototype',
'Object.getPrototypeOf(console.__proto__) === Object.prototype',
'Object.getPrototypeOf(console) === Object.prototype',
'Object.getPrototypeOf(String.prototype) === Object.prototype',
'Object.getPrototypeOf(RegExp.prototype) === Object.prototype',
'Object.getPrototypeOf(Set.prototype) === Object.prototype',
'Object.getPrototypeOf(Array.prototype) === Object.prototype',
'setImmediate',
'unref',
'ref',
'exports',
'Set',
'Object.getOwnPropertyNames(Set).sort()',
'Object.getOwnPropertyNames(Math.__proto__).sort()',
'Object.getOwnPropertyNames(Math).sort()',
'Math.__proto__',
'Math',
'Function.prototype',
'Function',
'Object.getPrototypeOf(Function.__proto__.__proto__)',
'Object.getPrototypeOf(Function.__proto__)',
'Object.getPrototypeOf(Function)',
'Error',
'Object.getPrototypeOf(console.__proto__) === Object.prototype',
'Console.prototype',
'console',
'Object.getPrototypeOf(console.__proto__.__proto__)',
'Object.getPrototypeOf(console.__proto__)',
'Object.getPrototypeOf(console)',
'module',
'module.__dirname',
'__dirname',
'Object.getOwnPropertyNames(global).sort()',
'Object.getOwnPropertyNames(global.__proto__.__proto__).sort()',
'Object.getOwnPropertyNames(global.__proto__).sort()',
'Object.getPrototypeOf(global)',
'GLOBAL',
'Object.getOwnPropertyNames(Symbol).sort()',
'Symbol',
'Object.getOwnPropertyNames(Object.prototype).sort()',
'module instanceof Object',
'module instanceof Module',
'Object.getPrototypeOf(module.__proto__) === Object.prototype',
'Object.getPrototypeOf(module)',
'Object.getOwnPropertyNames(module.__proto__.__proto__).sort()',
'Object.getOwnPropertyNames(module.__proto__).sort()',
'Object.getOwnPropertyNames(module).sort()',
'module.__proto__ === module.Module.prototype',
'module.__proto__ === Module.prototype',
'module',
'http.Server',
'f.__proto__ === Function.prototype',
'f.prototype === Function.prototype',
'var f = function(){}',
'f().prototype === Function.prototype',
'http',
'Object.getOwnPropertyNames(http).sort()',
'Object.getOwnPropertyNames(path.win32).sort()',
'Object.getOwnPropertyNames(path).sort()',
'os',
'typeof os',
'Object.getOwnPropertyNames(readline).sort()',
'typeof readline',
'readline',
'Object.getOwnPropertyNames(events.EventEmitter).sort()',
'events.EventEmitter',
'Object.getOwnPropertyNames(events).sort()',
'events',
'EventTarget',
'stream',
'Object.getOwnPropertyNames(stream).sort()',
'stream',
'typeof stream',
'StringDecoder',
'string_decoder',
'Object.getOwnPropertyNames(string_decoder).sort()',
'typeof string_decoder',
'tls',
'Object.getOwnPropertyNames(tls).sort()',
'typeof tls',
'typeof tty',
... 141 more items ],
historyIndex: -1,
commands:
{ break: [Object],
clear: [Object],
exit: [Object],
help: [Object],
save: [Object],
load: [Object] },
writer: [Function],
useColors: true,
prevRows: 0,
paused: false,
_historyHandle: 3,
_flushing: false,
wrappedCmd: false } }

ljn'tool.Runtime (ljnrtm)

name::
* McsEngl.ljn'tool.Runtime (ljnrtm)@cptIt,
* McsEngl.Node.js-runtime@cptIt,
* McsEngl.nodejs-runtime@cptIt,
* McsEngl.ljnrtm@cptIt,
* McsEngl.ljnruntime@cptIt,
* McsEngl.ljn'runtime@cptIt,

_DESCRIPTION:
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
[https://nodejs.org/en/] {2016-07-01}

ljnrtm'Synopsis

name::
* McsEngl.ljnrtm'Synopsis@cptIt,

_DESCRIPTION:
Usage: node [options] [ -e script | script.js ] [arguments]
node debug script.js [arguments]

ljnrtm'option

name::
* McsEngl.ljnrtm'option@cptIt,
* McsEngl.ljnrtm'option@cptIt,

_SPECIFIC:
Options
-v, --version
-h, --help
-e, --eval "script"
-p, --print "script"
-c, --check
-i, --interactive
-r, --require module
--no-deprecation
--trace-deprecation
--throw-deprecation
--no-warnings
--trace-warnings
--trace-sync-io
--zero-fill-buffers
--preserve-symlinks
--track-heap-objects
--prof-process
--v8-options
--tls-cipher-list=list
--enable-fips
--force-fips
--icu-data-dir=file
[https://nodejs.org/dist/latest-v6.x/docs/api/cli.html#cli_command_line_options]

_CODE.LJN:
node --version:
v0.10.1

ljnrtm'Installing

name::
* McsEngl.ljnrtm'Installing@cptIt,

windows

_DESCRIPTION:
Download (https://nodejs.org/en/) msi file and run it.

_UPGRADING:
Download the new msi file and run it.

ubuntu

_DESCRIPTION:
At Least from Ubuntu 12.04, an old version (0.6.x) of Node is in the standard repository. To install, just run:
> sudo apt-get install nodejs
[https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager#ubuntu-mint]

from-source

Building From Source

To build and install node from source, we first need to obtain the code. The first method of doing so is via git, if you have git installed you can execute:

$ git clone http://github.com/ry/node.git && cd node
For those without git, or who prefer not to use it, we can also download the source via curl, wget, or similar:

$ curl -# http://nodejs.org/dist/node-v0.1.99.tar.gz > node.tar.gz
$ tar -zxf node.tar.gz
Now that we have the source on our machine, we can run ./configure which discovers which libraries are available for node to utilize such as OpenSSL for transport security support, C and C++ compilers, etc. make which builds node, and finally make install which will install node.

$ ./configure && make && make install
[http://visionmedia.github.com/masteringnode/book.html]

ljnrtm'Upgrading

name::
* McsEngl.ljnrtm'Upgrading@cptIt,

_DESCRIPTION:
1) go nodejs.org,
2) download file,
3) install

ljn.SPECIFIC

name::
* McsEngl.ljn.SPECIFIC@cptIt,

ljn.FRAMEWORK

_CREATED: {2016-08-26}

name::
* McsEngl.ljn.FRAMEWORK@cptIt,
* McsEngl.ljn.dialect@cptIt,

ljn.EVOLUTING {2009-}

name::
* McsEngl.ljn.EVOLUTING {2009-}@cptIt,

{time.2013-07-25}
=== Version 0.10.15 (Stable)

{time.2013-03-28}
=== Version 0.11.0 (Unstable)

ljn'version

name::
* McsEngl.ljn'version@cptIt,
* McsEngl.ljnversion@cptIt,

_ADDRESS.WPG:
* http://blog.nodejs.org//

ljn'v0.11:
* 2013-07-12, Version 0.11.4 (Unstable)
* 2013-06-26, Version 0.11.3 (Unstable)
* 2013-04-19, Version 0.11.1 (Unstable)
* 2013-03-28, Version 0.11.0 (Unstable)

ljn'v0.10:
* 2014-02-18, Version 0.10.26 (Stable)
* 2014-01-23: Version 0.10.25 (Stable)
* 2013-07-25, Version 0.10.15 (Stable)
* 2013-07-25, Version 0.10.14 (Stable)
* 2013-03-21, Version 0.10.1 (Stable)
* 2013-03-19, Version 0.10.0 (Stable)

ljn'v0.8:
* 2013-06-13, Version 0.8.25 (maintenance)
* 2013-04-09, Version 0.8.23 (Legacy)

ljn'v0.6:
* ljn'v0.6.11:

ljs.SERVER (SSJS)

_CREATED: {2011-05-25}

name::
* McsEngl.ljs.SERVER (SSJS)@cptIt,
* McsEngl.conceptIt554.1,
* McsEngl.server-side-javascript@cptIt554.1,
* McsEngl.SSJS@cptIt554.1,
* McsEngl.ljs.SSJS@cptIt,
* McsEngl.ljsSs@cptIt554.1, {2013-06-25}

_DESCRIPTION:
Server-side JavaScript (SSJS) refers to JavaScript that runs on the server-side. This term was coined because the language is predominantly used on the client-side, i.e. client-side JavaScript (CSJS).
The first implementation of SSJS was Netscape's LiveWire,[citation needed] included in its Enterprise Server 2.0 product,[1] released in 1996. CommonJS is a project to provide common specifications for SSJS development.[2]
[http://en.wikipedia.org/wiki/Server-side_JavaScript]

_REPUTATION:
Client-sedi Jafascript has a bad reputation also because of the common namespace shared by all scripts, which can lead to conflicts and security leaks.
[http://nodetuts.com/pdf/handson-nodejs-sample.pdf]

ssjs'ADVANTAGE

name::
* McsEngl.ssjs'ADVANTAGE@cptIt,

_DESCRIPTION:
Having a single language makes some sense. For one thing, you can reuse code between browser and server implementations rather than try to map APIs between different languages. You can also happily use JSON as your default serialization. And you only need to learn one language.

Other benefits are perhaps less obvious - for example, in recent years there has been considerable investment made in making JavaScript interpreters as fast as possible to meet the rising complexity of web applications. This has resulted in the screamingly fast V8 JavaScript engine used by Chrome, for example. This provides an infrastructure to create lean, mean JavaScript-based server applications.
[http://zope.cetis.ac.uk/members/scott/blogview?entry=20110124133546]

ssjs'AppengineJS

name::
* McsEngl.ssjs'AppengineJS@cptIt,
* McsEngl.appEngineJs@cptIt554i,

_ADDRESS.WPG:
* http://www.appenginejs.org//

ssjs'CommonJS

name::
* McsEngl.ssjs'CommonJS@cptIt,
* McsEngl.conceptIt554.3,
* McsEngl.commonJS@cptIt554i,

_ADDRESS.WPG:
* http://www.commonjs.org//
* http://wiki.commonjs.org/wiki/CommonJS

_DESCRIPTION:
CommonJS is a project with the goal of specifying an ecosystem for JavaScript outside the browser (for example, on the server or for native desktop applications). The project was started by Kevin Dangoor in January 2009 and initially named ServerJS.[1]
“  What I’m describing here is not a technical problem. It’s a matter of people getting together and making a decision to step forward and start building up something bigger and cooler together.  ”
— Kevin Dangoor[1]
In August 2009, the project was renamed CommonJS to show the broader applicability of the APIs.[2] Specifications are created and approved in an open process. A specification is only considered final after it has been finished by multiple implementations.[3] CommonJS is not affiliated with the Ecma International group TC39 working on ECMAScript, but some members of TC39 participate in the project.[4]
[http://en.wikipedia.org/wiki/CommonJS]
===
* Welcome to CommonJS, a group with a goal of building up the JavaScript ecosystem for web servers, desktop and command line apps and in the browser.
This wiki is a starting point for collecting up ideas, links and any draft API suggestions for the CommonJS group. Discussions occur on that mailing list and on IRC (#commonjs on freenode).
===
CommonJS is a growing collection of standards, including
Modules
Binary strings and buffers
Charset encodings
Binary, buffered, and textual input and output (io) streams
System process arguments, environment, and streams
File system interface
Socket streams
Unit test assertions, running, and reporting
Web server gateway interface, JSGI
Local and remote packages and package management
[http://arstechnica.com/business/2009/12/commonjs-effort-sets-javascript-on-path-for-world-domination/]

commonjs'module

name::
* McsEngl.commonjs'module@cptIt,

ssjs'Erbix

name::
* McsEngl.ssjs'Erbix@cptIt,
* McsEngl.erbix@cptIt554i,

_DESCRIPTION:
Erbix is an all-in JavaScript application platform focused on small business online applications. It aims provide the best foundation for creating, hosting and consuming rich online applications.
[http://www.erbix.com/faq]

ssjs'Helma

name::
* McsEngl.ssjs'Helma@cptIt,
* McsEngl.helma@cptIt554i,

_DESCRIPTION:
Helma is a server-side Javascript environment and web application framework for fast and efficient scripting and serving of your websites and Internet applications.
Helma is written in Java and employs Javascript for its server-side scripting environment, removing the need for compilation cycles and reducing development costs while giving you instant access to leverage the whole wealth of Java libraries out there.
[http://helma.org/]

_ADDRESS.WPG:
* http://helma.org//

ssjs'JackJS

name::
* McsEngl.ssjs'JackJS@cptIt,
* McsEngl.jackJS@cptIt554i,

_DESCRIPTION:
Jack is a collection of JSGI compatible handlers (connect web servers to JavaScript web application/frameworks), middleware (intercept and manipulate requests to add functionality), and other utilities (to help build middleware, frameworks, and applications).
[http://jackjs.org/]

ssjs'Jaxer

name::
* McsEngl.ssjs'Jaxer@cptIt,
* McsEngl.jaxer@cptIt554i,

_ADDRESS.WPG:
* http://jaxer.org//

_DESCRIPTION:
Aptana Jaxer is an open source Ajax web server for building rich web pages and applications using a unified Ajax model wherein both client-side and server-side code can be written in JavaScript. Jaxer's server-side engine is based on Mozilla Gecko, the same browser engine that is used in the Firefox browser. The Mozilla engine allows Jaxer to provide a server-side DOM in which a page may be manipulated during server-side processing using the techniques familiar to client-side programmers. Jaxer's server-side JavaScript APIs enable database access, file system access, network communications, user sessions, and other functions typical of web application servers. Jaxer also provides for access to Java objects via the open source DWR project.

As of November 2009 Aptana has significantly scaled back development and support of Jaxer. An Aptana representative noted that "there hasn't been sufficient adoption to make it a money earning proposition."[2]
[http://en.wikipedia.org/wiki/Jaxer#Aptana_Jaxer]

ssjs'JSGI

name::
* McsEngl.ssjs'JSGI@cptIt,
* McsEngl.JSGI@cptIt554i,

_DESCRIPTION:
JSGI is a JavaScript web connector protocol inspired by Ruby's Rack and Python's WSGI.
[http://ringojs.org/wiki/JSGI]
===
JSGI is a web server interface specification for JavaScript, inspired by Ruby’s Rack (http://rack.rubyforge.org/) and Python’s WSGI (http://www.wsgi.org/). It provides a common API for connecting JavaScript frameworks and applications to webservers.
[http://jackjs.org/]
===
A JSGI Application is a JavaScript Function which takes exactly one argument, the Request as a JavaScript Object, and returns its Response as a JavaScript Object containing three required attributes: status, headers and body (DL: should we mention `then` here?).
[http://wiki.commonjs.org/wiki/JSGI/Level0/A/Draft2]

ssjs'Nitro

name::
* McsEngl.ssjs'Nitro@cptIt,

_DESCRIPTION:
Nitro is a set of libraries that build on JSGI and Rhino. Rather than a complete platform, Nitro provides components that are useful in building JavaScript frameworks, including templating and parsing engines. The most prominent use of Nitro is AppEngineJS, which lets you run JavaScript servers using Google's app engine infrastructure - so if you want to deploy your application using Google's App Engine, then clearly this is the platform you need to look at.
[http://zope.cetis.ac.uk/members/scott/blogview@entry=20110124133546]

ssjs'Opera-unite

name::
* McsEngl.ssjs'Opera-unite@cptIt,
* McsEngl.opera-unite@cptIt554i,

_ADDRESS.WPG:
* http://unite.opera.com//

_DESCRIPTION:
Opera Unite is a very different kind of system entirely - it uses JavaScript to deploy web services directly from your desktop rather than on a separate server, for example to share music or have your own personal chatroom. Opera Unite services are created using JavaScript with some special extensions, which are then packaged as W3C Widgets. It may not suit every purpose, but it makes sense that a personal web server uses JavaScript as the server programming language, and makes it very easy to create and share simple applications with your friends. Plus it uses Widgets, my other favourite web technology of the moment!
[http://zope.cetis.ac.uk/members/scott/blogview@entry=20110124133546]
===
Opera Unite is a collaborative technology that allows you to share, connect and collaborate directly between computers across the Web, without going through a central, third-party server.
[http://unite.opera.com/guide/]

ssjs'Platform

name::
* McsEngl.ssjs'Platform@cptIt,

_SPECIFIC:
* Apache-sling
* Jack
* Nitro
* Node
* Opera-unite
* Ringo

ssjs'RingoJS

name::
* McsEngl.ssjs'RingoJS@cptIt,
* McsEngl.conceptIt554.2,
* McsEngl.ringo@cptIt554.2,
* McsEngl.ringoJS@cptIt554.2,

ringo'Definition

name::
* McsEngl.ringo'Definition@cptIt,

_DESCRIPTION:
Ringo takes a more traditional approach, and uses the Rhino JavaScript engine to run JavaScript applications using Jetty, a Java application server. While Rhino isn't as fast as V8, its usually good enough, and one author has noted some benefits of using the tried-and-tested JVM as the basis for server code as opposed to Node.js's more radical approach. Another plus is that by using Java you get access to tons of Java libraries in your code using Java-JavaScript integration, rather than having to access everything through spawning a console process as in Node. On the other hand, all this Java does weigh a fair amount, and so you won't see the small memory footprints you can acheive with Node.js. If you're a Java developer interested in server-side JavaScript, but think Node.js looks a bit scary - or you just have a ton of Java code you can't face porting - then I think Ringo is a great place to start.
[http://zope.cetis.ac.uk/members/scott/blogview?entry=20110124133546]

ringo'API

name::
* McsEngl.ringo'API@cptIt,

_ADDRESS.WPG:
* http://ringojs.org/api/v0.7//
* http://ringojs.org/api/master//

* https://github.com/grob/ringo-sqlstore
* https://github.com/grob/ringojs

* https://github.com/hns/mustache.js
* https://github.com/hns/ringo-filestore
* https://github.com/hns/ringo-storable
* https://github.com/hns/stick

* https://github.com/ringo/ringojs
* https://github.com/ringo/ringojs.org
* https://github.com/ringo/ringowiki
* https://github.com/ringo/simplesite

ringo'Command

name::
* McsEngl.ringo'Command@cptIt,

ringo'ringoAdmin

name::
* McsEngl.ringo'ringoAdmin@cptIt,

$ ringo-admin create demoblog
This will create the demoblog folder containing a functional - but not yet very useful - web application. This is a template for your app to get you started. But it is already a runnable web app as you will soon see.

admin-create created a couple of files in the top level directory:

main.js The script bootstrapping your web application.
config.js Settings for middleware, database, the app itself, etc.
actions.js Functions creating the Response. The View in MVC.
.. and several directories with rather self explanatory names:

skins/ Put all your skins (templates) in here.
public/ Ringo servers files in this directory as static content.
config/ Holds webserver configuration files. Do not worry about those.
Calling ringo main.js will start a development webserver, jetty, on your machine and you can view the demoblog app right away in your browser.
[http://ringojs.org/wiki/Tutorial]

$ ringo-admin install http://site.com/foo/foo.zip
To install a package from the web.

ringo-admin install robi42/ringo-hibernate
There is a convenient shortcut for installing packages from a Github repository that allows you to just specify the Github user and repository name:

ringo'main.js

name::
* McsEngl.ringo'main.js@cptIt,

$ cd demoblog
$ ringo main.js
Calling ringo main.js will start a development webserver, jetty, on your machine and you can view the demoblog app right away in your browser.
This will start the server on http://127.0.0.1:8080.
[http://ringojs.org/wiki/Tutorial]

ringo'Attribute

name::
* McsEngl.ringo'Attribute@cptIt,

Features at a Glance

Instant reloading Edit your app, reload the page, and instantly see the changes in your browser.

Full web support Ringo comes with most things you'll need to build real world web applications, and more are available as packages.

Easy debugging Helpful error messages and a full featured graphical debugger: Ringo makes it easy to fix what's wrong.

Pure Java Ringo is written in Java, which means you get the strength of the JVM and a bazillion of Java libraries for free.

It's fast We don't have the world's fastest JS runtime, but Ringo will rip through your average web application. Try for yourself!
[http://ringojs.org/]

ringo'Deployment-Google-AppEngine

name::
* McsEngl.ringo'Deployment-Google-AppEngine@cptIt,

Google App Engine

RingoJS runs fine on Google App Engine for Java. There are some limitations on App Engine compared to running on a dedicated Server. For example, asynchronous or long running connections are currently not supported. On the other hand, App Engine provides many interesting proprietary APIs, for which the AppengineJS project provides nice JavaScript wrappers.

Local Setup

Google App Engine for Java requires applications to be packaged as Java web applications. ringo-admin can create App Engine boiler plate code for use using the create command with the -a or --appengine switch:

ringo-admin create -a /path/to/appdir
To run the application locally launch the dev_appserver script from the App Engine SDK for Java, passing it the application directory as argument:

dev_appserver.sh appdir
Deployment

To deploy an application, you first need to let the deployment tool know the id of the App Engine site to deploy to. You do this by editing the application element in file WEB-INF/appengine-web.xml. For example, if you want to deploy to example.appspot.com, the application element would look like this:

<application>example</application>
Once you have done this you can upload the application using the appcfg command line tool from the SDK.

appcfg.sh update appdir
This will as for your Google accout credentials and deploy the application on Google's infrastructure.

Tips & Tricks

Note that in order to use the App Engine Storage API and other App Engine APIs you have to copy the appengine-api-1.0-sdk-x.y.z.jar file from the App Engine SDK to the WEB-INF/lib/ directory of your application.

One potential problem that may affect low traffic sites on Google App Engine for Java is slow application spin-up. Ringo's app engine boilerplate comes with precompilation enabled, which should should help. Startup time can further be improved by running Rhino in interpreted mode. To do this, add the following lines to the ringo servlet definition in WEB-INF/web.xml to set the optlevel parameter to -1:

<init-param>
<param-name>optlevel</param-name>
<param-value>-1</param-value>
</init-param>
While this will make Ringo run somewhat slower the improved startup time and reduced memory usage will outweigh the performance hit unless your application is very CPU intensive.
[http://ringojs.org/wiki/Google_App_Engine]

ringo'Evolution

name::
* McsEngl.ringo'Evolution@cptIt,
* McsEngl.ringo'version@cptIt,

ringo0.8: scheduled for spring 2011
With release 0.8 we shifted directions to concentrate on lower level functionality. Ringo still provides client and server side HTTP support, but focuses on providing basic capability instead of a complete, well-rounded framework.
[http://ringojs.org/wiki/Web_Framework]

ringo0.7: released 2011-01-31
RingoJS up to version 0.7 tried to provide a more or less complete web framework.
[http://ringojs.org/wiki/Web_Framework]

Ringo0.6 - released 2010-09-30

Ringo0.5 - released 2010-05-19

Ringo0.4 - released 2010-03-09

ringo'Example

name::
* McsEngl.ringo'Example@cptIt,

James Cook jcook@tracermedia.com via googlegroups.com to ringojs, McKinley
show details 4:28 AM (2 hours ago)
For completeness, here is the simples stick example:

var {json} = require('ringo/jsgi/response');

var {Application} = require('stick');
var app = exports.app = Application();

app.configure('params', 'route');

app.get('/test', function(req) {
return json({
params: req.params,
postParams: req.postParams,
queryParams: req.queryParams
});
});

// Script to run app from command line
if (require.main === module) {
require('ringo/httpserver').main(module.directory);
}

Now you can hit it with http://localhost:8080/?name=freg&age=25 and see the results.
Or use, http://localhost:8080/myapp/test?name=value&name1[]=fred&name1[]=barney for something slightly more complicated.

-- jim

ringo'ex.Access-custom-java-classes

name::
* McsEngl.ringo'ex.Access-custom-java-classes@cptIt,

Aadit M Shah aadit.m.shah@gmail.com to RingoJS
show details 4:58 PM (2 hours ago)
I finally figured out how to access custom Java classes in RingoJS. I
must have been really stupid to have never seen it right in front of
my eyes before. XD

In Rhino, to access custom Java classes you need to add them to your
Java classpath. This can be tedious, especially when an end user
without any knowledge about programming tries to install a CommonJS
package which requires specific Java classes to be in the classpath.
Correct me if I'm wrong. Package managers like Tusk might be able to
do that for you, and I would really appreciate it if you would notify
me about such a feature. However, as far as I know it's the end users
responsibility to add the Java classes and/or jar files to the
classpath.

RingoJS simplifies this a great deal. It provides a global function
addToClasspath(pathName) which adds a jar file or directory to the
classpath. Thus we may have a Java package or jar file in the root
directory of the CommonJS package and use the addToClasspath function
in the JS file itself to automatically add it to the classpath. In
addition, all jar files in the RingoJS lib directory are included in
the classpath by default. This simplifies matters a great deal.

For programming purposes you may add jar files to the RingoJS lib
directory. However, I wouldn't recommend it. To reduce coupling and
keep the RingoJS lib directory clean (preventing future namespace
problems); and to make installation for the end user easier, I suggest
using the addToClassPath function. Perhaps it should be implemented in
other Rhino-based CommonJS implementations as well.

Yours in ecstasy and lisp-p,
Aadit M Shah (aaditmshah)

Address: aaditmshah@myopera.com
[2011-08-29]

ringo'ex.Get-os-name

name::
* McsEngl.ringo'ex.Get-os-name@cptIt,

Hannes Wallnoefer hannesw@gmail.com to RingoJS
Sorry for being late to this thread, but Rhino and also RingoJS have
an 'environment' object that mirrors the Java system properties. So
the simplest way to get the OS name probably is:

environment["os.name"]
[2011-09-26]

ringo'Installation

name::
* McsEngl.ringo'Installation@cptIt,

_Requirement:
Ringo requires Java 1.5+
We recommend the Java Sun Package. Either download it from the Oracle download page or on Debian simply aptitude install sun-java6-jdk
[http://ringojs.org/getting_started]

ringo'Package

name::
* McsEngl.ringo'Package@cptIt,

_ADDRESS.WPG:
* http://ringojs.org/wiki/Packages//

rp is a package manager for RingoJS. It aims to provide an easy way to both manage packages of local RingoJS installations and to publish packages in a remote package registry (by default rpr).
[https://github.com/grob/rp/]

ringo'Resource

name::
* McsEngl.ringo'Resource@cptIt,

_ADDRESS.WPG:
* http://ringojs.org//
* http://twitter.com/#!/ringojs
* http://ringojs.org/wiki/Tutorial
* http://groups.google.com/group/ringojs
* http://ringojs.com/bot/join

* http://hns.github.com//
Posts about
server-side JavaScript
by Hannes Wallnofer

ringo'Run

name::
* McsEngl.ringo'Run@cptIt,

_Windows:
1) go to base-directoroy: \js\ringo07
2) bin\ringo ===> runs the sell. ctrl+D kill the sell

2b) bin\ringo app\demo\main.js ===>runs an application. go browser localhost:8080
- ctrl+C kills the server.

ssjs'Resource

name::
* McsEngl.ssjs'Resource@cptIt,

_List:
* Comparison of server-side JavaScript solutions:
- http://en.wikipedia.org/wiki/Comparison_of_server-side_JavaScript_solutions

* http://docs.huihoo.com/javascript/ServerJSv14/docs/contents.htm

* JavaScript conquers the server, 2011-05-25,
- http://www.infoworld.com/d/application-development/javascript-conquers-the-server-969?page=0,0

The Rise of Server-Side JavaScript (SSJS)
scott.bradley.wilson@gmail.com
January 24, 2011
- http://zope.cetis.ac.uk/members/scott/blogview@entry=20110124133546

Common Node
Synchronous CommonJS compatibility layer for Node.js

Overview

Common Node implements a number of CommonJS proposals on top of Node.js using node-fibers. By emulating multi-threading within a single process, you can now:

write fast CRUD webapps that run on Node.js without messy callbacks
run apps, middleware and libs written for RingoJS & other platforms
write concise, legible shell scripts in JavaScript
use the best tool for the job by writing maintainable business logic in a sync manner, even inside an async app
* http://olegp.github.com/common-node//

ssjs'Standard

name::
* McsEngl.ssjs'Standard@cptIt,

_DESCRIPTION:
The most important emerging standard in this space is the CommonJS initiative. CommonJS defines standard APIs for basic functionality needed by non-browser JavaScript, including module loading, writing to the console, and filesystem access. Most of the platforms described above implement one or more of the existing CommonJS specifications. On the roadmap for CommonJS are areas such as JSGI, Web Sockets, HTTP clients. Eventually we should see a high level of compatibility between applications written in JavaScript for deployment on any of the platforms described above (and the many others I've not looked at) making developing services in JavaScript less dependent on the foibles of any one deployment platform.
[http://zope.cetis.ac.uk/members/scott/blogview?entry=20110124133546]

_SPECIFIC:
* CommonJS#cptIt

ljs.STRICT

_CREATED: {2013-06-25}

name::
* McsEngl.ljs.STRICT@cptIt,
* McsEngl.ljs'strict-mode@cptIt,
* McsEngl.ljs.strict-mode@cptIt,
* McsEngl.ljsstrictmode@cptIt,
* McsEngl.strict-mode-of-js@cptIt,
* McsEngl.strict-variant-of-js@cptIt,

* McsEngl.lsj@cptIt,
* McsEngl.lgjsst@cptIt,

_DESCRIPTION:
The strict mode was introduced in ECMAScript 5.1, which is a restricted variant of JavaScript and provides better security and stronger error checking.
To enable it, place the directive 'use strict' at the top of a function body. This mode affects the execution context making this to be undefined.
[http://rainsoft.io/gentle-explanation-of-this-in-javascript/]
===
According to Lloyd you can now place
"use strict";
at the top of your file in node >= 0.10.7, but if you want your whole app to run in strict you can do this
node --use_strict
[http://stackoverflow.com/a/14201618]
===
4.2.2 The Strict Variant of ECMAScript

The ECMAScript Language recognises the possibility that some users of the language may wish to restrict their usage of some features available in the language. They might do so in the interests of security, to avoid what they consider to be error-prone features, to get enhanced error checking, or for other reasons of their choosing. In support of this possibility, ECMAScript defines a strict variant of the language. The strict variant of the language excludes some specific syntactic and semantic features of the regular ECMAScript language and modifies the detailed semantics of some features. The strict variant also specifies additional error conditions that must be reported by throwing error exceptions in situations that are not specified as errors by the non-strict form of the language.

The strict variant of ECMAScript is commonly referred to as the strict mode of the language. Strict mode selection and use of the strict mode syntax and semantics of ECMAScript is explicitly made at the level of individual ECMAScript code units. Because strict mode is selected at the level of a syntactic code unit, strict mode only imposes restrictions that have local effect within such a code unit. Strict mode does not restrict or modify any aspect of the ECMAScript semantics that must operate consistently across multiple code units. A complete ECMAScript program may be composed for both strict mode and non-strict mode ECMAScript code units. In this case, strict mode only applies when actually executing code that is defined within a strict mode code unit.

In order to conform to this specification, an ECMAScript implementation must implement both the full unrestricted ECMAScript language and the strict mode variant of the ECMAScript language as defined by this specification. In addition, an implementation must support the combination of unrestricted and strict mode code units into a single composite program.
[http://synagonism.net/standard/techInfo/ecma.262.51.2011.html#idSec4.2.2H3]

lsj'browser-compatibility

name::
* McsEngl.lsj'browser-compatibility@cptIt,

Strict mode in browsers
The major Browsers now implement strict mode. However, don't blindly depend on it since there still are numerous Browser versions used in the wild that only have partial support for strict mode or do not support it at all (e.g. Internet Explorer below version 10!). Strict mode changes semantics. Relying on those changes will cause mistakes and errors in browsers which don't implement strict mode. Exercise caution in using strict mode, and back up reliance on strict mode with feature tests that check whether relevant parts of strict mode are implemented. Finally, make sure to test your code in browsers that do and don't support strict mode. If you test only in browsers that don't support strict mode, you're very likely to have problems in browsers that do, and vice versa.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode]

lsj'cause

name::
* McsEngl.lsj'cause@cptIt,

_REASON:
Reasons

The current version of the specification — ES5 doesn’t change the syntax much. As one of the incompatible syntactic innovations can be mentioned e.g. an accessor property (getter/setter) defined in the declarative view, with using object initialiser. Although, even this new syntactic feature isn’t new for some implementations (e.g. for SpiderMonkey), which had such constructions before standardizing the ES5. Some other new syntax constructions and ideological aspects which can be based on that new syntax are leaved for the future ECMAScript version — ES6 aka Harmony. Instead, all innovations of the ES5 are made in the context of already existed ES3 syntax constructs. From this viewpoint, ES5 and namely all new meta-methods of the Object constructor (such as e.g. Object.create and other) can be treated as just an additional library (a framework) which is “loaded” before any other library used in a project.

However, without changing the syntax, ES5 provides some important semantic innovations, as e.g. ability to control property attributes, objects extensibility, already mentioned accessor properties, etc. All these features are the good addition for the ES3.

At the same time some features of ES3 were recognized as error-prone, not enough secure or having poor errors checking at parsing stage. In addition, some ES3 features were marked as deprecated and possibly will be removed from the next version of the language. From this point of view, ES5 is a transitional version of the specification.

For that purpose, ECMA-262-5 defines a strict variant of the language. This variant excludes some specific syntactic and semantic features of the regular ECMAScript language and modifies the detailed semantics of some features. The strict variant also specifies additional error conditions that must be reported by throwing error exceptions in some situations that are not specified as errors by the non-strict form.

The strict variant of ECMAScript is commonly referred to as the strict mode of the language.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-2-strict-mode/#reasons]

lsj'evaluation

name::
* McsEngl.lsj'evaluation@cptIt,

Benefits of strict mode
Strict mode changes previously accepted “bad syntax” into real errors.
In JavaScript mistyping a variable name creates a new global variable. In strict mode, this will throw an error, making it impossible to accidentally create a property of window variable.
In normal JavaScript, a developer will not receive any error feedback assigning values to non-writable properties. And also any assignment to a non-writable property, a getter-only property, a non-existing property, a non-existing variable, or a non-existing object, will throw an error
[http://qnimate.com/javascript-strict-mode-in-nutshell/]

lsj'reserved-word

name::
* McsEngl.lsj'reserved-word@cptIt,

_DESCRIPTION:
The following set of identifiers is classified as future reserved keywords and cannot be used as variable or function names: implements, interface, let, package, private, protected, public, static, and yield.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-2-strict-mode/#future-reserved-keywords]

lsj'resource

name::
* McsEngl.lsj'resource@cptIt,

_ADDRESS.WPG:
* http://qnimate.com/javascript-strict-mode-in-nutshell//

lsj'restrictions

name::
* McsEngl.lsj'restrictions@cptIt,
* McsEngl.lsj'error@cptIt,

_ADDRESS.WPG:
* https://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EL-GR&k=k(VS.WebClient.Help.SCRIPT1046),

Strict mode doesn't just have runtime requirements, it also defines the following as syntax errors:
The with statement
Duplicate named arguments for functions
Octal numeric literals (such as 010)
Duplicate property names (in ES5 only, ES6 eliminates this error)
Use of implements, interface, let, package, private, protected, public, static, and yield as identifiers.
All of these are not syntax errors when running in nonstrict mode.
[NCZOnline Blog - ES6 module loading: More complicated than you think]

lsj'scope

name::
* McsEngl.lsj'scope@cptIt,

_DESCRIPTION:
As we mentioned, we can choose a strictness for a particular code unit, defining a scope of the strict variant. In the following example, we do not use the strict mode for the whole program, but use it only for the foo function:

var eval = 10; // OK

function foo() {
"use strict";
alert(eval); // 10
eval = 20; // SyntaxError
}

foo();
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-2-strict-mode/#definition]

lsj'strict-directive

name::
* McsEngl.lsj'strict-directive@cptIt,
* McsEngl.ljs'use-strict-directive@cptIt,
* McsEngl.ljs'sentence.strict@cptIt,
* McsEngl.ljs'strict-sentence@cptIt,
* McsEngl.ljs'use-strict-directive@cptIt,

_DESCRIPTION:
A Use Strict Directive is a directive in a Directive Prologue whose string literal is either the exact character sequences "use strict" or 'use strict'. A Use Strict Directive may not contain an escape sequence or line continuation. This directive is used for specifying a strict mode of a code unit.
[http://dmitrysoshnikov.com/ecmascript/es5-chapter-2-strict-mode/#definition]

ljs.STRICT.NO

_CREATED: {2014-02-10}

name::
* McsEngl.ljs.STRICT.NO@cptIt,
* McsEngl.ljs'unrestrict-mode@cptIt,
* McsEngl.ljs.unrestrict-mode@cptIt,
* McsEngl.unrestrict-mode-of-js@cptIt,
* McsEngl.unrestrict-variant-of-js@cptIt,

ljs.UNOBTRUSIVE

name::
* McsEngl.ljs.UNOBTRUSIVE@cptIt,
* McsEngl.unobtrusive-javascript@cptIt,

_DESCRIPTION:
Unobtrusive JavaScript is a general approach to the use of JavaScript in web pages. Though the term is not formally defined, its basic principles are generally understood to include: Separation of functionality (the "behavior layer") from a Web page's structure/content and presentation.
[en.wikipedia.org/wiki/Unobtrusive_JavaScript]
===
Lately, though, there has been a lot of emphasis being placed on what has been called Unobtrusive JavaScript. Read on.
Unobtrusive JavaScript
Current web development trends point to greater separation between content, style, and behavior. What that means is removing as much as possible scripts from the HTML markup and placing them exclusively in external files.
[http://www.learn-javascript-tutorial.com/Production-Grade-JS.cfm]

ljs.XULRunner

_CREATED: {2014-02-12}

name::
* McsEngl.ljs.XULRunner@cptIt,
* McsEngl.XULRunner@cptIt,

_DESCRIPTION:
What is XULRunner?
XULRunner is the name of a platform (framework) developed by Mozilla for their flagship web browser, Firefox. [Note: anachronism! XULRunner used to be called GRE, the Gecko Runtime Environment. And before that it was called XPFE, the Cross Platform Front End. It was developed by Netscape for their flagship web browser, Netscape Navigator.]
The best analogy to explain XULRunner is to imagine the Firefox web browser, stripped of its user interface. That means, Firefox without anything the user can see, touch, or interact with in any way. On the surface, this sounds like Firefox just goes away in a *poof* with a press of the delete key. But really, that's all the "Firefox" part of the application is: the user interface. The hidden engine that makes it all come together as "Firefox" is XULRunner.
What Makes XULRunner a Platform?
XULRunner is kind of like Java. Some of the main differences are subtle, but important; Java is the name of a virtual machine (Java byte code interpreter), the name of a framework (a huge library of programmable objects and classes), and the name of a programming language. XULRunner is a bit like Java's VM and framework in one package.
XULRunner is also kind of like the .NET framework. The .NET framework is also a VM, like Java. And .NET is also a framework of objects and classes, again like Java. One thing that makes .NET different from Java is that .NET is not a programming language; .NET programs are typically written in the C# language.
However, XULRunner is not .NET, and it is not Java. The main thing that XULRunner shares with these technologies is that it is also a framework for cross-platform application development. In some ways, it even competes directly with .NET and Java.
How Does Firefox Fit into the XULRunner Equation?
Since version 3.0, Firefox has been built directly on top of XULRunner. This is not exactly how Mozilla envisioned XULRunner would be used, though. The original idea was to release the XULRunner runtime. And then at the same time, release XULRunner applications which would use it. Some of these applications would be Firefox, Thunderbird, Songbird, etc. Similar to the way which Java and .NET programs are released!
Sadly, XULRunner is not yet mature enough to make this a reality. So instead, XULRunner is "privately" included with Firefox, Thunderbird, and Songbird. This does bring one small advantage though: If your target audience has Firefox installed, they won't need to install XULRunner separately nor will you have to include the full 10MB XULRunner runtime in your application. Your users can just run your application using Firefox's XULRunner.
That's Fantastic, Really. But What the Heck is it?
OK, here's the straight-up truth in as few words as I can manage: XULRunner enables application developers to write rich-GUI programs that run on every major operating system, using languages and technologies that web developers are already familiar with.
That means, you write your GUI in a structured "language" based on XML; it looks a lot like XHTML.
Then you make your GUI pretty with CSS.
Finally, you give your GUI functionality with JavaScript.
Wait, You Mean My Program is Written in JavaScript?!
Kind of. At least, the parts which connect directly to your GUI are written in JavaScript. If you want, you could also write most of your program in C++, and call your C++ object methods from JavaScript.
The technology that enables JavaScript to talk directly to C++ is called "XPConnect". XPConnect also allows JavaScript to talk to Python, Java, and many other XPConnect-enabled languages (meaning someone actually wrote an XPConnect bridge for those languages).
XPConnect is great to get your code out of JavaScript land, for example if your have to run a really tight algorithm that needs as much speed as it can get. But XPConnect presents a lot of additional overhead. For one thing, all of the function arguments that you pass between JavaScript and C++ must first be converted by XPConnect into data structures which will make sense to the language on the other side of the fence. So, calling in and out of XPConnect can be very inefficient.
Oh, So Why Would Anyone Want to Use XPConnect?
Because it allows you to do things that ordinary JavaScript cannot! For example, JavaScript has no concept of file I/O. But C++ does. Writing an XPCOM component in C++ to do simple file I/O operations can effectively give JavaScript a means to open files for reading and writing, and doing other similar things like directory traversal. This is how JavaScript is capable of being used to develop real-world desktop applications; XULRunner contains a lot of these XPCOM components by default. File I/O and directory traversal are included out-of-the-box, for instance.
Hey, Slow Down! What's this XPCOM Thing, Now?
XPCOM is the Cross Platform Component Object Model. Without getting too technical and knee deep in new acronyms and jargon, XPCOM is the general catch-all term for everything on the "other" side of the XPConnect fence. XPCOM is a strange and mysterious land that we will explore in a later adventure. For now, you can think of XPCOM components as a .DLL on Windows, a .SO on Linux, and a .DYLIB on OS X; it's really just a dynamically linked library, wrapped in an enigma.
Alright, So You Mean My Program Still has to be Written in JavaScript?
Pretty much.
But all is not lost! JavaScript is really a wonderful and extremely powerful programming language. It's not just a simple scripting language that makes web browser users' eyes bleed. When used properly and responsibly, JavaScript can be coaxed into building things like, well, Firefox! And pretty much every add-on extension for Firefox, or even your own full-fledged application.
JavaScript is also a lot faster than you might think, starting with XULRunner version 1.9.1 (which Firefox 3.5 is based on). The technology within XULRunner that makes JavaScript so fast is called "Tracemonkey".
[http://www.kodewerx.org/wiki/A_Brief_Introduction_To_XULRunner:_Part_1]

_ADDRESS.WPG:
* http://www.kodewerx.org/wiki/A_Brief_Introduction_To_XULRunner:_Part_1,

ljs.EVOLUTING#cptCore546.171#

name::
* McsEngl.ljs.EVOLUTING@cptIt,
* McsEngl.ljs'evoluting@cptIt,
* McsEngl.ljs'version@cptIt,

{time.2011}: lcpJs'time2011}:
Stable release  1.8.5[2] (March 22, 2011; 2 years ago)
===
JavaScript1.8.5
Stable release  1.8.5[2] (March 22, 2011; 2 years ago)
[http://en.wikipedia.org/wiki/JavaScript]

{time.2009}: lcpJs'time2009}:
* lcpJs'2009: ECMAScript5th
Standard ECMA-262
ECMAScript Language Specification
5th edition (December 2009)
===
* 2009-06-22: 1.8.2 release.
Stable release  1.8.2[1] (June 22, 2009; 15 months ago (2009-06-22))

{time.2002}: lcpJs'time2002}:
lcpJs'2002: ECMAScript 3rd
The third edition of the Standard introduced powerful regular expressions, better string handling, new control statements, try/catch exception handling, tighter definition of errors, formatting for numeric output and minor changes in anticipation of forthcoming internationalisation facilities and future language growth. The third edition of the ECMAScript standard was adopted by the Ecma General Assembly of December 1999 and published as ISO/IEC 16262:2002 in June 2002.
[http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf]

{time.1999}: lcpJs'time1999}:
Standard ECMA-262 3rd Edition - December 1999.
ECMAScript Edition 3 (aka JavaScript 1.5)

{time.1998}: lcpJs'time1998}:
lcpJs'1998: ECMAScript 2rd
That Ecma Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved as international standard ISO/IEC 16262, in April 1998. The Ecma General Assembly of June 1998 approved the second edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the second edition are editorial in nature.
[http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf]

{time.1997}: lcpJs'time1997}:
lcpJs'1997: ECMAScript 1rd
The development of this Standard started in November 1996. The first edition of this Ecma Standard was adopted by the Ecma General Assembly of June 1997.
[http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf]

{time.1995}: lcpJs'time1995}:
Appeared in  1995; 18 years ago
[http://en.wikipedia.org/wiki/JavaScript]
introduced as LiveScript. Renamed JavaScript,
[http://www.javaworld.com/javaworld/jw-03-1996/jw-03-javascript.intro.html, Rawn Shah]

JavaScript1.5  Navigator 6.0 Mozilla (open source browser)
[http://www.webreference.com/javascript/reference/core/preface.html#1003515]

JavaScript1.4  
[http://www.webreference.com/javascript/reference/core/preface.html#1003515]

JavaScript1.3  Navigator 4.06-4.7x
[http://www.webreference.com/javascript/reference/core/preface.html#1003515]

JavaScript1.2  Navigator 4.0-4.05
[http://www.webreference.com/javascript/reference/core/preface.html#1003515]

JavaScript1.1  Navigator 3.0
[http://www.webreference.com/javascript/reference/core/preface.html#1003515]

JavaScript1.0  Navigator 2.0
[http://www.webreference.com/javascript/reference/core/preface.html#1003515]

ljs'evoluting.CONCEPT

name::
* McsEngl.ljs'evoluting.CONCEPT@cptIt,

{time.2015-05-19}:
=== algo & archetype
I merged these attributes.

lcp.instance.MERCURY {1995} (logic)

_CREATED: {2014-02-24}

name::
* McsEngl.lcp.mercury,

_DESCRIPTION:
Paradigm(s)  Logic, functional, object-oriented
Appeared in  1995
Designed by  Zoltan Somogyi
Developer  University of Melbourne
Stable release  14.01 (February 10, 2014)
Typing discipline  Strong, static, polymorphic
Major implementations  Melbourne Mercury Compiler
Influenced by  Prolog, Hope, Haskell
OS  Cross-platform (Unix, Mac OS X, Windows)
License  GPL for compiler, LGPL for standard library
Website  www.mercurylang.org
Mercury is a functional logic programming language geared towards real-world applications. It was initially developed at the University Of Melbourne Computer Science department under the supervision of Zoltan Somogyi. The first version was developed by Fergus Henderson, Thomas Conway and Zoltan Somogyi and was released on April 8, 1995.

Mercury is a purely declarative logic language. It is related to both Prolog and Haskell.[1] It features a strong, static, polymorphic type system, as well as a strong mode and determinism system.

The official implementation, the Melbourne Mercury Compiler, is available for most Unix platforms, including Mac OS X, as well as for Microsoft Windows.
[http://en.wikipedia.org/wiki/Mercury_(programming_language)]
===
“Mercury is a general purpose language intended to support the creation of large, reliable and efficient applications.”
Mercury is a logic/functional programming language which combines the clarity and expressiveness of declarative programming with advanced static analysis and error detection features.

Its highly optimized execution algorithm delivers efficiency far in excess of existing logic programming systems, and close to conventional programming systems. Mercury addresses the problems of large-scale program development, allowing modularity, separate compilation, and numerous optimization/time trade-offs.
[http://www.mercurylang.org/]

meta-info

page-wholepath: https://synagonism.net / dirFolioViews / FvMcsIt / FvMcsIt4