= Atom Editor for Wiki Editing
:author: mitm
:revnumber: 2.0
:revdate: 2020/07/12


Contributing to the Wiki is now easier than it ever has been. Using the Atom editor will give you an easy to use interface that is cross-platform, has code completion, syntax highlighting, instant AsciiDoctor page previewing, with an integrated GitHub client. The only thing it doesn't do is write the page for you. You can use it in conjunction with the link:https://git-scm.com/[Git] command line interface.

== Definitions

* (CLI) - Git Command Line Interface
* (GWI) - GitHub Web Interface

== Prerequisites

.  Have a link:https://github.com/[GitHub account].
.  Are a Wiki project member.

If you are not a member, you fork the repository into your GitHub account and issue "`pull`" requests to the Wiki repository from there.

To fork the Wiki repository into your GitHub Account:

.  Navigate to link:https://github.com/jMonkeyEngine/wiki[https://github.com/jMonkeyEngine/wiki].
.  In the menu at the top of the page, select the icon:code-fork[]*Fork* button.

== Downloading the Sources

.  Install link:https://git-scm.com/[Git].
.  Download and install the Atom editor - https://atom.io/
.  After installation is complete, you can customize the editor by selecting the `Choose A Theme` panel followed by the btn:[Theme Picker] button.
.  Once you are satisfied with the customization of the editor, you will need to add several packages to make Atom AsciiDoctor compatible. Package installation is painless.
..  From the `Install A Package` panel, select the btn:[Open Installer] button, or select `menu:Packages[Settings View>Install Packages/Themes]` from the file header.
..  Enter "`asciidoc`" in the search box and press the btn:[Packages] button.
+
.Add these packages:
*** *language-asciidoc* +
*** *asciidoc-preview* +
*** *autocomplete-asciidoc*
+
TIP: You can add more GitHub controls to the editor by adding the package `*git-plus*`.

To edit the Wiki you will need to clone the wiki repository.

.  From the `Command Palette` (kbd:[ctrl]+kbd:[shift] +kbd:[P]  or `menu:Packages[Command Palette>Toggle]`), enter "`git`" into the search box.
.  Select btn:[GitHub: Clone].
+
--
.Members
Paste the wiki the +++<abbr title="Uniform Resource Locator">URL</abbr>+++ into the `Clone from` box.

[source]
----
https://github.com/jMonkeyEngine/wiki
----
.Non-Members
Paste your forks +++<abbr title="Uniform Resource Locator">URL</abbr>+++ into the `Clone from` box.
--
The `To directory` will automatically update when you do.
.  When you're ready, press the btn:[Clone] button.
+
The clone will take some time due to the size of the Wiki. Once cloned, a new `Project` tab will open on the left, and the `Git` and `GitHub Preview` tabs will open to the right. If they don't, you can open the Git tab using kbd:[ctrl]+kbd:[shift]+kbd:[9]  and the GitHub Preview tab using kbd:[ctrl]+kbd:[shift]+kbd:[8]. Alternatively, you can navigate the `menu:Packages[GitHub]` menu. You will also notice in the lower right corner, on the `Status Bar`, you now have your GitHub control.
.  Before you can commit any changes to the Wiki, you must configure at least the user.email and user.name variables for Git. You can do this via Git Bash, or manually, by following one of these instructions.

*  Git Bash: link:https://help.github.com/articles/setting-your-commit-email-address-in-git/[Setting your commit email address in Git]
*  Manually: link:https://help.github.com/articles/setting-your-commit-email-address-on-github/[Set your commit email address on GitHub]
..  Open your `.gitconfig` file (located in USER_HOME) and add:
+
[source]
----
[user]
        name = yourname
        email = youremail
----
..  To maintain your privacy, setup your email settings in your GitHub account and use the `users.noreply.github.com` email address.

.  Lastly, you will need to create a GitHub token. Follow the directions in the popup to enter the token.

== Source Structure

All documents live in the `docs/modules` directory. Each link:https://docs.antora.org/antora/2.3/named-module-directory/[named] and link:https://docs.antora.org/antora/2.3/root-module-directory/[ROOT] module contain a defined link:https://docs.antora.org/antora/2.3/family-directories/[family] set of directories that hold all content. Select an appropriate module and family directory to store your new page, image, partial, example or attachement.

When you edit a Wiki page, the Git tab will show any unstaged changes. When you're done making changes, you stage any or all changes, write your commit message, commit, and then push the changes.

You can preview your documents by selecting the document and using the keyboard shortcut kbd:[ctrl]+kbd:[shift]+kbd:[A] or by using the File header menu menu:Packages[AsciiDoc Preview>Toggle Preview].


== Updating Local Wiki Copies


It's a good idea to update your local copy of the Wiki prior to committing any changes.

.Members
Update your local copy of the Wiki from the Atom Editor or (CLI) by issuing a `pull` command prior to Commit/Push.

.Non-Members
Update your local copy of the Wiki by:

  . Issuing a `pull` request from your forked repository using the (GWI).
