// Compiled by ClojureScript 1.11.60 {:static-fns true, :optimize-constants true, :optimizations :advanced} goog.provide('reagent.impl.template'); goog.require('cljs.core'); goog.require('cljs.core.constants'); goog.require('clojure.string'); goog.require('reagent.impl.util'); goog.require('reagent.impl.component'); goog.require('reagent.impl.batching'); goog.require('reagent.ratom'); goog.require('reagent.interop'); goog.require('reagent.debug'); /** * Regular expression that parses a CSS-style id and class * from a tag name. */ reagent.impl.template.re_tag = /([^\s\.#]+)(?:#([^\s\.#]+))?(?:\.([^\s#]+))?/; /** * @constructor */ reagent.impl.template.NativeWrapper = (function (comp){ this.comp = comp; }); (reagent.impl.template.NativeWrapper.getBasis = (function (){ return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.cst$sym$comp], null); })); (reagent.impl.template.NativeWrapper.cljs$lang$type = true); (reagent.impl.template.NativeWrapper.cljs$lang$ctorStr = "reagent.impl.template/NativeWrapper"); (reagent.impl.template.NativeWrapper.cljs$lang$ctorPrWriter = (function (this__5330__auto__,writer__5331__auto__,opt__5332__auto__){ return cljs.core._write(writer__5331__auto__,"reagent.impl.template/NativeWrapper"); })); /** * Positional factory function for reagent.impl.template/NativeWrapper. */ reagent.impl.template.__GT_NativeWrapper = (function reagent$impl$template$__GT_NativeWrapper(comp){ return (new reagent.impl.template.NativeWrapper(comp)); }); reagent.impl.template.named_QMARK_ = (function reagent$impl$template$named_QMARK_(x){ return (((x instanceof cljs.core.Keyword)) || ((x instanceof cljs.core.Symbol))); }); reagent.impl.template.hiccup_tag_QMARK_ = (function reagent$impl$template$hiccup_tag_QMARK_(x){ return ((reagent.impl.template.named_QMARK_(x)) || (typeof x === 'string')); }); reagent.impl.template.valid_tag_QMARK_ = (function reagent$impl$template$valid_tag_QMARK_(x){ return ((reagent.impl.template.hiccup_tag_QMARK_(x)) || (((cljs.core.ifn_QMARK_(x)) || ((x instanceof reagent.impl.template.NativeWrapper))))); }); reagent.impl.template.prop_name_cache = ({"class": "className", "for": "htmlFor", "charset": "charSet"}); reagent.impl.template.obj_get = (function reagent$impl$template$obj_get(o,k){ if(cljs.core.truth_(o.hasOwnProperty(k))){ return (o[k]); } else { return null; } }); reagent.impl.template.cached_prop_name = (function reagent$impl$template$cached_prop_name(k){ if(reagent.impl.template.named_QMARK_(k)){ var temp__4659__auto__ = reagent.impl.template.obj_get(reagent.impl.template.prop_name_cache,cljs.core.name(k)); if((temp__4659__auto__ == null)){ return (reagent.impl.template.prop_name_cache[cljs.core.name(k)] = reagent.impl.util.dash_to_camel(k)); } else { var k_SINGLEQUOTE_ = temp__4659__auto__; return k_SINGLEQUOTE_; } } else { return k; } }); reagent.impl.template.convert_prop_value = (function reagent$impl$template$convert_prop_value(x){ if(((typeof x === 'string') || (((typeof x === 'number') || (cljs.core.fn_QMARK_(x)))))){ return x; } else { if(reagent.impl.template.named_QMARK_(x)){ return cljs.core.name(x); } else { if(cljs.core.map_QMARK_(x)){ return cljs.core.reduce_kv((function (o,k,v){ var G__7451 = o; (G__7451[reagent.impl.template.cached_prop_name(k)] = (reagent.impl.template.convert_prop_value.cljs$core$IFn$_invoke$arity$1 ? reagent.impl.template.convert_prop_value.cljs$core$IFn$_invoke$arity$1(v) : reagent.impl.template.convert_prop_value.call(null,v))); return G__7451; }),({}),x); } else { if(cljs.core.coll_QMARK_(x)){ return cljs.core.clj__GT_js(x); } else { if(cljs.core.ifn_QMARK_(x)){ return (function() { var G__7452__delegate = function (args){ return cljs.core.apply.cljs$core$IFn$_invoke$arity$2(x,args); }; var G__7452 = function (var_args){ var args = null; if (arguments.length > 0) { var G__7453__i = 0, G__7453__a = new Array(arguments.length - 0); while (G__7453__i < G__7453__a.length) {G__7453__a[G__7453__i] = arguments[G__7453__i + 0]; ++G__7453__i;} args = new cljs.core.IndexedSeq(G__7453__a,0,null); } return G__7452__delegate.call(this,args);}; G__7452.cljs$lang$maxFixedArity = 0; G__7452.cljs$lang$applyTo = (function (arglist__7454){ var args = cljs.core.seq(arglist__7454); return G__7452__delegate(args); }); G__7452.cljs$core$IFn$_invoke$arity$variadic = G__7452__delegate; return G__7452; })() ; } else { return cljs.core.clj__GT_js(x); } } } } } }); reagent.impl.template.set_id_class = (function reagent$impl$template$set_id_class(props,id,class$){ var p = (((props == null))?({}):props); if((((!((id == null)))) && (((p["id"]) == null)))){ (p["id"] = id); } else { } if((!((class$ == null)))){ var old_7455 = (p["className"]); (p["className"] = (((!((old_7455 == null))))?[cljs.core.str.cljs$core$IFn$_invoke$arity$1(class$)," ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(old_7455)].join(''):class$)); } else { } return p; }); reagent.impl.template.convert_props = (function reagent$impl$template$convert_props(props,id_class){ var id = (id_class["id"]); var class$ = (id_class["className"]); var no_id_class = (((id == null)) && ((class$ == null))); if(((no_id_class) && (cljs.core.empty_QMARK_(props)))){ return null; } else { var objprops = reagent.impl.template.convert_prop_value(props); if(no_id_class){ return objprops; } else { return reagent.impl.template.set_id_class(objprops,id,class$); } } }); reagent.impl.template.input_unmount = (function reagent$impl$template$input_unmount(this$){ return (this$["cljsInputValue"] = null); }); reagent.impl.template.these_inputs_have_selection_api = new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 6, ["url",null,"tel",null,"text",null,"textarea",null,"password",null,"search",null], null), null); reagent.impl.template.has_selection_api_QMARK_ = (function reagent$impl$template$has_selection_api_QMARK_(input_type){ return cljs.core.contains_QMARK_(reagent.impl.template.these_inputs_have_selection_api,input_type); }); reagent.impl.template.input_set_value = (function reagent$impl$template$input_set_value(this$){ var temp__4661__auto__ = (this$["cljsInputValue"]); if((temp__4661__auto__ == null)){ return null; } else { var value = temp__4661__auto__; (this$["cljsInputDirty"] = false); var node = (this$["getDOMNode"])(); var node_value = (node["value"]); if(cljs.core.not_EQ_.cljs$core$IFn$_invoke$arity$2(value,node_value)){ if((!((((node === document.activeElement)) && (((reagent.impl.template.has_selection_api_QMARK_((node["type"]))) && (((typeof value === 'string') && (typeof node_value === 'string'))))))))){ return (node["value"] = value); } else { var existing_offset_from_end = (cljs.core.count(node_value) - (node["selectionStart"])); var new_cursor_offset = (cljs.core.count(value) - existing_offset_from_end); (node["value"] = value); (node["selectionStart"] = new_cursor_offset); return (node["selectionEnd"] = new_cursor_offset); } } else { return null; } } }); reagent.impl.template.input_handle_change = (function reagent$impl$template$input_handle_change(this$,on_change,e){ var res = (on_change.cljs$core$IFn$_invoke$arity$1 ? on_change.cljs$core$IFn$_invoke$arity$1(e) : on_change.call(null,e)); if(cljs.core.truth_((this$["cljsInputDirty"]))){ } else { (this$["cljsInputDirty"] = true); reagent.impl.batching.do_later((function (){ return reagent.impl.template.input_set_value(this$); })); } return res; }); reagent.impl.template.input_render_setup = (function reagent$impl$template$input_render_setup(this$,jsprops){ if(cljs.core.truth_((function (){var and__5043__auto__ = (jsprops["hasOwnProperty"])("onChange"); if(cljs.core.truth_(and__5043__auto__)){ return (jsprops["hasOwnProperty"])("value"); } else { return and__5043__auto__; } })())){ var v = (jsprops["value"]); var value = (((v == null))?"":v); var on_change = (jsprops["onChange"]); (this$["cljsInputValue"] = value); delete jsprops["value"]; var G__7457 = jsprops; (G__7457["defaultValue"] = value); (G__7457["onChange"] = (function (p1__7456_SHARP_){ return reagent.impl.template.input_handle_change(this$,on_change,p1__7456_SHARP_); })); return G__7457; } else { return (this$["cljsInputValue"] = null); } }); reagent.impl.template.input_component_QMARK_ = (function reagent$impl$template$input_component_QMARK_(x){ return (((x === "input")) || ((x === "textarea"))); }); reagent.impl.template.reagent_input_class = null; reagent.impl.template.input_spec = new cljs.core.PersistentArrayMap(null, 4, [cljs.core.cst$kw$display_DASH_name,"ReagentInput",cljs.core.cst$kw$component_DASH_did_DASH_update,reagent.impl.template.input_set_value,cljs.core.cst$kw$component_DASH_will_DASH_unmount,reagent.impl.template.input_unmount,cljs.core.cst$kw$reagent_DASH_render,(function (argv,comp,jsprops,first_child){ var this$ = reagent.impl.component._STAR_current_component_STAR_; reagent.impl.template.input_render_setup(this$,jsprops); return (reagent.impl.template.make_element.cljs$core$IFn$_invoke$arity$4 ? reagent.impl.template.make_element.cljs$core$IFn$_invoke$arity$4(argv,comp,jsprops,first_child) : reagent.impl.template.make_element.call(null,argv,comp,jsprops,first_child)); })], null); reagent.impl.template.reagent_input = (function reagent$impl$template$reagent_input(){ if((reagent.impl.template.reagent_input_class == null)){ (reagent.impl.template.reagent_input_class = reagent.impl.component.create_class(reagent.impl.template.input_spec)); } else { } return reagent.impl.template.reagent_input_class; }); reagent.impl.template.parse_tag = (function reagent$impl$template$parse_tag(hiccup_tag){ var vec__7458 = cljs.core.next(cljs.core.re_matches(reagent.impl.template.re_tag,cljs.core.name(hiccup_tag))); var tag = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__7458,(0),null); var id = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__7458,(1),null); var class$ = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__7458,(2),null); var class_SINGLEQUOTE_ = (cljs.core.truth_(class$)?clojure.string.replace(class$,/\./," "):null); if(cljs.core.truth_(tag)){ } else { throw (new Error(["Assert failed: ",["Invalid tag: '",cljs.core.str.cljs$core$IFn$_invoke$arity$1(hiccup_tag),"'",reagent.impl.component.comp_name()].join(''),"\n","tag"].join(''))); } return ({"name": tag, "id": id, "className": class_SINGLEQUOTE_}); }); reagent.impl.template.fn_to_class = (function reagent$impl$template$fn_to_class(f){ if(cljs.core.ifn_QMARK_(f)){ } else { throw (new Error(["Assert failed: ",["Expected a function, not ",cljs.core.pr_str.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([f], 0))].join(''),"\n","(ifn? f)"].join(''))); } if((((!((!(((cljs.core.fn_QMARK_(f)) && ((!(((f["type"]) == null)))))))))) && ((typeof console !== 'undefined')))){ console.warn(["Warning: ","Using native React classes directly in Hiccup forms ","is not supported. Use create-element or ","adapt-react-class instead: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1((f["type"])),reagent.impl.component.comp_name()].join('')); } else { } var spec = cljs.core.meta(f); var withrender = cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(spec,cljs.core.cst$kw$reagent_DASH_render,f); var res = reagent.impl.component.create_class(withrender); var wrapf = reagent.impl.util.cached_react_class(res); reagent.impl.util.cache_react_class(f,wrapf); return wrapf; }); reagent.impl.template.as_class = (function reagent$impl$template$as_class(tag){ var temp__4659__auto__ = reagent.impl.util.cached_react_class(tag); if((temp__4659__auto__ == null)){ return reagent.impl.template.fn_to_class(tag); } else { var cached_class = temp__4659__auto__; return cached_class; } }); reagent.impl.template.get_key = (function reagent$impl$template$get_key(x){ if(cljs.core.map_QMARK_(x)){ try{return cljs.core.get.cljs$core$IFn$_invoke$arity$2(x,cljs.core.cst$kw$key); }catch (e7461){var e = e7461; return null; }} else { return null; } }); reagent.impl.template.key_from_vec = (function reagent$impl$template$key_from_vec(v){ var temp__4659__auto__ = (function (){var G__7462 = cljs.core.meta(v); if((G__7462 == null)){ return null; } else { return reagent.impl.template.get_key(G__7462); } })(); if((temp__4659__auto__ == null)){ return reagent.impl.template.get_key(cljs.core.nth.cljs$core$IFn$_invoke$arity$3(v,(1),null)); } else { var k = temp__4659__auto__; return k; } }); reagent.impl.template.reag_element = (function reagent$impl$template$reag_element(tag,v){ var c = reagent.impl.template.as_class(tag); var jsprops = ({"argv": v}); var G__7463_7464 = v; var G__7463_7465__$1 = (((G__7463_7464 == null))?null:reagent.impl.template.key_from_vec(G__7463_7464)); if((G__7463_7465__$1 == null)){ } else { (jsprops["key"] = G__7463_7465__$1); } return (React["createElement"])(c,jsprops); }); reagent.impl.template.adapt_react_class = (function reagent$impl$template$adapt_react_class(c){ return (new reagent.impl.template.NativeWrapper(({"name": c, "id": null, "class": null}))); }); reagent.impl.template.tag_name_cache = ({}); reagent.impl.template.cached_parse = (function reagent$impl$template$cached_parse(x){ var temp__4659__auto__ = reagent.impl.template.obj_get(reagent.impl.template.tag_name_cache,x); if((temp__4659__auto__ == null)){ return (reagent.impl.template.tag_name_cache[x] = reagent.impl.template.parse_tag(x)); } else { var s = temp__4659__auto__; return s; } }); reagent.impl.template.native_element = (function reagent$impl$template$native_element(parsed,argv){ var comp = (parsed["name"]); var props = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(argv,(1),null); var hasprops = (((props == null)) || (cljs.core.map_QMARK_(props))); var jsprops = reagent.impl.template.convert_props(((hasprops)?props:null),parsed); var first_child = ((hasprops)?(2):(1)); if(reagent.impl.template.input_component_QMARK_(comp)){ var G__7466 = cljs.core.with_meta(new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [reagent.impl.template.reagent_input(),argv,comp,jsprops,first_child], null),cljs.core.meta(argv)); return (reagent.impl.template.as_element.cljs$core$IFn$_invoke$arity$1 ? reagent.impl.template.as_element.cljs$core$IFn$_invoke$arity$1(G__7466) : reagent.impl.template.as_element.call(null,G__7466)); } else { var p = (function (){var temp__4659__auto__ = (function (){var G__7467 = cljs.core.meta(argv); if((G__7467 == null)){ return null; } else { return reagent.impl.template.get_key(G__7467); } })(); if((temp__4659__auto__ == null)){ return jsprops; } else { var key = temp__4659__auto__; var G__7468 = (((jsprops == null))?({}):jsprops); (G__7468["key"] = key); return G__7468; } })(); return (reagent.impl.template.make_element.cljs$core$IFn$_invoke$arity$4 ? reagent.impl.template.make_element.cljs$core$IFn$_invoke$arity$4(argv,comp,p,first_child) : reagent.impl.template.make_element.call(null,argv,comp,p,first_child)); } }); reagent.impl.template.vec_to_elem = (function reagent$impl$template$vec_to_elem(v){ while(true){ if((cljs.core.count(v) > (0))){ } else { throw (new Error(["Assert failed: ",["Hiccup form should not be empty: ",cljs.core.pr_str.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([v], 0)),reagent.impl.component.comp_name()].join(''),"\n","(pos? (count v))"].join(''))); } var tag = cljs.core.nth.cljs$core$IFn$_invoke$arity$2(v,(0)); if(reagent.impl.template.valid_tag_QMARK_(tag)){ } else { throw (new Error(["Assert failed: ",["Invalid Hiccup form: ",cljs.core.pr_str.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([v], 0)),reagent.impl.component.comp_name()].join(''),"\n","(valid-tag? tag)"].join(''))); } if(reagent.impl.template.hiccup_tag_QMARK_(tag)){ var n = cljs.core.name(tag); var pos = n.indexOf(">"); if((pos === (-1))){ return reagent.impl.template.native_element(reagent.impl.template.cached_parse(n),v); } else { var G__7469 = new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.subs.cljs$core$IFn$_invoke$arity$3(n,(0),pos),cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(v,(0),cljs.core.subs.cljs$core$IFn$_invoke$arity$2(n,(pos + (1))))], null); v = G__7469; continue; } } else { if((tag instanceof reagent.impl.template.NativeWrapper)){ return reagent.impl.template.native_element(tag.comp,v); } else { return reagent.impl.template.reag_element(tag,v); } } break; } }); reagent.impl.template.as_element = (function reagent$impl$template$as_element(x){ if(typeof x === 'string'){ return x; } else { if(cljs.core.vector_QMARK_(x)){ return reagent.impl.template.vec_to_elem(x); } else { if(cljs.core.seq_QMARK_(x)){ return (reagent.impl.template.expand_seq_check.cljs$core$IFn$_invoke$arity$1 ? reagent.impl.template.expand_seq_check.cljs$core$IFn$_invoke$arity$1(x) : reagent.impl.template.expand_seq_check.call(null,x)); } else { return x; } } } }); reagent.impl.template.expand_seq = (function reagent$impl$template$expand_seq(s){ var a = cljs.core.into_array.cljs$core$IFn$_invoke$arity$1(s); var n__5636__auto___7470 = a.length; var i_7471 = (0); while(true){ if((i_7471 < n__5636__auto___7470)){ (a[i_7471] = reagent.impl.template.as_element((a[i_7471]))); var G__7472 = (i_7471 + (1)); i_7471 = G__7472; continue; } else { } break; } return a; }); reagent.impl.template.expand_seq_dev = (function reagent$impl$template$expand_seq_dev(s,o){ var a = cljs.core.into_array.cljs$core$IFn$_invoke$arity$1(s); var n__5636__auto___7473 = a.length; var i_7474 = (0); while(true){ if((i_7474 < n__5636__auto___7473)){ var val_7475 = (a[i_7474]); if(((cljs.core.vector_QMARK_(val_7475)) && ((reagent.impl.template.key_from_vec(val_7475) == null)))){ (o["no-key"] = true); } else { } (a[i_7474] = reagent.impl.template.as_element(val_7475)); var G__7476 = (i_7474 + (1)); i_7474 = G__7476; continue; } else { } break; } return a; }); reagent.impl.template.expand_seq_check = (function reagent$impl$template$expand_seq_check(x){ var ctx = ({}); var res = (((reagent.ratom._STAR_ratom_context_STAR_ == null))?reagent.impl.template.expand_seq_dev(x,ctx):reagent.ratom.capture_derefed((function (){ return reagent.impl.template.expand_seq_dev(x,ctx); }),ctx)); if(cljs.core.truth_(reagent.ratom.captured(ctx))){ if((typeof console !== 'undefined')){ console.warn(["Warning: ","Reactive deref not supported in lazy seq, ","it should be wrapped in doall",reagent.impl.component.comp_name(),". Value:\n",cljs.core.pr_str.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([x], 0))].join('')); } else { } } else { } if(cljs.core.truth_((function (){var and__5043__auto__ = cljs.core.not(reagent.impl.component._STAR_non_reactive_STAR_); if(and__5043__auto__){ return (ctx["no-key"]); } else { return and__5043__auto__; } })())){ if((typeof console !== 'undefined')){ console.warn(["Warning: ","Every element in a seq should have a unique ",":key",reagent.impl.component.comp_name(),". Value: ",cljs.core.pr_str.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([x], 0))].join('')); } else { } } else { } return res; }); reagent.impl.template.make_element = (function reagent$impl$template$make_element(argv,comp,jsprops,first_child){ var G__7477 = (cljs.core.count(argv) - first_child); switch (G__7477) { case (0): return (React["createElement"])(comp,jsprops); break; case (1): return (React["createElement"])(comp,jsprops,reagent.impl.template.as_element(cljs.core.nth.cljs$core$IFn$_invoke$arity$2(argv,first_child))); break; default: return (React["createElement"]).apply(null,cljs.core.reduce_kv((function (a,k,v){ if((k >= first_child)){ a.push(reagent.impl.template.as_element(v)); } else { } return a; }),[comp,jsprops],argv)); } });