Merge branch 'master' into gh-pages
This commit is contained in:
@@ -22,7 +22,10 @@ object as a string (e.g. recline.Backend.Memory) or for Backends within
|
|||||||
recline.Backend module it may be their class name.</p>
|
recline.Backend module it may be their class name.</p>
|
||||||
|
|
||||||
<p>This value is used as an identifier for this backend when initializing
|
<p>This value is used as an identifier for this backend when initializing
|
||||||
backends (see recline.Model.Dataset.initialize).</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">__type__</span><span class="o">:</span> <span class="s1">'base'</span><span class="p">,</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <h3>sync</h3>
|
backends (see recline.Model.Dataset.initialize).</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">__type__</span><span class="o">:</span> <span class="s1">'base'</span><span class="p">,</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <h3>readonly</h3>
|
||||||
|
|
||||||
|
<p>Class level attribute indicating that this backend is read-only (that
|
||||||
|
is, cannot be written to).</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">readonly</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <h3>sync</h3>
|
||||||
|
|
||||||
<p>An implementation of Backbone.sync that will be used to override
|
<p>An implementation of Backbone.sync that will be used to override
|
||||||
Backbone.sync on operations for Datasets and Documents which are using this backend.</p>
|
Backbone.sync on operations for Datasets and Documents which are using this backend.</p>
|
||||||
@@ -36,7 +39,7 @@ for Documents because they are loaded in bulk by the query method.</p>
|
|||||||
|
|
||||||
<p>All code paths should return an object conforming to the jquery promise API.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">sync</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">method</span><span class="p">,</span> <span class="nx">model</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
<p>All code paths should return an object conforming to the jquery promise API.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">sync</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">method</span><span class="p">,</span> <span class="nx">model</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="p">},</span>
|
<span class="p">},</span>
|
||||||
</pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <h3>query</h3>
|
</pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <h3>query</h3>
|
||||||
|
|
||||||
<p>Query the backend for documents returning them in bulk. This method will
|
<p>Query the backend for documents returning them in bulk. This method will
|
||||||
be used by the Dataset.query method to search the backend for documents,
|
be used by the Dataset.query method to search the backend for documents,
|
||||||
@@ -77,7 +80,30 @@ details</a>):</p>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">query</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">model</span><span class="p">,</span> <span class="nx">queryObj</span><span class="p">)</span> <span class="p">{</span>
|
</pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">query</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">model</span><span class="p">,</span> <span class="nx">queryObj</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>convenience method to convert simple set of documents / rows to a QueryResult</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_docsToQueryResult</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">rows</span><span class="p">)</span> <span class="p">{</span>
|
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <h3>_makeRequest</h3>
|
||||||
|
|
||||||
|
<p>Just $.ajax but in any headers in the 'headers' attribute of this
|
||||||
|
Backend instance. Example:</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
var jqxhr = this._makeRequest({
|
||||||
|
url: the-url
|
||||||
|
});
|
||||||
|
</pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_makeRequest</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="kd">var</span> <span class="nx">headers</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'headers'</span><span class="p">);</span>
|
||||||
|
<span class="kd">var</span> <span class="nx">extras</span> <span class="o">=</span> <span class="p">{};</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="nx">headers</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="nx">extras</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="nx">beforeSend</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">req</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">headers</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="nx">req</span><span class="p">.</span><span class="nx">setRequestHeader</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">value</span><span class="p">);</span>
|
||||||
|
<span class="p">});</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">};</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="kd">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">(</span><span class="nx">extras</span><span class="p">,</span> <span class="nx">data</span><span class="p">);</span>
|
||||||
|
<span class="k">return</span> <span class="nx">$</span><span class="p">.</span><span class="nx">ajax</span><span class="p">(</span><span class="nx">data</span><span class="p">);</span>
|
||||||
|
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <p>convenience method to convert simple set of documents / rows to a QueryResult</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_docsToQueryResult</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">rows</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="kd">var</span> <span class="nx">hits</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">rows</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">row</span><span class="p">)</span> <span class="p">{</span>
|
<span class="kd">var</span> <span class="nx">hits</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">rows</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">row</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="k">return</span> <span class="p">{</span> <span class="nx">_source</span><span class="o">:</span> <span class="nx">row</span> <span class="p">};</span>
|
<span class="k">return</span> <span class="p">{</span> <span class="nx">_source</span><span class="o">:</span> <span class="nx">row</span> <span class="p">};</span>
|
||||||
<span class="p">});</span>
|
<span class="p">});</span>
|
||||||
@@ -85,7 +111,7 @@ details</a>):</p>
|
|||||||
<span class="nx">total</span><span class="o">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nx">total</span><span class="o">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
<span class="nx">hits</span><span class="o">:</span> <span class="nx">hits</span>
|
<span class="nx">hits</span><span class="o">:</span> <span class="nx">hits</span>
|
||||||
<span class="p">};</span>
|
<span class="p">};</span>
|
||||||
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <h2>_wrapInTimeout</h2>
|
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">¶</a> </div> <h2>_wrapInTimeout</h2>
|
||||||
|
|
||||||
<p>Convenience method providing a crude way to catch backend errors on JSONP calls.
|
<p>Convenience method providing a crude way to catch backend errors on JSONP calls.
|
||||||
Many of backends use JSONP and so will not get error messages and this is
|
Many of backends use JSONP and so will not get error messages and this is
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
<p>Note that this is a <strong>read-only</strong> backend.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">DataProxy</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">Base</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
|
<p>Note that this is a <strong>read-only</strong> backend.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">DataProxy</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">Base</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
|
||||||
<span class="nx">__type__</span><span class="o">:</span> <span class="s1">'dataproxy'</span><span class="p">,</span>
|
<span class="nx">__type__</span><span class="o">:</span> <span class="s1">'dataproxy'</span><span class="p">,</span>
|
||||||
|
<span class="nx">readonly</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span>
|
||||||
<span class="nx">defaults</span><span class="o">:</span> <span class="p">{</span>
|
<span class="nx">defaults</span><span class="o">:</span> <span class="p">{</span>
|
||||||
<span class="nx">dataproxy_url</span><span class="o">:</span> <span class="s1">'http://jsonpdataproxy.appspot.com'</span>
|
<span class="nx">dataproxy_url</span><span class="o">:</span> <span class="s1">'http://jsonpdataproxy.appspot.com'</span>
|
||||||
<span class="p">},</span>
|
<span class="p">},</span>
|
||||||
|
|||||||
@@ -5,35 +5,38 @@
|
|||||||
|
|
||||||
<p>Connecting to <a href="http://www.elasticsearch.org/">ElasticSearch</a>.</p>
|
<p>Connecting to <a href="http://www.elasticsearch.org/">ElasticSearch</a>.</p>
|
||||||
|
|
||||||
<p>To use this backend ensure your Dataset has one of the following
|
<p>Usage:</p>
|
||||||
attributes (first one found is used):</p>
|
|
||||||
|
<pre>
|
||||||
|
var backend = new recline.Backend.ElasticSearch({
|
||||||
|
// optional as can also be provided by Dataset/Document
|
||||||
|
url: {url to ElasticSearch endpoint i.e. ES 'type/table' url - more info below}
|
||||||
|
// optional
|
||||||
|
headers: {dict of headers to add to each request}
|
||||||
|
});
|
||||||
|
|
||||||
|
@param {String} url: url for ElasticSearch type/table, e.g. for ES running
|
||||||
|
on localhost:9200 with index // twitter and type tweet it would be:
|
||||||
|
|
||||||
|
<pre>http://localhost:9200/twitter/tweet</pre>
|
||||||
|
|
||||||
|
This url is optional since the ES endpoint url may be specified on the the
|
||||||
|
dataset (and on a Document by the document having a dataset attribute) by
|
||||||
|
having one of the following (see also `_getESUrl` function):
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
elasticsearch_url
|
elasticsearch_url
|
||||||
webstore_url
|
webstore_url
|
||||||
url
|
url
|
||||||
</pre>
|
</pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">ElasticSearch</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">Base</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
|
||||||
|
|
||||||
<p>This should point to the ES type url. E.G. for ES running on
|
|
||||||
localhost:9200 with index twitter and type tweet it would be</p>
|
|
||||||
|
|
||||||
<pre>http://localhost:9200/twitter/tweet</pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">ElasticSearch</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">Base</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
|
|
||||||
<span class="nx">__type__</span><span class="o">:</span> <span class="s1">'elasticsearch'</span><span class="p">,</span>
|
<span class="nx">__type__</span><span class="o">:</span> <span class="s1">'elasticsearch'</span><span class="p">,</span>
|
||||||
<span class="nx">_getESUrl</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">dataset</span><span class="p">)</span> <span class="p">{</span>
|
<span class="nx">readonly</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span>
|
||||||
<span class="kd">var</span> <span class="nx">out</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'elasticsearch_url'</span><span class="p">);</span>
|
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="nx">out</span><span class="p">)</span> <span class="k">return</span> <span class="nx">out</span><span class="p">;</span>
|
|
||||||
<span class="nx">out</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'webstore_url'</span><span class="p">);</span>
|
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="nx">out</span><span class="p">)</span> <span class="k">return</span> <span class="nx">out</span><span class="p">;</span>
|
|
||||||
<span class="nx">out</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'url'</span><span class="p">);</span>
|
|
||||||
<span class="k">return</span> <span class="nx">out</span><span class="p">;</span>
|
|
||||||
<span class="p">},</span>
|
|
||||||
<span class="nx">sync</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">method</span><span class="p">,</span> <span class="nx">model</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
<span class="nx">sync</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">method</span><span class="p">,</span> <span class="nx">model</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span>
|
<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="nx">method</span> <span class="o">===</span> <span class="s2">"read"</span><span class="p">)</span> <span class="p">{</span>
|
<span class="k">if</span> <span class="p">(</span><span class="nx">method</span> <span class="o">===</span> <span class="s2">"read"</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="nx">model</span><span class="p">.</span><span class="nx">__type__</span> <span class="o">==</span> <span class="s1">'Dataset'</span><span class="p">)</span> <span class="p">{</span>
|
<span class="k">if</span> <span class="p">(</span><span class="nx">model</span><span class="p">.</span><span class="nx">__type__</span> <span class="o">==</span> <span class="s1">'Dataset'</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="kd">var</span> <span class="nx">base</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_getESUrl</span><span class="p">(</span><span class="nx">model</span><span class="p">);</span>
|
<span class="kd">var</span> <span class="nx">schemaUrl</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_getESUrl</span><span class="p">(</span><span class="nx">model</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'/_mapping'</span><span class="p">;</span>
|
||||||
<span class="kd">var</span> <span class="nx">schemaUrl</span> <span class="o">=</span> <span class="nx">base</span> <span class="o">+</span> <span class="s1">'/_mapping'</span><span class="p">;</span>
|
<span class="kd">var</span> <span class="nx">jqxhr</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">_makeRequest</span><span class="p">({</span>
|
||||||
<span class="kd">var</span> <span class="nx">jqxhr</span> <span class="o">=</span> <span class="nx">$</span><span class="p">.</span><span class="nx">ajax</span><span class="p">({</span>
|
|
||||||
<span class="nx">url</span><span class="o">:</span> <span class="nx">schemaUrl</span><span class="p">,</span>
|
<span class="nx">url</span><span class="o">:</span> <span class="nx">schemaUrl</span><span class="p">,</span>
|
||||||
<span class="nx">dataType</span><span class="o">:</span> <span class="s1">'jsonp'</span>
|
<span class="nx">dataType</span><span class="o">:</span> <span class="s1">'jsonp'</span>
|
||||||
<span class="p">});</span>
|
<span class="p">});</span>
|
||||||
@@ -50,10 +53,67 @@ localhost:9200 with index twitter and type tweet it would be</p>
|
|||||||
<span class="nx">dfd</span><span class="p">.</span><span class="nx">reject</span><span class="p">(</span><span class="nx">arguments</span><span class="p">);</span>
|
<span class="nx">dfd</span><span class="p">.</span><span class="nx">reject</span><span class="p">(</span><span class="nx">arguments</span><span class="p">);</span>
|
||||||
<span class="p">});</span>
|
<span class="p">});</span>
|
||||||
<span class="k">return</span> <span class="nx">dfd</span><span class="p">.</span><span class="nx">promise</span><span class="p">();</span>
|
<span class="k">return</span> <span class="nx">dfd</span><span class="p">.</span><span class="nx">promise</span><span class="p">();</span>
|
||||||
|
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">model</span><span class="p">.</span><span class="nx">__type__</span> <span class="o">==</span> <span class="s1">'Document'</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="kd">var</span> <span class="nx">base</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">_getESUrl</span><span class="p">(</span><span class="nx">model</span><span class="p">.</span><span class="nx">dataset</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="nx">model</span><span class="p">.</span><span class="nx">id</span><span class="p">;</span>
|
||||||
|
<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">_makeRequest</span><span class="p">({</span>
|
||||||
|
<span class="nx">url</span><span class="o">:</span> <span class="nx">base</span><span class="p">,</span>
|
||||||
|
<span class="nx">dataType</span><span class="o">:</span> <span class="s1">'json'</span>
|
||||||
|
<span class="p">});</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">method</span> <span class="o">===</span> <span class="s1">'update'</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="nx">model</span><span class="p">.</span><span class="nx">__type__</span> <span class="o">==</span> <span class="s1">'Document'</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">upsert</span><span class="p">(</span><span class="nx">model</span><span class="p">.</span><span class="nx">toJSON</span><span class="p">(),</span> <span class="k">this</span><span class="p">.</span><span class="nx">_getESUrl</span><span class="p">(</span><span class="nx">model</span><span class="p">.</span><span class="nx">dataset</span><span class="p">));</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">method</span> <span class="o">===</span> <span class="s1">'delete'</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="nx">model</span><span class="p">.</span><span class="nx">__type__</span> <span class="o">==</span> <span class="s1">'Document'</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="kd">var</span> <span class="nx">url</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">_getESUrl</span><span class="p">(</span><span class="nx">model</span><span class="p">.</span><span class="nx">dataset</span><span class="p">);</span>
|
||||||
|
<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="k">delete</span><span class="p">(</span><span class="nx">model</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span> <span class="nx">url</span><span class="p">);</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
|
||||||
<span class="nx">alert</span><span class="p">(</span><span class="s1">'This backend currently only supports read operations'</span><span class="p">);</span>
|
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
|
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <h3>upsert</h3>
|
||||||
|
|
||||||
|
<p>create / update a document to ElasticSearch backend</p>
|
||||||
|
|
||||||
|
<p>@param {Object} doc an object to insert to the index.
|
||||||
|
@param {string} url (optional) url for ElasticSearch endpoint (if not
|
||||||
|
defined called this._getESUrl()</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">upsert</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">doc</span><span class="p">,</span> <span class="nx">url</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="kd">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">doc</span><span class="p">);</span>
|
||||||
|
<span class="nx">url</span> <span class="o">=</span> <span class="nx">url</span> <span class="o">?</span> <span class="nx">url</span> <span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">_getESUrl</span><span class="p">();</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="nx">doc</span><span class="p">.</span><span class="nx">id</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="nx">url</span> <span class="o">+=</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">id</span><span class="p">;</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">_makeRequest</span><span class="p">({</span>
|
||||||
|
<span class="nx">url</span><span class="o">:</span> <span class="nx">url</span><span class="p">,</span>
|
||||||
|
<span class="nx">type</span><span class="o">:</span> <span class="s1">'POST'</span><span class="p">,</span>
|
||||||
|
<span class="nx">data</span><span class="o">:</span> <span class="nx">data</span><span class="p">,</span>
|
||||||
|
<span class="nx">dataType</span><span class="o">:</span> <span class="s1">'json'</span>
|
||||||
|
<span class="p">});</span>
|
||||||
|
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <h3>delete</h3>
|
||||||
|
|
||||||
|
<p>Delete a document from the ElasticSearch backend.</p>
|
||||||
|
|
||||||
|
<p>@param {Object} id id of object to delete
|
||||||
|
@param {string} url (optional) url for ElasticSearch endpoint (if not
|
||||||
|
provided called this._getESUrl()</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">delete</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">url</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="nx">url</span> <span class="o">=</span> <span class="nx">url</span> <span class="o">?</span> <span class="nx">url</span> <span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">_getESUrl</span><span class="p">();</span>
|
||||||
|
<span class="nx">url</span> <span class="o">+=</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="nx">id</span><span class="p">;</span>
|
||||||
|
<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">_makeRequest</span><span class="p">({</span>
|
||||||
|
<span class="nx">url</span><span class="o">:</span> <span class="nx">url</span><span class="p">,</span>
|
||||||
|
<span class="nx">type</span><span class="o">:</span> <span class="s1">'DELETE'</span><span class="p">,</span>
|
||||||
|
<span class="nx">dataType</span><span class="o">:</span> <span class="s1">'json'</span>
|
||||||
|
<span class="p">});</span>
|
||||||
|
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <h3>_getESUrl</h3>
|
||||||
|
|
||||||
|
<p>get url to ElasticSearch endpoint (see above)</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_getESUrl</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">dataset</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="nx">dataset</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="kd">var</span> <span class="nx">out</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'elasticsearch_url'</span><span class="p">);</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="nx">out</span><span class="p">)</span> <span class="k">return</span> <span class="nx">out</span><span class="p">;</span>
|
||||||
|
<span class="nx">out</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'webstore_url'</span><span class="p">);</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="nx">out</span><span class="p">)</span> <span class="k">return</span> <span class="nx">out</span><span class="p">;</span>
|
||||||
|
<span class="nx">out</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'url'</span><span class="p">);</span>
|
||||||
|
<span class="k">return</span> <span class="nx">out</span><span class="p">;</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'url'</span><span class="p">);</span>
|
||||||
<span class="p">},</span>
|
<span class="p">},</span>
|
||||||
<span class="nx">_normalizeQuery</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">)</span> <span class="p">{</span>
|
<span class="nx">_normalizeQuery</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="kd">var</span> <span class="nx">out</span> <span class="o">=</span> <span class="nx">queryObj</span><span class="p">.</span><span class="nx">toJSON</span> <span class="o">?</span> <span class="nx">queryObj</span><span class="p">.</span><span class="nx">toJSON</span><span class="p">()</span> <span class="o">:</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">({},</span> <span class="nx">queryObj</span><span class="p">);</span>
|
<span class="kd">var</span> <span class="nx">out</span> <span class="o">=</span> <span class="nx">queryObj</span><span class="p">.</span><span class="nx">toJSON</span> <span class="o">?</span> <span class="nx">queryObj</span><span class="p">.</span><span class="nx">toJSON</span><span class="p">()</span> <span class="o">:</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">({},</span> <span class="nx">queryObj</span><span class="p">);</span>
|
||||||
@@ -71,7 +131,7 @@ localhost:9200 with index twitter and type tweet it would be</p>
|
|||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
<span class="p">};</span>
|
<span class="p">};</span>
|
||||||
<span class="k">delete</span> <span class="nx">out</span><span class="p">.</span><span class="nx">q</span><span class="p">;</span>
|
<span class="k">delete</span> <span class="nx">out</span><span class="p">.</span><span class="nx">q</span><span class="p">;</span>
|
||||||
<span class="p">}</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>now do filters (note the <em>plural</em>)</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="nx">out</span><span class="p">.</span><span class="nx">filters</span> <span class="o">&&</span> <span class="nx">out</span><span class="p">.</span><span class="nx">filters</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="p">{</span>
|
<span class="p">}</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>now do filters (note the <em>plural</em>)</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="nx">out</span><span class="p">.</span><span class="nx">filters</span> <span class="o">&&</span> <span class="nx">out</span><span class="p">.</span><span class="nx">filters</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">out</span><span class="p">.</span><span class="nx">filter</span><span class="p">)</span> <span class="p">{</span>
|
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">out</span><span class="p">.</span><span class="nx">filter</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="nx">out</span><span class="p">.</span><span class="nx">filter</span> <span class="o">=</span> <span class="p">{};</span>
|
<span class="nx">out</span><span class="p">.</span><span class="nx">filter</span> <span class="o">=</span> <span class="p">{};</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
@@ -89,12 +149,12 @@ localhost:9200 with index twitter and type tweet it would be</p>
|
|||||||
<span class="kd">var</span> <span class="nx">queryNormalized</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">_normalizeQuery</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">);</span>
|
<span class="kd">var</span> <span class="nx">queryNormalized</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">_normalizeQuery</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">);</span>
|
||||||
<span class="kd">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="p">{</span><span class="nx">source</span><span class="o">:</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">queryNormalized</span><span class="p">)};</span>
|
<span class="kd">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="p">{</span><span class="nx">source</span><span class="o">:</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">queryNormalized</span><span class="p">)};</span>
|
||||||
<span class="kd">var</span> <span class="nx">base</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">_getESUrl</span><span class="p">(</span><span class="nx">model</span><span class="p">);</span>
|
<span class="kd">var</span> <span class="nx">base</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">_getESUrl</span><span class="p">(</span><span class="nx">model</span><span class="p">);</span>
|
||||||
<span class="kd">var</span> <span class="nx">jqxhr</span> <span class="o">=</span> <span class="nx">$</span><span class="p">.</span><span class="nx">ajax</span><span class="p">({</span>
|
<span class="kd">var</span> <span class="nx">jqxhr</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">_makeRequest</span><span class="p">({</span>
|
||||||
<span class="nx">url</span><span class="o">:</span> <span class="nx">base</span> <span class="o">+</span> <span class="s1">'/_search'</span><span class="p">,</span>
|
<span class="nx">url</span><span class="o">:</span> <span class="nx">base</span> <span class="o">+</span> <span class="s1">'/_search'</span><span class="p">,</span>
|
||||||
<span class="nx">data</span><span class="o">:</span> <span class="nx">data</span><span class="p">,</span>
|
<span class="nx">data</span><span class="o">:</span> <span class="nx">data</span><span class="p">,</span>
|
||||||
<span class="nx">dataType</span><span class="o">:</span> <span class="s1">'jsonp'</span>
|
<span class="nx">dataType</span><span class="o">:</span> <span class="s1">'jsonp'</span>
|
||||||
<span class="p">});</span>
|
<span class="p">});</span>
|
||||||
<span class="kd">var</span> <span class="nx">dfd</span> <span class="o">=</span> <span class="nx">$</span><span class="p">.</span><span class="nx">Deferred</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>TODO: fail case</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">jqxhr</span><span class="p">.</span><span class="nx">done</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">results</span><span class="p">)</span> <span class="p">{</span>
|
<span class="kd">var</span> <span class="nx">dfd</span> <span class="o">=</span> <span class="nx">$</span><span class="p">.</span><span class="nx">Deferred</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <p>TODO: fail case</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">jqxhr</span><span class="p">.</span><span class="nx">done</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">results</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">results</span><span class="p">.</span><span class="nx">hits</span><span class="p">.</span><span class="nx">hits</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">hit</span><span class="p">)</span> <span class="p">{</span>
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">results</span><span class="p">.</span><span class="nx">hits</span><span class="p">.</span><span class="nx">hits</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">hit</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="s1">'id'</span> <span class="k">in</span> <span class="nx">hit</span><span class="p">.</span><span class="nx">_source</span><span class="p">)</span> <span class="o">&&</span> <span class="nx">hit</span><span class="p">.</span><span class="nx">_id</span><span class="p">)</span> <span class="p">{</span>
|
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="s1">'id'</span> <span class="k">in</span> <span class="nx">hit</span><span class="p">.</span><span class="nx">_source</span><span class="p">)</span> <span class="o">&&</span> <span class="nx">hit</span><span class="p">.</span><span class="nx">_id</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="nx">hit</span><span class="p">.</span><span class="nx">_source</span><span class="p">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">hit</span><span class="p">.</span><span class="nx">_id</span><span class="p">;</span>
|
<span class="nx">hit</span><span class="p">.</span><span class="nx">_source</span><span class="p">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">hit</span><span class="p">.</span><span class="nx">_id</span><span class="p">;</span>
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ var dataset = new recline.Model.Dataset({
|
|||||||
);
|
);
|
||||||
</pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">GDoc</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">Base</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
|
</pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">GDoc</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">Base</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
|
||||||
<span class="nx">__type__</span><span class="o">:</span> <span class="s1">'gdoc'</span><span class="p">,</span>
|
<span class="nx">__type__</span><span class="o">:</span> <span class="s1">'gdoc'</span><span class="p">,</span>
|
||||||
|
<span class="nx">readonly</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span>
|
||||||
<span class="nx">getUrl</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">dataset</span><span class="p">)</span> <span class="p">{</span>
|
<span class="nx">getUrl</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">dataset</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="kd">var</span> <span class="nx">url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'url'</span><span class="p">);</span>
|
<span class="kd">var</span> <span class="nx">url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'url'</span><span class="p">);</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="nx">url</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="s1">'feeds/list'</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
|
<span class="k">if</span> <span class="p">(</span><span class="nx">url</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="s1">'feeds/list'</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ If not defined (or id not provided) id will be autogenerated.</p> </
|
|||||||
etc ...
|
etc ...
|
||||||
</pre></p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">Memory</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">Base</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
|
</pre></p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">Memory</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">Base</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
|
||||||
<span class="nx">__type__</span><span class="o">:</span> <span class="s1">'memory'</span><span class="p">,</span>
|
<span class="nx">__type__</span><span class="o">:</span> <span class="s1">'memory'</span><span class="p">,</span>
|
||||||
|
<span class="nx">readonly</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span>
|
||||||
<span class="nx">initialize</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
<span class="nx">initialize</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nx">datasets</span> <span class="o">=</span> <span class="p">{};</span>
|
<span class="k">this</span><span class="p">.</span><span class="nx">datasets</span> <span class="o">=</span> <span class="p">{};</span>
|
||||||
<span class="p">},</span>
|
<span class="p">},</span>
|
||||||
@@ -146,7 +147,8 @@ If not defined (or id not provided) id will be autogenerated.</p> </
|
|||||||
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">terms</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">term</span><span class="p">)</span> <span class="p">{</span>
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">terms</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">term</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="kd">var</span> <span class="nx">foundmatch</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span>
|
<span class="kd">var</span> <span class="nx">foundmatch</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span>
|
||||||
<span class="nx">dataset</span><span class="p">.</span><span class="nx">fields</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">field</span><span class="p">)</span> <span class="p">{</span>
|
<span class="nx">dataset</span><span class="p">.</span><span class="nx">fields</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">field</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="kd">var</span> <span class="nx">value</span> <span class="o">=</span> <span class="nx">rawdoc</span><span class="p">[</span><span class="nx">field</span><span class="p">.</span><span class="nx">id</span><span class="p">].</span><span class="nx">toString</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>TODO regexes?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">foundmatch</span> <span class="o">=</span> <span class="nx">foundmatch</span> <span class="o">||</span> <span class="p">(</span><span class="nx">value</span> <span class="o">===</span> <span class="nx">term</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <p>TODO: early out (once we are true should break to spare unnecessary testing)
|
<span class="kd">var</span> <span class="nx">value</span> <span class="o">=</span> <span class="nx">rawdoc</span><span class="p">[</span><span class="nx">field</span><span class="p">.</span><span class="nx">id</span><span class="p">];</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="nx">value</span> <span class="o">!==</span> <span class="kc">null</span><span class="p">)</span> <span class="p">{</span> <span class="nx">value</span> <span class="o">=</span> <span class="nx">value</span><span class="p">.</span><span class="nx">toString</span><span class="p">();</span> <span class="p">}</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>TODO regexes?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">foundmatch</span> <span class="o">=</span> <span class="nx">foundmatch</span> <span class="o">||</span> <span class="p">(</span><span class="nx">value</span> <span class="o">===</span> <span class="nx">term</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <p>TODO: early out (once we are true should break to spare unnecessary testing)
|
||||||
if (foundmatch) return true;</p> </td> <td class="code"> <div class="highlight"><pre> <span class="p">});</span>
|
if (foundmatch) return true;</p> </td> <td class="code"> <div class="highlight"><pre> <span class="p">});</span>
|
||||||
<span class="nx">matches</span> <span class="o">=</span> <span class="nx">matches</span> <span class="o">&&</span> <span class="nx">foundmatch</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <p>TODO: early out (once false should break to spare unnecessary testing)
|
<span class="nx">matches</span> <span class="o">=</span> <span class="nx">matches</span> <span class="o">&&</span> <span class="nx">foundmatch</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <p>TODO: early out (once false should break to spare unnecessary testing)
|
||||||
if (!matches) return false;</p> </td> <td class="code"> <div class="highlight"><pre> <span class="p">});</span>
|
if (!matches) return false;</p> </td> <td class="code"> <div class="highlight"><pre> <span class="p">});</span>
|
||||||
|
|||||||
@@ -183,7 +183,8 @@ for this document.</p> </td> <td class="code">
|
|||||||
<li>format: (optional) used to indicate how the data should be formatted. For example:
|
<li>format: (optional) used to indicate how the data should be formatted. For example:
|
||||||
<ul><li>type=date, format=yyyy-mm-dd</li>
|
<ul><li>type=date, format=yyyy-mm-dd</li>
|
||||||
<li>type=float, format=percentage</li>
|
<li>type=float, format=percentage</li>
|
||||||
<li>type=float, format='###,###.##'</li></ul></li>
|
<li>type=string, format=link (render as hyperlink)</li>
|
||||||
|
<li>type=string, format=markdown (render as markdown if Showdown available)</li></ul></li>
|
||||||
<li>is_derived: (default: false) attribute indicating this field has no backend data but is just derived from other fields (see below).</li>
|
<li>is_derived: (default: false) attribute indicating this field has no backend data but is just derived from other fields (see below).</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@@ -233,6 +234,22 @@ value of this field prior to rendering.</p> </td> <td cl
|
|||||||
<span class="k">if</span> <span class="p">(</span><span class="nx">format</span> <span class="o">===</span> <span class="s1">'percentage'</span><span class="p">)</span> <span class="p">{</span>
|
<span class="k">if</span> <span class="p">(</span><span class="nx">format</span> <span class="o">===</span> <span class="s1">'percentage'</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="k">return</span> <span class="nx">val</span> <span class="o">+</span> <span class="s1">'%'</span><span class="p">;</span>
|
<span class="k">return</span> <span class="nx">val</span> <span class="o">+</span> <span class="s1">'%'</span><span class="p">;</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
|
<span class="k">return</span> <span class="nx">val</span><span class="p">;</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="s1">'string'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="nx">field</span><span class="p">,</span> <span class="nx">doc</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="kd">var</span> <span class="nx">format</span> <span class="o">=</span> <span class="nx">field</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'format'</span><span class="p">);</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="nx">format</span> <span class="o">===</span> <span class="s1">'link'</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="k">return</span> <span class="s1">'<a href="VAL">VAL</a>'</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/VAL/g</span><span class="p">,</span> <span class="nx">val</span><span class="p">);</span>
|
||||||
|
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">format</span> <span class="o">===</span> <span class="s1">'markdown'</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">Showdown</span> <span class="o">!==</span> <span class="s1">'undefined'</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="kd">var</span> <span class="nx">showdown</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Showdown</span><span class="p">.</span><span class="nx">converter</span><span class="p">();</span>
|
||||||
|
<span class="nx">out</span> <span class="o">=</span> <span class="nx">showdown</span><span class="p">.</span><span class="nx">makeHtml</span><span class="p">(</span><span class="nx">val</span><span class="p">);</span>
|
||||||
|
<span class="k">return</span> <span class="nx">out</span><span class="p">;</span>
|
||||||
|
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
||||||
|
<span class="k">return</span> <span class="nx">val</span><span class="p">;</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="k">return</span> <span class="nx">val</span><span class="p">;</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
<span class="p">});</span>
|
<span class="p">});</span>
|
||||||
|
|||||||
@@ -217,9 +217,12 @@ stopped and an error notification shown.</p>
|
|||||||
|
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="nx">docs</span> <span class="k">instanceof</span> <span class="nb">Array</span><span class="p">))</span> <span class="nx">docs</span> <span class="o">=</span> <span class="p">[</span><span class="nx">docs</span><span class="p">];</span>
|
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="nx">docs</span> <span class="k">instanceof</span> <span class="nb">Array</span><span class="p">))</span> <span class="nx">docs</span> <span class="o">=</span> <span class="p">[</span><span class="nx">docs</span><span class="p">];</span>
|
||||||
|
|
||||||
|
<span class="kd">var</span> <span class="nx">count</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
|
||||||
|
<span class="kd">var</span> <span class="nx">wrongSoFar</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
|
||||||
<span class="nx">_</span><span class="p">.</span><span class="nx">every</span><span class="p">(</span><span class="nx">docs</span><span class="p">,</span><span class="kd">function</span><span class="p">(</span><span class="nx">doc</span><span class="p">){</span>
|
<span class="nx">_</span><span class="p">.</span><span class="nx">every</span><span class="p">(</span><span class="nx">docs</span><span class="p">,</span><span class="kd">function</span><span class="p">(</span><span class="nx">doc</span><span class="p">){</span>
|
||||||
|
<span class="nx">count</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span>
|
||||||
<span class="kd">var</span> <span class="nx">feature</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_getGeometryFromDocument</span><span class="p">(</span><span class="nx">doc</span><span class="p">);</span>
|
<span class="kd">var</span> <span class="nx">feature</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_getGeometryFromDocument</span><span class="p">(</span><span class="nx">doc</span><span class="p">);</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">feature</span> <span class="o">===</span> <span class="s1">'undefined'</span><span class="p">){</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">¶</a> </div> <p>Empty field</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="kc">true</span><span class="p">;</span>
|
<span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">feature</span> <span class="o">===</span> <span class="s1">'undefined'</span> <span class="o">||</span> <span class="nx">feature</span> <span class="o">===</span> <span class="kc">null</span><span class="p">){</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">¶</a> </div> <p>Empty field</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="kc">true</span><span class="p">;</span>
|
||||||
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">feature</span> <span class="k">instanceof</span> <span class="nb">Object</span><span class="p">){</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">¶</a> </div> <p>Build popup contents
|
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">feature</span> <span class="k">instanceof</span> <span class="nb">Object</span><span class="p">){</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">¶</a> </div> <p>Build popup contents
|
||||||
TODO: mustache?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">html</span> <span class="o">=</span> <span class="s1">''</span>
|
TODO: mustache?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">html</span> <span class="o">=</span> <span class="s1">''</span>
|
||||||
<span class="k">for</span> <span class="p">(</span><span class="nx">key</span> <span class="k">in</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">attributes</span><span class="p">){</span>
|
<span class="k">for</span> <span class="p">(</span><span class="nx">key</span> <span class="k">in</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">attributes</span><span class="p">){</span>
|
||||||
@@ -229,16 +232,20 @@ TODO: mustache?</p> </td> <td class="code">
|
|||||||
link this Leaflet layer to a Recline doc</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">cid</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">cid</span><span class="p">;</span>
|
link this Leaflet layer to a Recline doc</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">cid</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">cid</span><span class="p">;</span>
|
||||||
|
|
||||||
<span class="k">try</span> <span class="p">{</span>
|
<span class="k">try</span> <span class="p">{</span>
|
||||||
<span class="nx">self</span><span class="p">.</span><span class="nx">features</span><span class="p">.</span><span class="nx">addGeoJSON</span><span class="p">(</span><span class="nx">feature</span><span class="p">);</span>
|
<span class="nx">self</span><span class="p">.</span><span class="nx">features</span><span class="p">.</span><span class="nx">addGeoJSON</span><span class="p">(</span><span class="nx">feature</span><span class="p">);</span>
|
||||||
<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">except</span><span class="p">)</span> <span class="p">{</span>
|
<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">except</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="kd">var</span> <span class="nx">msg</span> <span class="o">=</span> <span class="s1">'Wrong geometry value'</span><span class="p">;</span>
|
<span class="nx">wrongSoFar</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="nx">except</span><span class="p">.</span><span class="nx">message</span><span class="p">)</span> <span class="nx">msg</span> <span class="o">+=</span> <span class="s1">' ('</span> <span class="o">+</span> <span class="nx">except</span><span class="p">.</span><span class="nx">message</span> <span class="o">+</span> <span class="s1">')'</span><span class="p">;</span>
|
<span class="kd">var</span> <span class="nx">msg</span> <span class="o">=</span> <span class="s1">'Wrong geometry value'</span><span class="p">;</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="nx">except</span><span class="p">.</span><span class="nx">message</span><span class="p">)</span> <span class="nx">msg</span> <span class="o">+=</span> <span class="s1">' ('</span> <span class="o">+</span> <span class="nx">except</span><span class="p">.</span><span class="nx">message</span> <span class="o">+</span> <span class="s1">')'</span><span class="p">;</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="nx">wrongSoFar</span> <span class="o"><=</span> <span class="mi">10</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="nx">my</span><span class="p">.</span><span class="nx">notify</span><span class="p">(</span><span class="nx">msg</span><span class="p">,{</span><span class="nx">category</span><span class="o">:</span><span class="s1">'error'</span><span class="p">});</span>
|
<span class="nx">my</span><span class="p">.</span><span class="nx">notify</span><span class="p">(</span><span class="nx">msg</span><span class="p">,{</span><span class="nx">category</span><span class="o">:</span><span class="s1">'error'</span><span class="p">});</span>
|
||||||
<span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
|
<span class="p">}</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
||||||
<span class="nx">my</span><span class="p">.</span><span class="nx">notify</span><span class="p">(</span><span class="s1">'Wrong geometry value'</span><span class="p">,{</span><span class="nx">category</span><span class="o">:</span><span class="s1">'error'</span><span class="p">});</span>
|
<span class="nx">wrongSoFar</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||||
<span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
|
<span class="k">if</span> <span class="p">(</span><span class="nx">wrongSoFar</span> <span class="o"><=</span> <span class="mi">10</span><span class="p">)</span> <span class="p">{</span>
|
||||||
|
<span class="nx">my</span><span class="p">.</span><span class="nx">notify</span><span class="p">(</span><span class="s1">'Wrong geometry value'</span><span class="p">,{</span><span class="nx">category</span><span class="o">:</span><span class="s1">'error'</span><span class="p">});</span>
|
||||||
|
<span class="p">}</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
<span class="k">return</span> <span class="kc">true</span><span class="p">;</span>
|
<span class="k">return</span> <span class="kc">true</span><span class="p">;</span>
|
||||||
<span class="p">});</span>
|
<span class="p">});</span>
|
||||||
@@ -259,13 +266,17 @@ link this Leaflet layer to a Recline doc</p> </td> <td c
|
|||||||
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-18">¶</a> </div> <p>Private: Return a GeoJSON geomtry extracted from the document fields</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_getGeometryFromDocument</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">doc</span><span class="p">){</span>
|
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-18">¶</a> </div> <p>Private: Return a GeoJSON geomtry extracted from the document fields</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_getGeometryFromDocument</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">doc</span><span class="p">){</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">geomReady</span><span class="p">){</span>
|
<span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">geomReady</span><span class="p">){</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">)){</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-19">¶</a> </div> <p>We assume that the contents of the field are a valid GeoJSON object</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">attributes</span><span class="p">[</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">)];</span>
|
<span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">)){</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-19">¶</a> </div> <p>We assume that the contents of the field are a valid GeoJSON object</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">attributes</span><span class="p">[</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">)];</span>
|
||||||
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'lonField'</span><span class="p">)</span> <span class="o">&&</span> <span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'latField'</span><span class="p">)){</span></pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-20">¶</a> </div> <p>We'll create a GeoJSON like point object from the two lat/lon fields</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="p">{</span>
|
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'lonField'</span><span class="p">)</span> <span class="o">&&</span> <span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'latField'</span><span class="p">)){</span></pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-20">¶</a> </div> <p>We'll create a GeoJSON like point object from the two lat/lon fields</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">lon</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'lonField'</span><span class="p">));</span>
|
||||||
<span class="nx">type</span><span class="o">:</span> <span class="s1">'Point'</span><span class="p">,</span>
|
<span class="kd">var</span> <span class="nx">lat</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'latField'</span><span class="p">));</span>
|
||||||
<span class="nx">coordinates</span><span class="o">:</span> <span class="p">[</span>
|
<span class="k">if</span> <span class="p">(</span><span class="nx">lon</span> <span class="o">&&</span> <span class="nx">lat</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="nx">doc</span><span class="p">.</span><span class="nx">attributes</span><span class="p">[</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'lonField'</span><span class="p">)],</span>
|
<span class="k">return</span> <span class="p">{</span>
|
||||||
<span class="nx">doc</span><span class="p">.</span><span class="nx">attributes</span><span class="p">[</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'latField'</span><span class="p">)]</span>
|
<span class="nx">type</span><span class="o">:</span> <span class="s1">'Point'</span><span class="p">,</span>
|
||||||
<span class="p">]</span>
|
<span class="nx">coordinates</span><span class="o">:</span> <span class="p">[</span>
|
||||||
<span class="p">};</span>
|
<span class="nx">doc</span><span class="p">.</span><span class="nx">attributes</span><span class="p">[</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'lonField'</span><span class="p">)],</span>
|
||||||
|
<span class="nx">doc</span><span class="p">.</span><span class="nx">attributes</span><span class="p">[</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'latField'</span><span class="p">)]</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">};</span>
|
||||||
|
<span class="p">}</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
<span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
|
<span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
@@ -274,13 +285,15 @@ two fields with lat/lon values.</p>
|
|||||||
|
|
||||||
<p>If not found, the user can define them via the UI form.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_setupGeometryField</span><span class="o">:</span> <span class="kd">function</span><span class="p">(){</span>
|
<p>If not found, the user can define them via the UI form.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_setupGeometryField</span><span class="o">:</span> <span class="kd">function</span><span class="p">(){</span>
|
||||||
<span class="kd">var</span> <span class="nx">geomField</span><span class="p">,</span> <span class="nx">latField</span><span class="p">,</span> <span class="nx">lonField</span><span class="p">;</span>
|
<span class="kd">var</span> <span class="nx">geomField</span><span class="p">,</span> <span class="nx">latField</span><span class="p">,</span> <span class="nx">lonField</span><span class="p">;</span>
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">set</span><span class="p">({</span>
|
<span class="k">this</span><span class="p">.</span><span class="nx">geomReady</span> <span class="o">=</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'latField'</span><span class="p">)</span> <span class="o">&&</span> <span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'lonField'</span><span class="p">)));</span></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-22">¶</a> </div> <p>should not overwrite if we have already set this (e.g. explicitly via state)</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">geomReady</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="nx">geomField</span><span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">_checkField</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">geometryFieldNames</span><span class="p">),</span>
|
<span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">set</span><span class="p">({</span>
|
||||||
<span class="nx">latField</span><span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">_checkField</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">latitudeFieldNames</span><span class="p">),</span>
|
<span class="nx">geomField</span><span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">_checkField</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">geometryFieldNames</span><span class="p">),</span>
|
||||||
<span class="nx">lonField</span><span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">_checkField</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">longitudeFieldNames</span><span class="p">)</span>
|
<span class="nx">latField</span><span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">_checkField</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">latitudeFieldNames</span><span class="p">),</span>
|
||||||
<span class="p">});</span>
|
<span class="nx">lonField</span><span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">_checkField</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">longitudeFieldNames</span><span class="p">)</span>
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nx">geomReady</span> <span class="o">=</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'latField'</span><span class="p">)</span> <span class="o">&&</span> <span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'lonField'</span><span class="p">)));</span>
|
<span class="p">});</span>
|
||||||
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-22">¶</a> </div> <p>Private: Check if a field in the current model exists in the provided
|
<span class="k">this</span><span class="p">.</span><span class="nx">geomReady</span> <span class="o">=</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'geomField'</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'latField'</span><span class="p">)</span> <span class="o">&&</span> <span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'lonField'</span><span class="p">)));</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-23"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-23">¶</a> </div> <p>Private: Check if a field in the current model exists in the provided
|
||||||
list of names.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_checkField</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fieldNames</span><span class="p">){</span>
|
list of names.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_checkField</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fieldNames</span><span class="p">){</span>
|
||||||
<span class="kd">var</span> <span class="nx">field</span><span class="p">;</span>
|
<span class="kd">var</span> <span class="nx">field</span><span class="p">;</span>
|
||||||
<span class="kd">var</span> <span class="nx">modelFieldNames</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">model</span><span class="p">.</span><span class="nx">fields</span><span class="p">.</span><span class="nx">pluck</span><span class="p">(</span><span class="s1">'id'</span><span class="p">);</span>
|
<span class="kd">var</span> <span class="nx">modelFieldNames</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">model</span><span class="p">.</span><span class="nx">fields</span><span class="p">.</span><span class="nx">pluck</span><span class="p">(</span><span class="s1">'id'</span><span class="p">);</span>
|
||||||
@@ -291,7 +304,7 @@ list of names.</p> </td> <td class="code">
|
|||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
<span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
|
<span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
|
||||||
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-23"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-23">¶</a> </div> <p>Private: Sets up the Leaflet map control and the features layer.</p>
|
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-24">¶</a> </div> <p>Private: Sets up the Leaflet map control and the features layer.</p>
|
||||||
|
|
||||||
<p>The map uses a base layer from <a href="http://www.mapquest.com">MapQuest</a> based
|
<p>The map uses a base layer from <a href="http://www.mapquest.com">MapQuest</a> based
|
||||||
on <a href="http://openstreetmap.org">OpenStreetMap</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_setupMap</span><span class="o">:</span> <span class="kd">function</span><span class="p">(){</span>
|
on <a href="http://openstreetmap.org">OpenStreetMap</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_setupMap</span><span class="o">:</span> <span class="kd">function</span><span class="p">(){</span>
|
||||||
@@ -318,7 +331,7 @@ on <a href="http://openstreetmap.org">OpenStreetMap</a>.</p> </td>
|
|||||||
<span class="k">this</span><span class="p">.</span><span class="nx">map</span><span class="p">.</span><span class="nx">setView</span><span class="p">(</span><span class="k">new</span> <span class="nx">L</span><span class="p">.</span><span class="nx">LatLng</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="mi">2</span><span class="p">);</span>
|
<span class="k">this</span><span class="p">.</span><span class="nx">map</span><span class="p">.</span><span class="nx">setView</span><span class="p">(</span><span class="k">new</span> <span class="nx">L</span><span class="p">.</span><span class="nx">LatLng</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="mi">2</span><span class="p">);</span>
|
||||||
|
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nx">mapReady</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span>
|
<span class="k">this</span><span class="p">.</span><span class="nx">mapReady</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span>
|
||||||
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-24">¶</a> </div> <p>Private: Helper function to select an option from a select list</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_selectOption</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span><span class="nx">value</span><span class="p">){</span>
|
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-25">¶</a> </div> <p>Private: Helper function to select an option from a select list</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_selectOption</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span><span class="nx">value</span><span class="p">){</span>
|
||||||
<span class="kd">var</span> <span class="nx">options</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="s1">'.'</span> <span class="o">+</span> <span class="nx">id</span> <span class="o">+</span> <span class="s1">' > select > option'</span><span class="p">);</span>
|
<span class="kd">var</span> <span class="nx">options</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="s1">'.'</span> <span class="o">+</span> <span class="nx">id</span> <span class="o">+</span> <span class="s1">' > select > option'</span><span class="p">);</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="nx">options</span><span class="p">){</span>
|
<span class="k">if</span> <span class="p">(</span><span class="nx">options</span><span class="p">){</span>
|
||||||
<span class="nx">options</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">opt</span><span class="p">){</span>
|
<span class="nx">options</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">opt</span><span class="p">){</span>
|
||||||
|
|||||||
@@ -180,8 +180,8 @@ initialized the DataExplorer with the relevant views themselves.</p>
|
|||||||
|
|
||||||
<span class="nx">initialize</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
<span class="nx">initialize</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span>
|
<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span>
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nx">el</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">el</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>Hash of 'page' views (i.e. those for whole page) keyed by page name</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">this</span><span class="p">.</span><span class="nx">_setupState</span><span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">state</span><span class="p">);</span>
|
<span class="k">this</span><span class="p">.</span><span class="nx">el</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">el</span><span class="p">);</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">views</span><span class="p">)</span> <span class="p">{</span>
|
<span class="k">this</span><span class="p">.</span><span class="nx">_setupState</span><span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">state</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>Hash of 'page' views (i.e. those for whole page) keyed by page name</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">views</span><span class="p">)</span> <span class="p">{</span>
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nx">pageViews</span> <span class="o">=</span> <span class="nx">options</span><span class="p">.</span><span class="nx">views</span><span class="p">;</span>
|
<span class="k">this</span><span class="p">.</span><span class="nx">pageViews</span> <span class="o">=</span> <span class="nx">options</span><span class="p">.</span><span class="nx">views</span><span class="p">;</span>
|
||||||
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nx">pageViews</span> <span class="o">=</span> <span class="p">[{</span>
|
<span class="k">this</span><span class="p">.</span><span class="nx">pageViews</span> <span class="o">=</span> <span class="p">[{</span>
|
||||||
|
|||||||
224
recline.js
224
recline.js
@@ -285,7 +285,8 @@ my.DocumentList = Backbone.Collection.extend({
|
|||||||
// * format: (optional) used to indicate how the data should be formatted. For example:
|
// * format: (optional) used to indicate how the data should be formatted. For example:
|
||||||
// * type=date, format=yyyy-mm-dd
|
// * type=date, format=yyyy-mm-dd
|
||||||
// * type=float, format=percentage
|
// * type=float, format=percentage
|
||||||
// * type=float, format='###,###.##'
|
// * type=string, format=link (render as hyperlink)
|
||||||
|
// * type=string, format=markdown (render as markdown if Showdown available)
|
||||||
// * is_derived: (default: false) attribute indicating this field has no backend data but is just derived from other fields (see below).
|
// * is_derived: (default: false) attribute indicating this field has no backend data but is just derived from other fields (see below).
|
||||||
//
|
//
|
||||||
// Following additional instance properties:
|
// Following additional instance properties:
|
||||||
@@ -341,6 +342,22 @@ my.Field = Backbone.Model.extend({
|
|||||||
if (format === 'percentage') {
|
if (format === 'percentage') {
|
||||||
return val + '%';
|
return val + '%';
|
||||||
}
|
}
|
||||||
|
return val;
|
||||||
|
},
|
||||||
|
'string': function(val, field, doc) {
|
||||||
|
var format = field.get('format');
|
||||||
|
if (format === 'link') {
|
||||||
|
return '<a href="VAL">VAL</a>'.replace(/VAL/g, val);
|
||||||
|
} else if (format === 'markdown') {
|
||||||
|
if (typeof Showdown !== 'undefined') {
|
||||||
|
var showdown = new Showdown.converter();
|
||||||
|
out = showdown.makeHtml(val);
|
||||||
|
return out;
|
||||||
|
} else {
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -1626,9 +1643,12 @@ my.Map = Backbone.View.extend({
|
|||||||
|
|
||||||
if (!(docs instanceof Array)) docs = [docs];
|
if (!(docs instanceof Array)) docs = [docs];
|
||||||
|
|
||||||
|
var count = 0;
|
||||||
|
var wrongSoFar = 0;
|
||||||
_.every(docs,function(doc){
|
_.every(docs,function(doc){
|
||||||
|
count += 1;
|
||||||
var feature = self._getGeometryFromDocument(doc);
|
var feature = self._getGeometryFromDocument(doc);
|
||||||
if (typeof feature === 'undefined'){
|
if (typeof feature === 'undefined' || feature === null){
|
||||||
// Empty field
|
// Empty field
|
||||||
return true;
|
return true;
|
||||||
} else if (feature instanceof Object){
|
} else if (feature instanceof Object){
|
||||||
@@ -1645,16 +1665,20 @@ my.Map = Backbone.View.extend({
|
|||||||
feature.properties.cid = doc.cid;
|
feature.properties.cid = doc.cid;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
self.features.addGeoJSON(feature);
|
self.features.addGeoJSON(feature);
|
||||||
} catch (except) {
|
} catch (except) {
|
||||||
var msg = 'Wrong geometry value';
|
wrongSoFar += 1;
|
||||||
if (except.message) msg += ' (' + except.message + ')';
|
var msg = 'Wrong geometry value';
|
||||||
|
if (except.message) msg += ' (' + except.message + ')';
|
||||||
|
if (wrongSoFar <= 10) {
|
||||||
my.notify(msg,{category:'error'});
|
my.notify(msg,{category:'error'});
|
||||||
return false;
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
my.notify('Wrong geometry value',{category:'error'});
|
wrongSoFar += 1
|
||||||
return false;
|
if (wrongSoFar <= 10) {
|
||||||
|
my.notify('Wrong geometry value',{category:'error'});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
@@ -1687,13 +1711,17 @@ my.Map = Backbone.View.extend({
|
|||||||
return doc.attributes[this.state.get('geomField')];
|
return doc.attributes[this.state.get('geomField')];
|
||||||
} else if (this.state.get('lonField') && this.state.get('latField')){
|
} else if (this.state.get('lonField') && this.state.get('latField')){
|
||||||
// We'll create a GeoJSON like point object from the two lat/lon fields
|
// We'll create a GeoJSON like point object from the two lat/lon fields
|
||||||
return {
|
var lon = doc.get(this.state.get('lonField'));
|
||||||
type: 'Point',
|
var lat = doc.get(this.state.get('latField'));
|
||||||
coordinates: [
|
if (lon && lat) {
|
||||||
doc.attributes[this.state.get('lonField')],
|
return {
|
||||||
doc.attributes[this.state.get('latField')]
|
type: 'Point',
|
||||||
]
|
coordinates: [
|
||||||
};
|
doc.attributes[this.state.get('lonField')],
|
||||||
|
doc.attributes[this.state.get('latField')]
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -1705,12 +1733,16 @@ my.Map = Backbone.View.extend({
|
|||||||
// If not found, the user can define them via the UI form.
|
// If not found, the user can define them via the UI form.
|
||||||
_setupGeometryField: function(){
|
_setupGeometryField: function(){
|
||||||
var geomField, latField, lonField;
|
var geomField, latField, lonField;
|
||||||
this.state.set({
|
|
||||||
geomField: this._checkField(this.geometryFieldNames),
|
|
||||||
latField: this._checkField(this.latitudeFieldNames),
|
|
||||||
lonField: this._checkField(this.longitudeFieldNames)
|
|
||||||
});
|
|
||||||
this.geomReady = (this.state.get('geomField') || (this.state.get('latField') && this.state.get('lonField')));
|
this.geomReady = (this.state.get('geomField') || (this.state.get('latField') && this.state.get('lonField')));
|
||||||
|
// should not overwrite if we have already set this (e.g. explicitly via state)
|
||||||
|
if (!this.geomReady) {
|
||||||
|
this.state.set({
|
||||||
|
geomField: this._checkField(this.geometryFieldNames),
|
||||||
|
latField: this._checkField(this.latitudeFieldNames),
|
||||||
|
lonField: this._checkField(this.longitudeFieldNames)
|
||||||
|
});
|
||||||
|
this.geomReady = (this.state.get('geomField') || (this.state.get('latField') && this.state.get('lonField')));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Private: Check if a field in the current model exists in the provided
|
// Private: Check if a field in the current model exists in the provided
|
||||||
@@ -2172,8 +2204,8 @@ my.DataExplorer = Backbone.View.extend({
|
|||||||
initialize: function(options) {
|
initialize: function(options) {
|
||||||
var self = this;
|
var self = this;
|
||||||
this.el = $(this.el);
|
this.el = $(this.el);
|
||||||
// Hash of 'page' views (i.e. those for whole page) keyed by page name
|
|
||||||
this._setupState(options.state);
|
this._setupState(options.state);
|
||||||
|
// Hash of 'page' views (i.e. those for whole page) keyed by page name
|
||||||
if (options.views) {
|
if (options.views) {
|
||||||
this.pageViews = options.views;
|
this.pageViews = options.views;
|
||||||
} else {
|
} else {
|
||||||
@@ -2772,6 +2804,13 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
// backends (see recline.Model.Dataset.initialize).
|
// backends (see recline.Model.Dataset.initialize).
|
||||||
__type__: 'base',
|
__type__: 'base',
|
||||||
|
|
||||||
|
|
||||||
|
// ### readonly
|
||||||
|
//
|
||||||
|
// Class level attribute indicating that this backend is read-only (that
|
||||||
|
// is, cannot be written to).
|
||||||
|
readonly: true,
|
||||||
|
|
||||||
// ### sync
|
// ### sync
|
||||||
//
|
//
|
||||||
// An implementation of Backbone.sync that will be used to override
|
// An implementation of Backbone.sync that will be used to override
|
||||||
@@ -2832,6 +2871,32 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
query: function(model, queryObj) {
|
query: function(model, queryObj) {
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// ### _makeRequest
|
||||||
|
//
|
||||||
|
// Just $.ajax but in any headers in the 'headers' attribute of this
|
||||||
|
// Backend instance. Example:
|
||||||
|
//
|
||||||
|
// <pre>
|
||||||
|
// var jqxhr = this._makeRequest({
|
||||||
|
// url: the-url
|
||||||
|
// });
|
||||||
|
// </pre>
|
||||||
|
_makeRequest: function(data) {
|
||||||
|
var headers = this.get('headers');
|
||||||
|
var extras = {};
|
||||||
|
if (headers) {
|
||||||
|
extras = {
|
||||||
|
beforeSend: function(req) {
|
||||||
|
_.each(headers, function(value, key) {
|
||||||
|
req.setRequestHeader(key, value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var data = _.extend(extras, data);
|
||||||
|
return $.ajax(data);
|
||||||
|
},
|
||||||
|
|
||||||
// convenience method to convert simple set of documents / rows to a QueryResult
|
// convenience method to convert simple set of documents / rows to a QueryResult
|
||||||
_docsToQueryResult: function(rows) {
|
_docsToQueryResult: function(rows) {
|
||||||
var hits = _.map(rows, function(row) {
|
var hits = _.map(rows, function(row) {
|
||||||
@@ -2891,6 +2956,7 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
// Note that this is a **read-only** backend.
|
// Note that this is a **read-only** backend.
|
||||||
my.DataProxy = my.Base.extend({
|
my.DataProxy = my.Base.extend({
|
||||||
__type__: 'dataproxy',
|
__type__: 'dataproxy',
|
||||||
|
readonly: true,
|
||||||
defaults: {
|
defaults: {
|
||||||
dataproxy_url: 'http://jsonpdataproxy.appspot.com'
|
dataproxy_url: 'http://jsonpdataproxy.appspot.com'
|
||||||
},
|
},
|
||||||
@@ -2955,36 +3021,39 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
//
|
//
|
||||||
// Connecting to [ElasticSearch](http://www.elasticsearch.org/).
|
// Connecting to [ElasticSearch](http://www.elasticsearch.org/).
|
||||||
//
|
//
|
||||||
// To use this backend ensure your Dataset has one of the following
|
// Usage:
|
||||||
// attributes (first one found is used):
|
//
|
||||||
|
// <pre>
|
||||||
|
// var backend = new recline.Backend.ElasticSearch({
|
||||||
|
// // optional as can also be provided by Dataset/Document
|
||||||
|
// url: {url to ElasticSearch endpoint i.e. ES 'type/table' url - more info below}
|
||||||
|
// // optional
|
||||||
|
// headers: {dict of headers to add to each request}
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// @param {String} url: url for ElasticSearch type/table, e.g. for ES running
|
||||||
|
// on localhost:9200 with index // twitter and type tweet it would be:
|
||||||
|
//
|
||||||
|
// <pre>http://localhost:9200/twitter/tweet</pre>
|
||||||
|
//
|
||||||
|
// This url is optional since the ES endpoint url may be specified on the the
|
||||||
|
// dataset (and on a Document by the document having a dataset attribute) by
|
||||||
|
// having one of the following (see also `_getESUrl` function):
|
||||||
//
|
//
|
||||||
// <pre>
|
// <pre>
|
||||||
// elasticsearch_url
|
// elasticsearch_url
|
||||||
// webstore_url
|
// webstore_url
|
||||||
// url
|
// url
|
||||||
// </pre>
|
// </pre>
|
||||||
//
|
|
||||||
// This should point to the ES type url. E.G. for ES running on
|
|
||||||
// localhost:9200 with index twitter and type tweet it would be
|
|
||||||
//
|
|
||||||
// <pre>http://localhost:9200/twitter/tweet</pre>
|
|
||||||
my.ElasticSearch = my.Base.extend({
|
my.ElasticSearch = my.Base.extend({
|
||||||
__type__: 'elasticsearch',
|
__type__: 'elasticsearch',
|
||||||
_getESUrl: function(dataset) {
|
readonly: false,
|
||||||
var out = dataset.get('elasticsearch_url');
|
|
||||||
if (out) return out;
|
|
||||||
out = dataset.get('webstore_url');
|
|
||||||
if (out) return out;
|
|
||||||
out = dataset.get('url');
|
|
||||||
return out;
|
|
||||||
},
|
|
||||||
sync: function(method, model, options) {
|
sync: function(method, model, options) {
|
||||||
var self = this;
|
var self = this;
|
||||||
if (method === "read") {
|
if (method === "read") {
|
||||||
if (model.__type__ == 'Dataset') {
|
if (model.__type__ == 'Dataset') {
|
||||||
var base = self._getESUrl(model);
|
var schemaUrl = self._getESUrl(model) + '/_mapping';
|
||||||
var schemaUrl = base + '/_mapping';
|
var jqxhr = this._makeRequest({
|
||||||
var jqxhr = $.ajax({
|
|
||||||
url: schemaUrl,
|
url: schemaUrl,
|
||||||
dataType: 'jsonp'
|
dataType: 'jsonp'
|
||||||
});
|
});
|
||||||
@@ -3003,11 +3072,77 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
dfd.reject(arguments);
|
dfd.reject(arguments);
|
||||||
});
|
});
|
||||||
return dfd.promise();
|
return dfd.promise();
|
||||||
|
} else if (model.__type__ == 'Document') {
|
||||||
|
var base = this._getESUrl(model.dataset) + '/' + model.id;
|
||||||
|
return this._makeRequest({
|
||||||
|
url: base,
|
||||||
|
dataType: 'json'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (method === 'update') {
|
||||||
|
if (model.__type__ == 'Document') {
|
||||||
|
return this.upsert(model.toJSON(), this._getESUrl(model.dataset));
|
||||||
|
}
|
||||||
|
} else if (method === 'delete') {
|
||||||
|
if (model.__type__ == 'Document') {
|
||||||
|
var url = this._getESUrl(model.dataset);
|
||||||
|
return this.delete(model.id, url);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
alert('This backend currently only supports read operations');
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// ### upsert
|
||||||
|
//
|
||||||
|
// create / update a document to ElasticSearch backend
|
||||||
|
//
|
||||||
|
// @param {Object} doc an object to insert to the index.
|
||||||
|
// @param {string} url (optional) url for ElasticSearch endpoint (if not
|
||||||
|
// defined called this._getESUrl()
|
||||||
|
upsert: function(doc, url) {
|
||||||
|
var data = JSON.stringify(doc);
|
||||||
|
url = url ? url : this._getESUrl();
|
||||||
|
if (doc.id) {
|
||||||
|
url += '/' + doc.id;
|
||||||
|
}
|
||||||
|
return this._makeRequest({
|
||||||
|
url: url,
|
||||||
|
type: 'POST',
|
||||||
|
data: data,
|
||||||
|
dataType: 'json'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// ### delete
|
||||||
|
//
|
||||||
|
// Delete a document from the ElasticSearch backend.
|
||||||
|
//
|
||||||
|
// @param {Object} id id of object to delete
|
||||||
|
// @param {string} url (optional) url for ElasticSearch endpoint (if not
|
||||||
|
// provided called this._getESUrl()
|
||||||
|
delete: function(id, url) {
|
||||||
|
url = url ? url : this._getESUrl();
|
||||||
|
url += '/' + id;
|
||||||
|
return this._makeRequest({
|
||||||
|
url: url,
|
||||||
|
type: 'DELETE',
|
||||||
|
dataType: 'json'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// ### _getESUrl
|
||||||
|
//
|
||||||
|
// get url to ElasticSearch endpoint (see above)
|
||||||
|
_getESUrl: function(dataset) {
|
||||||
|
if (dataset) {
|
||||||
|
var out = dataset.get('elasticsearch_url');
|
||||||
|
if (out) return out;
|
||||||
|
out = dataset.get('webstore_url');
|
||||||
|
if (out) return out;
|
||||||
|
out = dataset.get('url');
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
return this.get('url');
|
||||||
|
},
|
||||||
_normalizeQuery: function(queryObj) {
|
_normalizeQuery: function(queryObj) {
|
||||||
var out = queryObj.toJSON ? queryObj.toJSON() : _.extend({}, queryObj);
|
var out = queryObj.toJSON ? queryObj.toJSON() : _.extend({}, queryObj);
|
||||||
if (out.q !== undefined && out.q.trim() === '') {
|
if (out.q !== undefined && out.q.trim() === '') {
|
||||||
@@ -3044,7 +3179,7 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
var queryNormalized = this._normalizeQuery(queryObj);
|
var queryNormalized = this._normalizeQuery(queryObj);
|
||||||
var data = {source: JSON.stringify(queryNormalized)};
|
var data = {source: JSON.stringify(queryNormalized)};
|
||||||
var base = this._getESUrl(model);
|
var base = this._getESUrl(model);
|
||||||
var jqxhr = $.ajax({
|
var jqxhr = this._makeRequest({
|
||||||
url: base + '/_search',
|
url: base + '/_search',
|
||||||
data: data,
|
data: data,
|
||||||
dataType: 'jsonp'
|
dataType: 'jsonp'
|
||||||
@@ -3088,6 +3223,7 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
// </pre>
|
// </pre>
|
||||||
my.GDoc = my.Base.extend({
|
my.GDoc = my.Base.extend({
|
||||||
__type__: 'gdoc',
|
__type__: 'gdoc',
|
||||||
|
readonly: true,
|
||||||
getUrl: function(dataset) {
|
getUrl: function(dataset) {
|
||||||
var url = dataset.get('url');
|
var url = dataset.get('url');
|
||||||
if (url.indexOf('feeds/list') != -1) {
|
if (url.indexOf('feeds/list') != -1) {
|
||||||
@@ -3450,6 +3586,7 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
// </pre>
|
// </pre>
|
||||||
my.Memory = my.Base.extend({
|
my.Memory = my.Base.extend({
|
||||||
__type__: 'memory',
|
__type__: 'memory',
|
||||||
|
readonly: false,
|
||||||
initialize: function() {
|
initialize: function() {
|
||||||
this.datasets = {};
|
this.datasets = {};
|
||||||
},
|
},
|
||||||
@@ -3537,7 +3674,8 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
_.each(terms, function(term) {
|
_.each(terms, function(term) {
|
||||||
var foundmatch = false;
|
var foundmatch = false;
|
||||||
dataset.fields.each(function(field) {
|
dataset.fields.each(function(field) {
|
||||||
var value = rawdoc[field.id].toString();
|
var value = rawdoc[field.id];
|
||||||
|
if (value !== null) { value = value.toString(); }
|
||||||
// TODO regexes?
|
// TODO regexes?
|
||||||
foundmatch = foundmatch || (value === term);
|
foundmatch = foundmatch || (value === term);
|
||||||
// TODO: early out (once we are true should break to spare unnecessary testing)
|
// TODO: early out (once we are true should break to spare unnecessary testing)
|
||||||
|
|||||||
@@ -99,6 +99,32 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
query: function(model, queryObj) {
|
query: function(model, queryObj) {
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// ### _makeRequest
|
||||||
|
//
|
||||||
|
// Just $.ajax but in any headers in the 'headers' attribute of this
|
||||||
|
// Backend instance. Example:
|
||||||
|
//
|
||||||
|
// <pre>
|
||||||
|
// var jqxhr = this._makeRequest({
|
||||||
|
// url: the-url
|
||||||
|
// });
|
||||||
|
// </pre>
|
||||||
|
_makeRequest: function(data) {
|
||||||
|
var headers = this.get('headers');
|
||||||
|
var extras = {};
|
||||||
|
if (headers) {
|
||||||
|
extras = {
|
||||||
|
beforeSend: function(req) {
|
||||||
|
_.each(headers, function(value, key) {
|
||||||
|
req.setRequestHeader(key, value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var data = _.extend(extras, data);
|
||||||
|
return $.ajax(data);
|
||||||
|
},
|
||||||
|
|
||||||
// convenience method to convert simple set of documents / rows to a QueryResult
|
// convenience method to convert simple set of documents / rows to a QueryResult
|
||||||
_docsToQueryResult: function(rows) {
|
_docsToQueryResult: function(rows) {
|
||||||
var hits = _.map(rows, function(row) {
|
var hits = _.map(rows, function(row) {
|
||||||
|
|||||||
@@ -6,37 +6,39 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
//
|
//
|
||||||
// Connecting to [ElasticSearch](http://www.elasticsearch.org/).
|
// Connecting to [ElasticSearch](http://www.elasticsearch.org/).
|
||||||
//
|
//
|
||||||
// To use this backend ensure your Dataset has one of the following
|
// Usage:
|
||||||
// attributes (first one found is used):
|
//
|
||||||
|
// <pre>
|
||||||
|
// var backend = new recline.Backend.ElasticSearch({
|
||||||
|
// // optional as can also be provided by Dataset/Document
|
||||||
|
// url: {url to ElasticSearch endpoint i.e. ES 'type/table' url - more info below}
|
||||||
|
// // optional
|
||||||
|
// headers: {dict of headers to add to each request}
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// @param {String} url: url for ElasticSearch type/table, e.g. for ES running
|
||||||
|
// on localhost:9200 with index // twitter and type tweet it would be:
|
||||||
|
//
|
||||||
|
// <pre>http://localhost:9200/twitter/tweet</pre>
|
||||||
|
//
|
||||||
|
// This url is optional since the ES endpoint url may be specified on the the
|
||||||
|
// dataset (and on a Document by the document having a dataset attribute) by
|
||||||
|
// having one of the following (see also `_getESUrl` function):
|
||||||
//
|
//
|
||||||
// <pre>
|
// <pre>
|
||||||
// elasticsearch_url
|
// elasticsearch_url
|
||||||
// webstore_url
|
// webstore_url
|
||||||
// url
|
// url
|
||||||
// </pre>
|
// </pre>
|
||||||
//
|
|
||||||
// This should point to the ES type url. E.G. for ES running on
|
|
||||||
// localhost:9200 with index twitter and type tweet it would be
|
|
||||||
//
|
|
||||||
// <pre>http://localhost:9200/twitter/tweet</pre>
|
|
||||||
my.ElasticSearch = my.Base.extend({
|
my.ElasticSearch = my.Base.extend({
|
||||||
__type__: 'elasticsearch',
|
__type__: 'elasticsearch',
|
||||||
readonly: true,
|
readonly: false,
|
||||||
_getESUrl: function(dataset) {
|
|
||||||
var out = dataset.get('elasticsearch_url');
|
|
||||||
if (out) return out;
|
|
||||||
out = dataset.get('webstore_url');
|
|
||||||
if (out) return out;
|
|
||||||
out = dataset.get('url');
|
|
||||||
return out;
|
|
||||||
},
|
|
||||||
sync: function(method, model, options) {
|
sync: function(method, model, options) {
|
||||||
var self = this;
|
var self = this;
|
||||||
if (method === "read") {
|
if (method === "read") {
|
||||||
if (model.__type__ == 'Dataset') {
|
if (model.__type__ == 'Dataset') {
|
||||||
var base = self._getESUrl(model);
|
var schemaUrl = self._getESUrl(model) + '/_mapping';
|
||||||
var schemaUrl = base + '/_mapping';
|
var jqxhr = this._makeRequest({
|
||||||
var jqxhr = $.ajax({
|
|
||||||
url: schemaUrl,
|
url: schemaUrl,
|
||||||
dataType: 'jsonp'
|
dataType: 'jsonp'
|
||||||
});
|
});
|
||||||
@@ -55,11 +57,77 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
dfd.reject(arguments);
|
dfd.reject(arguments);
|
||||||
});
|
});
|
||||||
return dfd.promise();
|
return dfd.promise();
|
||||||
|
} else if (model.__type__ == 'Document') {
|
||||||
|
var base = this._getESUrl(model.dataset) + '/' + model.id;
|
||||||
|
return this._makeRequest({
|
||||||
|
url: base,
|
||||||
|
dataType: 'json'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (method === 'update') {
|
||||||
|
if (model.__type__ == 'Document') {
|
||||||
|
return this.upsert(model.toJSON(), this._getESUrl(model.dataset));
|
||||||
|
}
|
||||||
|
} else if (method === 'delete') {
|
||||||
|
if (model.__type__ == 'Document') {
|
||||||
|
var url = this._getESUrl(model.dataset);
|
||||||
|
return this.delete(model.id, url);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
alert('This backend currently only supports read operations');
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// ### upsert
|
||||||
|
//
|
||||||
|
// create / update a document to ElasticSearch backend
|
||||||
|
//
|
||||||
|
// @param {Object} doc an object to insert to the index.
|
||||||
|
// @param {string} url (optional) url for ElasticSearch endpoint (if not
|
||||||
|
// defined called this._getESUrl()
|
||||||
|
upsert: function(doc, url) {
|
||||||
|
var data = JSON.stringify(doc);
|
||||||
|
url = url ? url : this._getESUrl();
|
||||||
|
if (doc.id) {
|
||||||
|
url += '/' + doc.id;
|
||||||
|
}
|
||||||
|
return this._makeRequest({
|
||||||
|
url: url,
|
||||||
|
type: 'POST',
|
||||||
|
data: data,
|
||||||
|
dataType: 'json'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// ### delete
|
||||||
|
//
|
||||||
|
// Delete a document from the ElasticSearch backend.
|
||||||
|
//
|
||||||
|
// @param {Object} id id of object to delete
|
||||||
|
// @param {string} url (optional) url for ElasticSearch endpoint (if not
|
||||||
|
// provided called this._getESUrl()
|
||||||
|
delete: function(id, url) {
|
||||||
|
url = url ? url : this._getESUrl();
|
||||||
|
url += '/' + id;
|
||||||
|
return this._makeRequest({
|
||||||
|
url: url,
|
||||||
|
type: 'DELETE',
|
||||||
|
dataType: 'json'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// ### _getESUrl
|
||||||
|
//
|
||||||
|
// get url to ElasticSearch endpoint (see above)
|
||||||
|
_getESUrl: function(dataset) {
|
||||||
|
if (dataset) {
|
||||||
|
var out = dataset.get('elasticsearch_url');
|
||||||
|
if (out) return out;
|
||||||
|
out = dataset.get('webstore_url');
|
||||||
|
if (out) return out;
|
||||||
|
out = dataset.get('url');
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
return this.get('url');
|
||||||
|
},
|
||||||
_normalizeQuery: function(queryObj) {
|
_normalizeQuery: function(queryObj) {
|
||||||
var out = queryObj.toJSON ? queryObj.toJSON() : _.extend({}, queryObj);
|
var out = queryObj.toJSON ? queryObj.toJSON() : _.extend({}, queryObj);
|
||||||
if (out.q !== undefined && out.q.trim() === '') {
|
if (out.q !== undefined && out.q.trim() === '') {
|
||||||
@@ -96,7 +164,7 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
var queryNormalized = this._normalizeQuery(queryObj);
|
var queryNormalized = this._normalizeQuery(queryObj);
|
||||||
var data = {source: JSON.stringify(queryNormalized)};
|
var data = {source: JSON.stringify(queryNormalized)};
|
||||||
var base = this._getESUrl(model);
|
var base = this._getESUrl(model);
|
||||||
var jqxhr = $.ajax({
|
var jqxhr = this._makeRequest({
|
||||||
url: base + '/_search',
|
url: base + '/_search',
|
||||||
data: data,
|
data: data,
|
||||||
dataType: 'jsonp'
|
dataType: 'jsonp'
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ var sample_data = {
|
|||||||
"took": 2
|
"took": 2
|
||||||
};
|
};
|
||||||
|
|
||||||
test("ElasticSearch", function() {
|
test("ElasticSearch query", function() {
|
||||||
var backend = new recline.Backend.ElasticSearch();
|
var backend = new recline.Backend.ElasticSearch();
|
||||||
var dataset = new recline.Model.Dataset({
|
var dataset = new recline.Model.Dataset({
|
||||||
url: 'https://localhost:9200/my-es-db/my-es-type'
|
url: 'https://localhost:9200/my-es-db/my-es-type'
|
||||||
@@ -149,4 +149,64 @@ test("ElasticSearch", function() {
|
|||||||
$.ajax.restore();
|
$.ajax.restore();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("ElasticSearch write", function() {
|
||||||
|
var backend = new recline.Backend.ElasticSearch();
|
||||||
|
var dataset = new recline.Model.Dataset({
|
||||||
|
url: 'http://localhost:9200/recline-test/es-write'
|
||||||
|
},
|
||||||
|
backend
|
||||||
|
);
|
||||||
|
|
||||||
|
stop();
|
||||||
|
|
||||||
|
var id = parseInt(Math.random()*100000000).toString();
|
||||||
|
var doc = new recline.Model.Document({
|
||||||
|
id: id,
|
||||||
|
title: 'my title'
|
||||||
|
});
|
||||||
|
doc.backend = backend;
|
||||||
|
doc.dataset = dataset;
|
||||||
|
dataset.currentDocuments.add(doc);
|
||||||
|
var jqxhr = doc.save();
|
||||||
|
jqxhr.done(function(data) {
|
||||||
|
ok(data.ok);
|
||||||
|
equal(data._id, id);
|
||||||
|
equal(data._type, 'es-write');
|
||||||
|
equal(data._version, 1);
|
||||||
|
|
||||||
|
// update
|
||||||
|
doc.set({title: 'new title'});
|
||||||
|
var jqxhr = doc.save();
|
||||||
|
jqxhr.done(function(data) {
|
||||||
|
equal(data._version, 2);
|
||||||
|
|
||||||
|
// delete
|
||||||
|
var jqxhr = doc.destroy();
|
||||||
|
jqxhr.done(function(data) {
|
||||||
|
ok(data.ok);
|
||||||
|
doc = null;
|
||||||
|
|
||||||
|
// try to get ...
|
||||||
|
var olddoc = new recline.Model.Document({id: id});
|
||||||
|
equal(olddoc.get('title'), null);
|
||||||
|
olddoc.dataset = dataset;
|
||||||
|
olddoc.backend = backend;
|
||||||
|
var jqxhr = olddoc.fetch();
|
||||||
|
jqxhr.done(function(data) {
|
||||||
|
// should not be here
|
||||||
|
ok(false, 'Should have got 404');
|
||||||
|
}).error(function(error) {
|
||||||
|
equal(error.status, 404);
|
||||||
|
equal(typeof olddoc.get('title'), 'undefined');
|
||||||
|
start();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}).fail(function(error) {
|
||||||
|
console.log(error);
|
||||||
|
ok(false, 'Basic request failed - is ElasticSearch running locally on port 9200 (required for this test!)');
|
||||||
|
start();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
})(this.jQuery);
|
})(this.jQuery);
|
||||||
|
|||||||
Reference in New Issue
Block a user