Merge branch 'master' of github.com:benweet/stackedit
This commit is contained in:
		
						commit
						eb16f685e3
					
				| @ -34,6 +34,12 @@ StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown | |||||||
|  - [Developer guide][2] |  - [Developer guide][2] | ||||||
|  - [Theming guide][3] |  - [Theming guide][3] | ||||||
| 
 | 
 | ||||||
|  | ### Note: | ||||||
|  | 
 | ||||||
|  | Full access to Dropbox or Google Drive is required to be able to import any document in StackEdit. | ||||||
|  | Imported documents are downloaded in your browser and are not transmitted to a server. Your passwords | ||||||
|  | and credentials are never transmitted to a server and only stay in your browser locally. | ||||||
|  | 
 | ||||||
| > **NOTE:** This page has been written and published with [StackEdit][4]. | > **NOTE:** This page has been written and published with [StackEdit][4]. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,18 +1,62 @@ | |||||||
| Developer guide | Developer guide | ||||||
| =============== | =============== | ||||||
| 
 | 
 | ||||||
|  | Getting started | ||||||
|  | --------------- | ||||||
| 
 | 
 | ||||||
|  | #### Pre-requisites | ||||||
|  | 
 | ||||||
|  | - [Git][1] | ||||||
|  | - [node.js/npm][2] | ||||||
|  | - [Grunt][3] | ||||||
|  | - [Bower][4] | ||||||
|  | 
 | ||||||
|  | #### Before debugging | ||||||
|  | 
 | ||||||
|  | - Download dependencies using [Bower][4]: | ||||||
|  | 
 | ||||||
|  | 		bower install | ||||||
|  | 
 | ||||||
|  | - To serve **StackEdit** in http://localhost/stackedit, add something like this in `httpd.conf`: | ||||||
|  | 
 | ||||||
|  | 		Alias /stackedit /Users/benweet/workspace/stackedit  | ||||||
|  | 
 | ||||||
|  | 		<Directory /Users/benweet/workspace/stackedit> | ||||||
|  | 		    Options Indexes FollowSymLinks MultiViews | ||||||
|  | 		    AllowOverride None | ||||||
|  | 		    Order allow,deny | ||||||
|  | 		    Allow from all | ||||||
|  | 		</Directory> | ||||||
|  | 
 | ||||||
|  | - Open Chrome without application cache: | ||||||
|  | 
 | ||||||
|  | 		chrome --disable-application-cache | ||||||
|  | 
 | ||||||
|  | - Run **StackEdit** in debug mode (serve original files instead of minified): | ||||||
|  | 
 | ||||||
|  | 		http://localhost/stackedit/?debug | ||||||
|  | 
 | ||||||
|  | #### Add new dependencies | ||||||
|  | 
 | ||||||
|  | **NOTE:** StackEdit uses [RequireJS][6] for asynchronous module definition ([AMD][7]). | ||||||
|  | 
 | ||||||
|  | - Install new dependencies using [Bower][4]: | ||||||
|  | 
 | ||||||
|  | 		bower install <library> --save | ||||||
|  | 
 | ||||||
|  | - Add the new dependency to [RequireJS][6] configuration file (`main.js`): | ||||||
|  | 
 | ||||||
|  | 		grunt bower | ||||||
|  | 
 | ||||||
|  | #### Build/minify | ||||||
|  | 
 | ||||||
|  | 	grunt | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Architecture | Architecture | ||||||
| ------------ | ------------ | ||||||
| 
 | 
 | ||||||
| ![Architecture diagram][1] | ![Architecture diagram][5] | ||||||
| 
 |  | ||||||
| > **NOTE:** |  | ||||||
| 
 |  | ||||||
| > - StackEdit uses [RequireJS][2] for asynchronous module definition ([AMD][3]).  |  | ||||||
| > - [jQuery][4], [Underscore.js][5] or any other 3rd party libraries can be called from anywhere as long as they have been declared as module dependencies. |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ---------- | ---------- | ||||||
| @ -22,8 +66,8 @@ Architecture | |||||||
| 
 | 
 | ||||||
| The `core` module is responsible for: | The `core` module is responsible for: | ||||||
| 
 | 
 | ||||||
