Added compiled JavaScript to repository for GitHub pages
This feels like a mistake...
This commit is contained in:
parent
3d5a2fb322
commit
dc226b1f25
468 changed files with 212152 additions and 2 deletions
|
|
@ -0,0 +1,88 @@
|
|||
(ns devtools.formatters.budgeting
|
||||
(:require-macros [devtools.util :refer [oget oset ocall oapply safe-call]])
|
||||
(:require [devtools.formatters.templating :refer [render-markup]]
|
||||
[devtools.formatters.state :refer [get-depth-budget set-depth-budget]]
|
||||
[devtools.formatters.helpers :refer [pref]]
|
||||
[devtools.formatters.markup :refer [<header-expander>]]))
|
||||
|
||||
; This functionality provides a workaround to issue #22 (https://github.com/binaryage/cljs-devtools/issues/22).
|
||||
; The idea is to track hierarchy depth for json-ml(s) we are generating.
|
||||
; If we are about to cross the depth limit hardcoded in WebKit,
|
||||
; instead we render simple expandable placeholders which resume full rendering in their bodies (when expanded by user).
|
||||
; Note that this technique has some quirks, it may break styling in some pathological cases.
|
||||
|
||||
; we need to reserve some depth levels for our expander symbol markup
|
||||
(def header-expander-depth-cost 2)
|
||||
|
||||
; -- tracking over-budget values -------------------------------------------------------------------------------------------
|
||||
|
||||
; note: phantomjs does not have WeakSet, so we have to emulate it when testing
|
||||
(def over-budget-values (if (exists? js/WeakSet) (js/WeakSet.) (volatile! #{})))
|
||||
|
||||
(defn add-over-budget-value! [value]
|
||||
(if (volatile? over-budget-values)
|
||||
(vreset! over-budget-values (conj @over-budget-values value))
|
||||
(ocall over-budget-values "add" value)))
|
||||
|
||||
(defn delete-over-budget-value! [value]
|
||||
(if (volatile? over-budget-values)
|
||||
(vreset! over-budget-values (disj @over-budget-values value))
|
||||
(ocall over-budget-values "delete" value)))
|
||||
|
||||
(defn has-over-budget-value? [value]
|
||||
(if (volatile? over-budget-values)
|
||||
(contains? @over-budget-values value)
|
||||
(ocall over-budget-values "has" value)))
|
||||
|
||||
; -- depth budget accounting ------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn object-reference? [json-ml]
|
||||
(= (first json-ml) "object"))
|
||||
|
||||
(defn determine-depth [json-ml]
|
||||
(if (array? json-ml)
|
||||
(inc (apply max (map determine-depth json-ml)))
|
||||
0))
|
||||
|
||||
(defn has-any-object-reference? [json-ml]
|
||||
(if (array? json-ml)
|
||||
(if (object-reference? json-ml)
|
||||
true
|
||||
(some has-any-object-reference? json-ml))))
|
||||
|
||||
(defn transfer-remaining-depth-budget! [object-reference depth-budget]
|
||||
{:pre [(not (neg? depth-budget))]}
|
||||
(let [data (second object-reference)
|
||||
_ (assert (object? data))
|
||||
config (oget data "config")]
|
||||
(oset data ["config"] (set-depth-budget config depth-budget))))
|
||||
|
||||
(defn distribute-budget! [json-ml depth-budget]
|
||||
{:pre [(not (neg? depth-budget))]}
|
||||
(if (array? json-ml)
|
||||
(let [new-depth-budget (dec depth-budget)]
|
||||
(if (object-reference? json-ml)
|
||||
(transfer-remaining-depth-budget! json-ml new-depth-budget)
|
||||
(doseq [item json-ml]
|
||||
(distribute-budget! item new-depth-budget)))))
|
||||
json-ml)
|
||||
|
||||
; -- api --------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn was-over-budget?! [value]
|
||||
(when (has-over-budget-value? value)
|
||||
(delete-over-budget-value! value)
|
||||
true))
|
||||
|
||||
(defn alter-json-ml-to-fit-in-remaining-budget! [value json-ml]
|
||||
(if-let [initial-hierarchy-depth-budget (pref :initial-hierarchy-depth-budget)] ; this is hardcoded in InjectedScriptSource.js in WebKit, look for maxCustomPreviewRecursionDepth
|
||||
(let [remaining-depth-budget (or (get-depth-budget) (dec initial-hierarchy-depth-budget))
|
||||
depth (determine-depth json-ml)
|
||||
final? (not (has-any-object-reference? json-ml))
|
||||
needed-depth (if final? depth (+ depth header-expander-depth-cost))]
|
||||
(if (>= remaining-depth-budget needed-depth)
|
||||
(distribute-budget! json-ml remaining-depth-budget)
|
||||
(let [expander-ml (render-markup (<header-expander> value))]
|
||||
(add-over-budget-value! value) ; we need to record over-budget values to for later was-over-budget?! check, see has-body* in formatters.core
|
||||
expander-ml)))
|
||||
json-ml))
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,180 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('devtools.formatters.budgeting');
|
||||
goog.require('cljs.core');
|
||||
goog.require('devtools.formatters.templating');
|
||||
goog.require('devtools.formatters.state');
|
||||
goog.require('devtools.formatters.helpers');
|
||||
goog.require('devtools.formatters.markup');
|
||||
devtools.formatters.budgeting.header_expander_depth_cost = (2);
|
||||
devtools.formatters.budgeting.over_budget_values = ((typeof WeakSet !== 'undefined')?(new WeakSet()):cljs.core.volatile_BANG_.call(null,cljs.core.PersistentHashSet.EMPTY));
|
||||
devtools.formatters.budgeting.add_over_budget_value_BANG_ = (function devtools$formatters$budgeting$add_over_budget_value_BANG_(value){
|
||||
if(cljs.core.volatile_QMARK_.call(null,devtools.formatters.budgeting.over_budget_values)){
|
||||
return cljs.core.vreset_BANG_.call(null,devtools.formatters.budgeting.over_budget_values,cljs.core.conj.call(null,cljs.core.deref.call(null,devtools.formatters.budgeting.over_budget_values),value));
|
||||
} else {
|
||||
var o__41049__auto__ = devtools.formatters.budgeting.over_budget_values;
|
||||
return goog.object.get(o__41049__auto__,"add").call(o__41049__auto__,value);
|
||||
}
|
||||
});
|
||||
devtools.formatters.budgeting.delete_over_budget_value_BANG_ = (function devtools$formatters$budgeting$delete_over_budget_value_BANG_(value){
|
||||
if(cljs.core.volatile_QMARK_.call(null,devtools.formatters.budgeting.over_budget_values)){
|
||||
return cljs.core.vreset_BANG_.call(null,devtools.formatters.budgeting.over_budget_values,cljs.core.disj.call(null,cljs.core.deref.call(null,devtools.formatters.budgeting.over_budget_values),value));
|
||||
} else {
|
||||
var o__41049__auto__ = devtools.formatters.budgeting.over_budget_values;
|
||||
return goog.object.get(o__41049__auto__,"delete").call(o__41049__auto__,value);
|
||||
}
|
||||
});
|
||||
devtools.formatters.budgeting.has_over_budget_value_QMARK_ = (function devtools$formatters$budgeting$has_over_budget_value_QMARK_(value){
|
||||
if(cljs.core.volatile_QMARK_.call(null,devtools.formatters.budgeting.over_budget_values)){
|
||||
return cljs.core.contains_QMARK_.call(null,cljs.core.deref.call(null,devtools.formatters.budgeting.over_budget_values),value);
|
||||
} else {
|
||||
var o__41049__auto__ = devtools.formatters.budgeting.over_budget_values;
|
||||
return goog.object.get(o__41049__auto__,"has").call(o__41049__auto__,value);
|
||||
}
|
||||
});
|
||||
devtools.formatters.budgeting.object_reference_QMARK_ = (function devtools$formatters$budgeting$object_reference_QMARK_(json_ml){
|
||||
return cljs.core._EQ_.call(null,cljs.core.first.call(null,json_ml),"object");
|
||||
});
|
||||
devtools.formatters.budgeting.determine_depth = (function devtools$formatters$budgeting$determine_depth(json_ml){
|
||||
if(cljs.core.array_QMARK_.call(null,json_ml)){
|
||||
return (cljs.core.apply.call(null,cljs.core.max,cljs.core.map.call(null,devtools$formatters$budgeting$determine_depth,json_ml)) + (1));
|
||||
} else {
|
||||
return (0);
|
||||
}
|
||||
});
|
||||
devtools.formatters.budgeting.has_any_object_reference_QMARK_ = (function devtools$formatters$budgeting$has_any_object_reference_QMARK_(json_ml){
|
||||
if(cljs.core.array_QMARK_.call(null,json_ml)){
|
||||
if(cljs.core.truth_(devtools.formatters.budgeting.object_reference_QMARK_.call(null,json_ml))){
|
||||
return true;
|
||||
} else {
|
||||
return cljs.core.some.call(null,devtools$formatters$budgeting$has_any_object_reference_QMARK_,json_ml);
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
devtools.formatters.budgeting.transfer_remaining_depth_budget_BANG_ = (function devtools$formatters$budgeting$transfer_remaining_depth_budget_BANG_(object_reference,depth_budget){
|
||||
if(!((depth_budget < (0)))){
|
||||
} else {
|
||||
throw (new Error("Assert failed: (not (neg? depth-budget))"));
|
||||
}
|
||||
|
||||
var data = cljs.core.second.call(null,object_reference);
|
||||
var _ = ((cljs.core.object_QMARK_.call(null,data))?null:(function(){throw (new Error("Assert failed: (object? data)"))})());
|
||||
var config = goog.object.get(data,"config");
|
||||
var G__41808 = data;
|
||||
var target__41068__auto__ = G__41808;
|
||||
if(cljs.core.truth_(target__41068__auto__)){
|
||||
} else {
|
||||
throw (new Error([cljs.core.str("Assert failed: "),cljs.core.str([cljs.core.str("unable to locate object path "),cljs.core.str(null),cljs.core.str(" in "),cljs.core.str(G__41808)].join('')),cljs.core.str("\n"),cljs.core.str("target__41068__auto__")].join('')));
|
||||
}
|
||||
|
||||
goog.object.set(target__41068__auto__,cljs.core.last.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, ["config"], null)),devtools.formatters.state.set_depth_budget.call(null,config,depth_budget));
|
||||
|
||||
return G__41808;
|
||||
});
|
||||
devtools.formatters.budgeting.distribute_budget_BANG_ = (function devtools$formatters$budgeting$distribute_budget_BANG_(json_ml,depth_budget){
|
||||
if(!((depth_budget < (0)))){
|
||||
} else {
|
||||
throw (new Error("Assert failed: (not (neg? depth-budget))"));
|
||||
}
|
||||
|
||||
if(cljs.core.array_QMARK_.call(null,json_ml)){
|
||||
var new_depth_budget_41817 = (depth_budget - (1));
|
||||
if(cljs.core.truth_(devtools.formatters.budgeting.object_reference_QMARK_.call(null,json_ml))){
|
||||
devtools.formatters.budgeting.transfer_remaining_depth_budget_BANG_.call(null,json_ml,new_depth_budget_41817);
|
||||
} else {
|
||||
var seq__41813_41818 = cljs.core.seq.call(null,json_ml);
|
||||
var chunk__41814_41819 = null;
|
||||
var count__41815_41820 = (0);
|
||||
var i__41816_41821 = (0);
|
||||
while(true){
|
||||
if((i__41816_41821 < count__41815_41820)){
|
||||
var item_41822 = cljs.core._nth.call(null,chunk__41814_41819,i__41816_41821);
|
||||
devtools$formatters$budgeting$distribute_budget_BANG_.call(null,item_41822,new_depth_budget_41817);
|
||||
|
||||
var G__41823 = seq__41813_41818;
|
||||
var G__41824 = chunk__41814_41819;
|
||||
var G__41825 = count__41815_41820;
|
||||
var G__41826 = (i__41816_41821 + (1));
|
||||
seq__41813_41818 = G__41823;
|
||||
chunk__41814_41819 = G__41824;
|
||||
count__41815_41820 = G__41825;
|
||||
i__41816_41821 = G__41826;
|
||||
continue;
|
||||
} else {
|
||||
var temp__4657__auto___41827 = cljs.core.seq.call(null,seq__41813_41818);
|
||||
if(temp__4657__auto___41827){
|
||||
var seq__41813_41828__$1 = temp__4657__auto___41827;
|
||||
if(cljs.core.chunked_seq_QMARK_.call(null,seq__41813_41828__$1)){
|
||||
var c__25941__auto___41829 = cljs.core.chunk_first.call(null,seq__41813_41828__$1);
|
||||
var G__41830 = cljs.core.chunk_rest.call(null,seq__41813_41828__$1);
|
||||
var G__41831 = c__25941__auto___41829;
|
||||
var G__41832 = cljs.core.count.call(null,c__25941__auto___41829);
|
||||
var G__41833 = (0);
|
||||
seq__41813_41818 = G__41830;
|
||||
chunk__41814_41819 = G__41831;
|
||||
count__41815_41820 = G__41832;
|
||||
i__41816_41821 = G__41833;
|
||||
continue;
|
||||
} else {
|
||||
var item_41834 = cljs.core.first.call(null,seq__41813_41828__$1);
|
||||
devtools$formatters$budgeting$distribute_budget_BANG_.call(null,item_41834,new_depth_budget_41817);
|
||||
|
||||
var G__41835 = cljs.core.next.call(null,seq__41813_41828__$1);
|
||||
var G__41836 = null;
|
||||
var G__41837 = (0);
|
||||
var G__41838 = (0);
|
||||
seq__41813_41818 = G__41835;
|
||||
chunk__41814_41819 = G__41836;
|
||||
count__41815_41820 = G__41837;
|
||||
i__41816_41821 = G__41838;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
}
|
||||
|
||||
return json_ml;
|
||||
});
|
||||
devtools.formatters.budgeting.was_over_budget_QMARK__BANG_ = (function devtools$formatters$budgeting$was_over_budget_QMARK__BANG_(value){
|
||||
if(cljs.core.truth_(devtools.formatters.budgeting.has_over_budget_value_QMARK_.call(null,value))){
|
||||
devtools.formatters.budgeting.delete_over_budget_value_BANG_.call(null,value);
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
devtools.formatters.budgeting.alter_json_ml_to_fit_in_remaining_budget_BANG_ = (function devtools$formatters$budgeting$alter_json_ml_to_fit_in_remaining_budget_BANG_(value,json_ml){
|
||||
var temp__4655__auto__ = devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"initial-hierarchy-depth-budget","initial-hierarchy-depth-budget",-482715807));
|
||||
if(cljs.core.truth_(temp__4655__auto__)){
|
||||
var initial_hierarchy_depth_budget = temp__4655__auto__;
|
||||
var remaining_depth_budget = (function (){var or__25130__auto__ = devtools.formatters.state.get_depth_budget.call(null);
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
return (initial_hierarchy_depth_budget - (1));
|
||||
}
|
||||
})();
|
||||
var depth = devtools.formatters.budgeting.determine_depth.call(null,json_ml);
|
||||
var final_QMARK_ = cljs.core.not.call(null,devtools.formatters.budgeting.has_any_object_reference_QMARK_.call(null,json_ml));
|
||||
var needed_depth = ((final_QMARK_)?depth:(depth + devtools.formatters.budgeting.header_expander_depth_cost));
|
||||
if((remaining_depth_budget >= needed_depth)){
|
||||
return devtools.formatters.budgeting.distribute_budget_BANG_.call(null,json_ml,remaining_depth_budget);
|
||||
} else {
|
||||
var expander_ml = devtools.formatters.templating.render_markup.call(null,devtools.formatters.markup._LT_header_expander_GT_.call(null,value));
|
||||
devtools.formatters.budgeting.add_over_budget_value_BANG_.call(null,value);
|
||||
|
||||
return expander_ml;
|
||||
}
|
||||
} else {
|
||||
return json_ml;
|
||||
}
|
||||
});
|
||||
|
||||
//# sourceMappingURL=budgeting.js.map?rel=1603199213223
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"\/Users\/simon\/workspace\/swinging-needle-meter\/docs\/js\/compiled\/out\/devtools\/formatters\/budgeting.js","sources":["budgeting.cljs?rel=1603199213224"],"lineCount":180,"mappings":";AAAA;;;;;;AAcA,2DAAA,3DAAKA;AAKL,AAAKC,mDAAmB,EAAI,OAASC,yBAAY,KAAAA,WAAc,mCAAA,nCAACC;AAEhE,4DAAA,5DAAMC,gIAAwBC;AAA9B,AACE,GAAI,AAACC,oCAAUL;AACb,OAACM,iCAAQN,iDAAmB,yBAAA,AAAAO,zBAACC,mDAAMR,kDAAmBI;;AACtD,IAAAK,mBAAOT;AAAP,AAAA,OAAA,AAAAU,gBAAAD,iBAAA,YAAAA,iBAAgCL;;;AAEpC,+DAAA,\/DAAMO,sIAA2BP;AAAjC,AACE,GAAI,AAACC,oCAAUL;AACb,OAACM,iCAAQN,iDAAmB,yBAAA,AAAAO,zBAACK,mDAAMZ,kDAAmBI;;AACtD,IAAAK,mBAAOT;AAAP,AAAA,OAAA,AAAAU,gBAAAD,iBAAA,eAAAA,iBAAmCL;;;AAEvC,6DAAA,7DAAMS,kIAAwBT;AAA9B,AACE,GAAI,AAACC,oCAAUL;AACb,2CAAA,AAAAO,pCAACO,8DAAWd,kDAAmBI;;AAC\/B,IAAAK,mBAAOT;AAAP,AAAA,OAAA,AAAAU,gBAAAD,iBAAA,YAAAA,iBAAgCL;;;AAIpC,wDAAA,xDAAMW,wHAAmBC;AAAzB,AACE,mEAAA,5DAACC,yBAAE,AAACC,0BAAMF;;AAEZ,gDAAA,hDAAMG,wGAAiBH;AAAvB,AACE,GAAI,AAACI,iCAAOJ;AACV,kIAAA,1HAAK,AAACK,0BAAMC,cAAI,AAACC,wBAAIC,8CAAgBR;;AADvC;;;AAIF,gEAAA,hEAAMS,wIAA2BT;AAAjC,AACE,GAAI,AAACI,iCAAOJ;AACV,oBAAI,AAACD,gEAAkBC;AAAvB;;AAEE,OAACU,yBAAKC,8DAA0BX;;;AAHpC;;;AAKF,sEAAA,tEAAMa,oJAAkCC,iBAAiBC;AAAzD,AAAA,GACS,EAAK,gBAAA,fAAMA;AADpB;AAAA,AAAA,MAAA,KAAAH,MAAA;;;AAEE,IAAMI,OAAK,AAACC,2BAAOH;IACbI,IAAE,2CAAA,KAAA,AAAA,kBAAA,KAAAN,MAAA,3EAAQ,AAACO,kCAAQH;IACnBI,SAAO,AAAA1B,qBAAA,LAAMsB;AAFnB,AAGE,IAAAK,WAAML;IAANM,wBAAAD;AAAA,AAAA,oBAAAC;AAAA;AAAA,AAAA,MAAA,KAAAV,MAAA,eAAA,iCAAA,eAAA,+CAAA,oBAAA,sBAAAS,mCAAA,oBAAA;;;AAAA,AAAAE,gBAAAD,sBAAA,AAAAE,yBAAA,mFAAA,kBAAsB,AAACC,qDAAiBL,OAAOL;;AAA\/CM;;AAEJ,wDAAA,xDAAMK,wHAAoB1B,QAAQe;AAAlC,AAAA,GACS,EAAK,gBAAA,fAAMA;AADpB;AAAA,AAAA,MAAA,KAAAH,MAAA;;;AAEE,GAAI,AAACR,iCAAOJ;AACV,IAAM2B,yBAAiB,gBAAA,fAAKZ;AAA5B,AACE,oBAAI,AAAChB,gEAAkBC;AACrB,AAACa,8EAAiCb,QAAQ2B;;AAC1C,IAAAC,mBAAA,AAAAC,wBAAa7B;IAAb8B,qBAAA;IAAAC,qBAAA;IAAAC,iBAAA;;AAAA,AAAA,GAAA,AAAA,CAAAA,iBAAAD;AAAA,iBAAA,AAAAE,yBAAAH,mBAAAE,zDAAQS;AAAR,AAAA,AACE,AAACC,gEAAmBD,WAAKd;;AAD3B,eAAAC;eAAAE;eAAAC;eAAA,CAAAC,iBAAA;;;;;;;AAAA,IAAAE,2BAAA,AAAAL,wBAAAD;AAAA,AAAA,GAAAM;AAAA,AAAA,IAAAN,uBAAAM;AAAA,AAAA,GAAA,AAAAC,uCAAAP;AAAA,IAAAQ,yBAAA,AAAAC,gCAAAT;AAAA,AAAA,eAAA,AAAAU,+BAAAV;eAAAQ;eAAA,AAAAG,0BAAAH;eAAA;;;;;;;AAAA,iBAAA,AAAAlC,0BAAA0B,vCAAQa;AAAR,AAAA,AACE,AAACC,gEAAmBD,WAAKd;;AAD3B,eAAA,AAAAa,yBAAAZ;eAAA;eAAA;eAAA;;;;;;;;AAAA;;;;;;AAJN;;AAMA5B;;AAIF,6DAAA,7DAAM2C,kIAAmBvD;AAAzB,AACE,oBAAM,AAACS,qEAAuBT;AAA9B,AACE,AAACO,uEAA0BP;;AAD7B;;AAAA;;;AAIF,+EAAA,\/EAAMwD,sKAA2CxD,MAAMY;AAAvD,AACE,IAAA6C,qBAAwC,2CAAA,3CAACE;AAAzC,AAAA,oBAAAF;AAAA,qCAAAA,jCAASC;AAAT,AACE,IAAME,yBAAuB,iBAAAC,oBAAI,AAACC;AAAL,AAAA,oBAAAD;AAAAA;;AAAuB,yCAAA,jCAAKH;;;IACnDK,QAAM,AAAChD,wDAAgBH;IACvBoD,eAAO,AAACC,wBAAI,AAAC5C,wEAA0BT;IACvCsD,eAAa,EAAIF,cAAOD,MAAM,CAAGA,QAAMpE;AAH7C,AAIE,GAAI,CAAIiE,0BAAuBM;AAC7B,OAAC5B,gEAAmB1B,QAAQgD;;AAC5B,IAAMO,cAAY,AAACC,uDAAc,AAACC,6DAAkBrE;AAApD,AACE,AAACD,oEAAuBC;;AACxBmE;;;AACNvD","names":["devtools.formatters.budgeting\/header-expander-depth-cost","devtools.formatters.budgeting\/over-budget-values","js\/WeakSet","cljs.core\/volatile!","devtools.formatters.budgeting\/add-over-budget-value!","value","cljs.core\/volatile?","cljs.core\/vreset!","cljs.core\/deref","cljs.core\/conj","o__41049__auto__","goog.object\/get","devtools.formatters.budgeting\/delete-over-budget-value!","cljs.core\/disj","devtools.formatters.budgeting\/has-over-budget-value?","cljs.core\/contains?","devtools.formatters.budgeting\/object-reference?","json-ml","cljs.core\/=","cljs.core\/first","devtools.formatters.budgeting\/determine-depth","cljs.core\/array?","cljs.core\/apply","cljs.core\/max","cljs.core\/map","determine-depth","devtools.formatters.budgeting\/has-any-object-reference?","cljs.core\/some","has-any-object-reference?","js\/Error","devtools.formatters.budgeting\/transfer-remaining-depth-budget!","object-reference","depth-budget","data","cljs.core\/second","_","cljs.core\/object?","config","G__41808","target__41068__auto__","goog.object\/set","cljs.core\/last","devtools.formatters.state\/set-depth-budget","devtools.formatters.budgeting\/distribute-budget!","new-depth-budget","seq__41813","cljs.core\/seq","chunk__41814","count__41815","i__41816","cljs.core\/-nth","temp__4657__auto__","cljs.core\/chunked-seq?","c__25941__auto__","cljs.core\/chunk-first","cljs.core\/chunk-rest","cljs.core\/count","cljs.core\/next","item","distribute-budget!","devtools.formatters.budgeting\/was-over-budget?!","devtools.formatters.budgeting\/alter-json-ml-to-fit-in-remaining-budget!","temp__4655__auto__","initial-hierarchy-depth-budget","devtools.formatters.helpers\/pref","remaining-depth-budget","or__25130__auto__","devtools.formatters.state\/get-depth-budget","depth","final?","cljs.core\/not","needed-depth","expander-ml","devtools.formatters.templating\/render-markup","devtools.formatters.markup\/<header-expander>"]}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
(ns devtools.formatters.core
|
||||
(:require-macros [devtools.util :refer [oget oset ocall oapply safe-call]])
|
||||
(:require [devtools.prefs :refer [pref]]
|
||||
[devtools.format :refer [IDevtoolsFormat]]
|
||||
[devtools.protocols :refer [IFormat]]
|
||||
[devtools.formatters.templating :refer [surrogate? render-markup get-surrogate-body]]
|
||||
[devtools.formatters.helpers :refer [cljs-value?]]
|
||||
[devtools.formatters.state :refer [prevent-recursion? *current-state* get-default-state update-current-state!
|
||||
reset-depth-limits]]
|
||||
[devtools.formatters.markup :refer [<header> <surrogate-header> <surrogate-body>]]
|
||||
[devtools.formatters.budgeting :refer [was-over-budget?! alter-json-ml-to-fit-in-remaining-budget!]]))
|
||||
|
||||
; -- RAW API ----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn want-value?* [value]
|
||||
(and (not (prevent-recursion?))
|
||||
(or (cljs-value? value) (surrogate? value))))
|
||||
|
||||
(defn header* [value]
|
||||
(let [json-ml (cond
|
||||
(surrogate? value) (render-markup (<surrogate-header> value))
|
||||
(safe-call satisfies? false IDevtoolsFormat value) (devtools.format/-header value)
|
||||
(safe-call satisfies? false IFormat value) (devtools.protocols/-header value)
|
||||
:else (render-markup (<header> value)))]
|
||||
(alter-json-ml-to-fit-in-remaining-budget! value json-ml))) ; see issue #22
|
||||
|
||||
(defn has-body* [value]
|
||||
; note: body is emulated using surrogate references
|
||||
(if (was-over-budget?! value) ; see issue #22
|
||||
false ; see alter-json-ml-to-fit-in-remaining-budget!, in case we didn't fit into budget, a header-expander placeholder with body was added in place
|
||||
(boolean
|
||||
(cond
|
||||
(surrogate? value) (some? (get-surrogate-body value))
|
||||
(safe-call satisfies? false IDevtoolsFormat value) (devtools.format/-has-body value)
|
||||
(safe-call satisfies? false IFormat value) (devtools.protocols/-has-body value)
|
||||
:else false))))
|
||||
|
||||
(defn body* [value]
|
||||
(update-current-state! reset-depth-limits)
|
||||
(cond
|
||||
(surrogate? value) (render-markup (<surrogate-body> value))
|
||||
(safe-call satisfies? false IDevtoolsFormat value) (devtools.format/-body value)
|
||||
(safe-call satisfies? false IFormat value) (devtools.protocols/-body value)))
|
||||
|
||||
; ---------------------------------------------------------------------------------------------------------------------------
|
||||
; config-aware RAW API, see state management documentation state.cljs
|
||||
|
||||
(defn config-wrapper [raw-fn]
|
||||
(fn [value config]
|
||||
(binding [*current-state* (or config (get-default-state))]
|
||||
(raw-fn value))))
|
||||
|
||||
(def want-value? (config-wrapper want-value?*))
|
||||
(def header (config-wrapper header*))
|
||||
(def has-body (config-wrapper has-body*))
|
||||
(def body (config-wrapper body*))
|
||||
|
||||
; -- API CALLS --------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn wrap-with-exception-guard [f]
|
||||
(fn [& args]
|
||||
(try
|
||||
(apply f args)
|
||||
(catch :default e
|
||||
(.error js/console "CLJS DevTools internal error:" e)
|
||||
nil))))
|
||||
|
||||
(defn build-api-call [raw-fn pre-handler-key post-handler-key]
|
||||
"Wraps raw API call in a function which calls pre-handler and post-handler.
|
||||
|
||||
pre-handler gets a chance to pre-process value before it is passed to cljs-devtools
|
||||
post-handler gets a chance to post-process value returned by cljs-devtools."
|
||||
(let [handler (fn [value config]
|
||||
(let [pre-handler (or (pref pre-handler-key) identity)
|
||||
post-handler (or (pref post-handler-key) identity)
|
||||
preprocessed-value (pre-handler value)
|
||||
result (if (want-value? preprocessed-value config)
|
||||
(raw-fn preprocessed-value config))]
|
||||
(post-handler result)))]
|
||||
(wrap-with-exception-guard handler)))
|
||||
|
||||
(def header-api-call (build-api-call header :header-pre-handler :header-post-handler))
|
||||
(def has-body-api-call (build-api-call has-body :has-body-pre-handler :has-body-post-handler))
|
||||
(def body-api-call (build-api-call body :body-pre-handler :body-post-handler))
|
||||
File diff suppressed because one or more lines are too long
218
resources/public/js/compiled/out/devtools/formatters/core.js
Normal file
218
resources/public/js/compiled/out/devtools/formatters/core.js
Normal file
|
|
@ -0,0 +1,218 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('devtools.formatters.core');
|
||||
goog.require('cljs.core');
|
||||
goog.require('devtools.prefs');
|
||||
goog.require('devtools.format');
|
||||
goog.require('devtools.protocols');
|
||||
goog.require('devtools.formatters.templating');
|
||||
goog.require('devtools.formatters.helpers');
|
||||
goog.require('devtools.formatters.state');
|
||||
goog.require('devtools.formatters.markup');
|
||||
goog.require('devtools.formatters.budgeting');
|
||||
devtools.formatters.core.want_value_QMARK__STAR_ = (function devtools$formatters$core$want_value_QMARK__STAR_(value){
|
||||
var and__25118__auto__ = cljs.core.not.call(null,devtools.formatters.state.prevent_recursion_QMARK_.call(null));
|
||||
if(and__25118__auto__){
|
||||
var or__25130__auto__ = devtools.formatters.helpers.cljs_value_QMARK_.call(null,value);
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
return devtools.formatters.templating.surrogate_QMARK_.call(null,value);
|
||||
}
|
||||
} else {
|
||||
return and__25118__auto__;
|
||||
}
|
||||
});
|
||||
devtools.formatters.core.header_STAR_ = (function devtools$formatters$core$header_STAR_(value){
|
||||
var json_ml = (cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,value))?devtools.formatters.templating.render_markup.call(null,devtools.formatters.markup._LT_surrogate_header_GT_.call(null,value)):(cljs.core.truth_((function (){try{if(!((value == null))){
|
||||
if((false) || (value.devtools$format$IDevtoolsFormat$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
|
||||
}
|
||||
}catch (e41845){var e__41074__auto__ = e41845;
|
||||
return false;
|
||||
}})())?devtools.format._header.call(null,value):(cljs.core.truth_((function (){try{if(!((value == null))){
|
||||
if((false) || (value.devtools$protocols$IFormat$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
|
||||
}
|
||||
}catch (e41847){var e__41074__auto__ = e41847;
|
||||
return false;
|
||||
}})())?devtools.protocols._header.call(null,value):devtools.formatters.templating.render_markup.call(null,devtools.formatters.markup._LT_header_GT_.call(null,value))
|
||||
)));
|
||||
return devtools.formatters.budgeting.alter_json_ml_to_fit_in_remaining_budget_BANG_.call(null,value,json_ml);
|
||||
});
|
||||
devtools.formatters.core.has_body_STAR_ = (function devtools$formatters$core$has_body_STAR_(value){
|
||||
if(cljs.core.truth_(devtools.formatters.budgeting.was_over_budget_QMARK__BANG_.call(null,value))){
|
||||
return false;
|
||||
} else {
|
||||
return cljs.core.boolean$.call(null,(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,value))?cljs.core.some_QMARK_.call(null,devtools.formatters.templating.get_surrogate_body.call(null,value)):(cljs.core.truth_((function (){try{if(!((value == null))){
|
||||
if((false) || (value.devtools$format$IDevtoolsFormat$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
|
||||
}
|
||||
}catch (e41853){var e__41074__auto__ = e41853;
|
||||
return false;
|
||||
}})())?devtools.format._has_body.call(null,value):(cljs.core.truth_((function (){try{if(!((value == null))){
|
||||
if((false) || (value.devtools$protocols$IFormat$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
|
||||
}
|
||||
}catch (e41855){var e__41074__auto__ = e41855;
|
||||
return false;
|
||||
}})())?devtools.protocols._has_body.call(null,value):false
|
||||
))));
|
||||
}
|
||||
});
|
||||
devtools.formatters.core.body_STAR_ = (function devtools$formatters$core$body_STAR_(value){
|
||||
devtools.formatters.state.update_current_state_BANG_.call(null,devtools.formatters.state.reset_depth_limits);
|
||||
|
||||
if(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,value))){
|
||||
return devtools.formatters.templating.render_markup.call(null,devtools.formatters.markup._LT_surrogate_body_GT_.call(null,value));
|
||||
} else {
|
||||
if(cljs.core.truth_((function (){try{if(!((value == null))){
|
||||
if((false) || (value.devtools$format$IDevtoolsFormat$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
|
||||
}
|
||||
}catch (e41861){var e__41074__auto__ = e41861;
|
||||
return false;
|
||||
}})())){
|
||||
return devtools.format._body.call(null,value);
|
||||
} else {
|
||||
if(cljs.core.truth_((function (){try{if(!((value == null))){
|
||||
if((false) || (value.devtools$protocols$IFormat$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
|
||||
}
|
||||
}catch (e41863){var e__41074__auto__ = e41863;
|
||||
return false;
|
||||
}})())){
|
||||
return devtools.protocols._body.call(null,value);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
devtools.formatters.core.config_wrapper = (function devtools$formatters$core$config_wrapper(raw_fn){
|
||||
return (function (value,config){
|
||||
var _STAR_current_state_STAR_41866 = devtools.formatters.state._STAR_current_state_STAR_;
|
||||
devtools.formatters.state._STAR_current_state_STAR_ = (function (){var or__25130__auto__ = config;
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
return devtools.formatters.state.get_default_state.call(null);
|
||||
}
|
||||
})();
|
||||
|
||||
try{return raw_fn.call(null,value);
|
||||
}finally {devtools.formatters.state._STAR_current_state_STAR_ = _STAR_current_state_STAR_41866;
|
||||
}});
|
||||
});
|
||||
devtools.formatters.core.want_value_QMARK_ = devtools.formatters.core.config_wrapper.call(null,devtools.formatters.core.want_value_QMARK__STAR_);
|
||||
devtools.formatters.core.header = devtools.formatters.core.config_wrapper.call(null,devtools.formatters.core.header_STAR_);
|
||||
devtools.formatters.core.has_body = devtools.formatters.core.config_wrapper.call(null,devtools.formatters.core.has_body_STAR_);
|
||||
devtools.formatters.core.body = devtools.formatters.core.config_wrapper.call(null,devtools.formatters.core.body_STAR_);
|
||||
devtools.formatters.core.wrap_with_exception_guard = (function devtools$formatters$core$wrap_with_exception_guard(f){
|
||||
return (function() {
|
||||
var G__41869__delegate = function (args){
|
||||
try{return cljs.core.apply.call(null,f,args);
|
||||
}catch (e41868){var e = e41868;
|
||||
console.error("CLJS DevTools internal error:",e);
|
||||
|
||||
return null;
|
||||
}};
|
||||
var G__41869 = function (var_args){
|
||||
var args = null;
|
||||
if (arguments.length > 0) {
|
||||
var G__41870__i = 0, G__41870__a = new Array(arguments.length - 0);
|
||||
while (G__41870__i < G__41870__a.length) {G__41870__a[G__41870__i] = arguments[G__41870__i + 0]; ++G__41870__i;}
|
||||
args = new cljs.core.IndexedSeq(G__41870__a,0);
|
||||
}
|
||||
return G__41869__delegate.call(this,args);};
|
||||
G__41869.cljs$lang$maxFixedArity = 0;
|
||||
G__41869.cljs$lang$applyTo = (function (arglist__41871){
|
||||
var args = cljs.core.seq(arglist__41871);
|
||||
return G__41869__delegate(args);
|
||||
});
|
||||
G__41869.cljs$core$IFn$_invoke$arity$variadic = G__41869__delegate;
|
||||
return G__41869;
|
||||
})()
|
||||
;
|
||||
});
|
||||
devtools.formatters.core.build_api_call = (function devtools$formatters$core$build_api_call(raw_fn,pre_handler_key,post_handler_key){
|
||||
|
||||
var handler = (function (value,config){
|
||||
var pre_handler = (function (){var or__25130__auto__ = devtools.prefs.pref.call(null,pre_handler_key);
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
return cljs.core.identity;
|
||||
}
|
||||
})();
|
||||
var post_handler = (function (){var or__25130__auto__ = devtools.prefs.pref.call(null,post_handler_key);
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
return cljs.core.identity;
|
||||
}
|
||||
})();
|
||||
var preprocessed_value = pre_handler.call(null,value);
|
||||
var result = (cljs.core.truth_(devtools.formatters.core.want_value_QMARK_.call(null,preprocessed_value,config))?raw_fn.call(null,preprocessed_value,config):null);
|
||||
return post_handler.call(null,result);
|
||||
});
|
||||
return devtools.formatters.core.wrap_with_exception_guard.call(null,handler);
|
||||
});
|
||||
devtools.formatters.core.header_api_call = devtools.formatters.core.build_api_call.call(null,devtools.formatters.core.header,new cljs.core.Keyword(null,"header-pre-handler","header-pre-handler",-1997722262),new cljs.core.Keyword(null,"header-post-handler","header-post-handler",514828618));
|
||||
devtools.formatters.core.has_body_api_call = devtools.formatters.core.build_api_call.call(null,devtools.formatters.core.has_body,new cljs.core.Keyword(null,"has-body-pre-handler","has-body-pre-handler",1787020038),new cljs.core.Keyword(null,"has-body-post-handler","has-body-post-handler",-863451271));
|
||||
devtools.formatters.core.body_api_call = devtools.formatters.core.build_api_call.call(null,devtools.formatters.core.body,new cljs.core.Keyword(null,"body-pre-handler","body-pre-handler",1211926529),new cljs.core.Keyword(null,"body-post-handler","body-post-handler",-1040905424));
|
||||
|
||||
//# sourceMappingURL=core.js.map?rel=1603199213329
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,115 @@
|
|||
(ns devtools.formatters.helpers
|
||||
(:require-macros [devtools.util :refer [oget oset ocall oapply safe-call]])
|
||||
(:require [devtools.prefs :as prefs]
|
||||
[devtools.munging :as munging]
|
||||
[devtools.format :refer [IDevtoolsFormat]]
|
||||
[devtools.protocols :refer [ITemplate IGroup ISurrogate IFormat]]))
|
||||
|
||||
(defn pref [v]
|
||||
(if (keyword? v)
|
||||
(recur (prefs/pref v))
|
||||
v))
|
||||
|
||||
(defn get-constructor [o]
|
||||
(oget o "constructor"))
|
||||
|
||||
; ---------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn is-prototype? [o]
|
||||
(identical? (.-prototype (.-constructor o)) o))
|
||||
|
||||
(defn is-js-symbol? [o]
|
||||
(= (goog/typeOf o) "symbol"))
|
||||
|
||||
(defn cljs-function? [value]
|
||||
(and (not (pref :disable-cljs-fn-formatting)) ; TODO: this should be deprecated
|
||||
(not (var? value)) ; HACK: vars have IFn protocol and would act as functions TODO: implement custom rendering for vars
|
||||
(munging/cljs-fn? value)))
|
||||
|
||||
(defn has-formatting-protocol? [value]
|
||||
(or (safe-call satisfies? false IPrintWithWriter value)
|
||||
(safe-call satisfies? false IDevtoolsFormat value) ; legacy
|
||||
(safe-call satisfies? false IFormat value)))
|
||||
|
||||
; IRC #clojurescript @ freenode.net on 2015-01-27:
|
||||
; [13:40:09] darwin_: Hi, what is the best way to test if I'm handled ClojureScript data value or plain javascript object?
|
||||
; [14:04:34] dnolen: there is a very low level thing you can check
|
||||
; [14:04:36] dnolen: https://github.com/clojure/clojurescript/blob/c2550c4fdc94178a7957497e2bfde54e5600c457/src/clj/cljs/core.clj#L901
|
||||
; [14:05:00] dnolen: this property is unlikely to change - still it's probably not something anything anyone should use w/o a really good reason
|
||||
(defn cljs-type? [f]
|
||||
(and (goog/isObject f) ; see http://stackoverflow.com/a/22482737/84283
|
||||
(not (is-prototype? f))
|
||||
(oget f "cljs$lang$type")))
|
||||
|
||||
(defn cljs-instance? [value]
|
||||
(and (goog/isObject value) ; see http://stackoverflow.com/a/22482737/84283
|
||||
(cljs-type? (get-constructor value))))
|
||||
|
||||
(defn cljs-land-value? [value]
|
||||
(or (cljs-instance? value)
|
||||
(has-formatting-protocol? value))) ; some raw js types can be extend-protocol to support cljs printing, see issue #21
|
||||
|
||||
(defn cljs-value? [value]
|
||||
(and
|
||||
(or (cljs-land-value? value)
|
||||
(cljs-function? value))
|
||||
(not (is-prototype? value))
|
||||
(not (is-js-symbol? value))))
|
||||
|
||||
(defn bool? [value]
|
||||
(or (true? value) (false? value)))
|
||||
|
||||
(defn instance-of-a-well-known-type? [value]
|
||||
(let [well-known-types (pref :well-known-types)
|
||||
constructor-fn (get-constructor value)
|
||||
[ns name] (munging/parse-constructor-info constructor-fn)
|
||||
fully-qualified-type-name (str ns "/" name)]
|
||||
(contains? well-known-types fully-qualified-type-name)))
|
||||
|
||||
(defn should-render-instance? [value]
|
||||
(and (cljs-instance? value)
|
||||
(not (instance-of-a-well-known-type? value))))
|
||||
|
||||
(defn directly-printable? [value]
|
||||
(or (string? value)
|
||||
(number? value)
|
||||
(bool? value)))
|
||||
|
||||
; ---------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn abbreviated? [template]
|
||||
(some #(= (pref :more-marker) %) template))
|
||||
|
||||
(defn abbreviate-long-string [string marker prefix-limit postfix-limit]
|
||||
(let [prefix (apply str (take prefix-limit string))
|
||||
postfix (apply str (take-last postfix-limit string))]
|
||||
(str prefix marker postfix)))
|
||||
|
||||
(defn get-more-marker [more-count]
|
||||
(str (pref :plus-symbol) more-count (pref :more-symbol)))
|
||||
|
||||
(defn wrap-arity [arity]
|
||||
(let [args-open-symbol (pref :args-open-symbol)
|
||||
args-close-symbol (pref :args-close-symbol)]
|
||||
(str args-open-symbol arity args-close-symbol)))
|
||||
|
||||
(defn fetch-field-value [obj field]
|
||||
[field (oget obj (munge field))])
|
||||
|
||||
(defn fetch-fields-values [obj fields]
|
||||
(map (partial fetch-field-value obj) fields))
|
||||
|
||||
(defn expandable? [obj]
|
||||
(if (seqable? obj)
|
||||
(if-let [min-count (pref (if (instance-of-a-well-known-type? obj)
|
||||
:min-expandable-sequable-count-for-well-known-types
|
||||
:min-expandable-sequable-count))]
|
||||
(if-not (empty? obj)
|
||||
(let [actual-count (bounded-count min-count obj)]
|
||||
(>= actual-count min-count))))))
|
||||
|
||||
(defn should-render? [pref-key value default-check]
|
||||
(if-let [render-pref (pref pref-key)]
|
||||
(cond
|
||||
(true? render-pref) (default-check value)
|
||||
(fn? render-pref) (render-pref value))))
|
||||
File diff suppressed because one or more lines are too long
235
resources/public/js/compiled/out/devtools/formatters/helpers.js
Normal file
235
resources/public/js/compiled/out/devtools/formatters/helpers.js
Normal file
|
|
@ -0,0 +1,235 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('devtools.formatters.helpers');
|
||||
goog.require('cljs.core');
|
||||
goog.require('devtools.prefs');
|
||||
goog.require('devtools.munging');
|
||||
goog.require('devtools.format');
|
||||
goog.require('devtools.protocols');
|
||||
devtools.formatters.helpers.pref = (function devtools$formatters$helpers$pref(v){
|
||||
while(true){
|
||||
if((v instanceof cljs.core.Keyword)){
|
||||
var G__41363 = devtools.prefs.pref.call(null,v);
|
||||
v = G__41363;
|
||||
continue;
|
||||
} else {
|
||||
return v;
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
devtools.formatters.helpers.get_constructor = (function devtools$formatters$helpers$get_constructor(o){
|
||||
return goog.object.get(o,"constructor");
|
||||
});
|
||||
devtools.formatters.helpers.is_prototype_QMARK_ = (function devtools$formatters$helpers$is_prototype_QMARK_(o){
|
||||
return (o.constructor.prototype === o);
|
||||
});
|
||||
devtools.formatters.helpers.is_js_symbol_QMARK_ = (function devtools$formatters$helpers$is_js_symbol_QMARK_(o){
|
||||
return cljs.core._EQ_.call(null,goog.typeOf(o),"symbol");
|
||||
});
|
||||
devtools.formatters.helpers.cljs_function_QMARK_ = (function devtools$formatters$helpers$cljs_function_QMARK_(value){
|
||||
var and__25118__auto__ = cljs.core.not.call(null,devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"disable-cljs-fn-formatting","disable-cljs-fn-formatting",1903786837)));
|
||||
if(and__25118__auto__){
|
||||
var and__25118__auto____$1 = !(cljs.core.var_QMARK_.call(null,value));
|
||||
if(and__25118__auto____$1){
|
||||
return devtools.munging.cljs_fn_QMARK_.call(null,value);
|
||||
} else {
|
||||
return and__25118__auto____$1;
|
||||
}
|
||||
} else {
|
||||
return and__25118__auto__;
|
||||
}
|
||||
});
|
||||
devtools.formatters.helpers.has_formatting_protocol_QMARK_ = (function devtools$formatters$helpers$has_formatting_protocol_QMARK_(value){
|
||||
var or__25130__auto__ = (function (){try{if(!((value == null))){
|
||||
if(((value.cljs$lang$protocol_mask$partition0$ & (2147483648))) || (value.cljs$core$IPrintWithWriter$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition0$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,cljs.core.IPrintWithWriter,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,cljs.core.IPrintWithWriter,value);
|
||||
}
|
||||
}catch (e41376){var e__41074__auto__ = e41376;
|
||||
return false;
|
||||
}})();
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
var or__25130__auto____$1 = (function (){try{if(!((value == null))){
|
||||
if((false) || (value.devtools$format$IDevtoolsFormat$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
|
||||
}
|
||||
}catch (e41380){var e__41074__auto__ = e41380;
|
||||
return false;
|
||||
}})();
|
||||
if(cljs.core.truth_(or__25130__auto____$1)){
|
||||
return or__25130__auto____$1;
|
||||
} else {
|
||||
try{if(!((value == null))){
|
||||
if((false) || (value.devtools$protocols$IFormat$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
|
||||
}
|
||||
}catch (e41382){var e__41074__auto__ = e41382;
|
||||
return false;
|
||||
}}
|
||||
}
|
||||
});
|
||||
devtools.formatters.helpers.cljs_type_QMARK_ = (function devtools$formatters$helpers$cljs_type_QMARK_(f){
|
||||
var and__25118__auto__ = goog.isObject(f);
|
||||
if(cljs.core.truth_(and__25118__auto__)){
|
||||
var and__25118__auto____$1 = cljs.core.not.call(null,devtools.formatters.helpers.is_prototype_QMARK_.call(null,f));
|
||||
if(and__25118__auto____$1){
|
||||
return goog.object.get(f,"cljs$lang$type");
|
||||
} else {
|
||||
return and__25118__auto____$1;
|
||||
}
|
||||
} else {
|
||||
return and__25118__auto__;
|
||||
}
|
||||
});
|
||||
devtools.formatters.helpers.cljs_instance_QMARK_ = (function devtools$formatters$helpers$cljs_instance_QMARK_(value){
|
||||
var and__25118__auto__ = goog.isObject(value);
|
||||
if(cljs.core.truth_(and__25118__auto__)){
|
||||
return devtools.formatters.helpers.cljs_type_QMARK_.call(null,devtools.formatters.helpers.get_constructor.call(null,value));
|
||||
} else {
|
||||
return and__25118__auto__;
|
||||
}
|
||||
});
|
||||
devtools.formatters.helpers.cljs_land_value_QMARK_ = (function devtools$formatters$helpers$cljs_land_value_QMARK_(value){
|
||||
var or__25130__auto__ = devtools.formatters.helpers.cljs_instance_QMARK_.call(null,value);
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
return devtools.formatters.helpers.has_formatting_protocol_QMARK_.call(null,value);
|
||||
}
|
||||
});
|
||||
devtools.formatters.helpers.cljs_value_QMARK_ = (function devtools$formatters$helpers$cljs_value_QMARK_(value){
|
||||
var and__25118__auto__ = (function (){var or__25130__auto__ = devtools.formatters.helpers.cljs_land_value_QMARK_.call(null,value);
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
return devtools.formatters.helpers.cljs_function_QMARK_.call(null,value);
|
||||
}
|
||||
})();
|
||||
if(cljs.core.truth_(and__25118__auto__)){
|
||||
return (cljs.core.not.call(null,devtools.formatters.helpers.is_prototype_QMARK_.call(null,value))) && (cljs.core.not.call(null,devtools.formatters.helpers.is_js_symbol_QMARK_.call(null,value)));
|
||||
} else {
|
||||
return and__25118__auto__;
|
||||
}
|
||||
});
|
||||
devtools.formatters.helpers.bool_QMARK_ = (function devtools$formatters$helpers$bool_QMARK_(value){
|
||||
return (value === true) || (value === false);
|
||||
});
|
||||
devtools.formatters.helpers.instance_of_a_well_known_type_QMARK_ = (function devtools$formatters$helpers$instance_of_a_well_known_type_QMARK_(value){
|
||||
var well_known_types = devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"well-known-types","well-known-types",70638649));
|
||||
var constructor_fn = devtools.formatters.helpers.get_constructor.call(null,value);
|
||||
var vec__41387 = devtools.munging.parse_constructor_info.call(null,constructor_fn);
|
||||
var ns = cljs.core.nth.call(null,vec__41387,(0),null);
|
||||
var name = cljs.core.nth.call(null,vec__41387,(1),null);
|
||||
var fully_qualified_type_name = [cljs.core.str(ns),cljs.core.str("/"),cljs.core.str(name)].join('');
|
||||
return cljs.core.contains_QMARK_.call(null,well_known_types,fully_qualified_type_name);
|
||||
});
|
||||
devtools.formatters.helpers.should_render_instance_QMARK_ = (function devtools$formatters$helpers$should_render_instance_QMARK_(value){
|
||||
var and__25118__auto__ = devtools.formatters.helpers.cljs_instance_QMARK_.call(null,value);
|
||||
if(cljs.core.truth_(and__25118__auto__)){
|
||||
return cljs.core.not.call(null,devtools.formatters.helpers.instance_of_a_well_known_type_QMARK_.call(null,value));
|
||||
} else {
|
||||
return and__25118__auto__;
|
||||
}
|
||||
});
|
||||
devtools.formatters.helpers.directly_printable_QMARK_ = (function devtools$formatters$helpers$directly_printable_QMARK_(value){
|
||||
var or__25130__auto__ = typeof value === 'string';
|
||||
if(or__25130__auto__){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
var or__25130__auto____$1 = typeof value === 'number';
|
||||
if(or__25130__auto____$1){
|
||||
return or__25130__auto____$1;
|
||||
} else {
|
||||
return devtools.formatters.helpers.bool_QMARK_.call(null,value);
|
||||
}
|
||||
}
|
||||
});
|
||||
devtools.formatters.helpers.abbreviated_QMARK_ = (function devtools$formatters$helpers$abbreviated_QMARK_(template){
|
||||
return cljs.core.some.call(null,(function (p1__41390_SHARP_){
|
||||
return cljs.core._EQ_.call(null,devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"more-marker","more-marker",-14717935)),p1__41390_SHARP_);
|
||||
}),template);
|
||||
});
|
||||
devtools.formatters.helpers.abbreviate_long_string = (function devtools$formatters$helpers$abbreviate_long_string(string,marker,prefix_limit,postfix_limit){
|
||||
var prefix = cljs.core.apply.call(null,cljs.core.str,cljs.core.take.call(null,prefix_limit,string));
|
||||
var postfix = cljs.core.apply.call(null,cljs.core.str,cljs.core.take_last.call(null,postfix_limit,string));
|
||||
return [cljs.core.str(prefix),cljs.core.str(marker),cljs.core.str(postfix)].join('');
|
||||
});
|
||||
devtools.formatters.helpers.get_more_marker = (function devtools$formatters$helpers$get_more_marker(more_count){
|
||||
return [cljs.core.str(devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"plus-symbol","plus-symbol",-1984915189))),cljs.core.str(more_count),cljs.core.str(devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"more-symbol","more-symbol",-2139760242)))].join('');
|
||||
});
|
||||
devtools.formatters.helpers.wrap_arity = (function devtools$formatters$helpers$wrap_arity(arity){
|
||||
var args_open_symbol = devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"args-open-symbol","args-open-symbol",-1336957557));
|
||||
var args_close_symbol = devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"args-close-symbol","args-close-symbol",777697973));
|
||||
return [cljs.core.str(args_open_symbol),cljs.core.str(arity),cljs.core.str(args_close_symbol)].join('');
|
||||
});
|
||||
devtools.formatters.helpers.fetch_field_value = (function devtools$formatters$helpers$fetch_field_value(obj,field){
|
||||
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [field,goog.object.get(obj,cljs.core.munge.call(null,field))], null);
|
||||
});
|
||||
devtools.formatters.helpers.fetch_fields_values = (function devtools$formatters$helpers$fetch_fields_values(obj,fields){
|
||||
return cljs.core.map.call(null,cljs.core.partial.call(null,devtools.formatters.helpers.fetch_field_value,obj),fields);
|
||||
});
|
||||
devtools.formatters.helpers.expandable_QMARK_ = (function devtools$formatters$helpers$expandable_QMARK_(obj){
|
||||
if(cljs.core.seqable_QMARK_.call(null,obj)){
|
||||
var temp__4655__auto__ = devtools.formatters.helpers.pref.call(null,(cljs.core.truth_(devtools.formatters.helpers.instance_of_a_well_known_type_QMARK_.call(null,obj))?new cljs.core.Keyword(null,"min-expandable-sequable-count-for-well-known-types","min-expandable-sequable-count-for-well-known-types",-1879576081):new cljs.core.Keyword(null,"min-expandable-sequable-count","min-expandable-sequable-count",63566227)));
|
||||
if(cljs.core.truth_(temp__4655__auto__)){
|
||||
var min_count = temp__4655__auto__;
|
||||
if(!(cljs.core.empty_QMARK_.call(null,obj))){
|
||||
var actual_count = cljs.core.bounded_count.call(null,min_count,obj);
|
||||
return (actual_count >= min_count);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
devtools.formatters.helpers.should_render_QMARK_ = (function devtools$formatters$helpers$should_render_QMARK_(pref_key,value,default_check){
|
||||
var temp__4655__auto__ = devtools.formatters.helpers.pref.call(null,pref_key);
|
||||
if(cljs.core.truth_(temp__4655__auto__)){
|
||||
var render_pref = temp__4655__auto__;
|
||||
if(render_pref === true){
|
||||
return default_check.call(null,value);
|
||||
} else {
|
||||
if(cljs.core.fn_QMARK_.call(null,render_pref)){
|
||||
return render_pref.call(null,value);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
//# sourceMappingURL=helpers.js.map?rel=1603199212173
|
||||
File diff suppressed because one or more lines are too long
452
resources/public/js/compiled/out/devtools/formatters/markup.cljs
Normal file
452
resources/public/js/compiled/out/devtools/formatters/markup.cljs
Normal file
|
|
@ -0,0 +1,452 @@
|
|||
(ns devtools.formatters.markup
|
||||
(:require-macros [devtools.util :refer [oget oset ocall oapply safe-call]]
|
||||
[devtools.formatters.markup :refer [emit-markup-db]])
|
||||
(:require [devtools.formatters.helpers :refer [bool? cljs-function? cljs-type? cljs-instance?
|
||||
should-render-instance? expandable? abbreviated?
|
||||
abbreviate-long-string get-constructor pref should-render?
|
||||
get-more-marker wrap-arity fetch-fields-values]]
|
||||
[devtools.formatters.printing :refer [managed-print-via-writer managed-print-via-protocol]]
|
||||
[devtools.formatters.state :refer [set-prevent-recursion set-managed-print-level reset-depth-limits]]
|
||||
[devtools.formatters.templating :refer [get-surrogate-body
|
||||
get-surrogate-target
|
||||
get-surrogate-start-index
|
||||
get-surrogate-header]]
|
||||
[devtools.munging :as munging]))
|
||||
|
||||
; reusable hiccup-like templates
|
||||
|
||||
(declare get-markup-db)
|
||||
|
||||
; -- cljs printing ---------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn print-with [method value tag & [max-level]]
|
||||
(let [job-fn #(method value tag (get-markup-db))]
|
||||
(if (some? max-level)
|
||||
(binding [*print-level* (inc max-level)] ; when printing do at most print-level deep recursion
|
||||
(job-fn))
|
||||
(job-fn))))
|
||||
|
||||
(defn print-via-writer [value tag & [max-level]]
|
||||
(print-with managed-print-via-writer value tag max-level))
|
||||
|
||||
(defn print-via-protocol [value tag & [max-level]]
|
||||
(print-with managed-print-via-protocol value tag max-level))
|
||||
|
||||
; -- references -------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <expandable> [& children]
|
||||
(let [inner-markup (concat [:expandable-inner-tag] children)]
|
||||
[:expandable-tag :expandable-symbol inner-markup]))
|
||||
|
||||
(defn <raw-surrogate> [& args]
|
||||
(concat ["surrogate"] args))
|
||||
|
||||
(defn <surrogate> [& [object header body start-index]]
|
||||
(let [header (if (some? body) (<expandable> header) header)]
|
||||
(<raw-surrogate> object header body start-index)))
|
||||
|
||||
(defn <reference> [& args]
|
||||
(concat ["reference"] args))
|
||||
|
||||
(defn <reference-surrogate> [& args]
|
||||
(<reference> (apply <surrogate> args)))
|
||||
|
||||
(defn <circular-reference> [& children]
|
||||
(<reference-surrogate> nil [:circular-reference-tag :circular-ref-icon] (concat [:circular-reference-body-tag] children)))
|
||||
|
||||
(defn <native-reference> [object]
|
||||
(let [reference (<reference> object #(set-prevent-recursion % true))]
|
||||
[:native-reference-wrapper-tag :native-reference-background [:native-reference-tag reference]]))
|
||||
|
||||
(defn <header-expander> [object]
|
||||
(<reference> (<raw-surrogate> object :header-expander-symbol :target) reset-depth-limits))
|
||||
|
||||
; -- simple markup ----------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <cljs-land> [& children]
|
||||
(concat [:cljs-land-tag] children))
|
||||
|
||||
(defn <nil> []
|
||||
; this code is duplicated in templating.cljs, see make-reference
|
||||
[:nil-tag :nil-label])
|
||||
|
||||
(defn <bool> [bool]
|
||||
[:bool-tag (str bool)])
|
||||
|
||||
(defn <keyword> [keyword]
|
||||
[:keyword-tag (str keyword)])
|
||||
|
||||
(defn <symbol> [symbol]
|
||||
[:symbol-tag (str symbol)])
|
||||
|
||||
(defn <number> [number]
|
||||
(if (integer? number)
|
||||
[:integer-tag number]
|
||||
[:float-tag number]))
|
||||
|
||||
; -- string markup ----------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <string> [string]
|
||||
(let [dq (pref :dq)
|
||||
re-nl (js/RegExp. "\n" "g")
|
||||
nl-marker (pref :new-line-string-replacer)
|
||||
inline-string (.replace string re-nl nl-marker)
|
||||
max-inline-string-size (+ (pref :string-prefix-limit) (pref :string-postfix-limit))
|
||||
quote-string (fn [s] (str dq s dq))
|
||||
should-abbreviate? (> (count inline-string) max-inline-string-size)]
|
||||
(if should-abbreviate?
|
||||
(let [abbreviated-string (abbreviate-long-string inline-string
|
||||
(pref :string-abbreviation-marker)
|
||||
(pref :string-prefix-limit)
|
||||
(pref :string-postfix-limit))
|
||||
abbreviated-string-markup [:string-tag (quote-string abbreviated-string)]
|
||||
string-with-nl-markers (.replace string re-nl (str nl-marker "\n"))
|
||||
details-markup [:expanded-string-tag string-with-nl-markers]]
|
||||
(<reference-surrogate> string abbreviated-string-markup details-markup))
|
||||
[:string-tag (quote-string inline-string)])))
|
||||
|
||||
; -- generic preview markup -------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <preview> [value]
|
||||
(print-via-writer value :header-tag (pref :max-print-level)))
|
||||
|
||||
; -- body-related templates -------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <body> [markup]
|
||||
[:body-tag markup])
|
||||
|
||||
(defn <aligned-body> [markups-lists]
|
||||
(let [prepend-li-tag (fn [line]
|
||||
(if line
|
||||
(concat [:aligned-li-tag] line)))
|
||||
aligned-lines (keep prepend-li-tag markups-lists)]
|
||||
(<body> (concat [:standard-ol-no-margin-tag] aligned-lines))))
|
||||
|
||||
(defn <standard-body> [markups-lists & [no-margin?]]
|
||||
(let [ol-tag (if no-margin? :standard-ol-no-margin-tag :standard-ol-tag)
|
||||
li-tag (if no-margin? :standard-li-no-margin-tag :standard-li-tag)
|
||||
prepend-li-tag (fn [line]
|
||||
(if line
|
||||
(concat [li-tag] line)))
|
||||
lines-markups (keep prepend-li-tag markups-lists)]
|
||||
(concat [ol-tag] lines-markups)))
|
||||
|
||||
(defn <standard-body-reference> [o]
|
||||
(<standard-body> [[(<reference> o)]]))
|
||||
|
||||
; -- generic details markup -------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <index> [value]
|
||||
[:index-tag value :line-index-separator])
|
||||
|
||||
(defn- body-line [index value]
|
||||
(let [index-markup (<index> index)
|
||||
value-markup (print-via-writer value :item-tag (pref :body-line-max-print-level))]
|
||||
[index-markup value-markup]))
|
||||
|
||||
; TODO: this fn is screaming for rewrite
|
||||
(defn- prepare-body-lines [data starting-index]
|
||||
(loop [work data
|
||||
index starting-index
|
||||
lines []]
|
||||
(if (empty? work)
|
||||
lines
|
||||
(recur (rest work) (inc index) (conj lines (body-line index (first work)))))))
|
||||
|
||||
(defn- body-lines [value starting-index]
|
||||
(let [seq (seq value)
|
||||
max-number-body-items (pref :max-number-body-items)
|
||||
chunk (take max-number-body-items seq)
|
||||
rest (drop max-number-body-items seq)
|
||||
lines (prepare-body-lines chunk starting-index)
|
||||
continue? (not (empty? (take 1 rest)))]
|
||||
(if-not continue?
|
||||
lines
|
||||
(let [more-label-markup [:body-items-more-tag :body-items-more-label]
|
||||
start-index (+ starting-index max-number-body-items)
|
||||
more-markup (<reference-surrogate> rest more-label-markup :target start-index)]
|
||||
(conj lines [more-markup])))))
|
||||
|
||||
(defn <details> [value starting-index]
|
||||
(let [has-continuation? (pos? starting-index)
|
||||
body-markup (<standard-body> (body-lines value starting-index) has-continuation?)]
|
||||
(if has-continuation?
|
||||
body-markup
|
||||
(<body> body-markup))))
|
||||
|
||||
; -- generic list template --------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <list-details> [items _opts]
|
||||
(<aligned-body> (map list items)))
|
||||
|
||||
(defn <list> [items max-count & [opts]]
|
||||
(let [items-markups (take max-count items)
|
||||
more-count (- (count items) max-count)
|
||||
more? (pos? more-count)
|
||||
separator (or (:separator opts) :list-separator)
|
||||
more-symbol (if more?
|
||||
(if-let [more-symbol (:more-symbol opts)]
|
||||
(if (fn? more-symbol)
|
||||
(more-symbol more-count)
|
||||
more-symbol)
|
||||
(get-more-marker more-count)))
|
||||
preview-markup (concat [(or (:tag opts) :list-tag)
|
||||
(or (:open-symbol opts) :list-open-symbol)]
|
||||
(interpose separator items-markups)
|
||||
(if more? [separator more-symbol])
|
||||
[(or (:close-symbol opts) :list-close-symbol)])]
|
||||
(if more?
|
||||
(let [details-markup (:details opts)
|
||||
default-details-fn (partial <list-details> items opts)]
|
||||
(<reference-surrogate> nil preview-markup (or details-markup default-details-fn)))
|
||||
preview-markup)))
|
||||
|
||||
; -- mete-related markup ----------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <meta> [metadata]
|
||||
(let [body [:meta-body-tag (<preview> metadata)]
|
||||
header [:meta-header-tag "meta"]]
|
||||
[:meta-reference-tag (<reference-surrogate> metadata header body)]))
|
||||
|
||||
(defn <meta-wrapper> [metadata & children]
|
||||
(concat [:meta-wrapper-tag] children [(<meta> metadata)]))
|
||||
|
||||
; -- function markup --------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <function-details> [fn-obj ns _name arities prefix]
|
||||
{:pre [(fn? fn-obj)]}
|
||||
(let [arities (map wrap-arity arities)
|
||||
make-arity-markup-list (fn [arity]
|
||||
[[:fn-multi-arity-args-indent-tag prefix]
|
||||
[:fn-args-tag arity]])
|
||||
arities-markupts-lists (if (> (count arities) 1) (map make-arity-markup-list arities))
|
||||
ns-markups-list (if-not (empty? ns) [:ns-icon [:fn-ns-name-tag ns]])
|
||||
native-markups-list [:native-icon (<native-reference> fn-obj)]]
|
||||
(<aligned-body> (concat arities-markupts-lists [ns-markups-list native-markups-list]))))
|
||||
|
||||
(defn <arities> [arities]
|
||||
(let [multi-arity? (> (count arities) 1)]
|
||||
[:fn-args-tag (wrap-arity (if multi-arity?
|
||||
(pref :multi-arity-symbol)
|
||||
(first arities)))]))
|
||||
|
||||
(defn <function> [fn-obj]
|
||||
{:pre [(fn? fn-obj)]}
|
||||
(let [[ns name] (munging/parse-fn-info fn-obj)
|
||||
lambda? (empty? name)
|
||||
spacer-symbol (pref :spacer)
|
||||
rest-symbol (pref :rest-symbol)
|
||||
multi-arity-symbol (pref :multi-arity-symbol)
|
||||
arities (munging/extract-arities fn-obj true spacer-symbol multi-arity-symbol rest-symbol)
|
||||
arities-markup (<arities> arities)
|
||||
name-markup (if-not lambda? [:fn-name-tag name])
|
||||
icon-markup (if lambda? :lambda-icon :fn-icon)
|
||||
prefix-markup [:fn-prefix-tag icon-markup name-markup]
|
||||
preview-markup [:fn-header-tag prefix-markup arities-markup]
|
||||
details-fn (partial <function-details> fn-obj ns name arities prefix-markup)]
|
||||
(<reference-surrogate> fn-obj preview-markup details-fn)))
|
||||
|
||||
; -- type markup ------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <type-basis-item> [basis-item]
|
||||
[:type-basis-item-tag (name basis-item)])
|
||||
|
||||
(defn <type-basis> [basis]
|
||||
(let [item-markups (map <type-basis-item> basis)
|
||||
children-markups (interpose :type-basis-item-separator item-markups)]
|
||||
(concat [:type-basis-tag] children-markups)))
|
||||
|
||||
(defn <type-details> [constructor-fn ns _name basis]
|
||||
(let [ns-markup (if-not (empty? ns) [:ns-icon [:fn-ns-name-tag ns]])
|
||||
basis-markup (if (empty? basis)
|
||||
[:empty-basis-symbol]
|
||||
[:basis-icon (<type-basis> basis)])
|
||||
native-markup [:native-icon (<native-reference> constructor-fn)]]
|
||||
(<aligned-body> [basis-markup ns-markup native-markup])))
|
||||
|
||||
(defn <type> [constructor-fn & [header-tag]]
|
||||
(let [[ns name basis] (munging/parse-constructor-info constructor-fn)
|
||||
name-markup [:type-name-tag name]
|
||||
preview-markup [(or header-tag :type-header-tag) :type-symbol name-markup]
|
||||
details-markup-fn (partial <type-details> constructor-fn ns name basis)]
|
||||
[:type-wrapper-tag
|
||||
:type-header-background
|
||||
[:type-ref-tag (<reference-surrogate> constructor-fn preview-markup details-markup-fn)]]))
|
||||
|
||||
(defn <standalone-type> [constructor-fn & [header-tag]]
|
||||
[:standalone-type-tag (<type> constructor-fn header-tag)])
|
||||
|
||||
; -- protocols markup -------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <protocol-method-arity> [arity-fn]
|
||||
(<reference> arity-fn))
|
||||
|
||||
(defn <protocol-method-arities-details> [fns]
|
||||
(<aligned-body> (map <protocol-method-arity> fns)))
|
||||
|
||||
(defn <protocol-method-arities> [fns & [max-fns]]
|
||||
(let [max-fns (or max-fns (pref :max-protocol-method-arities-list))
|
||||
more? (> (count fns) max-fns)
|
||||
aritites-markups (map <protocol-method-arity> (take max-fns fns))
|
||||
preview-markup (concat [:protocol-method-arities-header-tag :protocol-method-arities-header-open-symbol]
|
||||
(interpose :protocol-method-arities-list-header-separator aritites-markups)
|
||||
(if more? [:protocol-method-arities-more-symbol])
|
||||
[:protocol-method-arities-header-close-symbol])]
|
||||
(if more?
|
||||
(let [details-markup-fn (partial <protocol-method-arities-details> fns)]
|
||||
(<reference-surrogate> nil preview-markup details-markup-fn))
|
||||
preview-markup)))
|
||||
|
||||
(defn <protocol-method> [name arities]
|
||||
[:protocol-method-tag
|
||||
:method-icon
|
||||
[:protocol-method-name-tag name]
|
||||
(<protocol-method-arities> arities)])
|
||||
|
||||
(defn <protocol-details> [obj ns _name selector _fast?]
|
||||
(let [protocol-obj (munging/get-protocol-object selector)
|
||||
ns-markups-list (if-not (empty? ns) [:ns-icon [:protocol-ns-name-tag ns]])
|
||||
native-markups-list (if (some? protocol-obj) [:native-icon (<native-reference> protocol-obj)])
|
||||
methods (munging/collect-protocol-methods obj selector)
|
||||
methods-markups (map (fn [[name arities]] (<protocol-method> name arities)) methods)
|
||||
methods-markups-lists (map list methods-markups)]
|
||||
(<aligned-body> (concat methods-markups-lists [ns-markups-list native-markups-list]))))
|
||||
|
||||
(defn <protocol> [obj protocol & [tag]]
|
||||
(let [{:keys [ns name selector fast?]} protocol
|
||||
preview-markup [(or tag :protocol-name-tag) name]
|
||||
prefix-markup [(if fast? :fast-protocol-tag :slow-protocol-tag) :protocol-background]]
|
||||
(if (some? obj)
|
||||
(let [details-markup-fn (partial <protocol-details> obj ns name selector fast?)]
|
||||
(conj prefix-markup (<reference-surrogate> obj preview-markup details-markup-fn)))
|
||||
(conj prefix-markup preview-markup))))
|
||||
|
||||
(defn <more-protocols> [more-count]
|
||||
(let [fake-protocol {:name (get-more-marker more-count)}]
|
||||
(<protocol> nil fake-protocol :protocol-more-tag)))
|
||||
|
||||
(defn <protocols-list> [obj protocols & [max-protocols]]
|
||||
(let [max-protocols (or max-protocols (pref :max-list-protocols))
|
||||
protocols-markups (map (partial <protocol> obj) protocols)]
|
||||
(<list> protocols-markups max-protocols {:tag :protocols-header-tag
|
||||
:open-symbol :protocols-list-open-symbol
|
||||
:close-symbol :protocols-list-close-symbol
|
||||
:separator :header-protocol-separator
|
||||
:more-symbol <more-protocols>})))
|
||||
|
||||
; -- instance fields markup -------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <field> [name value]
|
||||
[:header-field-tag
|
||||
[:header-field-name-tag (str name)]
|
||||
:header-field-value-spacer
|
||||
[:header-field-value-tag (<reference> (<surrogate> value) #(set-managed-print-level % 1))]
|
||||
:header-field-separator])
|
||||
|
||||
(defn <fields-details-row> [field]
|
||||
(let [[name value] field]
|
||||
[:body-field-tr-tag
|
||||
[:body-field-td1-tag
|
||||
:body-field-symbol
|
||||
[:body-field-name-tag (str name)]]
|
||||
[:body-field-td2-tag
|
||||
:body-field-value-spacer]
|
||||
[:body-field-td3-tag
|
||||
[:body-field-value-tag (<reference-surrogate> value)]]]))
|
||||
|
||||
(defn <fields> [fields & [max-fields]]
|
||||
(if (zero? (count fields))
|
||||
[:fields-header-tag :fields-header-no-fields-symbol]
|
||||
(let [max-fields (or max-fields (pref :max-instance-header-fields))
|
||||
more? (> (count fields) max-fields)
|
||||
fields-markups (map (fn [[name value]] (<field> name value)) (take max-fields fields))]
|
||||
(concat [:fields-header-tag
|
||||
:fields-header-open-symbol]
|
||||
fields-markups
|
||||
[(if more? :more-fields-symbol)
|
||||
:fields-header-close-symbol]))))
|
||||
|
||||
(defn <fields-details> [fields obj]
|
||||
(let [protocols (munging/scan-protocols obj)
|
||||
has-protocols? (not (empty? protocols))
|
||||
fields-markup (if-not (zero? (count fields))
|
||||
[:fields-icon (concat [:instance-body-fields-table-tag] (map <fields-details-row> fields))])
|
||||
protocols-list-markup (if has-protocols? [:protocols-icon (<protocols-list> obj protocols)])
|
||||
native-markup [:native-icon (<native-reference> obj)]]
|
||||
(<aligned-body> [fields-markup protocols-list-markup native-markup])))
|
||||
|
||||
; -- type/record instance markup --------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <instance> [value]
|
||||
(let [constructor-fn (get-constructor value)
|
||||
[_ns _name basis] (munging/parse-constructor-info constructor-fn)
|
||||
custom-printing? (implements? IPrintWithWriter value)
|
||||
type-markup (<type> constructor-fn :instance-type-header-tag)
|
||||
fields (fetch-fields-values value basis)
|
||||
fields-markup (<fields> fields (if custom-printing? 0))
|
||||
fields-details-markup-fn #(<fields-details> fields value)
|
||||
fields-preview-markup [:instance-value-tag (<reference-surrogate> value fields-markup fields-details-markup-fn)]
|
||||
custom-printing-markup (if custom-printing?
|
||||
[:instance-custom-printing-wrapper-tag
|
||||
:instance-custom-printing-background
|
||||
(print-via-protocol value :instance-custom-printing-tag)])]
|
||||
[:instance-header-tag
|
||||
:instance-header-background
|
||||
fields-preview-markup
|
||||
custom-printing-markup
|
||||
type-markup]))
|
||||
|
||||
; ---------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <header> [value]
|
||||
(<cljs-land> (<preview> value)))
|
||||
|
||||
(defn <surrogate-header> [surrogate]
|
||||
(or (get-surrogate-header surrogate)
|
||||
(<preview> (get-surrogate-target surrogate))))
|
||||
|
||||
(defn <surrogate-target> [surrogate]
|
||||
(let [target (get-surrogate-target surrogate)]
|
||||
(if (seqable? target)
|
||||
(let [starting-index (get-surrogate-start-index surrogate)]
|
||||
(<details> target starting-index))
|
||||
(<standard-body-reference> target))))
|
||||
|
||||
(defn <surrogate-body> [surrogate]
|
||||
(if-let [body (get-surrogate-body surrogate)]
|
||||
(if (= :target body)
|
||||
(<surrogate-target> surrogate)
|
||||
body)))
|
||||
|
||||
; ---------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn <atomic> [value]
|
||||
(cond
|
||||
(should-render? :render-nils value nil?) (<nil>)
|
||||
(should-render? :render-bools value bool?) (<bool> value)
|
||||
(should-render? :render-strings value string?) (<string> value)
|
||||
(should-render? :render-numbers value number?) (<number> value)
|
||||
(should-render? :render-keywords value keyword?) (<keyword> value)
|
||||
(should-render? :render-symbols value symbol?) (<symbol> value)
|
||||
(should-render? :render-instances value should-render-instance?) (<instance> value)
|
||||
(should-render? :render-types value cljs-type?) (<standalone-type> value)
|
||||
(should-render? :render-functions value cljs-function?) (<function> value)))
|
||||
|
||||
; ---------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(def ^:dynamic *markup-db*)
|
||||
|
||||
; emit-markup-db macro will generate a map of all markup <functions> in this namespace:
|
||||
;
|
||||
; {:atomic <atomic>
|
||||
; :reference <reference>
|
||||
; :native-reference <native-reference>
|
||||
; ...}
|
||||
;
|
||||
; we generate it only on first call and cache it in *markup-db*
|
||||
; emitting markup db statically into def would prevent dead-code elimination
|
||||
;
|
||||
(defn get-markup-db []
|
||||
(if (nil? *markup-db*)
|
||||
(set! *markup-db* (emit-markup-db)))
|
||||
*markup-db*)
|
||||
File diff suppressed because one or more lines are too long
1134
resources/public/js/compiled/out/devtools/formatters/markup.js
Normal file
1134
resources/public/js/compiled/out/devtools/formatters/markup.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,145 @@
|
|||
(ns devtools.formatters.printing
|
||||
(:require-macros [devtools.util :refer [oget oset ocall oapply safe-call]])
|
||||
(:require [devtools.prefs :refer [pref]]
|
||||
[devtools.format :refer [IDevtoolsFormat]]
|
||||
[devtools.protocols :refer [ITemplate IGroup ISurrogate IFormat]]
|
||||
[devtools.formatters.state :refer [push-object-to-current-history! *current-state* get-current-state
|
||||
is-circular? get-managed-print-level set-managed-print-level
|
||||
update-current-state!]]
|
||||
[devtools.formatters.helpers :refer [cljs-value? expandable? abbreviated? directly-printable? should-render?]]))
|
||||
|
||||
; -- helpers ----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn markup? [value]
|
||||
(::markup (meta value)))
|
||||
|
||||
(defn mark-as-markup [value]
|
||||
(with-meta value {::markup true}))
|
||||
|
||||
(defn build-markup [markup-db fn-key & args]
|
||||
(let [f (get markup-db fn-key)]
|
||||
(assert f (str "missing markup method in markup-db: " fn-key))
|
||||
(mark-as-markup (apply f args))))
|
||||
|
||||
(defn wrap-value-as-reference-if-needed [markup-db value]
|
||||
(if (or (directly-printable? value) (markup? value))
|
||||
value
|
||||
(build-markup markup-db :reference-surrogate value)))
|
||||
|
||||
; -- TemplateWriter ---------------------------------------------------------------------------------------------------------
|
||||
|
||||
(deftype TemplateWriter [^:mutable group markup-db]
|
||||
Object
|
||||
(merge [_ a] (set! group (concat group a)))
|
||||
(get-group [_] group)
|
||||
IWriter
|
||||
(-write [_ o] (set! group (concat group [(wrap-value-as-reference-if-needed markup-db o)]))) ; issue #21
|
||||
(-flush [_] nil))
|
||||
|
||||
(defn make-template-writer [markup-db]
|
||||
(TemplateWriter. [] markup-db))
|
||||
|
||||
; -- post-processing --------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn already-reference? [group]
|
||||
(if-let [tag (first (first group))]
|
||||
(= tag "reference")))
|
||||
|
||||
(defn wrap-group-in-reference-if-needed [group obj markup-db]
|
||||
(if (and (not (already-reference? group))
|
||||
(or (expandable? obj) (abbreviated? group)))
|
||||
(let [expandable-markup (apply build-markup markup-db :expandable group)
|
||||
surrogate-markup (build-markup markup-db :raw-surrogate obj expandable-markup :target)
|
||||
reference-markup (build-markup markup-db :reference surrogate-markup)]
|
||||
[reference-markup])
|
||||
group))
|
||||
|
||||
(defn wrap-group-in-circular-warning-if-needed [group markup-db circular?]
|
||||
(if circular?
|
||||
[(apply build-markup markup-db :circular-reference group)]
|
||||
group))
|
||||
|
||||
(defn wrap-group-in-meta-if-needed [group value markup-db]
|
||||
(if (should-render? :render-metas value #(some? (meta %)))
|
||||
[(apply (partial (:meta-wrapper markup-db) (meta value)) group)]
|
||||
group))
|
||||
|
||||
; default printer implementation can do this:
|
||||
; :else (write-all writer "#<" (str obj) ">")
|
||||
; we want to wrap stringified obj in a reference for further inspection
|
||||
;
|
||||
; this behaviour changed in https://github.com/clojure/clojurescript/commit/34c3b8985ed8197d90f441c46d168c4024a20eb8
|
||||
; newly functions and :else branch print "#object [" ... "]"
|
||||
;
|
||||
; in some situations obj can still be a clojurescript value (e.g. deftypes)
|
||||
; we have to implement a special flag to prevent infinite recursion
|
||||
; see https://github.com/binaryage/cljs-devtools/issues/2
|
||||
; https://github.com/binaryage/cljs-devtools/issues/8
|
||||
(defn detect-edge-case-and-patch-it [group obj markup-db]
|
||||
(cond
|
||||
(or
|
||||
(and (= (count group) 5) (= (nth group 0) "#object[") (= (nth group 4) "\"]")) ; function case
|
||||
(and (= (count group) 5) (= (nth group 0) "#object[") (= (nth group 4) "]")) ; :else -constructor case
|
||||
(and (= (count group) 3) (= (nth group 0) "#object[") (= (nth group 2) "]"))) ; :else -cljs$lang$ctorStr case
|
||||
[(build-markup markup-db :native-reference obj)]
|
||||
|
||||
(and (= (count group) 3) (= (nth group 0) "#<") (= (str obj) (nth group 1)) (= (nth group 2) ">")) ; old code prior r1.7.28
|
||||
[(nth group 0) (build-markup :native-reference obj) (nth group 2)]
|
||||
|
||||
:else group))
|
||||
|
||||
(defn post-process-printed-output [output-group obj markup-db circular?]
|
||||
(-> output-group
|
||||
(detect-edge-case-and-patch-it obj markup-db) ; an ugly hack
|
||||
(wrap-group-in-reference-if-needed obj markup-db)
|
||||
(wrap-group-in-circular-warning-if-needed markup-db circular?)
|
||||
(wrap-group-in-meta-if-needed obj markup-db)))
|
||||
|
||||
; -- alternative printer ----------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn alt-printer-job [obj writer opts]
|
||||
(let [{:keys [markup-db]} opts]
|
||||
(if (or (safe-call satisfies? false IDevtoolsFormat obj)
|
||||
(safe-call satisfies? false IFormat obj)) ; we have to wrap value in reference if detected IFormat
|
||||
(-write writer (build-markup markup-db :reference obj))
|
||||
(if-let [atomic-markup (build-markup markup-db :atomic obj)]
|
||||
(-write writer atomic-markup)
|
||||
(let [default-impl (:fallback-impl opts)
|
||||
; we want to limit print-level, at max-print-level level use maximal abbreviation e.g. [...] or {...}
|
||||
inner-opts (if (= *print-level* 1) (assoc opts :print-length 0) opts)]
|
||||
(default-impl obj writer inner-opts))))))
|
||||
|
||||
(defn alt-printer-impl [obj writer opts]
|
||||
(binding [*current-state* (get-current-state)]
|
||||
(let [{:keys [markup-db]} opts
|
||||
circular? (is-circular? obj)
|
||||
inner-writer (make-template-writer (:markup-db opts))]
|
||||
(push-object-to-current-history! obj)
|
||||
(alt-printer-job obj inner-writer opts)
|
||||
(.merge writer (post-process-printed-output (.get-group inner-writer) obj markup-db circular?)))))
|
||||
|
||||
; -- common code for managed printing ---------------------------------------------------------------------------------------
|
||||
|
||||
(defn managed-print [tag markup-db printer]
|
||||
(let [writer (make-template-writer markup-db)
|
||||
opts {:alt-impl alt-printer-impl
|
||||
:markup-db markup-db
|
||||
:print-length (pref :max-header-elements)
|
||||
:more-marker (pref :more-marker)}
|
||||
job-fn #(printer writer opts)]
|
||||
(if-let [managed-print-level (get-managed-print-level)]
|
||||
(binding [*print-level* managed-print-level]
|
||||
(update-current-state! #(set-managed-print-level % nil)) ; reset managed-print-level so it does not propagate further down in expaded data
|
||||
(job-fn))
|
||||
(job-fn))
|
||||
(concat [(pref tag)] (.get-group writer))))
|
||||
|
||||
; -- public printing API ----------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn managed-print-via-writer [value tag markup-db]
|
||||
(managed-print tag markup-db (fn [writer opts]
|
||||
(pr-seq-writer [value] writer opts)))) ; note we use pr-seq-writer becasue pr-writer is private for some reason
|
||||
|
||||
(defn managed-print-via-protocol [value tag markup-db]
|
||||
(managed-print tag markup-db (fn [writer opts]
|
||||
(-pr-writer value writer opts))))
|
||||
File diff suppressed because one or more lines are too long
292
resources/public/js/compiled/out/devtools/formatters/printing.js
Normal file
292
resources/public/js/compiled/out/devtools/formatters/printing.js
Normal file
|
|
@ -0,0 +1,292 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('devtools.formatters.printing');
|
||||
goog.require('cljs.core');
|
||||
goog.require('devtools.prefs');
|
||||
goog.require('devtools.format');
|
||||
goog.require('devtools.protocols');
|
||||
goog.require('devtools.formatters.state');
|
||||
goog.require('devtools.formatters.helpers');
|
||||
devtools.formatters.printing.markup_QMARK_ = (function devtools$formatters$printing$markup_QMARK_(value){
|
||||
return new cljs.core.Keyword("devtools.formatters.printing","markup","devtools.formatters.printing/markup",-1990109186).cljs$core$IFn$_invoke$arity$1(cljs.core.meta.call(null,value));
|
||||
});
|
||||
devtools.formatters.printing.mark_as_markup = (function devtools$formatters$printing$mark_as_markup(value){
|
||||
return cljs.core.with_meta.call(null,value,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword("devtools.formatters.printing","markup","devtools.formatters.printing/markup",-1990109186),true], null));
|
||||
});
|
||||
devtools.formatters.printing.build_markup = (function devtools$formatters$printing$build_markup(var_args){
|
||||
var args__26212__auto__ = [];
|
||||
var len__26205__auto___41404 = arguments.length;
|
||||
var i__26206__auto___41405 = (0);
|
||||
while(true){
|
||||
if((i__26206__auto___41405 < len__26205__auto___41404)){
|
||||
args__26212__auto__.push((arguments[i__26206__auto___41405]));
|
||||
|
||||
var G__41406 = (i__26206__auto___41405 + (1));
|
||||
i__26206__auto___41405 = G__41406;
|
||||
continue;
|
||||
} else {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
var argseq__26213__auto__ = ((((2) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((2)),(0),null)):null);
|
||||
return devtools.formatters.printing.build_markup.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),argseq__26213__auto__);
|
||||
});
|
||||
|
||||
devtools.formatters.printing.build_markup.cljs$core$IFn$_invoke$arity$variadic = (function (markup_db,fn_key,args){
|
||||
var f = cljs.core.get.call(null,markup_db,fn_key);
|
||||
if(cljs.core.truth_(f)){
|
||||
} else {
|
||||
throw (new Error([cljs.core.str("Assert failed: "),cljs.core.str([cljs.core.str("missing markup method in markup-db: "),cljs.core.str(fn_key)].join('')),cljs.core.str("\n"),cljs.core.str("f")].join('')));
|
||||
}
|
||||
|
||||
return devtools.formatters.printing.mark_as_markup.call(null,cljs.core.apply.call(null,f,args));
|
||||
});
|
||||
|
||||
devtools.formatters.printing.build_markup.cljs$lang$maxFixedArity = (2);
|
||||
|
||||
devtools.formatters.printing.build_markup.cljs$lang$applyTo = (function (seq41401){
|
||||
var G__41402 = cljs.core.first.call(null,seq41401);
|
||||
var seq41401__$1 = cljs.core.next.call(null,seq41401);
|
||||
var G__41403 = cljs.core.first.call(null,seq41401__$1);
|
||||
var seq41401__$2 = cljs.core.next.call(null,seq41401__$1);
|
||||
return devtools.formatters.printing.build_markup.cljs$core$IFn$_invoke$arity$variadic(G__41402,G__41403,seq41401__$2);
|
||||
});
|
||||
|
||||
devtools.formatters.printing.wrap_value_as_reference_if_needed = (function devtools$formatters$printing$wrap_value_as_reference_if_needed(markup_db,value){
|
||||
if(cljs.core.truth_((function (){var or__25130__auto__ = devtools.formatters.helpers.directly_printable_QMARK_.call(null,value);
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
return devtools.formatters.printing.markup_QMARK_.call(null,value);
|
||||
}
|
||||
})())){
|
||||
return value;
|
||||
} else {
|
||||
return devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"reference-surrogate","reference-surrogate",274031791),value);
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @implements {cljs.core.IWriter}
|
||||
* @implements {devtools.formatters.printing.Object}
|
||||
*/
|
||||
devtools.formatters.printing.TemplateWriter = (function (group,markup_db){
|
||||
this.group = group;
|
||||
this.markup_db = markup_db;
|
||||
this.cljs$lang$protocol_mask$partition0$ = 1073741824;
|
||||
this.cljs$lang$protocol_mask$partition1$ = 0;
|
||||
})
|
||||
devtools.formatters.printing.TemplateWriter.prototype.merge = (function (a){
|
||||
var self__ = this;
|
||||
var _ = this;
|
||||
return self__.group = cljs.core.concat.call(null,self__.group,a);
|
||||
});
|
||||
|
||||
devtools.formatters.printing.TemplateWriter.prototype.get_group = (function (){
|
||||
var self__ = this;
|
||||
var _ = this;
|
||||
return self__.group;
|
||||
});
|
||||
|
||||
devtools.formatters.printing.TemplateWriter.prototype.cljs$core$IWriter$_write$arity$2 = (function (_,o){
|
||||
var self__ = this;
|
||||
var ___$1 = this;
|
||||
return self__.group = cljs.core.concat.call(null,self__.group,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [devtools.formatters.printing.wrap_value_as_reference_if_needed.call(null,self__.markup_db,o)], null));
|
||||
});
|
||||
|
||||
devtools.formatters.printing.TemplateWriter.prototype.cljs$core$IWriter$_flush$arity$1 = (function (_){
|
||||
var self__ = this;
|
||||
var ___$1 = this;
|
||||
return null;
|
||||
});
|
||||
|
||||
devtools.formatters.printing.TemplateWriter.getBasis = (function (){
|
||||
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.with_meta(new cljs.core.Symbol(null,"group","group",-2071839637,null),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"mutable","mutable",875778266),true], null)),new cljs.core.Symbol(null,"markup-db","markup-db",-1841597035,null)], null);
|
||||
});
|
||||
|
||||
devtools.formatters.printing.TemplateWriter.cljs$lang$type = true;
|
||||
|
||||
devtools.formatters.printing.TemplateWriter.cljs$lang$ctorStr = "devtools.formatters.printing/TemplateWriter";
|
||||
|
||||
devtools.formatters.printing.TemplateWriter.cljs$lang$ctorPrWriter = (function (this__25736__auto__,writer__25737__auto__,opt__25738__auto__){
|
||||
return cljs.core._write.call(null,writer__25737__auto__,"devtools.formatters.printing/TemplateWriter");
|
||||
});
|
||||
|
||||
devtools.formatters.printing.__GT_TemplateWriter = (function devtools$formatters$printing$__GT_TemplateWriter(group,markup_db){
|
||||
return (new devtools.formatters.printing.TemplateWriter(group,markup_db));
|
||||
});
|
||||
|
||||
devtools.formatters.printing.make_template_writer = (function devtools$formatters$printing$make_template_writer(markup_db){
|
||||
return (new devtools.formatters.printing.TemplateWriter(cljs.core.PersistentVector.EMPTY,markup_db));
|
||||
});
|
||||
devtools.formatters.printing.already_reference_QMARK_ = (function devtools$formatters$printing$already_reference_QMARK_(group){
|
||||
var temp__4655__auto__ = cljs.core.first.call(null,cljs.core.first.call(null,group));
|
||||
if(cljs.core.truth_(temp__4655__auto__)){
|
||||
var tag = temp__4655__auto__;
|
||||
return cljs.core._EQ_.call(null,tag,"reference");
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
devtools.formatters.printing.wrap_group_in_reference_if_needed = (function devtools$formatters$printing$wrap_group_in_reference_if_needed(group,obj,markup_db){
|
||||
if(cljs.core.truth_((function (){var and__25118__auto__ = cljs.core.not.call(null,devtools.formatters.printing.already_reference_QMARK_.call(null,group));
|
||||
if(and__25118__auto__){
|
||||
var or__25130__auto__ = devtools.formatters.helpers.expandable_QMARK_.call(null,obj);
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
return devtools.formatters.helpers.abbreviated_QMARK_.call(null,group);
|
||||
}
|
||||
} else {
|
||||
return and__25118__auto__;
|
||||
}
|
||||
})())){
|
||||
var expandable_markup = cljs.core.apply.call(null,devtools.formatters.printing.build_markup,markup_db,new cljs.core.Keyword(null,"expandable","expandable",-704609097),group);
|
||||
var surrogate_markup = devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"raw-surrogate","raw-surrogate",904931181),obj,expandable_markup,new cljs.core.Keyword(null,"target","target",253001721));
|
||||
var reference_markup = devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"reference","reference",-1711695023),surrogate_markup);
|
||||
return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [reference_markup], null);
|
||||
} else {
|
||||
return group;
|
||||
}
|
||||
});
|
||||
devtools.formatters.printing.wrap_group_in_circular_warning_if_needed = (function devtools$formatters$printing$wrap_group_in_circular_warning_if_needed(group,markup_db,circular_QMARK_){
|
||||
if(cljs.core.truth_(circular_QMARK_)){
|
||||
return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.apply.call(null,devtools.formatters.printing.build_markup,markup_db,new cljs.core.Keyword(null,"circular-reference","circular-reference",970308727),group)], null);
|
||||
} else {
|
||||
return group;
|
||||
}
|
||||
});
|
||||
devtools.formatters.printing.wrap_group_in_meta_if_needed = (function devtools$formatters$printing$wrap_group_in_meta_if_needed(group,value,markup_db){
|
||||
if(cljs.core.truth_(devtools.formatters.helpers.should_render_QMARK_.call(null,new cljs.core.Keyword(null,"render-metas","render-metas",1141294116),value,(function (p1__41407_SHARP_){
|
||||
return cljs.core.some_QMARK_.call(null,cljs.core.meta.call(null,p1__41407_SHARP_));
|
||||
})))){
|
||||
return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.apply.call(null,cljs.core.partial.call(null,new cljs.core.Keyword(null,"meta-wrapper","meta-wrapper",-1989845587).cljs$core$IFn$_invoke$arity$1(markup_db),cljs.core.meta.call(null,value)),group)], null);
|
||||
} else {
|
||||
return group;
|
||||
}
|
||||
});
|
||||
devtools.formatters.printing.detect_edge_case_and_patch_it = (function devtools$formatters$printing$detect_edge_case_and_patch_it(group,obj,markup_db){
|
||||
if(((cljs.core._EQ_.call(null,cljs.core.count.call(null,group),(5))) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(0)),"#object[")) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(4)),"\"]"))) || ((cljs.core._EQ_.call(null,cljs.core.count.call(null,group),(5))) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(0)),"#object[")) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(4)),"]"))) || ((cljs.core._EQ_.call(null,cljs.core.count.call(null,group),(3))) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(0)),"#object[")) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(2)),"]")))){
|
||||
return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"native-reference","native-reference",-2013708658),obj)], null);
|
||||
} else {
|
||||
if((cljs.core._EQ_.call(null,cljs.core.count.call(null,group),(3))) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(0)),"#<")) && (cljs.core._EQ_.call(null,[cljs.core.str(obj)].join(''),cljs.core.nth.call(null,group,(1)))) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(2)),">"))){
|
||||
return new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.nth.call(null,group,(0)),devtools.formatters.printing.build_markup.call(null,new cljs.core.Keyword(null,"native-reference","native-reference",-2013708658),obj),cljs.core.nth.call(null,group,(2))], null);
|
||||
} else {
|
||||
return group;
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
devtools.formatters.printing.post_process_printed_output = (function devtools$formatters$printing$post_process_printed_output(output_group,obj,markup_db,circular_QMARK_){
|
||||
return devtools.formatters.printing.wrap_group_in_meta_if_needed.call(null,devtools.formatters.printing.wrap_group_in_circular_warning_if_needed.call(null,devtools.formatters.printing.wrap_group_in_reference_if_needed.call(null,devtools.formatters.printing.detect_edge_case_and_patch_it.call(null,output_group,obj,markup_db),obj,markup_db),markup_db,circular_QMARK_),obj,markup_db);
|
||||
});
|
||||
devtools.formatters.printing.alt_printer_job = (function devtools$formatters$printing$alt_printer_job(obj,writer,opts){
|
||||
var map__41416 = opts;
|
||||
var map__41416__$1 = ((((!((map__41416 == null)))?((((map__41416.cljs$lang$protocol_mask$partition0$ & (64))) || (map__41416.cljs$core$ISeq$))?true:false):false))?cljs.core.apply.call(null,cljs.core.hash_map,map__41416):map__41416);
|
||||
var markup_db = cljs.core.get.call(null,map__41416__$1,new cljs.core.Keyword(null,"markup-db","markup-db",812838734));
|
||||
if(cljs.core.truth_((function (){var or__25130__auto__ = (function (){try{if(!((obj == null))){
|
||||
if((false) || (obj.devtools$format$IDevtoolsFormat$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!obj.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,obj);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,obj);
|
||||
}
|
||||
}catch (e41420){var e__41074__auto__ = e41420;
|
||||
return false;
|
||||
}})();
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
try{if(!((obj == null))){
|
||||
if((false) || (obj.devtools$protocols$IFormat$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!obj.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,obj);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,obj);
|
||||
}
|
||||
}catch (e41422){var e__41074__auto__ = e41422;
|
||||
return false;
|
||||
}}
|
||||
})())){
|
||||
return cljs.core._write.call(null,writer,devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"reference","reference",-1711695023),obj));
|
||||
} else {
|
||||
var temp__4655__auto__ = devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"atomic","atomic",-120459460),obj);
|
||||
if(cljs.core.truth_(temp__4655__auto__)){
|
||||
var atomic_markup = temp__4655__auto__;
|
||||
return cljs.core._write.call(null,writer,atomic_markup);
|
||||
} else {
|
||||
var default_impl = new cljs.core.Keyword(null,"fallback-impl","fallback-impl",-1501286995).cljs$core$IFn$_invoke$arity$1(opts);
|
||||
var inner_opts = ((cljs.core._EQ_.call(null,cljs.core._STAR_print_level_STAR_,(1)))?cljs.core.assoc.call(null,opts,new cljs.core.Keyword(null,"print-length","print-length",1931866356),(0)):opts);
|
||||
return default_impl.call(null,obj,writer,inner_opts);
|
||||
}
|
||||
}
|
||||
});
|
||||
devtools.formatters.printing.alt_printer_impl = (function devtools$formatters$printing$alt_printer_impl(obj,writer,opts){
|
||||
var _STAR_current_state_STAR_41427 = devtools.formatters.state._STAR_current_state_STAR_;
|
||||
devtools.formatters.state._STAR_current_state_STAR_ = devtools.formatters.state.get_current_state.call(null);
|
||||
|
||||
try{var map__41428 = opts;
|
||||
var map__41428__$1 = ((((!((map__41428 == null)))?((((map__41428.cljs$lang$protocol_mask$partition0$ & (64))) || (map__41428.cljs$core$ISeq$))?true:false):false))?cljs.core.apply.call(null,cljs.core.hash_map,map__41428):map__41428);
|
||||
var markup_db = cljs.core.get.call(null,map__41428__$1,new cljs.core.Keyword(null,"markup-db","markup-db",812838734));
|
||||
var circular_QMARK_ = devtools.formatters.state.is_circular_QMARK_.call(null,obj);
|
||||
var inner_writer = devtools.formatters.printing.make_template_writer.call(null,new cljs.core.Keyword(null,"markup-db","markup-db",812838734).cljs$core$IFn$_invoke$arity$1(opts));
|
||||
devtools.formatters.state.push_object_to_current_history_BANG_.call(null,obj);
|
||||
|
||||
devtools.formatters.printing.alt_printer_job.call(null,obj,inner_writer,opts);
|
||||
|
||||
return writer.merge(devtools.formatters.printing.post_process_printed_output.call(null,inner_writer.get_group(),obj,markup_db,circular_QMARK_));
|
||||
}finally {devtools.formatters.state._STAR_current_state_STAR_ = _STAR_current_state_STAR_41427;
|
||||
}});
|
||||
devtools.formatters.printing.managed_print = (function devtools$formatters$printing$managed_print(tag,markup_db,printer){
|
||||
var writer = devtools.formatters.printing.make_template_writer.call(null,markup_db);
|
||||
var opts = new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,"alt-impl","alt-impl",670969595),devtools.formatters.printing.alt_printer_impl,new cljs.core.Keyword(null,"markup-db","markup-db",812838734),markup_db,new cljs.core.Keyword(null,"print-length","print-length",1931866356),devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"max-header-elements","max-header-elements",713629864)),new cljs.core.Keyword(null,"more-marker","more-marker",-14717935),devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"more-marker","more-marker",-14717935))], null);
|
||||
var job_fn = ((function (writer,opts){
|
||||
return (function (){
|
||||
return printer.call(null,writer,opts);
|
||||
});})(writer,opts))
|
||||
;
|
||||
var temp__4655__auto___41433 = devtools.formatters.state.get_managed_print_level.call(null);
|
||||
if(cljs.core.truth_(temp__4655__auto___41433)){
|
||||
var managed_print_level_41434 = temp__4655__auto___41433;
|
||||
var _STAR_print_level_STAR_41432_41435 = cljs.core._STAR_print_level_STAR_;
|
||||
cljs.core._STAR_print_level_STAR_ = managed_print_level_41434;
|
||||
|
||||
try{devtools.formatters.state.update_current_state_BANG_.call(null,((function (_STAR_print_level_STAR_41432_41435,managed_print_level_41434,temp__4655__auto___41433,writer,opts,job_fn){
|
||||
return (function (p1__41430_SHARP_){
|
||||
return devtools.formatters.state.set_managed_print_level.call(null,p1__41430_SHARP_,null);
|
||||
});})(_STAR_print_level_STAR_41432_41435,managed_print_level_41434,temp__4655__auto___41433,writer,opts,job_fn))
|
||||
);
|
||||
|
||||
job_fn.call(null);
|
||||
}finally {cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR_41432_41435;
|
||||
}} else {
|
||||
job_fn.call(null);
|
||||
}
|
||||
|
||||
return cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [devtools.prefs.pref.call(null,tag)], null),writer.get_group());
|
||||
});
|
||||
devtools.formatters.printing.managed_print_via_writer = (function devtools$formatters$printing$managed_print_via_writer(value,tag,markup_db){
|
||||
return devtools.formatters.printing.managed_print.call(null,tag,markup_db,(function (writer,opts){
|
||||
return cljs.core.pr_seq_writer.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [value], null),writer,opts);
|
||||
}));
|
||||
});
|
||||
devtools.formatters.printing.managed_print_via_protocol = (function devtools$formatters$printing$managed_print_via_protocol(value,tag,markup_db){
|
||||
return devtools.formatters.printing.managed_print.call(null,tag,markup_db,(function (writer,opts){
|
||||
return cljs.core._pr_writer.call(null,value,writer,opts);
|
||||
}));
|
||||
});
|
||||
|
||||
//# sourceMappingURL=printing.js.map?rel=1603199212398
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,73 @@
|
|||
(ns devtools.formatters.state)
|
||||
|
||||
; - state management --------------------------------------------------------------------------------------------------------
|
||||
;
|
||||
; we have to maintain some state:
|
||||
; a) to prevent infinite recursion in some pathological cases (https://github.com/binaryage/cljs-devtools/issues/2)
|
||||
; b) to keep track of printed objects to visually signal circular data structures
|
||||
;
|
||||
; We dynamically bind *current-config* to the config passed from "outside" when entering calls to our API methods.
|
||||
; Initially the state is empty, but we accumulate there a history of seen values when rendering individual values
|
||||
; in depth-first traversal order. See alt-printer-impl where we re-bind *current-config* for each traversal level.
|
||||
; But there is a catch. For larger data structures our printing methods usually do not print everything at once.
|
||||
; We can include so called "object references" which are just placeholders which can be expanded later
|
||||
; by DevTools UI (when user clicks a disclosure triangle).
|
||||
; For proper continuation in rendering of those references we have to carry our existing state over.
|
||||
; We use "config" feature of custom formatters system to pass current state to future API calls.
|
||||
|
||||
(def ^:dynamic *current-state* nil)
|
||||
|
||||
(defn valid-current-state? []
|
||||
(some? *current-state*))
|
||||
|
||||
(defn get-default-state []
|
||||
{})
|
||||
|
||||
(defn get-current-state []
|
||||
{:pre [(valid-current-state?)]}
|
||||
*current-state*)
|
||||
|
||||
(defn update-current-state! [f & args]
|
||||
{:pre [(valid-current-state?)]}
|
||||
(set! *current-state* (apply f *current-state* args)))
|
||||
|
||||
; -- high level API ---------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn push-object-to-current-history! [object]
|
||||
(update-current-state! update :history conj object))
|
||||
|
||||
(defn get-current-history []
|
||||
(:history (get-current-state)))
|
||||
|
||||
(defn is-circular? [object]
|
||||
(let [history (get-current-history)]
|
||||
(some #(identical? % object) history)))
|
||||
|
||||
(defn ^bool prevent-recursion? []
|
||||
(boolean (:prevent-recursion (get-current-state))))
|
||||
|
||||
(defn set-prevent-recursion [state val]
|
||||
(if (some? val)
|
||||
(assoc state :prevent-recursion val)
|
||||
(dissoc state :prevent-recursion)))
|
||||
|
||||
(defn get-managed-print-level []
|
||||
(:managed-print-level (get-current-state)))
|
||||
|
||||
(defn set-managed-print-level [state val]
|
||||
(if (some? val)
|
||||
(assoc state :managed-print-level val)
|
||||
(dissoc state :managed-print-level)))
|
||||
|
||||
(defn get-depth-budget []
|
||||
(:depth-budget (get-current-state)))
|
||||
|
||||
(defn set-depth-budget [state val]
|
||||
(if (some? val)
|
||||
(assoc state :depth-budget val)
|
||||
(dissoc state :depth-budget)))
|
||||
|
||||
(defn reset-depth-limits [state]
|
||||
(-> state
|
||||
(set-depth-budget nil)
|
||||
(set-managed-print-level nil)))
|
||||
File diff suppressed because one or more lines are too long
104
resources/public/js/compiled/out/devtools/formatters/state.js
Normal file
104
resources/public/js/compiled/out/devtools/formatters/state.js
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('devtools.formatters.state');
|
||||
goog.require('cljs.core');
|
||||
devtools.formatters.state._STAR_current_state_STAR_ = null;
|
||||
devtools.formatters.state.valid_current_state_QMARK_ = (function devtools$formatters$state$valid_current_state_QMARK_(){
|
||||
return cljs.core.some_QMARK_.call(null,devtools.formatters.state._STAR_current_state_STAR_);
|
||||
});
|
||||
devtools.formatters.state.get_default_state = (function devtools$formatters$state$get_default_state(){
|
||||
return cljs.core.PersistentArrayMap.EMPTY;
|
||||
});
|
||||
devtools.formatters.state.get_current_state = (function devtools$formatters$state$get_current_state(){
|
||||
if(cljs.core.truth_(devtools.formatters.state.valid_current_state_QMARK_.call(null))){
|
||||
} else {
|
||||
throw (new Error("Assert failed: (valid-current-state?)"));
|
||||
}
|
||||
|
||||
return devtools.formatters.state._STAR_current_state_STAR_;
|
||||
});
|
||||
devtools.formatters.state.update_current_state_BANG_ = (function devtools$formatters$state$update_current_state_BANG_(var_args){
|
||||
var args__26212__auto__ = [];
|
||||
var len__26205__auto___41395 = arguments.length;
|
||||
var i__26206__auto___41396 = (0);
|
||||
while(true){
|
||||
if((i__26206__auto___41396 < len__26205__auto___41395)){
|
||||
args__26212__auto__.push((arguments[i__26206__auto___41396]));
|
||||
|
||||
var G__41397 = (i__26206__auto___41396 + (1));
|
||||
i__26206__auto___41396 = G__41397;
|
||||
continue;
|
||||
} else {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
var argseq__26213__auto__ = ((((1) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((1)),(0),null)):null);
|
||||
return devtools.formatters.state.update_current_state_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__26213__auto__);
|
||||
});
|
||||
|
||||
devtools.formatters.state.update_current_state_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (f,args){
|
||||
if(cljs.core.truth_(devtools.formatters.state.valid_current_state_QMARK_.call(null))){
|
||||
} else {
|
||||
throw (new Error("Assert failed: (valid-current-state?)"));
|
||||
}
|
||||
|
||||
return devtools.formatters.state._STAR_current_state_STAR_ = cljs.core.apply.call(null,f,devtools.formatters.state._STAR_current_state_STAR_,args);
|
||||
});
|
||||
|
||||
devtools.formatters.state.update_current_state_BANG_.cljs$lang$maxFixedArity = (1);
|
||||
|
||||
devtools.formatters.state.update_current_state_BANG_.cljs$lang$applyTo = (function (seq41393){
|
||||
var G__41394 = cljs.core.first.call(null,seq41393);
|
||||
var seq41393__$1 = cljs.core.next.call(null,seq41393);
|
||||
return devtools.formatters.state.update_current_state_BANG_.cljs$core$IFn$_invoke$arity$variadic(G__41394,seq41393__$1);
|
||||
});
|
||||
|
||||
devtools.formatters.state.push_object_to_current_history_BANG_ = (function devtools$formatters$state$push_object_to_current_history_BANG_(object){
|
||||
return devtools.formatters.state.update_current_state_BANG_.call(null,cljs.core.update,new cljs.core.Keyword(null,"history","history",-247395220),cljs.core.conj,object);
|
||||
});
|
||||
devtools.formatters.state.get_current_history = (function devtools$formatters$state$get_current_history(){
|
||||
return new cljs.core.Keyword(null,"history","history",-247395220).cljs$core$IFn$_invoke$arity$1(devtools.formatters.state.get_current_state.call(null));
|
||||
});
|
||||
devtools.formatters.state.is_circular_QMARK_ = (function devtools$formatters$state$is_circular_QMARK_(object){
|
||||
var history = devtools.formatters.state.get_current_history.call(null);
|
||||
return cljs.core.some.call(null,((function (history){
|
||||
return (function (p1__41398_SHARP_){
|
||||
return (p1__41398_SHARP_ === object);
|
||||
});})(history))
|
||||
,history);
|
||||
});
|
||||
devtools.formatters.state.prevent_recursion_QMARK_ = (function devtools$formatters$state$prevent_recursion_QMARK_(){
|
||||
return cljs.core.boolean$.call(null,new cljs.core.Keyword(null,"prevent-recursion","prevent-recursion",-1498371606).cljs$core$IFn$_invoke$arity$1(devtools.formatters.state.get_current_state.call(null)));
|
||||
});
|
||||
devtools.formatters.state.set_prevent_recursion = (function devtools$formatters$state$set_prevent_recursion(state,val){
|
||||
if(cljs.core.some_QMARK_.call(null,val)){
|
||||
return cljs.core.assoc.call(null,state,new cljs.core.Keyword(null,"prevent-recursion","prevent-recursion",-1498371606),val);
|
||||
} else {
|
||||
return cljs.core.dissoc.call(null,state,new cljs.core.Keyword(null,"prevent-recursion","prevent-recursion",-1498371606));
|
||||
}
|
||||
});
|
||||
devtools.formatters.state.get_managed_print_level = (function devtools$formatters$state$get_managed_print_level(){
|
||||
return new cljs.core.Keyword(null,"managed-print-level","managed-print-level",-844058473).cljs$core$IFn$_invoke$arity$1(devtools.formatters.state.get_current_state.call(null));
|
||||
});
|
||||
devtools.formatters.state.set_managed_print_level = (function devtools$formatters$state$set_managed_print_level(state,val){
|
||||
if(cljs.core.some_QMARK_.call(null,val)){
|
||||
return cljs.core.assoc.call(null,state,new cljs.core.Keyword(null,"managed-print-level","managed-print-level",-844058473),val);
|
||||
} else {
|
||||
return cljs.core.dissoc.call(null,state,new cljs.core.Keyword(null,"managed-print-level","managed-print-level",-844058473));
|
||||
}
|
||||
});
|
||||
devtools.formatters.state.get_depth_budget = (function devtools$formatters$state$get_depth_budget(){
|
||||
return new cljs.core.Keyword(null,"depth-budget","depth-budget",-335905888).cljs$core$IFn$_invoke$arity$1(devtools.formatters.state.get_current_state.call(null));
|
||||
});
|
||||
devtools.formatters.state.set_depth_budget = (function devtools$formatters$state$set_depth_budget(state,val){
|
||||
if(cljs.core.some_QMARK_.call(null,val)){
|
||||
return cljs.core.assoc.call(null,state,new cljs.core.Keyword(null,"depth-budget","depth-budget",-335905888),val);
|
||||
} else {
|
||||
return cljs.core.dissoc.call(null,state,new cljs.core.Keyword(null,"depth-budget","depth-budget",-335905888));
|
||||
}
|
||||
});
|
||||
devtools.formatters.state.reset_depth_limits = (function devtools$formatters$state$reset_depth_limits(state){
|
||||
return devtools.formatters.state.set_managed_print_level.call(null,devtools.formatters.state.set_depth_budget.call(null,state,null),null);
|
||||
});
|
||||
|
||||
//# sourceMappingURL=state.js.map?rel=1603199212244
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"\/Users\/simon\/workspace\/swinging-needle-meter\/docs\/js\/compiled\/out\/devtools\/formatters\/state.js","sources":["state.cljs?rel=1603199212244"],"lineCount":104,"mappings":";AAAA;;AAiBA,sDAAA,tDAAeA;AAEf,uDAAA,vDAAMC;AAAN,AACE,OAACC,gCAAMF;;AAET,8CAAA,9CAAMG;AAAN,AAAA;;AAGA,8CAAA,9CAAME;AAAN,AAAA,oBACS,AAACJ;AADV;AAAA,AAAA,MAAA,KAAAG,MAAA;;;AAEEJ;;AAEF,AAAA,uDAAA,+DAAAM,tHAAMM;AAAN,AAAA,IAAAL,sBAAA;AAAA,AAAA,IAAAC,2BAAA,AAAA;AAAA,AAAA,IAAAC,yBAAA;;AAAA,AAAA,GAAA,CAAAA,yBAAAD;AAAA,AAAA,AAAAD,yBAAA,CAAA,UAAAE;;AAAA,eAAA,CAAAA,yBAAA;;;;AAAA;;;;AAAA,IAAAC,wBAAA,EAAA,CAAA,MAAA,AAAAH,6BAAA,AAAA,KAAAI,qBAAA,AAAAJ,0BAAA,KAAA,IAAA,OAAA;AAAA,AAAA,OAAAK,0FAAA,CAAA,UAAA,MAAAF;;;AAAA,AAAA,AAAA,AAAAE,4FAAA,WAA6BK,EAAIC;AAAjC,AAAA,oBACS,AAACjB;AADV;AAAA,AAAA,MAAA,KAAAG,MAAA;;;AAEE,OAAMJ,sDAAgB,AAACmB,0BAAMF,EAAEjB,oDAAgBkB;;;AAFjD,AAAA,AAAAN,+EAAA;;AAAA,AAAA,AAAAA,yEAAA,WAAAC;AAAA,AAAA,IAAAC,WAAA,AAAAC,0BAAAF;IAAAA,eAAA,AAAAG,yBAAAH;AAAA,AAAA,OAAAD,0FAAAE,SAAAD;;;AAAA,AAMA,iEAAA,jEAAMO,0IAAiCC;AAAvC,AACE,uFAAA,hFAACT,+DAAsBU,4EAAgBC,eAAKF;;AAE9C,gDAAA,hDAAMG;AAAN,AACE,OAAA,yFAAU,AAACnB;;AAEb,+CAAA,\/CAAMoB,sGAAcJ;AAApB,AACE,IAAMK,UAAQ,AAACF;AAAf,AACE,gCAAA,zBAACI;kBAADD;AAAA,AAAO,QAAAA,qBAAcN;;CAAQK;;AAEjC,qDAAA,rDAAYG;AAAZ,AACE,OAACC,6BAAQ,AAAA,8GAAoB,AAACzB;;AAEhC,kDAAA,lDAAM0B,4GAAuBC,MAAMC;AAAnC,AACE,GAAI,AAAC\/B,gCAAM+B;AACT,uCAAA,hCAACC,0BAAMF,sFAAyBC;;AAChC,wCAAA,jCAACE,2BAAOH;;;AAEZ,oDAAA,pDAAMI;AAAN,AACE,OAAA,iHAAsB,AAAC\/B;;AAEzB,oDAAA,pDAAMgC,gHAAyBL,MAAMC;AAArC,AACE,GAAI,AAAC\/B,gCAAM+B;AACT,uCAAA,hCAACC,0BAAMF,yFAA2BC;;AAClC,wCAAA,jCAACE,2BAAOH;;;AAEZ,6CAAA,7CAAMM;AAAN,AACE,OAAA,mGAAe,AAACjC;;AAElB,6CAAA,7CAAMkC,kGAAkBP,MAAMC;AAA9B,AACE,GAAI,AAAC\/B,gCAAM+B;AACT,uCAAA,hCAACC,0BAAMF,2EAAoBC;;AAC3B,wCAAA,jCAACE,2BAAOH;;;AAEZ,+CAAA,\/CAAMQ,sGAAoBR;AAA1B,wHACMA,rDACA,2DAAA,3DAACO,nEACD,oIAAA,7HAACF","names":["devtools.formatters.state\/*current-state*","devtools.formatters.state\/valid-current-state?","cljs.core\/some?","devtools.formatters.state\/get-default-state","js\/Error","devtools.formatters.state\/get-current-state","var_args","args__26212__auto__","len__26205__auto__","i__26206__auto__","argseq__26213__auto__","cljs.core\/IndexedSeq","devtools.formatters.state\/update-current-state!","seq41393","G__41394","cljs.core\/first","cljs.core\/next","f","args","cljs.core\/apply","devtools.formatters.state\/push-object-to-current-history!","object","cljs.core\/update","cljs.core\/conj","devtools.formatters.state\/get-current-history","devtools.formatters.state\/is-circular?","history","p1__41398#","cljs.core\/some","devtools.formatters.state\/prevent-recursion?","cljs.core\/boolean","devtools.formatters.state\/set-prevent-recursion","state","val","cljs.core\/assoc","cljs.core\/dissoc","devtools.formatters.state\/get-managed-print-level","devtools.formatters.state\/set-managed-print-level","devtools.formatters.state\/get-depth-budget","devtools.formatters.state\/set-depth-budget","devtools.formatters.state\/reset-depth-limits"]}
|
||||
|
|
@ -0,0 +1,214 @@
|
|||
(ns devtools.formatters.templating
|
||||
(:require [cljs.pprint]
|
||||
[clojure.walk :refer [prewalk]]
|
||||
[devtools.util :refer-macros [oget oset ocall oapply safe-call]]
|
||||
[devtools.protocols :refer [ITemplate IGroup ISurrogate IFormat]]
|
||||
[devtools.formatters.helpers :refer [pref cljs-value?]]
|
||||
[devtools.formatters.state :refer [get-current-state prevent-recursion?]]
|
||||
[clojure.string :as string]))
|
||||
|
||||
; -- object marking support -------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn mark-as-group! [value]
|
||||
(specify! value IGroup)
|
||||
value)
|
||||
|
||||
(defn group? [value]
|
||||
(satisfies? IGroup value))
|
||||
|
||||
(defn mark-as-template! [value]
|
||||
(specify! value ITemplate)
|
||||
value)
|
||||
|
||||
(defn template? [value]
|
||||
(satisfies? ITemplate value))
|
||||
|
||||
(defn mark-as-surrogate! [value]
|
||||
(specify! value ISurrogate)
|
||||
value)
|
||||
|
||||
(defn surrogate? [value]
|
||||
(satisfies? ISurrogate value))
|
||||
|
||||
(defn reference? [value]
|
||||
(and (group? value)
|
||||
(= (aget value 0) "object")))
|
||||
|
||||
; ---------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn make-group [& items]
|
||||
(let [group (mark-as-group! #js [])]
|
||||
(doseq [item items]
|
||||
(if (some? item)
|
||||
(if (coll? item)
|
||||
(.apply (aget group "push") group (mark-as-group! (into-array item))) ; convenience helper to splat cljs collections
|
||||
(.push group (pref item)))))
|
||||
group))
|
||||
|
||||
(defn make-template
|
||||
[tag style & children]
|
||||
(let [tag (pref tag)
|
||||
style (pref style)
|
||||
template (mark-as-template! #js [tag (if (empty? style)
|
||||
#js {}
|
||||
#js {"style" style})])]
|
||||
(doseq [child children]
|
||||
(if (some? child)
|
||||
(if (coll? child)
|
||||
(.apply (aget template "push") template (mark-as-template! (into-array (keep pref child)))) ; convenience helper to splat cljs collections
|
||||
(if-let [child-value (pref child)]
|
||||
(.push template child-value)))))
|
||||
template))
|
||||
|
||||
(defn concat-templates! [template & templates]
|
||||
(mark-as-template! (.apply (oget template "concat") template (into-array (map into-array (keep pref templates))))))
|
||||
|
||||
(defn extend-template! [template & args]
|
||||
(concat-templates! template args))
|
||||
|
||||
(defn make-surrogate
|
||||
; passing :target as body means that targt object body should be rendered using standard templates
|
||||
; see <surrogate-body> in markup.cljs
|
||||
([object] (make-surrogate object nil))
|
||||
([object header] (make-surrogate object header nil))
|
||||
([object header body] (make-surrogate object header body 0))
|
||||
([object header body start-index]
|
||||
(mark-as-surrogate! (js-obj
|
||||
"target" object
|
||||
"header" header
|
||||
"body" body
|
||||
"startIndex" (or start-index 0)))))
|
||||
|
||||
(defn get-surrogate-target [surrogate]
|
||||
{:pre [(surrogate? surrogate)]}
|
||||
(oget surrogate "target"))
|
||||
|
||||
(defn get-surrogate-header [surrogate]
|
||||
{:pre [(surrogate? surrogate)]}
|
||||
(oget surrogate "header"))
|
||||
|
||||
(defn get-surrogate-body [surrogate]
|
||||
{:pre [(surrogate? surrogate)]}
|
||||
(oget surrogate "body"))
|
||||
|
||||
(defn get-surrogate-start-index [surrogate]
|
||||
{:pre [(surrogate? surrogate)]}
|
||||
(oget surrogate "startIndex"))
|
||||
|
||||
(defn make-reference [object & [state-override-fn]]
|
||||
{:pre [(or (nil? state-override-fn) (fn? state-override-fn))]}
|
||||
(if (nil? object)
|
||||
; this code is duplicated in markup.cljs <nil>
|
||||
(make-template :span :nil-style :nil-label)
|
||||
(let [sub-state (if (some? state-override-fn)
|
||||
(state-override-fn (get-current-state))
|
||||
(get-current-state))]
|
||||
(make-group "object" #js {"object" object
|
||||
"config" sub-state}))))
|
||||
|
||||
; -- JSON ML support --------------------------------------------------------------------------------------------------------
|
||||
|
||||
; a renderer from hiccup-like data markup to json-ml
|
||||
;
|
||||
; [[tag style] child1 child2 ...] -> #js [tag #js {"style" ...} child1 child2 ...]
|
||||
;
|
||||
|
||||
(declare render-json-ml*)
|
||||
|
||||
(def ^:dynamic *current-render-stack* [])
|
||||
(def ^:dynamic *current-render-path* [])
|
||||
|
||||
(defn pprint-str [markup]
|
||||
(with-out-str
|
||||
(binding [*print-level* 300]
|
||||
(cljs.pprint/pprint markup))))
|
||||
|
||||
(defn print-preview [markup]
|
||||
(binding [*print-level* 1]
|
||||
(pr-str markup)))
|
||||
|
||||
(defn add-stack-separators [stack]
|
||||
(interpose "-------------" stack))
|
||||
|
||||
(defn replace-fns-with-markers [stack]
|
||||
(let [f (fn [v]
|
||||
(if (fn? v)
|
||||
"##fn##"
|
||||
v))]
|
||||
(prewalk f stack)))
|
||||
|
||||
(defn pprint-render-calls [stack]
|
||||
(map pprint-str stack))
|
||||
|
||||
(defn pprint-render-stack [stack]
|
||||
(string/join "\n" (-> stack
|
||||
reverse
|
||||
replace-fns-with-markers
|
||||
pprint-render-calls
|
||||
add-stack-separators)))
|
||||
|
||||
(defn pprint-render-path [path]
|
||||
(pprint-str path))
|
||||
|
||||
(defn assert-markup-error [msg]
|
||||
(assert false (str msg "\n"
|
||||
"Render path: " (pprint-render-path *current-render-path*) "\n"
|
||||
"Render stack:\n"
|
||||
(pprint-render-stack *current-render-stack*))))
|
||||
|
||||
(defn surrogate-markup? [markup]
|
||||
(and (sequential? markup) (= (first markup) "surrogate")))
|
||||
|
||||
(defn render-special [name args]
|
||||
(case name
|
||||
"surrogate" (let [obj (first args)
|
||||
converted-args (map render-json-ml* (rest args))]
|
||||
(apply make-surrogate (concat [obj] converted-args)))
|
||||
"reference" (let [obj (first args)
|
||||
converted-obj (if (surrogate-markup? obj) (render-json-ml* obj) obj)]
|
||||
(apply make-reference (concat [converted-obj] (rest args))))
|
||||
(assert-markup-error (str "no matching special tag name: '" name "'"))))
|
||||
|
||||
(defn emptyish? [v]
|
||||
(if (or (seqable? v) (array? v) (string? v))
|
||||
(empty? v)
|
||||
false))
|
||||
|
||||
(defn render-subtree [tag children]
|
||||
(let [[html-tag style] tag]
|
||||
(apply make-template html-tag style (map render-json-ml* (remove emptyish? (map pref children))))))
|
||||
|
||||
(defn render-json-ml* [markup]
|
||||
(if-not (sequential? markup)
|
||||
markup
|
||||
(binding [*current-render-path* (conj *current-render-path* (first markup))]
|
||||
(let [tag (pref (first markup))]
|
||||
(cond
|
||||
(string? tag) (render-special tag (rest markup))
|
||||
(sequential? tag) (render-subtree tag (rest markup))
|
||||
:else (assert-markup-error (str "invalid json-ml markup at " (print-preview markup) ":")))))))
|
||||
|
||||
(defn render-json-ml [markup]
|
||||
(binding [*current-render-stack* (conj *current-render-stack* markup)
|
||||
*current-render-path* (conj *current-render-path* "<render-json-ml>")]
|
||||
(render-json-ml* markup)))
|
||||
|
||||
; -- template rendering -----------------------------------------------------------------------------------------------------
|
||||
|
||||
(defn ^:dynamic assert-failed-markup-rendering [initial-value value]
|
||||
(assert false (str "result of markup rendering must be a template,\n"
|
||||
"resolved to " (pprint-str value)
|
||||
"initial value: " (pprint-str initial-value))))
|
||||
|
||||
(defn render-markup* [initial-value value]
|
||||
(cond
|
||||
(fn? value) (recur initial-value (value))
|
||||
(keyword? value) (recur initial-value (pref value))
|
||||
(sequential? value) (recur initial-value (render-json-ml value))
|
||||
(template? value) value
|
||||
(surrogate? value) value
|
||||
(reference? value) value
|
||||
:else (assert-failed-markup-rendering initial-value value)))
|
||||
|
||||
(defn render-markup [value]
|
||||
(render-markup* value value))
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,681 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('devtools.formatters.templating');
|
||||
goog.require('cljs.core');
|
||||
goog.require('cljs.pprint');
|
||||
goog.require('clojure.walk');
|
||||
goog.require('devtools.util');
|
||||
goog.require('devtools.protocols');
|
||||
goog.require('devtools.formatters.helpers');
|
||||
goog.require('devtools.formatters.state');
|
||||
goog.require('clojure.string');
|
||||
devtools.formatters.templating.mark_as_group_BANG_ = (function devtools$formatters$templating$mark_as_group_BANG_(value){
|
||||
var x41457_41458 = value;
|
||||
x41457_41458.devtools$protocols$IGroup$ = true;
|
||||
|
||||
|
||||
return value;
|
||||
});
|
||||
devtools.formatters.templating.group_QMARK_ = (function devtools$formatters$templating$group_QMARK_(value){
|
||||
if(!((value == null))){
|
||||
if((false) || (value.devtools$protocols$IGroup$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IGroup,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IGroup,value);
|
||||
}
|
||||
});
|
||||
devtools.formatters.templating.mark_as_template_BANG_ = (function devtools$formatters$templating$mark_as_template_BANG_(value){
|
||||
var x41462_41463 = value;
|
||||
x41462_41463.devtools$protocols$ITemplate$ = true;
|
||||
|
||||
|
||||
return value;
|
||||
});
|
||||
devtools.formatters.templating.template_QMARK_ = (function devtools$formatters$templating$template_QMARK_(value){
|
||||
if(!((value == null))){
|
||||
if((false) || (value.devtools$protocols$ITemplate$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.ITemplate,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.ITemplate,value);
|
||||
}
|
||||
});
|
||||
devtools.formatters.templating.mark_as_surrogate_BANG_ = (function devtools$formatters$templating$mark_as_surrogate_BANG_(value){
|
||||
var x41467_41468 = value;
|
||||
x41467_41468.devtools$protocols$ISurrogate$ = true;
|
||||
|
||||
|
||||
return value;
|
||||
});
|
||||
devtools.formatters.templating.surrogate_QMARK_ = (function devtools$formatters$templating$surrogate_QMARK_(value){
|
||||
if(!((value == null))){
|
||||
if((false) || (value.devtools$protocols$ISurrogate$)){
|
||||
return true;
|
||||
} else {
|
||||
if((!value.cljs$lang$protocol_mask$partition$)){
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.ISurrogate,value);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.ISurrogate,value);
|
||||
}
|
||||
});
|
||||
devtools.formatters.templating.reference_QMARK_ = (function devtools$formatters$templating$reference_QMARK_(value){
|
||||
var and__25118__auto__ = devtools.formatters.templating.group_QMARK_.call(null,value);
|
||||
if(cljs.core.truth_(and__25118__auto__)){
|
||||
return cljs.core._EQ_.call(null,(value[(0)]),"object");
|
||||
} else {
|
||||
return and__25118__auto__;
|
||||
}
|
||||
});
|
||||
devtools.formatters.templating.make_group = (function devtools$formatters$templating$make_group(var_args){
|
||||
var args__26212__auto__ = [];
|
||||
var len__26205__auto___41476 = arguments.length;
|
||||
var i__26206__auto___41477 = (0);
|
||||
while(true){
|
||||
if((i__26206__auto___41477 < len__26205__auto___41476)){
|
||||
args__26212__auto__.push((arguments[i__26206__auto___41477]));
|
||||
|
||||
var G__41478 = (i__26206__auto___41477 + (1));
|
||||
i__26206__auto___41477 = G__41478;
|
||||
continue;
|
||||
} else {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
var argseq__26213__auto__ = ((((0) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((0)),(0),null)):null);
|
||||
return devtools.formatters.templating.make_group.cljs$core$IFn$_invoke$arity$variadic(argseq__26213__auto__);
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_group.cljs$core$IFn$_invoke$arity$variadic = (function (items){
|
||||
var group = devtools.formatters.templating.mark_as_group_BANG_.call(null,[]);
|
||||
var seq__41472_41479 = cljs.core.seq.call(null,items);
|
||||
var chunk__41473_41480 = null;
|
||||
var count__41474_41481 = (0);
|
||||
var i__41475_41482 = (0);
|
||||
while(true){
|
||||
if((i__41475_41482 < count__41474_41481)){
|
||||
var item_41483 = cljs.core._nth.call(null,chunk__41473_41480,i__41475_41482);
|
||||
if(cljs.core.some_QMARK_.call(null,item_41483)){
|
||||
if(cljs.core.coll_QMARK_.call(null,item_41483)){
|
||||
(group["push"]).apply(group,devtools.formatters.templating.mark_as_group_BANG_.call(null,cljs.core.into_array.call(null,item_41483)));
|
||||
} else {
|
||||
group.push(devtools.formatters.helpers.pref.call(null,item_41483));
|
||||
}
|
||||
} else {
|
||||
}
|
||||
|
||||
var G__41484 = seq__41472_41479;
|
||||
var G__41485 = chunk__41473_41480;
|
||||
var G__41486 = count__41474_41481;
|
||||
var G__41487 = (i__41475_41482 + (1));
|
||||
seq__41472_41479 = G__41484;
|
||||
chunk__41473_41480 = G__41485;
|
||||
count__41474_41481 = G__41486;
|
||||
i__41475_41482 = G__41487;
|
||||
continue;
|
||||
} else {
|
||||
var temp__4657__auto___41488 = cljs.core.seq.call(null,seq__41472_41479);
|
||||
if(temp__4657__auto___41488){
|
||||
var seq__41472_41489__$1 = temp__4657__auto___41488;
|
||||
if(cljs.core.chunked_seq_QMARK_.call(null,seq__41472_41489__$1)){
|
||||
var c__25941__auto___41490 = cljs.core.chunk_first.call(null,seq__41472_41489__$1);
|
||||
var G__41491 = cljs.core.chunk_rest.call(null,seq__41472_41489__$1);
|
||||
var G__41492 = c__25941__auto___41490;
|
||||
var G__41493 = cljs.core.count.call(null,c__25941__auto___41490);
|
||||
var G__41494 = (0);
|
||||
seq__41472_41479 = G__41491;
|
||||
chunk__41473_41480 = G__41492;
|
||||
count__41474_41481 = G__41493;
|
||||
i__41475_41482 = G__41494;
|
||||
continue;
|
||||
} else {
|
||||
var item_41495 = cljs.core.first.call(null,seq__41472_41489__$1);
|
||||
if(cljs.core.some_QMARK_.call(null,item_41495)){
|
||||
if(cljs.core.coll_QMARK_.call(null,item_41495)){
|
||||
(group["push"]).apply(group,devtools.formatters.templating.mark_as_group_BANG_.call(null,cljs.core.into_array.call(null,item_41495)));
|
||||
} else {
|
||||
group.push(devtools.formatters.helpers.pref.call(null,item_41495));
|
||||
}
|
||||
} else {
|
||||
}
|
||||
|
||||
var G__41496 = cljs.core.next.call(null,seq__41472_41489__$1);
|
||||
var G__41497 = null;
|
||||
var G__41498 = (0);
|
||||
var G__41499 = (0);
|
||||
seq__41472_41479 = G__41496;
|
||||
chunk__41473_41480 = G__41497;
|
||||
count__41474_41481 = G__41498;
|
||||
i__41475_41482 = G__41499;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return group;
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_group.cljs$lang$maxFixedArity = (0);
|
||||
|
||||
devtools.formatters.templating.make_group.cljs$lang$applyTo = (function (seq41471){
|
||||
return devtools.formatters.templating.make_group.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq41471));
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_template = (function devtools$formatters$templating$make_template(var_args){
|
||||
var args__26212__auto__ = [];
|
||||
var len__26205__auto___41507 = arguments.length;
|
||||
var i__26206__auto___41508 = (0);
|
||||
while(true){
|
||||
if((i__26206__auto___41508 < len__26205__auto___41507)){
|
||||
args__26212__auto__.push((arguments[i__26206__auto___41508]));
|
||||
|
||||
var G__41509 = (i__26206__auto___41508 + (1));
|
||||
i__26206__auto___41508 = G__41509;
|
||||
continue;
|
||||
} else {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
var argseq__26213__auto__ = ((((2) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((2)),(0),null)):null);
|
||||
return devtools.formatters.templating.make_template.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),argseq__26213__auto__);
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_template.cljs$core$IFn$_invoke$arity$variadic = (function (tag,style,children){
|
||||
var tag__$1 = devtools.formatters.helpers.pref.call(null,tag);
|
||||
var style__$1 = devtools.formatters.helpers.pref.call(null,style);
|
||||
var template = devtools.formatters.templating.mark_as_template_BANG_.call(null,[tag__$1,((cljs.core.empty_QMARK_.call(null,style__$1))?({}):({"style": style__$1}))]);
|
||||
var seq__41503_41510 = cljs.core.seq.call(null,children);
|
||||
var chunk__41504_41511 = null;
|
||||
var count__41505_41512 = (0);
|
||||
var i__41506_41513 = (0);
|
||||
while(true){
|
||||
if((i__41506_41513 < count__41505_41512)){
|
||||
var child_41514 = cljs.core._nth.call(null,chunk__41504_41511,i__41506_41513);
|
||||
if(cljs.core.some_QMARK_.call(null,child_41514)){
|
||||
if(cljs.core.coll_QMARK_.call(null,child_41514)){
|
||||
(template["push"]).apply(template,devtools.formatters.templating.mark_as_template_BANG_.call(null,cljs.core.into_array.call(null,cljs.core.keep.call(null,devtools.formatters.helpers.pref,child_41514))));
|
||||
} else {
|
||||
var temp__4655__auto___41515 = devtools.formatters.helpers.pref.call(null,child_41514);
|
||||
if(cljs.core.truth_(temp__4655__auto___41515)){
|
||||
var child_value_41516 = temp__4655__auto___41515;
|
||||
template.push(child_value_41516);
|
||||
} else {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
}
|
||||
|
||||
var G__41517 = seq__41503_41510;
|
||||
var G__41518 = chunk__41504_41511;
|
||||
var G__41519 = count__41505_41512;
|
||||
var G__41520 = (i__41506_41513 + (1));
|
||||
seq__41503_41510 = G__41517;
|
||||
chunk__41504_41511 = G__41518;
|
||||
count__41505_41512 = G__41519;
|
||||
i__41506_41513 = G__41520;
|
||||
continue;
|
||||
} else {
|
||||
var temp__4657__auto___41521 = cljs.core.seq.call(null,seq__41503_41510);
|
||||
if(temp__4657__auto___41521){
|
||||
var seq__41503_41522__$1 = temp__4657__auto___41521;
|
||||
if(cljs.core.chunked_seq_QMARK_.call(null,seq__41503_41522__$1)){
|
||||
var c__25941__auto___41523 = cljs.core.chunk_first.call(null,seq__41503_41522__$1);
|
||||
var G__41524 = cljs.core.chunk_rest.call(null,seq__41503_41522__$1);
|
||||
var G__41525 = c__25941__auto___41523;
|
||||
var G__41526 = cljs.core.count.call(null,c__25941__auto___41523);
|
||||
var G__41527 = (0);
|
||||
seq__41503_41510 = G__41524;
|
||||
chunk__41504_41511 = G__41525;
|
||||
count__41505_41512 = G__41526;
|
||||
i__41506_41513 = G__41527;
|
||||
continue;
|
||||
} else {
|
||||
var child_41528 = cljs.core.first.call(null,seq__41503_41522__$1);
|
||||
if(cljs.core.some_QMARK_.call(null,child_41528)){
|
||||
if(cljs.core.coll_QMARK_.call(null,child_41528)){
|
||||
(template["push"]).apply(template,devtools.formatters.templating.mark_as_template_BANG_.call(null,cljs.core.into_array.call(null,cljs.core.keep.call(null,devtools.formatters.helpers.pref,child_41528))));
|
||||
} else {
|
||||
var temp__4655__auto___41529 = devtools.formatters.helpers.pref.call(null,child_41528);
|
||||
if(cljs.core.truth_(temp__4655__auto___41529)){
|
||||
var child_value_41530 = temp__4655__auto___41529;
|
||||
template.push(child_value_41530);
|
||||
} else {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
}
|
||||
|
||||
var G__41531 = cljs.core.next.call(null,seq__41503_41522__$1);
|
||||
var G__41532 = null;
|
||||
var G__41533 = (0);
|
||||
var G__41534 = (0);
|
||||
seq__41503_41510 = G__41531;
|
||||
chunk__41504_41511 = G__41532;
|
||||
count__41505_41512 = G__41533;
|
||||
i__41506_41513 = G__41534;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return template;
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_template.cljs$lang$maxFixedArity = (2);
|
||||
|
||||
devtools.formatters.templating.make_template.cljs$lang$applyTo = (function (seq41500){
|
||||
var G__41501 = cljs.core.first.call(null,seq41500);
|
||||
var seq41500__$1 = cljs.core.next.call(null,seq41500);
|
||||
var G__41502 = cljs.core.first.call(null,seq41500__$1);
|
||||
var seq41500__$2 = cljs.core.next.call(null,seq41500__$1);
|
||||
return devtools.formatters.templating.make_template.cljs$core$IFn$_invoke$arity$variadic(G__41501,G__41502,seq41500__$2);
|
||||
});
|
||||
|
||||
devtools.formatters.templating.concat_templates_BANG_ = (function devtools$formatters$templating$concat_templates_BANG_(var_args){
|
||||
var args__26212__auto__ = [];
|
||||
var len__26205__auto___41537 = arguments.length;
|
||||
var i__26206__auto___41538 = (0);
|
||||
while(true){
|
||||
if((i__26206__auto___41538 < len__26205__auto___41537)){
|
||||
args__26212__auto__.push((arguments[i__26206__auto___41538]));
|
||||
|
||||
var G__41539 = (i__26206__auto___41538 + (1));
|
||||
i__26206__auto___41538 = G__41539;
|
||||
continue;
|
||||
} else {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
var argseq__26213__auto__ = ((((1) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((1)),(0),null)):null);
|
||||
return devtools.formatters.templating.concat_templates_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__26213__auto__);
|
||||
});
|
||||
|
||||
devtools.formatters.templating.concat_templates_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (template,templates){
|
||||
return devtools.formatters.templating.mark_as_template_BANG_.call(null,goog.object.get(template,"concat").apply(template,cljs.core.into_array.call(null,cljs.core.map.call(null,cljs.core.into_array,cljs.core.keep.call(null,devtools.formatters.helpers.pref,templates)))));
|
||||
});
|
||||
|
||||
devtools.formatters.templating.concat_templates_BANG_.cljs$lang$maxFixedArity = (1);
|
||||
|
||||
devtools.formatters.templating.concat_templates_BANG_.cljs$lang$applyTo = (function (seq41535){
|
||||
var G__41536 = cljs.core.first.call(null,seq41535);
|
||||
var seq41535__$1 = cljs.core.next.call(null,seq41535);
|
||||
return devtools.formatters.templating.concat_templates_BANG_.cljs$core$IFn$_invoke$arity$variadic(G__41536,seq41535__$1);
|
||||
});
|
||||
|
||||
devtools.formatters.templating.extend_template_BANG_ = (function devtools$formatters$templating$extend_template_BANG_(var_args){
|
||||
var args__26212__auto__ = [];
|
||||
var len__26205__auto___41542 = arguments.length;
|
||||
var i__26206__auto___41543 = (0);
|
||||
while(true){
|
||||
if((i__26206__auto___41543 < len__26205__auto___41542)){
|
||||
args__26212__auto__.push((arguments[i__26206__auto___41543]));
|
||||
|
||||
var G__41544 = (i__26206__auto___41543 + (1));
|
||||
i__26206__auto___41543 = G__41544;
|
||||
continue;
|
||||
} else {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
var argseq__26213__auto__ = ((((1) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((1)),(0),null)):null);
|
||||
return devtools.formatters.templating.extend_template_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__26213__auto__);
|
||||
});
|
||||
|
||||
devtools.formatters.templating.extend_template_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (template,args){
|
||||
return devtools.formatters.templating.concat_templates_BANG_.call(null,template,args);
|
||||
});
|
||||
|
||||
devtools.formatters.templating.extend_template_BANG_.cljs$lang$maxFixedArity = (1);
|
||||
|
||||
devtools.formatters.templating.extend_template_BANG_.cljs$lang$applyTo = (function (seq41540){
|
||||
var G__41541 = cljs.core.first.call(null,seq41540);
|
||||
var seq41540__$1 = cljs.core.next.call(null,seq41540);
|
||||
return devtools.formatters.templating.extend_template_BANG_.cljs$core$IFn$_invoke$arity$variadic(G__41541,seq41540__$1);
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_surrogate = (function devtools$formatters$templating$make_surrogate(var_args){
|
||||
var args41545 = [];
|
||||
var len__26205__auto___41550 = arguments.length;
|
||||
var i__26206__auto___41551 = (0);
|
||||
while(true){
|
||||
if((i__26206__auto___41551 < len__26205__auto___41550)){
|
||||
args41545.push((arguments[i__26206__auto___41551]));
|
||||
|
||||
var G__41552 = (i__26206__auto___41551 + (1));
|
||||
i__26206__auto___41551 = G__41552;
|
||||
continue;
|
||||
} else {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
var G__41547 = args41545.length;
|
||||
switch (G__41547) {
|
||||
case 1:
|
||||
return devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));
|
||||
|
||||
break;
|
||||
case 2:
|
||||
return devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));
|
||||
|
||||
break;
|
||||
case 3:
|
||||
return devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));
|
||||
|
||||
break;
|
||||
case 4:
|
||||
return devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$4((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]));
|
||||
|
||||
break;
|
||||
default:
|
||||
throw (new Error([cljs.core.str("Invalid arity: "),cljs.core.str(args41545.length)].join('')));
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$1 = (function (object){
|
||||
return devtools.formatters.templating.make_surrogate.call(null,object,null);
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$2 = (function (object,header){
|
||||
return devtools.formatters.templating.make_surrogate.call(null,object,header,null);
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$3 = (function (object,header,body){
|
||||
return devtools.formatters.templating.make_surrogate.call(null,object,header,body,(0));
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$4 = (function (object,header,body,start_index){
|
||||
return devtools.formatters.templating.mark_as_surrogate_BANG_.call(null,(function (){var obj41549 = {"target":object,"header":header,"body":body,"startIndex":(function (){var or__25130__auto__ = start_index;
|
||||
if(cljs.core.truth_(or__25130__auto__)){
|
||||
return or__25130__auto__;
|
||||
} else {
|
||||
return (0);
|
||||
}
|
||||
})()};
|
||||
return obj41549;
|
||||
})());
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_surrogate.cljs$lang$maxFixedArity = 4;
|
||||
|
||||
devtools.formatters.templating.get_surrogate_target = (function devtools$formatters$templating$get_surrogate_target(surrogate){
|
||||
if(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate))){
|
||||
} else {
|
||||
throw (new Error("Assert failed: (surrogate? surrogate)"));
|
||||
}
|
||||
|
||||
return goog.object.get(surrogate,"target");
|
||||
});
|
||||
devtools.formatters.templating.get_surrogate_header = (function devtools$formatters$templating$get_surrogate_header(surrogate){
|
||||
if(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate))){
|
||||
} else {
|
||||
throw (new Error("Assert failed: (surrogate? surrogate)"));
|
||||
}
|
||||
|
||||
return goog.object.get(surrogate,"header");
|
||||
});
|
||||
devtools.formatters.templating.get_surrogate_body = (function devtools$formatters$templating$get_surrogate_body(surrogate){
|
||||
if(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate))){
|
||||
} else {
|
||||
throw (new Error("Assert failed: (surrogate? surrogate)"));
|
||||
}
|
||||
|
||||
return goog.object.get(surrogate,"body");
|
||||
});
|
||||
devtools.formatters.templating.get_surrogate_start_index = (function devtools$formatters$templating$get_surrogate_start_index(surrogate){
|
||||
if(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate))){
|
||||
} else {
|
||||
throw (new Error("Assert failed: (surrogate? surrogate)"));
|
||||
}
|
||||
|
||||
return goog.object.get(surrogate,"startIndex");
|
||||
});
|
||||
devtools.formatters.templating.make_reference = (function devtools$formatters$templating$make_reference(var_args){
|
||||
var args__26212__auto__ = [];
|
||||
var len__26205__auto___41560 = arguments.length;
|
||||
var i__26206__auto___41561 = (0);
|
||||
while(true){
|
||||
if((i__26206__auto___41561 < len__26205__auto___41560)){
|
||||
args__26212__auto__.push((arguments[i__26206__auto___41561]));
|
||||
|
||||
var G__41562 = (i__26206__auto___41561 + (1));
|
||||
i__26206__auto___41561 = G__41562;
|
||||
continue;
|
||||
} else {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
var argseq__26213__auto__ = ((((1) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((1)),(0),null)):null);
|
||||
return devtools.formatters.templating.make_reference.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__26213__auto__);
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_reference.cljs$core$IFn$_invoke$arity$variadic = (function (object,p__41556){
|
||||
var vec__41557 = p__41556;
|
||||
var state_override_fn = cljs.core.nth.call(null,vec__41557,(0),null);
|
||||
if(((state_override_fn == null)) || (cljs.core.fn_QMARK_.call(null,state_override_fn))){
|
||||
} else {
|
||||
throw (new Error("Assert failed: (or (nil? state-override-fn) (fn? state-override-fn))"));
|
||||
}
|
||||
|
||||
if((object == null)){
|
||||
return devtools.formatters.templating.make_template.call(null,new cljs.core.Keyword(null,"span","span",1394872991),new cljs.core.Keyword(null,"nil-style","nil-style",-1505044832),new cljs.core.Keyword(null,"nil-label","nil-label",-587789203));
|
||||
} else {
|
||||
var sub_state = ((cljs.core.some_QMARK_.call(null,state_override_fn))?state_override_fn.call(null,devtools.formatters.state.get_current_state.call(null)):devtools.formatters.state.get_current_state.call(null));
|
||||
return devtools.formatters.templating.make_group.call(null,"object",({"object": object, "config": sub_state}));
|
||||
}
|
||||
});
|
||||
|
||||
devtools.formatters.templating.make_reference.cljs$lang$maxFixedArity = (1);
|
||||
|
||||
devtools.formatters.templating.make_reference.cljs$lang$applyTo = (function (seq41554){
|
||||
var G__41555 = cljs.core.first.call(null,seq41554);
|
||||
var seq41554__$1 = cljs.core.next.call(null,seq41554);
|
||||
return devtools.formatters.templating.make_reference.cljs$core$IFn$_invoke$arity$variadic(G__41555,seq41554__$1);
|
||||
});
|
||||
|
||||
devtools.formatters.templating._STAR_current_render_stack_STAR_ = cljs.core.PersistentVector.EMPTY;
|
||||
devtools.formatters.templating._STAR_current_render_path_STAR_ = cljs.core.PersistentVector.EMPTY;
|
||||
devtools.formatters.templating.pprint_str = (function devtools$formatters$templating$pprint_str(markup){
|
||||
var sb__26116__auto__ = (new goog.string.StringBuffer());
|
||||
var _STAR_print_newline_STAR_41566_41569 = cljs.core._STAR_print_newline_STAR_;
|
||||
var _STAR_print_fn_STAR_41567_41570 = cljs.core._STAR_print_fn_STAR_;
|
||||
cljs.core._STAR_print_newline_STAR_ = true;
|
||||
|
||||
cljs.core._STAR_print_fn_STAR_ = ((function (_STAR_print_newline_STAR_41566_41569,_STAR_print_fn_STAR_41567_41570,sb__26116__auto__){
|
||||
return (function (x__26117__auto__){
|
||||
return sb__26116__auto__.append(x__26117__auto__);
|
||||
});})(_STAR_print_newline_STAR_41566_41569,_STAR_print_fn_STAR_41567_41570,sb__26116__auto__))
|
||||
;
|
||||
|
||||
try{var _STAR_print_level_STAR_41568_41571 = cljs.core._STAR_print_level_STAR_;
|
||||
cljs.core._STAR_print_level_STAR_ = (300);
|
||||
|
||||
try{cljs.pprint.pprint.call(null,markup);
|
||||
}finally {cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR_41568_41571;
|
||||
}}finally {cljs.core._STAR_print_fn_STAR_ = _STAR_print_fn_STAR_41567_41570;
|
||||
|
||||
cljs.core._STAR_print_newline_STAR_ = _STAR_print_newline_STAR_41566_41569;
|
||||
}
|
||||
return [cljs.core.str(sb__26116__auto__)].join('');
|
||||
});
|
||||
devtools.formatters.templating.print_preview = (function devtools$formatters$templating$print_preview(markup){
|
||||
var _STAR_print_level_STAR_41573 = cljs.core._STAR_print_level_STAR_;
|
||||
cljs.core._STAR_print_level_STAR_ = (1);
|
||||
|
||||
try{return cljs.core.pr_str.call(null,markup);
|
||||
}finally {cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR_41573;
|
||||
}});
|
||||
devtools.formatters.templating.add_stack_separators = (function devtools$formatters$templating$add_stack_separators(stack){
|
||||
return cljs.core.interpose.call(null,"-------------",stack);
|
||||
});
|
||||
devtools.formatters.templating.replace_fns_with_markers = (function devtools$formatters$templating$replace_fns_with_markers(stack){
|
||||
var f = (function (v){
|
||||
if(cljs.core.fn_QMARK_.call(null,v)){
|
||||
return "##fn##";
|
||||
} else {
|
||||
return v;
|
||||
}
|
||||
});
|
||||
return clojure.walk.prewalk.call(null,f,stack);
|
||||
});
|
||||
devtools.formatters.templating.pprint_render_calls = (function devtools$formatters$templating$pprint_render_calls(stack){
|
||||
return cljs.core.map.call(null,devtools.formatters.templating.pprint_str,stack);
|
||||
});
|
||||
devtools.formatters.templating.pprint_render_stack = (function devtools$formatters$templating$pprint_render_stack(stack){
|
||||
return clojure.string.join.call(null,"\n",devtools.formatters.templating.add_stack_separators.call(null,devtools.formatters.templating.pprint_render_calls.call(null,devtools.formatters.templating.replace_fns_with_markers.call(null,cljs.core.reverse.call(null,stack)))));
|
||||
});
|
||||
devtools.formatters.templating.pprint_render_path = (function devtools$formatters$templating$pprint_render_path(path){
|
||||
return devtools.formatters.templating.pprint_str.call(null,path);
|
||||
});
|
||||
devtools.formatters.templating.assert_markup_error = (function devtools$formatters$templating$assert_markup_error(msg){
|
||||
throw (new Error([cljs.core.str("Assert failed: "),cljs.core.str([cljs.core.str(msg),cljs.core.str("\n"),cljs.core.str("Render path: "),cljs.core.str(devtools.formatters.templating.pprint_render_path.call(null,devtools.formatters.templating._STAR_current_render_path_STAR_)),cljs.core.str("\n"),cljs.core.str("Render stack:\n"),cljs.core.str(devtools.formatters.templating.pprint_render_stack.call(null,devtools.formatters.templating._STAR_current_render_stack_STAR_))].join('')),cljs.core.str("\n"),cljs.core.str("false")].join('')));
|
||||
|
||||
});
|
||||
devtools.formatters.templating.surrogate_markup_QMARK_ = (function devtools$formatters$templating$surrogate_markup_QMARK_(markup){
|
||||
return (cljs.core.sequential_QMARK_.call(null,markup)) && (cljs.core._EQ_.call(null,cljs.core.first.call(null,markup),"surrogate"));
|
||||
});
|
||||
devtools.formatters.templating.render_special = (function devtools$formatters$templating$render_special(name,args){
|
||||
var G__41575 = name;
|
||||
switch (G__41575) {
|
||||
case "surrogate":
|
||||
var obj = cljs.core.first.call(null,args);
|
||||
var converted_args = cljs.core.map.call(null,devtools.formatters.templating.render_json_ml_STAR_,cljs.core.rest.call(null,args));
|
||||
return cljs.core.apply.call(null,devtools.formatters.templating.make_surrogate,cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [obj], null),converted_args));
|
||||
|
||||
break;
|
||||
case "reference":
|
||||
var obj = cljs.core.first.call(null,args);
|
||||
var converted_obj = (cljs.core.truth_(devtools.formatters.templating.surrogate_markup_QMARK_.call(null,obj))?devtools.formatters.templating.render_json_ml_STAR_.call(null,obj):obj);
|
||||
return cljs.core.apply.call(null,devtools.formatters.templating.make_reference,cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [converted_obj], null),cljs.core.rest.call(null,args)));
|
||||
|
||||
break;
|
||||
default:
|
||||
return devtools.formatters.templating.assert_markup_error.call(null,[cljs.core.str("no matching special tag name: '"),cljs.core.str(name),cljs.core.str("'")].join(''));
|
||||
|
||||
}
|
||||
});
|
||||
devtools.formatters.templating.emptyish_QMARK_ = (function devtools$formatters$templating$emptyish_QMARK_(v){
|
||||
if((cljs.core.seqable_QMARK_.call(null,v)) || (cljs.core.array_QMARK_.call(null,v)) || (typeof v === 'string')){
|
||||
return cljs.core.empty_QMARK_.call(null,v);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
devtools.formatters.templating.render_subtree = (function devtools$formatters$templating$render_subtree(tag,children){
|
||||
var vec__41580 = tag;
|
||||
var html_tag = cljs.core.nth.call(null,vec__41580,(0),null);
|
||||
var style = cljs.core.nth.call(null,vec__41580,(1),null);
|
||||
return cljs.core.apply.call(null,devtools.formatters.templating.make_template,html_tag,style,cljs.core.map.call(null,devtools.formatters.templating.render_json_ml_STAR_,cljs.core.remove.call(null,devtools.formatters.templating.emptyish_QMARK_,cljs.core.map.call(null,devtools.formatters.helpers.pref,children))));
|
||||
});
|
||||
devtools.formatters.templating.render_json_ml_STAR_ = (function devtools$formatters$templating$render_json_ml_STAR_(markup){
|
||||
if(!(cljs.core.sequential_QMARK_.call(null,markup))){
|
||||
return markup;
|
||||
} else {
|
||||
var _STAR_current_render_path_STAR_41584 = devtools.formatters.templating._STAR_current_render_path_STAR_;
|
||||
devtools.formatters.templating._STAR_current_render_path_STAR_ = cljs.core.conj.call(null,devtools.formatters.templating._STAR_current_render_path_STAR_,cljs.core.first.call(null,markup));
|
||||
|
||||
try{var tag = devtools.formatters.helpers.pref.call(null,cljs.core.first.call(null,markup));
|
||||
if(typeof tag === 'string'){
|
||||
return devtools.formatters.templating.render_special.call(null,tag,cljs.core.rest.call(null,markup));
|
||||
} else {
|
||||
if(cljs.core.sequential_QMARK_.call(null,tag)){
|
||||
return devtools.formatters.templating.render_subtree.call(null,tag,cljs.core.rest.call(null,markup));
|
||||
} else {
|
||||
return devtools.formatters.templating.assert_markup_error.call(null,[cljs.core.str("invalid json-ml markup at "),cljs.core.str(devtools.formatters.templating.print_preview.call(null,markup)),cljs.core.str(":")].join(''));
|
||||
|
||||
}
|
||||
}
|
||||
}finally {devtools.formatters.templating._STAR_current_render_path_STAR_ = _STAR_current_render_path_STAR_41584;
|
||||
}}
|
||||
});
|
||||
devtools.formatters.templating.render_json_ml = (function devtools$formatters$templating$render_json_ml(markup){
|
||||
var _STAR_current_render_stack_STAR_41587 = devtools.formatters.templating._STAR_current_render_stack_STAR_;
|
||||
var _STAR_current_render_path_STAR_41588 = devtools.formatters.templating._STAR_current_render_path_STAR_;
|
||||
devtools.formatters.templating._STAR_current_render_stack_STAR_ = cljs.core.conj.call(null,devtools.formatters.templating._STAR_current_render_stack_STAR_,markup);
|
||||
|
||||
devtools.formatters.templating._STAR_current_render_path_STAR_ = cljs.core.conj.call(null,devtools.formatters.templating._STAR_current_render_path_STAR_,"<render-json-ml>");
|
||||
|
||||
try{return devtools.formatters.templating.render_json_ml_STAR_.call(null,markup);
|
||||
}finally {devtools.formatters.templating._STAR_current_render_path_STAR_ = _STAR_current_render_path_STAR_41588;
|
||||
|
||||
devtools.formatters.templating._STAR_current_render_stack_STAR_ = _STAR_current_render_stack_STAR_41587;
|
||||
}});
|
||||
devtools.formatters.templating.assert_failed_markup_rendering = (function devtools$formatters$templating$assert_failed_markup_rendering(initial_value,value){
|
||||
throw (new Error([cljs.core.str("Assert failed: "),cljs.core.str([cljs.core.str("result of markup rendering must be a template,\n"),cljs.core.str("resolved to "),cljs.core.str(devtools.formatters.templating.pprint_str.call(null,value)),cljs.core.str("initial value: "),cljs.core.str(devtools.formatters.templating.pprint_str.call(null,initial_value))].join('')),cljs.core.str("\n"),cljs.core.str("false")].join('')));
|
||||
|
||||
});
|
||||
devtools.formatters.templating.render_markup_STAR_ = (function devtools$formatters$templating$render_markup_STAR_(initial_value,value){
|
||||
while(true){
|
||||
if(cljs.core.fn_QMARK_.call(null,value)){
|
||||
var G__41589 = initial_value;
|
||||
var G__41590 = value.call(null);
|
||||
initial_value = G__41589;
|
||||
value = G__41590;
|
||||
continue;
|
||||
} else {
|
||||
if((value instanceof cljs.core.Keyword)){
|
||||
var G__41591 = initial_value;
|
||||
var G__41592 = devtools.formatters.helpers.pref.call(null,value);
|
||||
initial_value = G__41591;
|
||||
value = G__41592;
|
||||
continue;
|
||||
} else {
|
||||
if(cljs.core.sequential_QMARK_.call(null,value)){
|
||||
var G__41593 = initial_value;
|
||||
var G__41594 = devtools.formatters.templating.render_json_ml.call(null,value);
|
||||
initial_value = G__41593;
|
||||
value = G__41594;
|
||||
continue;
|
||||
} else {
|
||||
if(cljs.core.truth_(devtools.formatters.templating.template_QMARK_.call(null,value))){
|
||||
return value;
|
||||
} else {
|
||||
if(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,value))){
|
||||
return value;
|
||||
} else {
|
||||
if(cljs.core.truth_(devtools.formatters.templating.reference_QMARK_.call(null,value))){
|
||||
return value;
|
||||
} else {
|
||||
return devtools.formatters.templating.assert_failed_markup_rendering.call(null,initial_value,value);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
devtools.formatters.templating.render_markup = (function devtools$formatters$templating$render_markup(value){
|
||||
return devtools.formatters.templating.render_markup_STAR_.call(null,value,value);
|
||||
});
|
||||
|
||||
//# sourceMappingURL=templating.js.map?rel=1603199212660
|
||||
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue