Skip to content

Commit

Permalink
documented vkhttp() API
Browse files Browse the repository at this point in the history
  • Loading branch information
Kiryukhin, Vadim committed Sep 9, 2016
1 parent edc3734 commit 5c26a8e
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 22 deletions.
60 changes: 43 additions & 17 deletions html/doc.html
@@ -1,6 +1,6 @@
<p></p>
<h4>vkthread.exec ( param )</h4>
<p>Run function in a thread.</p>
<p>Runs function in a thread.</p>
<pre><code data-language="javascript">
@return -- promise (Promise style)
-- null (Callback style)
Expand All @@ -13,14 +13,14 @@ <h4>vkthread.exec ( param )</h4>
@importFiles (optional) - array of strings; each string is URL
to a file, which @fn depends on.

@cb (mandatory/not used) - callback function to process returned
from a thread data. Mandatory for callback
@cb (mandatory/not used) - callback function to process data which is
returned by a thread. Mandatory for callback
style coding, ignored in Promise style code.

</code></pre>
<p></p>
<h4>vkThread.execAll ( [param1, param2, ... ] )</h4>
<p>Run multiple functions in multiple threads.</p>
<p>Runs multiple functions in multiple threads.</p>
<pre><code data-language="javascript">
@return -- promise object when all threads done.

Expand All @@ -30,26 +30,52 @@ <h4>vkThread.execAll ( [param1, param2, ... ] )</h4>
<p></p>


<h4>vkhttp( url, args )</h4>
<p>Run XMLHttpRequest in a threads.</p>
<h4>vkhttp( config )</h4>
<p>Runs XMLHttpRequest in a threads.</p>
<pre><code data-language="javascript">
@return -- string

@url - string; URL
@args (optional) - object; data you send to server with POST or PUT methods
@config - object;

</code></pre>
<p>vkhttp Usage:</p>
<pre><code data-language="javascript">
vkhttp(url).get().then(...);

vkhttp(url, args).post().then(...);
config attributes:

vkhttp(url, args).put().then(...);

vkhttp(url).delete().then(...);
@url - string; URL
@method (optional) - string; http method; default is 'GET'
@body (optional) - object; message body to send with 'POST'
@contentType (optional) - string; "Content-Type" http header;
by default it is 'application/json'

</code></pre>
<p>
vkhttp() runs XMLHttpRequest synchronously. <br/>
As it runs in a thread, it's OK to perform it this way.
</p>
<pre><code data-language="javascript">
function foo(config, arg2, ...) {

/* request data from a server */
var data = vkhttp(config);

/* process the data */
. . .
return something;
}


var param = {
fn: foo,
args:[
/* the first element is config object for vkhttp() */
{ url:"path/to/your/server/file",
method:'POST', // <-- skip for GET
body: {firstname:'John', lastname:'Dow'} // <-- skip for GET
},

123, // <-- arg2
. . .
]
}
</code></pre>

<p></p>

Expand Down
10 changes: 5 additions & 5 deletions vkthread/vkthread.js
Expand Up @@ -45,7 +45,7 @@

/* Create generic worker from minified version of worker.js */

var workerJs = '(function(){var JSONfn={parse:function(str,date2obj){var iso8061=date2obj?/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/:false;return JSON.parse(str,function(key,value){var prefix,func,fnArgs,fnBody;if(typeof value!=="string")return value;if(value.length<8)return value;prefix=value.substring(0,8);if(iso8061&&value.match(iso8061))return new Date(value);if(prefix==="function")return eval("("+value+")");if(prefix==="_PxEgEr_")return eval(value.slice(8));if(prefix==="_NuFrRa_"){func=value.slice(8).trim().split("=>");fnArgs=func[0].trim();fnBody=func[1].trim();if(fnArgs.indexOf("(")<0)fnArgs="("+fnArgs+")";if(fnBody.indexOf("{")<0)fnBody="{ return "+fnBody+"}";return eval("("+"function"+fnArgs+fnBody+")")}return value})}};onmessage=function(e){var obj=JSONfn.parse(e.data,true),cntx=obj.context||self;if(obj.importFiles)importScripts.apply(null,obj.importFiles);if(typeof obj.fn==="function")if(typeof Promise!=="undefined")Promise.resolve(obj.fn.apply(cntx,obj.args)).then(function(data){postMessage(data)})["catch"](function(reason){postMessage(reason)});else postMessage(obj.fn.apply(cntx,obj.args));else postMessage(self[obj.fn].apply(cntx,obj.args))}})();function vkhttp(url,method,_cb,_body){var fn=function(data){return data},cb=_cb||fn,body=_body?JSON.stringify(_body):null,xhr=new XMLHttpRequest,ret;if(typeof cb!=="function"){cb=fn;body=JSON.stringify(_cb)}xhr.onload=function(){if(xhr.status>=200&&xhr.status<300)ret=cb(xhr.responseText);else ret="Error: "+xhr.status+xhr.statusText};xhr.onerror=function(data){ret=xhr.status+xhr.statusText};xhr.open(method.toUpperCase(),url,false);xhr.setRequestHeader("Content-Type","application/json");xhr.send(body);return ret};';
var workerJs = '(function(){var JSONfn={parse:function(str,date2obj){var iso8061=date2obj?/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/:false;return JSON.parse(str,function(key,value){var prefix,func,fnArgs,fnBody;if(typeof value!=="string")return value;if(value.length<8)return value;prefix=value.substring(0,8);if(iso8061&&value.match(iso8061))return new Date(value);if(prefix==="function")return eval("("+value+")");if(prefix==="_PxEgEr_")return eval(value.slice(8));if(prefix==="_NuFrRa_"){func=value.slice(8).trim().split("=>");fnArgs=func[0].trim();fnBody=func[1].trim();if(fnArgs.indexOf("(")<0)fnArgs="("+fnArgs+")";if(fnBody.indexOf("{")<0)fnBody="{ return "+fnBody+"}";return eval("("+"function"+fnArgs+fnBody+")")}return value})}};onmessage=function(e){var obj=JSONfn.parse(e.data,true),cntx=obj.context||self;if(obj.importFiles)importScripts.apply(null,obj.importFiles);if(typeof obj.fn==="function")if(typeof Promise!=="undefined")Promise.resolve(obj.fn.apply(cntx,obj.args)).then(function(data){postMessage(data)})["catch"](function(reason){postMessage(reason)});else postMessage(obj.fn.apply(cntx,obj.args));else postMessage(self[obj.fn].apply(cntx,obj.args))};function vkhttp(cfg){var body=cfg.body?JSON.stringify(cfg.body):null,contentType=cfg.contentType||"application/json",method=cfg.method?cfg.method.toUpperCase():"GET",xhr=new XMLHttpRequest,ret;xhr.onload=function(){if(xhr.status>=200&&xhr.status<300)ret=xhr.responseText;else ret="Error: "+xhr.status+xhr.statusText};xhr.onerror=function(data){ret=xhr.status+xhr.statusText};xhr.open(method,cfg.url,false);if(method==="POST")xhr.setRequestHeader("Content-Type",contentType);xhr.send(body);return ret}})();';
var workerBlob = new Blob([workerJs], {type: 'application/javascript'});

/* constructor */
Expand All @@ -56,7 +56,7 @@
};

// to use standalone worker.js uncomment code below

/*
var err;
try { throw new Error() }
catch(e){ err = e.stack }
Expand All @@ -66,7 +66,7 @@
} else {
this.path = 'http'+ err.split('http')[1].split('vkthread.js').slice(0,-1) + 'worker.js';
}

*/
}

/**
Expand All @@ -86,8 +86,8 @@

Vkthread.prototype.exec = function(param){

//var worker = new Worker(window.URL.createObjectURL(workerBlob)), //embedded worker
var worker = new Worker(this.path), //standalone worker (use for customizing or debug)
var worker = new Worker(window.URL.createObjectURL(workerBlob)), //embedded worker
//var worker = new Worker(this.path), //standalone worker (use for customizing or debug)
promise;

if (param.cb && typeof param.cb === 'function') {
Expand Down

0 comments on commit 5c26a8e

Please sign in to comment.