| - creating the [UI Layout][6], | - creating the [UI Layout][10], | ||||||
| - creating the [PageDown][7] editor, | - creating the [PageDown][11] editor, | ||||||
| - loading/saving the settings, | - loading/saving the settings, | ||||||
| - running periodic tasks, | - running periodic tasks, | ||||||
| - detecting the user activity, | - detecting the user activity, | ||||||
| @ -31,20 +75,20 @@ The `core` module is responsible for: | |||||||
| 
 | 
 | ||||||
| **Attributes:** | **Attributes:** | ||||||
| 
 | 
 | ||||||
| - `core.isOffline`: indicates the offline status of the application. | - `isOffline`: indicates the offline status of the application. | ||||||
| 
 | 
 | ||||||
| **Methods:** | **Methods:** | ||||||
| 
 | 
 | ||||||
| - `core.onReady(callback)`: sets a callback to be called when all modules have been loaded and the DOM is ready. | - `onReady(callback)`: sets a callback to be called when all modules have been loaded and the DOM is ready. | ||||||
| > **NOTE:** This is preferred over [jQuery's `.ready()`][8] because it ensures that all AMD modules are loaded by [RequireJS][9]). | > **NOTE:** This is preferred over [jQuery's `.ready()`][12] because it ensures that all AMD modules are loaded by [RequireJS][13]). | ||||||
| 
 | 
 | ||||||
| - `core.runPeriodically(callback)`: sets a callback to be called every second. | - `runPeriodically(callback)`: sets a callback to be called every second. | ||||||
| > **NOTE:** The callback will not run if the user is inactive or in StackEdit Viewer. User is considered inactive after 5 minutes of inactivity (mouse or keyboard). | > **NOTE:** The callback will not run if the user is inactive or in StackEdit Viewer. User is considered inactive after 5 minutes of inactivity (mouse or keyboard). | ||||||
| 
 | 
 | ||||||
| - `core.setOffline()`: can be called by any other modules when a network timeout occurs for instance. | - `setOffline()`: can be called by any other modules when a network timeout occurs for instance. | ||||||
| > **NOTE:** the offline status is also set by detecting the window `offline` event. `core.isOffline` is automatically set to `false` when the network is recovered. | > **NOTE:** the offline status is also set by detecting the window `offline` event. `core.isOffline` is automatically set to `false` when the network is recovered. | ||||||
| 
 | 
 | ||||||
| - `core.initEditor(fileDesc)`: creates or refreshes the [PageDown][10] editor with a given [`FileDescriptor`][11] object. | - `initEditor(fileDesc)`: creates or refreshes the [PageDown][14] editor with a given [`FileDescriptor`][15] object. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ---------- | ---------- | ||||||
| @ -57,6 +101,17 @@ The `fileMgr` module is responsible for: | |||||||
| - creating and deleting local files | - creating and deleting local files | ||||||
| - switching from one file to another | - switching from one file to another | ||||||
| 
 | 
 | ||||||
|  | **Attributes:** | ||||||
|  | 
 | ||||||
|  | - `currentFile`: the [`FileDescriptor`][16] object that is currently edited. | ||||||
|  | 
 | ||||||
|  | **Methods:** | ||||||
|  | 
 | ||||||
|  | - `createFile(title, content)`: creates a [`FileDescriptor`][17] object, add it in the [`fileSystem`][18] map and returns it. | ||||||
|  | - `deleteFile(fileDesc)`: deletes a [`FileDescriptor`][19] object from the [`fileSystem`][20] map. | ||||||
|  | - `selectFile(fileDesc)`: selects a [`FileDescriptor`][21] object for editing. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #### FileDescriptor | #### FileDescriptor | ||||||
| 
 | 
 | ||||||
