Jelajahi Sumber

JSHint coding standards.

Frederic G. MARAND 8 tahun lalu
induk
melakukan
ce211ba6d9

+ 18 - 0
.editorconfig

@@ -0,0 +1,18 @@
+#.editorconfig
+# Meteor adapted EditorConfig, http://EditorConfig.org
+# By RaiX 2013
+
+root = true
+
+[*.js]
+end_of_line = lf
+insert_final_newline = true
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+charset = utf-8
+max_line_length = 80
+indent_brace_style = 1TBS
+spaces_around_operators = true
+quote_type = auto
+# curly_bracket_next_line = true

+ 2 - 0
.jshintignore

@@ -0,0 +1,2 @@
+client/compatibility
+packages

+ 147 - 0
.jshintrc

@@ -0,0 +1,147 @@
+//.jshintrc
+{
+    // JSHint Meteor Configuration File
+    // Match the Meteor Style Guide
+    //
+    // By @raix with contributions from @aldeed and @awatson1978
+    // Source https://github.com/raix/Meteor-jshintrc
+    //
+    // See http://jshint.com/docs/ for more details
+
+    "maxerr"        : 50,       // {int} Maximum error before stopping
+
+    // Enforcing
+    "bitwise"       : true,     // true: Prohibit bitwise operators (&, |, ^, etc.)
+    "camelcase"     : true,     // true: Identifiers must be in camelCase
+    "curly"         : true,     // true: Require {} for every new block or scope
+    "eqeqeq"        : true,     // true: Require triple equals (===) for comparison
+    "forin"         : true,     // true: Require filtering for..in loops with obj.hasOwnProperty()
+    "immed"         : false,    // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());`
+    "indent"        : 2,        // {int} Number of spaces to use for indentation
+    "latedef"       : false,    // true: Require variables/functions to be defined before being used
+    "newcap"        : false,    // true: Require capitalization of all constructor functions e.g. `new F()`
+    "noarg"         : true,     // true: Prohibit use of `arguments.caller` and `arguments.callee`
+    "noempty"       : true,     // true: Prohibit use of empty blocks
+    "nonew"         : false,    // true: Prohibit use of constructors for side-effects (without assignment)
+    "plusplus"      : false,    // true: Prohibit use of `++` & `--`
+    "quotmark"      : false,    // Quotation mark consistency:
+                                //   false    : do nothing (default)
+                                //   true     : ensure whatever is used is consistent
+                                //   "single" : require single quotes
+                                //   "double" : require double quotes
+    "undef"         : true,     // true: Require all non-global variables to be declared (prevents global leaks)
+    "unused"        : true,     // true: Require all defined variables be used
+    "strict"        : false,     // true: Requires all functions run in ES5 Strict Mode
+    "trailing"      : true,     // true: Prohibit trailing whitespaces
+    "maxparams"     : false,    // {int} Max number of formal params allowed per function
+    "maxdepth"      : false,    // {int} Max depth of nested blocks (within functions)
+    "maxstatements" : false,    // {int} Max number statements per function
+    "maxcomplexity" : false,    // {int} Max cyclomatic complexity per function
+    "maxlen"        : 80,       // {int} Max number of characters per line
+
+    // Relaxing
+    "asi"           : false,     // true: Tolerate Automatic Semicolon Insertion (no semicolons)
+    "boss"          : false,     // true: Tolerate assignments where comparisons would be expected
+    "debug"         : false,     // true: Allow debugger statements e.g. browser breakpoints.
+    "eqnull"        : false,     // true: Tolerate use of `== null`
+    "es5"           : false,     // true: Allow ES5 syntax (ex: getters and setters)
+    "esnext"        : false,     // true: Allow ES.next (ES6) syntax (ex: `const`)
+    "moz"           : false,     // true: Allow Mozilla specific syntax (extends and overrides esnext features)
+                                 // (ex: `for each`, multiple try/catch, function expression…)
+    "evil"          : false,     // true: Tolerate use of `eval` and `new Function()`
+    "expr"          : false,     // true: Tolerate `ExpressionStatement` as Programs
+    "funcscope"     : false,     // true: Tolerate defining variables inside control statements"
+    "globalstrict"  : true,      // true: Allow global "use strict" (also enables 'strict')
+    "iterator"      : false,     // true: Tolerate using the `__iterator__` property
+    "lastsemic"     : false,     // true: Tolerate omitting a semicolon for the last statement of a 1-line block
+    "laxbreak"      : false,     // true: Tolerate possibly unsafe line breakings
+    "laxcomma"      : false,     // true: Tolerate comma-first style coding
+    "loopfunc"      : false,     // true: Tolerate functions being defined in loops
+    "multistr"      : false,     // true: Tolerate multi-line strings
+    "proto"         : false,     // true: Tolerate using the `__proto__` property
+    "scripturl"     : false,     // true: Tolerate script-targeted URLs
+    "smarttabs"     : false,     // true: Tolerate mixed tabs/spaces when used for alignment
+    "shadow"        : false,     // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
+    "sub"           : false,     // true: Tolerate using `[]` notation when it can still be expressed in dot notation
+    "supernew"      : false,     // true: Tolerate `new function () { ... };` and `new Object;`
+    "validthis"     : false,     // true: Tolerate using this in a non-constructor function
+
+    // Environments
+    "browser"       : true,     // Web Browser (window, document, etc)
+    "couch"         : false,    // CouchDB
+    "devel"         : true,     // Development/debugging (alert, confirm, etc)
+    "dojo"          : false,    // Dojo Toolkit
+    "jquery"        : false,    // jQuery
+    "mootools"      : false,    // MooTools
+    "node"          : false,    // Node.js
+    "nonstandard"   : false,    // Widely adopted globals (escape, unescape, etc)
+    "prototypejs"   : false,    // Prototype and Scriptaculous
+    "rhino"         : false,    // Rhino
+    "worker"        : false,    // Web Workers
+    "wsh"           : false,    // Windows Scripting Host
+    "yui"           : false,    // Yahoo User Interface
+    //"meteor"        : false,    // Meteor.js
+
+    // Legacy
+    "nomen"         : false,    // true: Prohibit dangling `_` in variables
+    "onevar"        : false,    // true: Allow only one `var` statement per function
+    "passfail"      : false,    // true: Stop on first error
+    "white"         : false,    // true: Check against strict whitespace and indentation rules
+
+    // Custom globals, from http://docs.meteor.com, in the order they appear there
+    "globals"       : {
+      "Meteor": false,
+      "DDP": false,
+      "Mongo": false, //Meteor.Collection renamed to Mongo.Collection
+      "Session": false,
+      "Accounts": false,
+      "Template": false,
+      "Blaze": false,  //UI is being renamed Blaze
+      "UI": false,
+      "Match": false,
+      "check": false,
+      "Tracker": false, //Deps renamed to Tracker
+      "Deps": false,
+      "ReactiveVar": false,
+      "EJSON": false,
+      "HTTP": false,
+      "Email": false,
+      "Assets": false,
+      "Handlebars": false,      // https://github.com/meteor/meteor/wiki/Handlebars
+      "Package": false,
+      "App": false, //mobile-config.js
+
+      // Meteor internals
+      "DDPServer": false,
+      "global": false,
+      "Log": false,
+      "MongoInternals": false,
+      "process": false,
+      "WebApp": false,
+      "WebAppInternals": false,
+
+      // globals useful when creating Meteor packages
+      "Npm": false,
+      "Tinytest": false,
+
+      // common Meteor packages
+      "Random": false,
+      "_": false,               // Underscore.js
+      "$": false,               // jQuery
+      "Router": false,           // iron-router
+
+      // Microscope globals
+      // - Collections
+      "Errors": true,
+      "Mongo": true,
+      "Posts": true,
+
+      // - Helpers
+      "ownsDocument": true,
+      "throwError": true,
+
+
+      // - Fictive global just for the last comma
+      "xyzzy": false
+    }
+}

