========================== Kupu JavaScript styleguide ========================== Small style guide for the JavaScript code. Please adhere to this style guide whenever possible. Of course if something isn't mentioned here that doesn't mean you can do whatever you like, try to find a similar pattern in the code and follow that, if you think it's useful to add a line about that pattern in this guide you are very welcome to do so. If something is not mentioned here and a similar pattern can not be found in the code find a sensible solution and add the pattern here if appropriate. Some general rules: ------------------- * Explicit is better than implicit ;) When writing code, try to avoid implementing magic, don't *ever* think users/integrators are stupid and need magic. Usually adding magic means obscuring logic and removing flexibility and we would like to avoid both. * Use verbose variable names rather then short ones. Variable names like 'i' and 'n' can be used, but only in small blocks like for and while loops Some syntactical rules: ----------------------- * A comma should be followed by a whitespace * Operands (+, -, = etc.) are surroned by exactly one space, e.g.:: a = b + c; instead of a=b+c; * The body of loops should *always* be surrounded by curly braces, even if it's only a single line. A loop starts with the loop statement, then a space, then a curly brace and on the next line the body starts with indentation. * Opening parentheses are not followed by a space nor are closing preceded by one, e.g.:: doSomething(some_var); instead of doSomething( some_var ); * A closing curly brace should be followed by a semi-colon, except when used inline, e.g.:: doSomething(some_var, function() {alert('foo')}); * Indentation in ECMAScript should be done using four spaces, in HTML/XML markup two spaces for child elements and four spaces for attributes. *Never* use tabs. * We use UNIX line endings (no \r!). * Try (at least *try*) not to make lines more than 80 characters wide. * Short comments should be lowercase. * Each method (at least when it's public) should have a docstring, the first line of that docstring should be a brief explanation of the method, when the docstring consists of only one line the comment is closed on the same line, else the line is followed by a whiteline, the next line is indented deeper than the first one and the comment is closed a line below the last line of the comment. * Even though the original way of defining class methods was inline, we found out that there are certain problems with that, so we switched the recommended way of attachin methods to the more common notation of 'Class.prototype.method = function() {...}'. Please make sure all code you check in follows this notation, as the old notation can lead to subtle bugs in your code (for instance, attributes with an instance value are shared in instances of classes when using the old notation). * For the above mentioned reason, all objects that have attributes should have a method called 'initialize', which should be called after object instantiation from the calling code. All instance variables must be defined in that method, since if they're defined in the constructor they're, under certain circumstanced, shared by all instances of the class. * No double newlines, classes and functions are seperated with a single white line. * Class names are camel cased starting with an upper case char, methods are also camel cased but they start with a lowercase char, variables can vary (usually depending on the type of var: an instance will usually be camel cased and a simple integer or string will usually be completely lowercase). * When writing documentation, use reStructuredText rules. Most of the kupu documentation you find is reST.