| The `FileDescriptor` class represents a local file. A `FileDescriptor` object has the following properties: | The `FileDescriptor` class represents a local file. A `FileDescriptor` object has the following properties: | ||||||
| @ -64,19 +119,19 @@ The `FileDescriptor` class represents a local file. A `FileDescriptor` object ha | |||||||
| - `fileIndex`: the unique string index of the file in the file system | - `fileIndex`: the unique string index of the file in the file system | ||||||
| - `title`: the title of the document | - `title`: the title of the document | ||||||
| - `content`: the content of the document | - `content`: the content of the document | ||||||
| - `syncLocations`: a map containing all the associated [`syncAttributes`][12] objects with their `syncIndex` as a key | - `syncLocations`: a map containing all the associated [`syncAttributes`][22] objects with their `syncIndex` as a key | ||||||
| - `publishLocations`: a map containing all the associated [`publishAttributes`][13] objects with their `publishIndex` as a key | - `publishLocations`: a map containing all the associated [`publishAttributes`][23] objects with their `publishIndex` as a key | ||||||
| 
 | 
 | ||||||
| And the following methods: | And the following methods: | ||||||
| 
 | 
 | ||||||
| - `addSyncLocation(syncAttributes)`: associates a [`syncAttributes`][14] object with the file | - `addSyncLocation(syncAttributes)`: associates a [`syncAttributes`][24] object with the file | ||||||
| - `removeSyncLocation(syncAttributes)`: unassociates a [`syncAttributes`][15] object with the file | - `removeSyncLocation(syncAttributes)`: unassociates a [`syncAttributes`][25] object with the file | ||||||
| - `addPublishLocation(publishAttributes)`: associates a [`publishAttributes`][16] object with the file | - `addPublishLocation(publishAttributes)`: associates a [`publishAttributes`][26] object with the file | ||||||
| - `removePublishLocation(publishAttributes)`: unassociates a [`publishAttributes`][17] object with the file | - `removePublishLocation(publishAttributes)`: unassociates a [`publishAttributes`][27] object with the file | ||||||
| 
 | 
 | ||||||
| #### fileSystem | #### fileSystem | ||||||
| 
 | 
 | ||||||
| The `fileSystem` module is a map containing all the [`FileDescriptor`][18] objects with their `fileIndex` as a key | The `fileSystem` module is a map containing all the [`FileDescriptor`][28] objects with their `fileIndex` as a key. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ---------- | ---------- | ||||||
| @ -92,7 +147,7 @@ The `synchronizer` module is responsible for: | |||||||
| 
 | 
 | ||||||
| #### synchronizer's providers | #### synchronizer's providers | ||||||
| 
 | 
 | ||||||
| A [`provider`][19] module can be associated with the `synchronizer` module if it implements the following functions: | A [`provider`][29] module can be associated with the `synchronizer` module if it implements the following functions: | ||||||
| 
 | 
 | ||||||
| - `importFiles()`: downloads one or multiple files and create local files associated with the sync locations | - `importFiles()`: downloads one or multiple files and create local files associated with the sync locations | ||||||
| - `exportFile()`: uploads a local file to a new sync location | - `exportFile()`: uploads a local file to a new sync location | ||||||
| @ -104,7 +159,7 @@ A [`provider`][19] module can be associated with the `synchronizer` module if it | |||||||
| A `syncAttributes` object is an object that describes a sync location. Attributes differ from one provider to another except for the following: | A `syncAttributes` object is an object that describes a sync location. Attributes differ from one provider to another except for the following: | ||||||
| 
 | 
 | ||||||
| - `syncIndex`: the unique string index of the publish location | - `syncIndex`: the unique string index of the publish location | ||||||
| - `provider`: the [`provider`][20] module that handles the sync location | - `provider`: the [`provider`][30] module that handles the sync location | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ---------- | ---------- | ||||||
| @ -119,9 +174,9 @@ The `publisher` module is responsible for: | |||||||
| 
 | 
 | ||||||
| #### publisher's providers | #### publisher's providers | ||||||
| 
 | 
 | ||||||
| A [`provider`][21] module can be associated with the `publisher` module if it implements the following functions: | A [`provider`][31] module can be associated with the `publisher` module if it implements the following functions: | ||||||
| 
 | 
 | ||||||
| - `newPublishAttributes()`: returns a new [`publishAttributes`][22] object in order to create a new publish location | - `newPublishAttributes()`: returns a new [`publishAttributes`][32] object in order to create a new publish location | ||||||
| - `publish()`: performs publishing of one publish location | - `publish()`: performs publishing of one publish location | ||||||
| 
 | 
 | ||||||
