mail/js
Christoph Wurst 82996e534e
Fix saving a draft that has no predecessor
2016-09-21 18:29:21 +02:00
..
controller rework account-folders relation 2016-09-21 00:12:42 +02:00
models rework account-folders relation 2016-09-21 00:12:42 +02:00
service Fix saving a draft that has no predecessor 2016-09-21 18:29:21 +02:00
templates show error-view instead of yellow notification on content loading errors 2016-09-16 16:42:19 +02:00
tests Merge pull request #84 from nextcloud/tests/test_error_view 2016-09-21 12:00:17 +02:00
util Merge pull request #57 from nextcloud/error-view 2016-09-18 18:12:46 +02:00
views Merge pull request #98 from nextcloud/fix-account-settings-switching 2016-09-21 16:24:15 +02:00
OC.js add license header script and update php+js license headers 2016-08-04 15:45:00 +02:00
README.md fix nc branding 2016-08-29 14:47:22 +02:00
app.js Merge pull request #1631 from owncloud/prefetch-incoming-mails 2016-08-28 09:36:15 +02:00
autoredirect.js JSCS for autoredirect & background 2015-08-30 12:13:34 +02:00
background.js rework account-folders relation 2016-09-21 00:12:42 +02:00
cache.js use session storage instead of local storage 2016-08-04 18:01:46 +02:00
jquery.js add license header script and update php+js license headers 2016-08-04 15:45:00 +02:00
notification.js add license header script and update php+js license headers 2016-08-04 15:45:00 +02:00
radio.js add license header script and update php+js license headers 2016-08-04 15:45:00 +02:00
require_config.js Fix requirejs for other locations than apps/ 2016-08-25 10:18:25 +02:00
routecontroller.js rework account-folders relation 2016-09-21 00:12:42 +02:00
router.js Merge pull request #1609 from owncloud/search-rework 2016-08-05 17:49:20 +02:00
search.js Merge pull request #1609 from owncloud/search-rework 2016-08-05 17:49:20 +02:00
searchproxy.js add license header script and update php+js license headers 2016-08-04 15:45:00 +02:00
state.js add license header script and update php+js license headers 2016-08-04 15:45:00 +02:00

README.md

JavaScript Development

All source files are stored inside this directory or subdirectories of it. With the help of requirejs any .js and .html template file is loaded into the browser asynchronously if needed. Make sure you have debug mode enabled in your development setup because this loads source files instead of the compressed one.

Optimizing file loading for production use

While it's convenient to be able to change any source file and see those changes on the next page load, it takes some time to load 50+ files right after the browser has loaded the page. Fortunately, requirejs has an optimizer which can be easily executed with the Makefile in the root of this repository. Simply run

make optimize-js

inside the project's root directory. This combines and compresses all used JavaScript source files and HTML template files into one file: js/mail.min.js. If debug mode is disabled, this compressed file is then used.

Coding guidelines

Generally, any code contributed to this repository should comply with the general Nextcloud coding style guidelines.

Currently we use several frameworks and their extensions. Namely, this app is build with jQuery, Underscore.js, Backbone.js and Backbone Marionette. Additionally, Require.js is used for loading module dependencies (code and template).

The client-side software is structured as Model-View-Controller application.

Modules

Since Require.js is used for loading module dependencies, all code (Model, View, Controller, Service, Templates) are structured as modules. A typical module looks like this:

define(function(require) {
  'use strict';
  
  // get any other dependencies
  var Backbone = require('backbone');
  
  // create module here
  var MessageFlag = Backbone.Model.extend{
    defaults: {
      name: '',
      value: false
    },
    doSomethingUseful: function(param1) {
      // Something useful
    }
  };
  
  // return the module
  return MessageFlag;
});

Since this is a model, it would be stored to js/model/messageflag.js. Any other module that depends on that module can require it with require('model/messageflag').

For controllers, services and any other module that is used as singleton, the 'revealing module pattern' is used. There are many tutorials on the internet that explain how it works and what it's advantages are.

Models

All models should be Backbone models. Usually this means you create models by extending Backbone.Model:

define(function(require) {
  'use strict';
  
  return Backbone.Model.extend({
    foo: 13,
    bar: function(input) {
      return input * 2;
    }
  });
});

Views

TODO

Controller

TODO

Templates

TODO