Markdown Monster local Web Server

Markdown Monster includes an optional local HTTP server that can be used to launch Markdown Monster with preset content remotely, when the server is running. The server has to be started in order for this to work, although you can request starting the server in a number of manual and automated ways.

To start the Markdown Monster Web Server you can do the following:

  • Toggle the Tools -> Web Server menu checkbox configuration setting on
  • Set the WebServer.AutoStart=true configuration flag to auto-start the server on startup
  • Run mm -startwebserver from the Terminal
  • Use the markdownmonster:webserver Web Protocol Handler from browser or shell (toggles)

Once the server is running you can open and retrieve open document text in Markdown Monster from a Web Browser via HTTP requests. Opening text in a new document in Markdown Monster can be triggered via a relatively simple fetch script that is provided as a sample.

Web Sample Page and Support JavaScript Library

An example of what you can do with the Protocol Handler and Web Server to automate Markdown Monster from a browser, you can look at the examples in /SampleDocuments/BrowserIntegration. A library that helps with integration operations can be found in markdownmonster-integration.js.

Security?

The Web Server Markdown Monster uses is a local only Web Server, so security issues at most are limited to the local machine. Additionally the server startup from a browser will always force a browser prompt of some sort, although if you opt to run the MM Web Server in always-on mode there will not be a prompt. It's best to start the server on demand even if that requires an extra operation if security is a concern.

Using in a Web Page

The server can be accessed from client side code via a markdownmonster-integration.js file which provides a global window.MarkdownMonster object instance. This library has the following operations:

  • openNewDocument(newDocText) - opens a new document with the specified text
  • loadMarkdownMonster() - uses an application protocol to explicitly launch Markdown Monster
  • checkServer(onCompleted) - checks to see if the MM Web Server is running
  • openDocument(localDocFilename,onCompleted) - opens a file in Markdown Monster
  • openNew(markdownText,onCompleted) - opens a new document with optional text
  • getDocument(onCompleted) - retrieves the content of the active editor window in Markdown Monster.

In most cases openNewDocument() is the only function required - it will check whether the server is running and if not prompt you and try to launch it.

The following example uses a text box with Markdown text and a button which when clicked opens the text in Markdown Monster:

<textarea id="MarkdownText2"  ># Markdown text to edit</textarea>

<button id="btnOpenInMarkdownMonster2" class="btn btn-primary mt-2" onclick="openInMmWithWebServer()">
<img src="images/MarkdownMonster_Icon_32.png" style="height: 20px;margin-right: 10px" />
Open in Markdown Monster</button>

<!-- support library that can call the Web server (in `/SampleDocuments/BrowserIntegration/`) -->
<script src="markdownmonster-integration.js"></script>

<script>
    // initialize object during page load
    var mm = window.MarkdownMonster;            // global instance
    //mm.serverUrl = "http://localhost:15000"     // if you changed the port in mm :5009 is default
    mm.initialize();                            // checks for server
    function openInMmWithWebServer() {
        var text = document.getElementById("MarkdownText2").value;        
        
        // if server is running opens a new doc in Markdown Monster
        // if server is not running prompts to run MM and open in Web Server mode
        mm.openNewDocument(text);               
    }
</script>

You can find an example you can run in the <installFolder>\SampleDocuments\BrowserIntegration folder.

Message Format

The messages sent to the server are POST operations using a JSON request pay load. For now this is very simple and abstracted by the JavaScript markdownmonster-integration.js script library.

To access the server assuming it's running:

  • Make an HTTP POST request to http://localhost:5009/
  • JSON: { operation: "open", data: "untitled.base64,VGhpcyBpcyBhIHRlc3Qgc3RyaW5nIG9mIHRleHQu" }

This opens a new document with the base64 text content preset in the editor. This works with any of the single command command line options in MM.

  • Open a new blank document
  • Open new document with pre-set text
  • You can open a file from a file system path

Http Request Traces

Following are examples of HTTP request traces that can be used to interact with Markdown Monster.

POST http://localhost:5009/markdownmonster HTTP/1.1
Content-Type: application/json

{
  "Operation": "open",
  "Data": "untitled.json,'# New Document\n\n\"This\" is a test **document**!'",
  "Type": "text"
}

------------------------------------------------------------------

POST http://localhost:5009/markdownmonster HTTP/1.1
Content-Type: application/json

{
  "Operation": "openNew",
  "Data": "# New Document\n\n\"This\" is a test **document**!",
  "Type": "text"
}

------------------------------------------------------------------

POST http://localhost:5009/markdownmonster HTTP/1.1
Content-Type: application/json

{
  "Operation": "openDocument",
  "Data": "c:\\temp\\test.md",
  "Type": "text"
}

------------------------------------------------------------------

POST http://localhost:5009/markdownmonster HTTP/1.1
Content-Type: application/json

{
   Operation: "getDocument",
   Data: null,
   Type: "json"
}

Note: In order for these commands to work the Markdown Monster server has to be running. You can launch MM with the Web server with: mm -startwebserver or by setting Web Server auto-launch when MM starts and manually start MM.


© West Wind Technologies, 1996-2021 • Updated: 11/11/20
Comment or report problem with topic