..  Go to your version of the repository on GitHub.
..  Click the btn:[New Pull Request] button at the top.
+
NOTE: The Wiki repository will be on the left and your repository will be on the right.

..  Click the btn:[Base] button on the left and from the drop down list select your forked repository.
..  Click the "`compare across forks`" link.
..  Click the btn:[Head Fork] button and from the drop down list select the Wiki repository.
..  If the repositories are not identical, there will be green button btn:[Create pull request]. Click it to update your repository.
.  Update your local copy by doing a `pull` request in the Atom Editor or (CLI).

include::partial$non-member-important.adoc[]


== Pushing Changes

.Members
As a member, issue a `push` command from the Atom Editor or (CLI).

.Non-Members
To submit changes to the Wiki repository, after pushing them to your fork, from the (GWI):

.  Go to your version of the Wiki repository on GitHub.
..  Click the btn:[New Pull Request] button at the top.
...  Note that the jMonkeyEngine repository will be on the left and your repository will be on the right.
..  Click the green button btn:[Create pull request]. Give a succinct and informative title, in the comment field give a short explanation of the changes and click the green button btn:[Create pull request] again.

include::partial$non-member-important.adoc[]


== Creating pages

You create link:https://docs.antora.org/antora/2.3/page/standard-page/[pages] by saving a file with the `.adoc` extension. The first line of a page must contain a title.

```
= My Title Goes here
```

Everything after the title line, up to the first empty new line, is called the `header` of the document. This is where you set optional link:https://docs.antora.org/antora/2.3/page/attributes/[attributes] for your documents.

The Antora manual has a very quick to read link:https://docs.antora.org/antora/2.3/asciidoc/asciidoc/[Primer] that will get you up to speed on writing pages fast.

Documents rely heavily on using `References` to link to other content in the same or different modules. This is a critical part of writing your documents. Knowing how to link to other content. There are two types of "`references`", link:https://docs.antora.org/antora/2.3/page/page-id/[Cross References] and link:https://docs.antora.org/antora/2.3/asciidoc/in-page-xref/[Internal Cross Reference]. A `Cross References` links to a link:https://docs.antora.org/antora/2.3/page/module-and-page-xrefs/[*page*] in the same or different module, an `Internal Cross Reference` links to  *elements* inside a document located either in the same page, same module or a different module.

The snippets page contains various forms these `Cross References` that make linking easier.

See also:

* link:https://asciidoctor.org/docs/user-manual/[Asciidoctor User Manual]
* <<emoji.adoc#how-to-use-emoji-in-the-wiki,How to use emoji in the wiki>>

== Atom Snippets


[quote, Atom Flight Manual: Snippets]
Snippets are an incredibly powerful way to quickly generate commonly needed code syntax from a shortcut.

One advantage of using Atom as an editor for the Wiki comes from the use of link:http://flight-manual.atom.io/using-atom/sections/snippets/[Snippets]. You can see a list of available snippets for your document by using the `Command Palette` (kbd:[ctrl]+kbd:[shift] +kbd:[P] or `menu:Packages[Command Palette>Toggle]`). Enter "`snippets`" into the search box and select btn:[Snippets: Available].

The Atom AsciiDoc packages add great functionality to the editor, but they do not cover everything that's possible when using AsciiDoctor syntax. You can customize the editor even further by adding your own snippets. I will get you started with your first snippet. Simply copy and paste the code below into your "`snippets.cson`" file and save. You can locate the file under menu:File[Snippets].

[source]
----
'.source.asciidoc':
  'Cross reference internal element, same page':
    'prefix': 'xrefI'
    'body': '<<${1:reference-a-section-in-the-same-page},${2:custom label text}>>'
----

Thereafter, just start typing `xrefI` and select it from the popup menu or hit kbd:[Tab] with it highlighted in the menu, to insert an `Internal Cross Reference` link. You can then use the kbd:[Tab] key to cycle through each tab stop and enter the appropriate data for that link.

TIP: A kbd:[Tab] key in the above code is set by wraping any text to be tabbed with the `${1:}` syntax, where the integer represents the tab order. When cycling through tabs, you can backspace them to remove multiple choice tab content or just enter the text for single selection content.

You can help the jMonkey community by adding new snippets. Use your editor and edit the xref:atom_snippets.adoc[Atom Snippets] document. Make sure to announce any proposed changes on the link:https://hub.jmonkeyengine.org/[jMonkeyEngine Forum] under the topic "`Documentation`" first so others are aware and can test out your proposed change.

'''
Next steps,

*  Read the Wiki link:https://github.com/jMonkeyEngine/wiki[README] page.
*  Add link:https://asciidoctor.org/docs/user-manual/[Asciidoctor User Manual] to your favorites.
*  Add link:https://docs.antora.org[Antora Docs] to your favorites.
*  Add the link:https://atom.io/docs[Atom Docs] to your favorites.
*  Add the link:http://flight-manual.atom.io/[Atom Flight Manual] to your favorites.
*  Add the link:http://rogerdudler.github.io/git-guide/[git - the simple guide] to your favorites.
*  Start contributing.
