314 lines
14 KiB
JavaScript
314 lines
14 KiB
JavaScript
// Compiled by ClojureScript 1.10.520 {}
|
|
goog.provide('geocsv_lite.data');
|
|
goog.require('cljs.core');
|
|
goog.require('clojure.browser.dom');
|
|
goog.require('clojure.string');
|
|
goog.require('cljs_http.client');
|
|
goog.require('cljs.core.async');
|
|
goog.require('geocsv_lite.gis');
|
|
goog.require('geocsv_lite.map');
|
|
goog.require('geocsv_lite.notify');
|
|
/**
|
|
* Returns the query part of the current document URL as a keyword-string map.
|
|
*/
|
|
geocsv_lite.data.get_query_part_as_map = (function geocsv_lite$data$get_query_part_as_map(){
|
|
var query_nvs = cljs.core.map.call(null,(function (p1__27850_SHARP_){
|
|
return clojure.string.split.call(null,p1__27850_SHARP_,"=");
|
|
}),clojure.string.split.call(null,cljs.core.subs.call(null,window.location.search,(1)),"&"));
|
|
if(cljs.core.every_QMARK_.call(null,((function (query_nvs){
|
|
return (function (p1__27851_SHARP_){
|
|
return cljs.core._EQ_.call(null,cljs.core.count.call(null,p1__27851_SHARP_),(2));
|
|
});})(query_nvs))
|
|
,query_nvs)){
|
|
return cljs.core.zipmap.call(null,cljs.core.map.call(null,((function (query_nvs){
|
|
return (function (p1__27852_SHARP_){
|
|
return cljs.core.keyword.call(null,cljs.core.first.call(null,p1__27852_SHARP_));
|
|
});})(query_nvs))
|
|
,query_nvs),cljs.core.map.call(null,((function (query_nvs){
|
|
return (function (p1__27853_SHARP_){
|
|
return cljs.core.nth.call(null,p1__27853_SHARP_,(1));
|
|
});})(query_nvs))
|
|
,query_nvs));
|
|
} else {
|
|
return null;
|
|
}
|
|
});
|
|
/**
|
|
* `query` is expected a keyword-string map which may have keys:
|
|
*
|
|
* * `:docid` whose value is a Google Sheets document id;
|
|
* * `:uri` whose value is the URI of a JSON or CSV file.
|
|
*
|
|
* If either of these keys is found, returns an appropriate URL, else nil.
|
|
*/
|
|
geocsv_lite.data.get_csv_url = (function geocsv_lite$data$get_csv_url(query){
|
|
if(cljs.core.map_QMARK_.call(null,query)){
|
|
if(cljs.core.truth_(new cljs.core.Keyword(null,"docid","docid",832763997).cljs$core$IFn$_invoke$arity$1(query))){
|
|
return ["https://docs.google.com/spreadsheets/d/",cljs.core.str.cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"docid","docid",832763997).cljs$core$IFn$_invoke$arity$1(query)),"/export?format=csv"].join('');
|
|
} else {
|
|
if(cljs.core.truth_(new cljs.core.Keyword(null,"uri","uri",-774711847).cljs$core$IFn$_invoke$arity$1(query))){
|
|
return new cljs.core.Keyword(null,"uri","uri",-774711847).cljs$core$IFn$_invoke$arity$1(query);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
} else {
|
|
return null;
|
|
}
|
|
});
|
|
/**
|
|
* `data` is expected to be a vector of vectors, where the first vector
|
|
* contains column headers and the remaining vectors contain records.
|
|
* Return this as a vector of maps, with each map having keys taken from
|
|
* the first vector and values taken from one of the subsequent vectors.
|
|
*/
|
|
geocsv_lite.data.prepare_records = (function geocsv_lite$data$prepare_records(data){
|
|
var cols = cljs.core.map.call(null,(function (p1__27854_SHARP_){
|
|
var n = ((cljs.core.empty_QMARK_.call(null,p1__27854_SHARP_))?null:((typeof p1__27854_SHARP_ === 'string')?clojure.string.lower_case.call(null,clojure.string.replace.call(null,clojure.string.trim.call(null,p1__27854_SHARP_),/[^\w\d]+/,"-")):null));
|
|
return cljs.core.keyword.call(null,((cljs.core.empty_QMARK_.call(null,n))?cljs.core.gensym.call(null):n));
|
|
}),cljs.core.first.call(null,data));
|
|
return cljs.core.map.call(null,((function (cols){
|
|
return (function (r){
|
|
return cljs.core.zipmap.call(null,cols,r);
|
|
});})(cols))
|
|
,cljs.core.rest.call(null,data));
|
|
});
|
|
/**
|
|
* When data is received from a URL, it is received asynchronously. This
|
|
* is the default callback called with the `response` of the HTTP request,
|
|
* and the keyword `k` identifying the map view, to populate the map with
|
|
* data.
|
|
*/
|
|
geocsv_lite.data.default_handler = (function geocsv_lite$data$default_handler(response,k){
|
|
if(cljs.core._EQ_.call(null,new cljs.core.Keyword(null,"status","status",-1997798413).cljs$core$IFn$_invoke$arity$1(response),(200))){
|
|
var content = new cljs.core.Keyword(null,"body","body",-2049205669).cljs$core$IFn$_invoke$arity$1(response);
|
|
var records = geocsv_lite.data.prepare_records.call(null,new cljs.core.Keyword(null,"data","data",-232669377).cljs$core$IFn$_invoke$arity$1(cljs.core.js__GT_clj.call(null,Papa.parse(content,cljs.core.clj__GT_js.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"dynamicTyping","dynamicTyping",1380929723),true], null))),new cljs.core.Keyword(null,"keywordize-keys","keywordize-keys",1310784252),true)));
|
|
return geocsv_lite.gis.refresh_map_pins.call(null,geocsv_lite.map.get_view.call(null,k),records);
|
|
} else {
|
|
return geocsv_lite.notify.error.call(null,["Bad response from server: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"status","status",-1997798413).cljs$core$IFn$_invoke$arity$1(response))].join(''));
|
|
}
|
|
});
|
|
/**
|
|
* Get data for the view identified by this keyword `k` from this `uri`.
|
|
*/
|
|
geocsv_lite.data.get_data_from_uri = (function geocsv_lite$data$get_data_from_uri(k,uri){
|
|
var c__27772__auto__ = cljs.core.async.chan.call(null,(1));
|
|
cljs.core.async.impl.dispatch.run.call(null,((function (c__27772__auto__){
|
|
return (function (){
|
|
var f__27773__auto__ = (function (){var switch__27749__auto__ = ((function (c__27772__auto__){
|
|
return (function (state_27863){
|
|
var state_val_27864 = (state_27863[(1)]);
|
|
if((state_val_27864 === (1))){
|
|
var inst_27855 = [new cljs.core.Keyword(null,"with-credentials?","with-credentials?",-1773202222)];
|
|
var inst_27856 = ["false"];
|
|
var inst_27857 = cljs.core.PersistentHashMap.fromArrays(inst_27855,inst_27856);
|
|
var inst_27858 = cljs_http.client.get.call(null,uri,inst_27857);
|
|
var state_27863__$1 = state_27863;
|
|
return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_27863__$1,(2),inst_27858);
|
|
} else {
|
|
if((state_val_27864 === (2))){
|
|
var inst_27860 = (state_27863[(2)]);
|
|
var inst_27861 = geocsv_lite.data.default_handler.call(null,inst_27860,k);
|
|
var state_27863__$1 = state_27863;
|
|
return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_27863__$1,inst_27861);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
});})(c__27772__auto__))
|
|
;
|
|
return ((function (switch__27749__auto__,c__27772__auto__){
|
|
return (function() {
|
|
var geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto__ = null;
|
|
var geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto____0 = (function (){
|
|
var statearr_27865 = [null,null,null,null,null,null,null];
|
|
(statearr_27865[(0)] = geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto__);
|
|
|
|
(statearr_27865[(1)] = (1));
|
|
|
|
return statearr_27865;
|
|
});
|
|
var geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto____1 = (function (state_27863){
|
|
while(true){
|
|
var ret_value__27751__auto__ = (function (){try{while(true){
|
|
var result__27752__auto__ = switch__27749__auto__.call(null,state_27863);
|
|
if(cljs.core.keyword_identical_QMARK_.call(null,result__27752__auto__,new cljs.core.Keyword(null,"recur","recur",-437573268))){
|
|
continue;
|
|
} else {
|
|
return result__27752__auto__;
|
|
}
|
|
break;
|
|
}
|
|
}catch (e27866){if((e27866 instanceof Object)){
|
|
var ex__27753__auto__ = e27866;
|
|
var statearr_27867_27869 = state_27863;
|
|
(statearr_27867_27869[(5)] = ex__27753__auto__);
|
|
|
|
|
|
cljs.core.async.impl.ioc_helpers.process_exception.call(null,state_27863);
|
|
|
|
return new cljs.core.Keyword(null,"recur","recur",-437573268);
|
|
} else {
|
|
throw e27866;
|
|
|
|
}
|
|
}})();
|
|
if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__27751__auto__,new cljs.core.Keyword(null,"recur","recur",-437573268))){
|
|
var G__27870 = state_27863;
|
|
state_27863 = G__27870;
|
|
continue;
|
|
} else {
|
|
return ret_value__27751__auto__;
|
|
}
|
|
break;
|
|
}
|
|
});
|
|
geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto__ = function(state_27863){
|
|
switch(arguments.length){
|
|
case 0:
|
|
return geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto____0.call(this);
|
|
case 1:
|
|
return geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto____1.call(this,state_27863);
|
|
}
|
|
throw(new Error('Invalid arity: ' + arguments.length));
|
|
};
|
|
geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto__.cljs$core$IFn$_invoke$arity$0 = geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto____0;
|
|
geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto__.cljs$core$IFn$_invoke$arity$1 = geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto____1;
|
|
return geocsv_lite$data$get_data_from_uri_$_state_machine__27750__auto__;
|
|
})()
|
|
;})(switch__27749__auto__,c__27772__auto__))
|
|
})();
|
|
var state__27774__auto__ = (function (){var statearr_27868 = f__27773__auto__.call(null);
|
|
(statearr_27868[(6)] = c__27772__auto__);
|
|
|
|
return statearr_27868;
|
|
})();
|
|
return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__27774__auto__);
|
|
});})(c__27772__auto__))
|
|
);
|
|
|
|
return c__27772__auto__;
|
|
});
|
|
/**
|
|
* Get data for the view identified by this keyword `k` from this `data-source`.
|
|
* The data source may be a URL, or a CSV or JSON formatted string.
|
|
*/
|
|
geocsv_lite.data.get_data = (function geocsv_lite$data$get_data(k,data_source){
|
|
console.debug(["get-data: k = `",cljs.core.str.cljs$core$IFn$_invoke$arity$1(k),"`; data-source = `",cljs.core.str.cljs$core$IFn$_invoke$arity$1(data_source),"`"].join(''));
|
|
|
|
var p = cljs.core.js__GT_clj.call(null,Papa.parse(data_source),new cljs.core.Keyword(null,"keywordize-keys","keywordize-keys",1310784252),true);
|
|
var data = ((cljs.core.empty_QMARK_.call(null,new cljs.core.Keyword(null,"errors","errors",-908790718).cljs$core$IFn$_invoke$arity$1(p)))?new cljs.core.Keyword(null,"data","data",-232669377).cljs$core$IFn$_invoke$arity$1(p):(function (){try{return cljs.core.js__GT_clj.call(null,JSON.parse(data_source));
|
|
}catch (e27871){var _ = e27871;
|
|
return null;
|
|
}})());
|
|
console.debug("Found records: ",cljs.core.clj__GT_js.call(null,data));
|
|
|
|
if(((cljs.core.vector_QMARK_.call(null,data)) && (cljs.core.every_QMARK_.call(null,cljs.core.vector_QMARK_,data)))){
|
|
var records = geocsv_lite.data.prepare_records.call(null,data);
|
|
geocsv_lite.notify.message.call(null,["Found ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(cljs.core.count.call(null,records))," records of inline data for map `",cljs.core.str.cljs$core$IFn$_invoke$arity$1(k),"`"].join(''));
|
|
|
|
return geocsv_lite.gis.refresh_map_pins.call(null,geocsv_lite.map.get_view.call(null,k),geocsv_lite.data.prepare_records.call(null,data));
|
|
} else {
|
|
return geocsv_lite.data.get_data_from_uri.call(null,k,data_source);
|
|
}
|
|
});
|
|
geocsv_lite.data.get_data_with_uri_and_handler = (function geocsv_lite$data$get_data_with_uri_and_handler(uri,handler_fn,k){
|
|
var c__27772__auto__ = cljs.core.async.chan.call(null,(1));
|
|
cljs.core.async.impl.dispatch.run.call(null,((function (c__27772__auto__){
|
|
return (function (){
|
|
var f__27773__auto__ = (function (){var switch__27749__auto__ = ((function (c__27772__auto__){
|
|
return (function (state_27879){
|
|
var state_val_27880 = (state_27879[(1)]);
|
|
if((state_val_27880 === (1))){
|
|
var inst_27872 = cljs_http.client.get.call(null,uri);
|
|
var state_27879__$1 = state_27879;
|
|
return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_27879__$1,(2),inst_27872);
|
|
} else {
|
|
if((state_val_27880 === (2))){
|
|
var inst_27874 = (state_27879[(2)]);
|
|
var inst_27875 = (new cljs.core.List(null,k,null,(1),null));
|
|
var inst_27876 = (new cljs.core.List(null,inst_27874,inst_27875,(2),null));
|
|
var inst_27877 = cljs.core.apply.call(null,handler_fn,inst_27876);
|
|
var state_27879__$1 = state_27879;
|
|
return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_27879__$1,inst_27877);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
});})(c__27772__auto__))
|
|
;
|
|
return ((function (switch__27749__auto__,c__27772__auto__){
|
|
return (function() {
|
|
var geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto__ = null;
|
|
var geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto____0 = (function (){
|
|
var statearr_27881 = [null,null,null,null,null,null,null];
|
|
(statearr_27881[(0)] = geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto__);
|
|
|
|
(statearr_27881[(1)] = (1));
|
|
|
|
return statearr_27881;
|
|
});
|
|
var geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto____1 = (function (state_27879){
|
|
while(true){
|
|
var ret_value__27751__auto__ = (function (){try{while(true){
|
|
var result__27752__auto__ = switch__27749__auto__.call(null,state_27879);
|
|
if(cljs.core.keyword_identical_QMARK_.call(null,result__27752__auto__,new cljs.core.Keyword(null,"recur","recur",-437573268))){
|
|
continue;
|
|
} else {
|
|
return result__27752__auto__;
|
|
}
|
|
break;
|
|
}
|
|
}catch (e27882){if((e27882 instanceof Object)){
|
|
var ex__27753__auto__ = e27882;
|
|
var statearr_27883_27885 = state_27879;
|
|
(statearr_27883_27885[(5)] = ex__27753__auto__);
|
|
|
|
|
|
cljs.core.async.impl.ioc_helpers.process_exception.call(null,state_27879);
|
|
|
|
return new cljs.core.Keyword(null,"recur","recur",-437573268);
|
|
} else {
|
|
throw e27882;
|
|
|
|
}
|
|
}})();
|
|
if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__27751__auto__,new cljs.core.Keyword(null,"recur","recur",-437573268))){
|
|
var G__27886 = state_27879;
|
|
state_27879 = G__27886;
|
|
continue;
|
|
} else {
|
|
return ret_value__27751__auto__;
|
|
}
|
|
break;
|
|
}
|
|
});
|
|
geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto__ = function(state_27879){
|
|
switch(arguments.length){
|
|
case 0:
|
|
return geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto____0.call(this);
|
|
case 1:
|
|
return geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto____1.call(this,state_27879);
|
|
}
|
|
throw(new Error('Invalid arity: ' + arguments.length));
|
|
};
|
|
geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto__.cljs$core$IFn$_invoke$arity$0 = geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto____0;
|
|
geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto__.cljs$core$IFn$_invoke$arity$1 = geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto____1;
|
|
return geocsv_lite$data$get_data_with_uri_and_handler_$_state_machine__27750__auto__;
|
|
})()
|
|
;})(switch__27749__auto__,c__27772__auto__))
|
|
})();
|
|
var state__27774__auto__ = (function (){var statearr_27884 = f__27773__auto__.call(null);
|
|
(statearr_27884[(6)] = c__27772__auto__);
|
|
|
|
return statearr_27884;
|
|
})();
|
|
return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__27774__auto__);
|
|
});})(c__27772__auto__))
|
|
);
|
|
|
|
return c__27772__auto__;
|
|
});
|
|
|
|
//# sourceMappingURL=data.js.map?rel=1582633804610
|