| #### publishAttributes | #### publishAttributes | ||||||
| @ -129,7 +184,7 @@ A [`provider`][21] module can be associated with the `publisher` module if it im | |||||||
| A `publishAttributes` object is an object that describes a publish location. Attributes differ from one provider to another except for the following: | A `publishAttributes` object is an object that describes a publish location. Attributes differ from one provider to another except for the following: | ||||||
| 
 | 
 | ||||||
| - `publishIndex`: the unique string index of the publish location | - `publishIndex`: the unique string index of the publish location | ||||||
| - `provider`: the [`provider`][23] module that handles the publish location | - `provider`: the [`provider`][33] module that handles the publish location | ||||||
| - `format`: the publishing format for the publish location. It can be: | - `format`: the publishing format for the publish location. It can be: | ||||||
| 	- `markdown` for Markdown format | 	- `markdown` for Markdown format | ||||||
| 	- `html` for HTML format | 	- `html` for HTML format | ||||||
| @ -149,26 +204,36 @@ A `publishAttributes` object is an object that describes a publish location. Att | |||||||
| > Written with [StackEdit](http://benweet.github.io/stackedit/). | > Written with [StackEdit](http://benweet.github.io/stackedit/). | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|   [1]: http://benweet.github.io/stackedit/doc/img/architecture.png "Architecture diagram" |   [1]: http://git-scm.com/ | ||||||
|   [2]: http://requirejs.org/ "RequireJS" |   [2]: http://nodejs.org/ | ||||||
|   [3]: http://en.wikipedia.org/wiki/Asynchronous_module_definition "Asynchronous module definition" |   [3]: http://gruntjs.com/ | ||||||
|   [4]: http://jquery.com/ |   [4]: http://bower.io/ | ||||||
|   [5]: http://underscorejs.org/ |   [5]: http://benweet.github.io/stackedit/doc/img/architecture.png "Architecture diagram" | ||||||
|   [6]: http://layout.jquery-dev.net/ "UI Layout" |   [6]: http://requirejs.org/ "RequireJS" | ||||||
|   [7]: https://code.google.com/p/pagedown/ "PageDown" |   [7]: http://en.wikipedia.org/wiki/Asynchronous_module_definition "Asynchronous module definition" | ||||||
|   [8]: http://api.jquery.com/ready/ |   [8]: http://jquery.com/ | ||||||
|   [9]: http://requirejs.org/ "RequireJS" |   [9]: http://underscorejs.org/ | ||||||
|   [10]: https://code.google.com/p/pagedown/ "PageDown" |   [10]: http://layout.jquery-dev.net/ "UI Layout" | ||||||
|   [11]: #filedescriptor |   [11]: https://code.google.com/p/pagedown/ "PageDown" | ||||||
|   [12]: #syncattributes |   [12]: http://api.jquery.com/ready/ | ||||||
|   [13]: #publishattributes |   [13]: http://requirejs.org/ "RequireJS" | ||||||
|   [14]: #syncattributes |   [14]: https://code.google.com/p/pagedown/ "PageDown" | ||||||
|   [15]: #syncattributes |   [15]: #filedescriptor | ||||||
|   [16]: #publishattributes |   [16]: #filedescriptor | ||||||
|   [17]: #publishattributes |   [17]: #filedescriptor | ||||||
|   [18]: #filedescriptor |   [18]: #filesystem | ||||||
|   [19]: #provider |   [19]: #filedescriptor | ||||||
|   [20]: #provider |   [20]: #filesystem | ||||||
|   [21]: #provider |   [21]: #filedescriptor | ||||||
|   [22]: #publishattributes |   [22]: #syncattributes | ||||||
|   [23]: #provider |   [23]: #publishattributes | ||||||
|  |   [24]: #syncattributes | ||||||
|  |   [25]: #syncattributes | ||||||
|  |   [26]: #publishattributes | ||||||
|  |   [27]: #publishattributes | ||||||
|  |   [28]: #filedescriptor | ||||||
|  |   [29]: #provider | ||||||
|  |   [30]: #provider | ||||||
|  |   [31]: #provider | ||||||
|  |   [32]: #publishattributes | ||||||
|  |   [33]: #provider | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 benweet
						benweet