+ 16 - 0
client/helpers/errors.js

@@ -0,0 +1,16 @@
+/**
+ * @file
+ *
+ *
+ * User: marand
+ * Date: 03/09/15
+ * Time: 16:46
+ */
+
+// Local client-only collection.
+Errors = new Mongo.Collection(null);
+
+// Global
+throwError = function(message) {
+  Errors.insert({ message: message });
+};

+ 3 - 1
client/templates/posts/post_edit.js

@@ -19,7 +19,9 @@ Template.postEdit.events({
     };
 
 
-    Posts.update(currentPostId, { $set: postProperties },function (error, result) {
+    Posts.update(currentPostId, {
+      $set: postProperties
+    },function (error) {
       // Display the error to the user and abort.
       if (error) {
         return alert(error.reason);

+ 1 - 1
client/templates/posts/post_item.js

@@ -10,7 +10,7 @@
 Template.postItem.helpers({
   ownPost: function ()  {
     // Template is invoked in the context of a Post, so 'this' is a Post.
-    return this.userId = Meteor.userId();
+    return this.userId === Meteor.userId();
   },
 
   domain: function () {

+ 1 - 1
lib/permissions.js

@@ -10,4 +10,4 @@
 // Global, so no "var".
 ownsDocument = function (userId, doc) {
   return doc && doc.userId === userId;
-}
+};

+ 3 - 2
lib/router.js

@@ -16,7 +16,8 @@ Router.configure({
   }
 });
 
-// C'est un nom de route, pas un nom de template. Mais IR le prend comme nom de template par défaut.
+// C'est un nom de route, pas un nom de template. Mais IR le prend comme nom de
+// template par défaut.
 Router.route('/', {
   name: 'postsList'
 });
@@ -51,7 +52,7 @@ var requireLogin = function () {
   if (!Meteor.user()) {
     if (Meteor.loggingIn()) {
       // Défini dans Router.configure().
-      this.render(this.loadingTemplate)
+      this.render(this.loadingTemplate);
     }
     else {
       this.render('accessDenied');

+ 1 - 1
server/publications.js

@@ -20,6 +20,6 @@ Meteor.publish('userData', function () {
       fields: {
         'emails': 1
       }
-    })
+    });
   }
 });