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,6 @@
|
|||
(ns swinging-needle-meter.config)
|
||||
|
||||
;;; This file is unchanged (except this line) from the leiningen recom template
|
||||
|
||||
(def debug?
|
||||
^boolean goog.DEBUG)
|
||||
|
|
@ -0,0 +1 @@
|
|||
{:rename-macros {}, :renames {}, :use-macros {}, :excludes #{}, :name swinging-needle-meter.config, :imports nil, :requires nil, :uses nil, :defs {debug? {:name swinging-needle-meter.config/debug?, :file "src/cljs/swinging_needle_meter/config.cljs", :line 5, :column 1, :end-line 5, :end-column 12, :meta {:file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/config.cljs", :line 5, :column 6, :end-line 5, :end-column 12}}}, :require-macros nil, :doc nil}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('swinging_needle_meter.config');
|
||||
goog.require('cljs.core');
|
||||
swinging_needle_meter.config.debug_QMARK_ = goog.DEBUG;
|
||||
|
||||
//# sourceMappingURL=config.js.map?rel=1603199198905
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"\/Users\/simon\/workspace\/swinging-needle-meter\/docs\/js\/compiled\/out\/swinging_needle_meter\/config.js","sources":["config.cljs?rel=1603199198905"],"lineCount":6,"mappings":";AAAA;;AAIA,AAAKA,4CACMC","names":["swinging-needle-meter.config\/debug?","goog\/DEBUG"]}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
(ns swinging-needle-meter.core
|
||||
(:require [reagent.core :as reagent]
|
||||
[re-frame.core :as rf]
|
||||
[swinging-needle-meter.events]
|
||||
[swinging-needle-meter.subs]
|
||||
[swinging-needle-meter.views :as views]
|
||||
[swinging-needle-meter.config :as config]))
|
||||
|
||||
;;; This file is unchanged (except this line) from the leiningen recom template
|
||||
|
||||
|
||||
(defn dev-setup []
|
||||
(when config/debug?
|
||||
(enable-console-print!)
|
||||
(println "dev mode")))
|
||||
|
||||
(defn dispatch-timer-event
|
||||
[]
|
||||
(let [now (js/Date.)]
|
||||
(rf/dispatch [:timer now]))) ;; <-- dispatch used
|
||||
|
||||
;; call the dispatching function every tenth of a second
|
||||
(defonce do-timer (js/setInterval dispatch-timer-event 100))
|
||||
|
||||
(defn mount-root []
|
||||
(rf/clear-subscription-cache!)
|
||||
(reagent/render [views/main-panel]
|
||||
(.getElementById js/document "app")))
|
||||
|
||||
(defn ^:export init []
|
||||
(rf/dispatch-sync [:initialize-db])
|
||||
(dev-setup)
|
||||
(mount-root))
|
||||
|
|
@ -0,0 +1 @@
|
|||
{:rename-macros {}, :renames {}, :use-macros {}, :excludes #{}, :name swinging-needle-meter.core, :imports nil, :requires {reagent reagent.core, swinging-needle-meter.views swinging-needle-meter.views, views swinging-needle-meter.views, swinging-needle-meter.subs swinging-needle-meter.subs, reagent.core reagent.core, rf re-frame.core, swinging-needle-meter.config swinging-needle-meter.config, config swinging-needle-meter.config, swinging-needle-meter.events swinging-needle-meter.events, re-frame.core re-frame.core}, :uses nil, :defs {dev-setup {:protocol-inline nil, :meta {:file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/core.cljs", :line 12, :column 7, :end-line 12, :end-column 16, :arglists (quote ([]))}, :name swinging-needle-meter.core/dev-setup, :variadic false, :file "src/cljs/swinging_needle_meter/core.cljs", :end-column 16, :method-params ([]), :protocol-impl nil, :arglists-meta (nil nil), :column 1, :line 12, :end-line 12, :max-fixed-arity 0, :fn-var true, :arglists (quote ([]))}, dispatch-timer-event {:protocol-inline nil, :meta {:file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/core.cljs", :line 17, :column 7, :end-line 17, :end-column 27, :arglists (quote ([]))}, :name swinging-needle-meter.core/dispatch-timer-event, :variadic false, :file "src/cljs/swinging_needle_meter/core.cljs", :end-column 27, :method-params ([]), :protocol-impl nil, :arglists-meta (nil nil), :column 1, :line 17, :end-line 17, :max-fixed-arity 0, :fn-var true, :arglists (quote ([]))}, do-timer {:name swinging-needle-meter.core/do-timer, :file "src/cljs/swinging_needle_meter/core.cljs", :line 23, :column 1, :end-line 23, :end-column 18, :meta {:file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/core.cljs", :line 23, :column 10, :end-line 23, :end-column 18}}, mount-root {:protocol-inline nil, :meta {:file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/core.cljs", :line 25, :column 7, :end-line 25, :end-column 17, :arglists (quote ([]))}, :name swinging-needle-meter.core/mount-root, :variadic false, :file "src/cljs/swinging_needle_meter/core.cljs", :end-column 17, :method-params ([]), :protocol-impl nil, :arglists-meta (nil nil), :column 1, :line 25, :end-line 25, :max-fixed-arity 0, :fn-var true, :arglists (quote ([]))}, init {:protocol-inline nil, :meta {:file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/core.cljs", :line 30, :column 16, :end-line 30, :end-column 20, :export true, :arglists (quote ([]))}, :name swinging-needle-meter.core/init, :variadic false, :file "src/cljs/swinging_needle_meter/core.cljs", :end-column 20, :method-params ([]), :protocol-impl nil, :export true, :arglists-meta (nil nil), :column 1, :line 30, :end-line 30, :max-fixed-arity 0, :fn-var true, :arglists (quote ([]))}}, :require-macros {reagent reagent.core, reagent.core reagent.core}, :cljs.analyzer/constants {:seen #{:initialize-db :timer}, :order [:timer :initialize-db]}, :doc nil}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('swinging_needle_meter.core');
|
||||
goog.require('cljs.core');
|
||||
goog.require('reagent.core');
|
||||
goog.require('swinging_needle_meter.views');
|
||||
goog.require('swinging_needle_meter.subs');
|
||||
goog.require('re_frame.core');
|
||||
goog.require('swinging_needle_meter.config');
|
||||
goog.require('swinging_needle_meter.events');
|
||||
swinging_needle_meter.core.dev_setup = (function swinging_needle_meter$core$dev_setup(){
|
||||
if(cljs.core.truth_(swinging_needle_meter.config.debug_QMARK_)){
|
||||
cljs.core.enable_console_print_BANG_.call(null);
|
||||
|
||||
return cljs.core.println.call(null,"dev mode");
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
swinging_needle_meter.core.dispatch_timer_event = (function swinging_needle_meter$core$dispatch_timer_event(){
|
||||
var now = (new Date());
|
||||
return re_frame.core.dispatch.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"timer","timer",-1266967739),now], null));
|
||||
});
|
||||
if(typeof swinging_needle_meter.core.do_timer !== 'undefined'){
|
||||
} else {
|
||||
swinging_needle_meter.core.do_timer = setInterval(swinging_needle_meter.core.dispatch_timer_event,(100));
|
||||
}
|
||||
swinging_needle_meter.core.mount_root = (function swinging_needle_meter$core$mount_root(){
|
||||
re_frame.core.clear_subscription_cache_BANG_.call(null);
|
||||
|
||||
return reagent.core.render.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [swinging_needle_meter.views.main_panel], null),document.getElementById("app"));
|
||||
});
|
||||
swinging_needle_meter.core.init = (function swinging_needle_meter$core$init(){
|
||||
re_frame.core.dispatch_sync.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"initialize-db","initialize-db",230998432)], null));
|
||||
|
||||
swinging_needle_meter.core.dev_setup.call(null);
|
||||
|
||||
return swinging_needle_meter.core.mount_root.call(null);
|
||||
});
|
||||
goog.exportSymbol('swinging_needle_meter.core.init', swinging_needle_meter.core.init);
|
||||
|
||||
//# sourceMappingURL=core.js.map?rel=1603200848751
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"\/Users\/simon\/workspace\/swinging-needle-meter\/resources\/public\/js\/compiled\/out\/swinging_needle_meter\/core.js","sources":["core.cljs?rel=1603200848752"],"lineCount":41,"mappings":";AAAA;;;;;;;;AAWA,uCAAA,vCAAMA;AAAN,AACE,oBAAMC;AAAN,AACE,AAACC;;AACD,mCAAA,5BAACC;;AAFH;;;AAIF,kDAAA,lDAAMC;AAAN,AAEE,IAAMC,MAAI,KAAAC;AAAV,AACE,wCAAA,mFAAA,pHAACC,4KAAoBF;;AAGzB,GAAA,OAASG;AAAT;AAAA,AAAA,AAASA,sCAAS,4DAAA,5DAACC,YAAeL;;AAElC,wCAAA,xCAAMM;AAAN,AACE,AAACC;;AACD,qCAAA,9BAACC,iHAAgBC,+CACD,wBAAA,xBAAiBC;;AAEnC,kCAAA,lCAAeC;AAAf,AACE,sCAAA,mFAAA,zHAACC;;AACD,AAAChB;;AACD,OAACU","names":["swinging-needle-meter.core\/dev-setup","swinging-needle-meter.config\/debug?","cljs.core\/enable-console-print!","cljs.core\/println","swinging-needle-meter.core\/dispatch-timer-event","now","js\/Date","re-frame.core\/dispatch","swinging-needle-meter.core\/do-timer","js\/setInterval","swinging-needle-meter.core\/mount-root","re-frame.core\/clear-subscription-cache!","reagent.core\/render","swinging-needle-meter.views\/main-panel","js\/document","swinging-needle-meter.core\/init","re-frame.core\/dispatch-sync"]}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
(ns swinging-needle-meter.events
|
||||
(:require [re-frame.core :as re-frame]
|
||||
[swinging-needle-meter.state :as state]))
|
||||
|
||||
;; Reset.
|
||||
(re-frame/reg-event-db
|
||||
:initialize-db
|
||||
(fn [_ _]
|
||||
state/default-state))
|
||||
|
||||
;; The clock ticked. Implement a mechanical swing.
|
||||
(re-frame/reg-event-db
|
||||
:timer
|
||||
(fn [db [x value]]
|
||||
(let [old-value (:old-value db)
|
||||
target (:value db)
|
||||
new-value (+ old-value (/ (- target old-value) 10))]
|
||||
(assoc db :old-value new-value))))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
:set-value
|
||||
(fn [db [x value]]
|
||||
(assoc
|
||||
(assoc db :old-value (:value db))
|
||||
:value
|
||||
value)))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
:set-setpoint
|
||||
(fn [db [_ value]]
|
||||
(assoc db :setpoint value)))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
:set-gradations
|
||||
(fn [db [_ value]]
|
||||
(assoc db :gradations value)))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
:set-size
|
||||
(fn [db [_ value]]
|
||||
(assoc db :size value)))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
:set-min-value
|
||||
(fn [db [_ value]]
|
||||
(assoc db :min-val value)))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
:set-max-value
|
||||
(fn [db [_ value]]
|
||||
(assoc db :max-val value)))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
:set-warning-value
|
||||
(fn [db [_ value]]
|
||||
(assoc db :warn-val value)))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
:set-unit
|
||||
(fn [db [_ value]]
|
||||
(assoc db :unit value)))
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
{:rename-macros {}, :renames {}, :use-macros {}, :excludes #{}, :name swinging-needle-meter.events, :imports nil, :requires {re-frame re-frame.core, re-frame.core re-frame.core, state swinging-needle-meter.state, swinging-needle-meter.state swinging-needle-meter.state}, :uses nil, :require-macros nil, :cljs.analyzer/constants {:seen #{:initialize-db :warn-val :set-min-value :timer :unit :value :old-value :size :gradations :max-val :setpoint :set-value :set-max-value :set-unit :set-warning-value :set-gradations :set-size :min-val :set-setpoint}, :order [:initialize-db :timer :old-value :value :set-value :set-setpoint :setpoint :set-gradations :gradations :set-size :size :set-min-value :min-val :set-max-value :max-val :set-warning-value :warn-val :set-unit :unit]}, :doc nil}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('swinging_needle_meter.events');
|
||||
goog.require('cljs.core');
|
||||
goog.require('re_frame.core');
|
||||
goog.require('swinging_needle_meter.state');
|
||||
re_frame.core.reg_event_db.call(null,new cljs.core.Keyword(null,"initialize-db","initialize-db",230998432),(function (_,___$1){
|
||||
return swinging_needle_meter.state.default_state;
|
||||
}));
|
||||
re_frame.core.reg_event_db.call(null,new cljs.core.Keyword(null,"timer","timer",-1266967739),(function (db,p__33506){
|
||||
var vec__33507 = p__33506;
|
||||
var x = cljs.core.nth.call(null,vec__33507,(0),null);
|
||||
var value = cljs.core.nth.call(null,vec__33507,(1),null);
|
||||
var old_value = new cljs.core.Keyword(null,"old-value","old-value",862546795).cljs$core$IFn$_invoke$arity$1(db);
|
||||
var target = new cljs.core.Keyword(null,"value","value",305978217).cljs$core$IFn$_invoke$arity$1(db);
|
||||
var new_value = (old_value + ((target - old_value) / (10)));
|
||||
return cljs.core.assoc.call(null,db,new cljs.core.Keyword(null,"old-value","old-value",862546795),new_value);
|
||||
}));
|
||||
re_frame.core.reg_event_db.call(null,new cljs.core.Keyword(null,"set-value","set-value",445227352),(function (db,p__33510){
|
||||
var vec__33511 = p__33510;
|
||||
var x = cljs.core.nth.call(null,vec__33511,(0),null);
|
||||
var value = cljs.core.nth.call(null,vec__33511,(1),null);
|
||||
return cljs.core.assoc.call(null,cljs.core.assoc.call(null,db,new cljs.core.Keyword(null,"old-value","old-value",862546795),new cljs.core.Keyword(null,"value","value",305978217).cljs$core$IFn$_invoke$arity$1(db)),new cljs.core.Keyword(null,"value","value",305978217),value);
|
||||
}));
|
||||
re_frame.core.reg_event_db.call(null,new cljs.core.Keyword(null,"set-setpoint","set-setpoint",1444590911),(function (db,p__33514){
|
||||
var vec__33515 = p__33514;
|
||||
var _ = cljs.core.nth.call(null,vec__33515,(0),null);
|
||||
var value = cljs.core.nth.call(null,vec__33515,(1),null);
|
||||
return cljs.core.assoc.call(null,db,new cljs.core.Keyword(null,"setpoint","setpoint",749640023),value);
|
||||
}));
|
||||
re_frame.core.reg_event_db.call(null,new cljs.core.Keyword(null,"set-gradations","set-gradations",1006377373),(function (db,p__33518){
|
||||
var vec__33519 = p__33518;
|
||||
var _ = cljs.core.nth.call(null,vec__33519,(0),null);
|
||||
var value = cljs.core.nth.call(null,vec__33519,(1),null);
|
||||
return cljs.core.assoc.call(null,db,new cljs.core.Keyword(null,"gradations","gradations",1411381107),value);
|
||||
}));
|
||||
re_frame.core.reg_event_db.call(null,new cljs.core.Keyword(null,"set-size","set-size",-1037159587),(function (db,p__33522){
|
||||
var vec__33523 = p__33522;
|
||||
var _ = cljs.core.nth.call(null,vec__33523,(0),null);
|
||||
var value = cljs.core.nth.call(null,vec__33523,(1),null);
|
||||
return cljs.core.assoc.call(null,db,new cljs.core.Keyword(null,"size","size",1098693007),value);
|
||||
}));
|
||||
re_frame.core.reg_event_db.call(null,new cljs.core.Keyword(null,"set-min-value","set-min-value",-867525599),(function (db,p__33526){
|
||||
var vec__33527 = p__33526;
|
||||
var _ = cljs.core.nth.call(null,vec__33527,(0),null);
|
||||
var value = cljs.core.nth.call(null,vec__33527,(1),null);
|
||||
return cljs.core.assoc.call(null,db,new cljs.core.Keyword(null,"min-val","min-val",-243137826),value);
|
||||
}));
|
||||
re_frame.core.reg_event_db.call(null,new cljs.core.Keyword(null,"set-max-value","set-max-value",250465433),(function (db,p__33530){
|
||||
var vec__33531 = p__33530;
|
||||
var _ = cljs.core.nth.call(null,vec__33531,(0),null);
|
||||
var value = cljs.core.nth.call(null,vec__33531,(1),null);
|
||||
return cljs.core.assoc.call(null,db,new cljs.core.Keyword(null,"max-val","max-val",-1492247884),value);
|
||||
}));
|
||||
re_frame.core.reg_event_db.call(null,new cljs.core.Keyword(null,"set-warning-value","set-warning-value",1017303323),(function (db,p__33534){
|
||||
var vec__33535 = p__33534;
|
||||
var _ = cljs.core.nth.call(null,vec__33535,(0),null);
|
||||
var value = cljs.core.nth.call(null,vec__33535,(1),null);
|
||||
return cljs.core.assoc.call(null,db,new cljs.core.Keyword(null,"warn-val","warn-val",847777216),value);
|
||||
}));
|
||||
re_frame.core.reg_event_db.call(null,new cljs.core.Keyword(null,"set-unit","set-unit",1403002425),(function (db,p__33538){
|
||||
var vec__33539 = p__33538;
|
||||
var _ = cljs.core.nth.call(null,vec__33539,(0),null);
|
||||
var value = cljs.core.nth.call(null,vec__33539,(1),null);
|
||||
return cljs.core.assoc.call(null,db,new cljs.core.Keyword(null,"unit","unit",375175175),value);
|
||||
}));
|
||||
|
||||
//# sourceMappingURL=events.js.map?rel=1603199198956
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"\/Users\/simon\/workspace\/swinging-needle-meter\/docs\/js\/compiled\/out\/swinging_needle_meter\/events.js","sources":["events.cljs?rel=1603199198957"],"lineCount":67,"mappings":";AAAA;;;;AAKA,qCAAA,rCAACA,2GAEA,WAAMC,EAAEA;AAAR,AACEC;;AAGH,qCAAA,rCAACF,6FAEA,cAAAG,HAAKG;AAAL,AAAA,IAAAF,aAAAD;QAAA,AAAAE,wBAAAD,WAAA,IAAA,3CAASG;YAAT,AAAAF,wBAAAD,WAAA,IAAA,\/CAAWI;AAAX,AACE,IAAMC,YAAU,AAAA,4FAAYH;IACtBI,SAAO,AAAA,oFAAQJ;IACfK,YAAU,CAAGF,YAAU,wBAAA,vBAAG,CAAGC,SAAOD;AAF1C,AAGA,oCAAA,7BAACG,0BAAMN,iEAAcK;;AAExB,qCAAA,rCAACX,mGAEA,cAAAa,HAAKP;AAAL,AAAA,IAAAQ,aAAAD;QAAA,AAAAR,wBAAAS,WAAA,IAAA,3CAASP;YAAT,AAAAF,wBAAAS,WAAA,IAAA,\/CAAWN;AAAX,AACE,qNAAA,9MAACI,0BACC,6BAAA,7BAACA,0BAAMN,iEAAc,AAAA,oFAAQA,2DAE7BE;;AAEL,qCAAA,rCAACR,0GAEA,cAAAe,HAAKT;AAAL,AAAA,IAAAU,aAAAD;QAAA,AAAAV,wBAAAW,WAAA,IAAA,3CAASf;YAAT,AAAAI,wBAAAW,WAAA,IAAA,\/CAAWR;AAAX,AACE,oCAAA,7BAACI,0BAAMN,+DAAaE;;AAEvB,qCAAA,rCAACR,8GAEA,cAAAiB,HAAKX;AAAL,AAAA,IAAAY,aAAAD;QAAA,AAAAZ,wBAAAa,WAAA,IAAA,3CAASjB;YAAT,AAAAI,wBAAAa,WAAA,IAAA,\/CAAWV;AAAX,AACE,oCAAA,7BAACI,0BAAMN,oEAAeE;;AAEzB,qCAAA,rCAACR,mGAEA,cAAAmB,HAAKb;AAAL,AAAA,IAAAc,aAAAD;QAAA,AAAAd,wBAAAe,WAAA,IAAA,3CAASnB;YAAT,AAAAI,wBAAAe,WAAA,IAAA,\/CAAWZ;AAAX,AACE,oCAAA,7BAACI,0BAAMN,wDAASE;;AAEnB,qCAAA,rCAACR,4GAEA,cAAAqB,HAAKf;AAAL,AAAA,IAAAgB,aAAAD;QAAA,AAAAhB,wBAAAiB,WAAA,IAAA,3CAASrB;YAAT,AAAAI,wBAAAiB,WAAA,IAAA,\/CAAWd;AAAX,AACE,oCAAA,7BAACI,0BAAMN,8DAAYE;;AAEtB,qCAAA,rCAACR,2GAEA,cAAAuB,HAAKjB;AAAL,AAAA,IAAAkB,aAAAD;QAAA,AAAAlB,wBAAAmB,WAAA,IAAA,3CAASvB;YAAT,AAAAI,wBAAAmB,WAAA,IAAA,\/CAAWhB;AAAX,AACE,oCAAA,7BAACI,0BAAMN,+DAAYE;;AAEtB,qCAAA,rCAACR,oHAEA,cAAAyB,HAAKnB;AAAL,AAAA,IAAAoB,aAAAD;QAAA,AAAApB,wBAAAqB,WAAA,IAAA,3CAASzB;YAAT,AAAAI,wBAAAqB,WAAA,IAAA,\/CAAWlB;AAAX,AACE,oCAAA,7BAACI,0BAAMN,+DAAaE;;AAEvB,qCAAA,rCAACR,kGAEA,cAAA2B,HAAKrB;AAAL,AAAA,IAAAsB,aAAAD;QAAA,AAAAtB,wBAAAuB,WAAA,IAAA,3CAAS3B;YAAT,AAAAI,wBAAAuB,WAAA,IAAA,\/CAAWpB;AAAX,AACE,oCAAA,7BAACI,0BAAMN,uDAASE","names":["re-frame.core\/reg-event-db","_","swinging-needle-meter.state\/default-state","p__33506","vec__33507","cljs.core\/nth","db","x","value","old-value","target","new-value","cljs.core\/assoc","p__33510","vec__33511","p__33514","vec__33515","p__33518","vec__33519","p__33522","vec__33523","p__33526","vec__33527","p__33530","vec__33531","p__33534","vec__33535","p__33538","vec__33539"]}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
(ns ^{:doc "Client state."
|
||||
:author "Simon Brooke"}
|
||||
swinging-needle-meter.state)
|
||||
|
||||
(def default-state
|
||||
{:timer (js/Date.)
|
||||
:value 60
|
||||
:old-value 0
|
||||
:setpoint 75
|
||||
:gradations 5
|
||||
:size 70
|
||||
:min-val 0
|
||||
:max-val 100
|
||||
:warn-val 80
|
||||
:unit "Mw"})
|
||||
|
|
@ -0,0 +1 @@
|
|||
{:rename-macros {}, :renames {}, :use-macros {}, :excludes #{}, :name swinging-needle-meter.state, :imports nil, :requires nil, :uses nil, :defs {default-state {:name swinging-needle-meter.state/default-state, :file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/state.cljs", :line 5, :column 1, :end-line 5, :end-column 19, :meta {:file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/state.cljs", :line 5, :column 6, :end-line 5, :end-column 19}}}, :require-macros nil, :cljs.analyzer/constants {:seen #{:warn-val :timer :unit :value :old-value :size :gradations :max-val :setpoint :min-val}, :order [:warn-val :timer :unit :value :old-value :size :gradations :max-val :setpoint :min-val]}, :doc "Client state."}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('swinging_needle_meter.state');
|
||||
goog.require('cljs.core');
|
||||
swinging_needle_meter.state.default_state = cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"warn-val","warn-val",847777216),new cljs.core.Keyword(null,"timer","timer",-1266967739),new cljs.core.Keyword(null,"unit","unit",375175175),new cljs.core.Keyword(null,"value","value",305978217),new cljs.core.Keyword(null,"old-value","old-value",862546795),new cljs.core.Keyword(null,"size","size",1098693007),new cljs.core.Keyword(null,"gradations","gradations",1411381107),new cljs.core.Keyword(null,"max-val","max-val",-1492247884),new cljs.core.Keyword(null,"setpoint","setpoint",749640023),new cljs.core.Keyword(null,"min-val","min-val",-243137826)],[(80),(new Date()),"Mw",(60),(0),(70),(5),(100),(75),(0)]);
|
||||
|
||||
//# sourceMappingURL=state.js.map?rel=1603199198911
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"\/Users\/simon\/workspace\/swinging-needle-meter\/docs\/js\/compiled\/out\/swinging_needle_meter\/state.js","sources":["state.cljs?rel=1603199198911"],"lineCount":6,"mappings":";AAAA;;AAIA,4CAAA,wCAAA,4DAAA,wDAAA,oDAAA,sDAAA,8DAAA,qDAAA,iEAAA,4DAAA,4DAAA,6DAAA,kBAAA,KAAA,KAAA,IAAA,KAAA,IAAA,MAAA,KAAA,\/sBAAKA,gqBACK,KAAAC","names":["swinging-needle-meter.state\/default-state","js\/Date"]}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
(ns swinging-needle-meter.subs
|
||||
(:require-macros [reagent.ratom :refer [reaction]])
|
||||
(:require [re-frame.core :as re-frame]))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:name
|
||||
(fn [db]
|
||||
(:name db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:value
|
||||
(fn [db]
|
||||
(:value db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:old-value
|
||||
(fn [db]
|
||||
(:old-value db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:setpoint
|
||||
(fn [db]
|
||||
(:setpoint db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:unit
|
||||
(fn [db]
|
||||
(:unit db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:min-val
|
||||
(fn [db]
|
||||
(:min-val db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:max-val
|
||||
(fn [db]
|
||||
(:max-val db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:gradations
|
||||
(fn [db]
|
||||
(:gradations db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:warn-val
|
||||
(fn [db]
|
||||
(:warn-val db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:size
|
||||
(fn [db]
|
||||
(:size db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:timer
|
||||
(fn [db]
|
||||
(:timer db)))
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
{:rename-macros {}, :renames {}, :use-macros {reaction reagent.ratom}, :excludes #{}, :name swinging-needle-meter.subs, :imports nil, :requires {re-frame re-frame.core, re-frame.core re-frame.core}, :uses nil, :require-macros {reagent.ratom reagent.ratom}, :cljs.analyzer/constants {:seen #{:warn-val :timer :unit :name :value :old-value :size :gradations :max-val :setpoint :min-val}, :order [:name :value :old-value :setpoint :unit :min-val :max-val :gradations :warn-val :size :timer]}, :doc nil}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('swinging_needle_meter.subs');
|
||||
goog.require('cljs.core');
|
||||
goog.require('re_frame.core');
|
||||
re_frame.core.reg_sub.call(null,new cljs.core.Keyword(null,"name","name",1843675177),(function (db){
|
||||
return new cljs.core.Keyword(null,"name","name",1843675177).cljs$core$IFn$_invoke$arity$1(db);
|
||||
}));
|
||||
re_frame.core.reg_sub.call(null,new cljs.core.Keyword(null,"value","value",305978217),(function (db){
|
||||
return new cljs.core.Keyword(null,"value","value",305978217).cljs$core$IFn$_invoke$arity$1(db);
|
||||
}));
|
||||
re_frame.core.reg_sub.call(null,new cljs.core.Keyword(null,"old-value","old-value",862546795),(function (db){
|
||||
return new cljs.core.Keyword(null,"old-value","old-value",862546795).cljs$core$IFn$_invoke$arity$1(db);
|
||||
}));
|
||||
re_frame.core.reg_sub.call(null,new cljs.core.Keyword(null,"setpoint","setpoint",749640023),(function (db){
|
||||
return new cljs.core.Keyword(null,"setpoint","setpoint",749640023).cljs$core$IFn$_invoke$arity$1(db);
|
||||
}));
|
||||
re_frame.core.reg_sub.call(null,new cljs.core.Keyword(null,"unit","unit",375175175),(function (db){
|
||||
return new cljs.core.Keyword(null,"unit","unit",375175175).cljs$core$IFn$_invoke$arity$1(db);
|
||||
}));
|
||||
re_frame.core.reg_sub.call(null,new cljs.core.Keyword(null,"min-val","min-val",-243137826),(function (db){
|
||||
return new cljs.core.Keyword(null,"min-val","min-val",-243137826).cljs$core$IFn$_invoke$arity$1(db);
|
||||
}));
|
||||
re_frame.core.reg_sub.call(null,new cljs.core.Keyword(null,"max-val","max-val",-1492247884),(function (db){
|
||||
return new cljs.core.Keyword(null,"max-val","max-val",-1492247884).cljs$core$IFn$_invoke$arity$1(db);
|
||||
}));
|
||||
re_frame.core.reg_sub.call(null,new cljs.core.Keyword(null,"gradations","gradations",1411381107),(function (db){
|
||||
return new cljs.core.Keyword(null,"gradations","gradations",1411381107).cljs$core$IFn$_invoke$arity$1(db);
|
||||
}));
|
||||
re_frame.core.reg_sub.call(null,new cljs.core.Keyword(null,"warn-val","warn-val",847777216),(function (db){
|
||||
return new cljs.core.Keyword(null,"warn-val","warn-val",847777216).cljs$core$IFn$_invoke$arity$1(db);
|
||||
}));
|
||||
re_frame.core.reg_sub.call(null,new cljs.core.Keyword(null,"size","size",1098693007),(function (db){
|
||||
return new cljs.core.Keyword(null,"size","size",1098693007).cljs$core$IFn$_invoke$arity$1(db);
|
||||
}));
|
||||
re_frame.core.reg_sub.call(null,new cljs.core.Keyword(null,"timer","timer",-1266967739),(function (db){
|
||||
return new cljs.core.Keyword(null,"timer","timer",-1266967739).cljs$core$IFn$_invoke$arity$1(db);
|
||||
}));
|
||||
|
||||
//# sourceMappingURL=subs.js.map?rel=1603199198900
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"\/Users\/simon\/workspace\/swinging-needle-meter\/docs\/js\/compiled\/out\/swinging_needle_meter\/subs.js","sources":["subs.cljs?rel=1603199198900"],"lineCount":39,"mappings":";AAAA;;;AAIA,gCAAA,hCAACA,qFAEA,WAAKC;AAAL,AACE,OAAA,mFAAOA;;AAEV,gCAAA,hCAACD,sFAEA,WAAKC;AAAL,AACE,OAAA,oFAAQA;;AAEX,gCAAA,hCAACD,8FAEA,WAAKC;AAAL,AACE,OAAA,4FAAYA;;AAEf,gCAAA,hCAACD,4FAEA,WAAKC;AAAL,AACE,OAAA,0FAAWA;;AAEd,gCAAA,hCAACD,oFAEA,WAAKC;AAAL,AACE,OAAA,kFAAOA;;AAEV,gCAAA,hCAACD,2FAEA,WAAKC;AAAL,AACE,OAAA,yFAAUA;;AAEb,gCAAA,hCAACD,4FAEA,WAAKC;AAAL,AACE,OAAA,0FAAUA;;AAEb,gCAAA,hCAACD,iGAEA,WAAKC;AAAL,AACE,OAAA,+FAAaA;;AAEhB,gCAAA,hCAACD,4FAEA,WAAKC;AAAL,AACE,OAAA,0FAAWA;;AAEd,gCAAA,hCAACD,qFAEA,WAAKC;AAAL,AACE,OAAA,mFAAOA;;AAEV,gCAAA,hCAACD,wFAEA,WAAKC;AAAL,AACE,OAAA,sFAAQA","names":["re-frame.core\/reg-sub","db"]}
|
||||
|
|
@ -0,0 +1,257 @@
|
|||
(ns swinging-needle-meter.swinging-needle-meter
|
||||
(:require [clojure.string :as string]
|
||||
[re-com.core :refer [h-box v-box box gap line label title slider checkbox p]]
|
||||
[re-com.box :refer [flex-child-style]]
|
||||
[re-com.util :refer [deref-or-value]]
|
||||
[re-com.validate :refer [number-or-string? css-style? html-attr? validate-args-macro]]
|
||||
[reagent.core :as reagent]
|
||||
[swinging-needle-meter.utils :refer [abs]]))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;
|
||||
;;;; swinging-needle-meter: an experiment in animating SVG from re-frame.
|
||||
;;;; Draws heavily on re-com..
|
||||
;;;;
|
||||
;;;; This program is free software; you can redistribute it and/or
|
||||
;;;; modify it under the terms of the GNU General Public License
|
||||
;;;; as published by the Free Software Foundation; either version 2
|
||||
;;;; of the License, or (at your option) any later version.
|
||||
;;;;
|
||||
;;;; This program is distributed in the hope that it will be useful,
|
||||
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;;; GNU General Public License for more details.
|
||||
;;;;
|
||||
;;;; You should have received a copy of the GNU General Public License
|
||||
;;;; along with this program; if not, write to the Free Software
|
||||
;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
;;;; USA.
|
||||
;;;;
|
||||
;;;; Copyright (C) 2014 Simon Brooke
|
||||
;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;; ------------------------------------------------------------------------------------
|
||||
;; Component: swinging-needle-meter
|
||||
;; ------------------------------------------------------------------------------------
|
||||
|
||||
;;; It seems the defaults given here are just documentation; the defaults
|
||||
;;; that are actually used are those given in the :or clause of the argument map.
|
||||
(def swinging-needle-args-desc
|
||||
[{:name :model :required true :type "double | atom"
|
||||
:validate-fn number-or-string? :description "current value of the variable being watched. A number between 0 and 100"}
|
||||
{:name :setpoint :required false :type "double | atom"
|
||||
:validate-fn number-or-string? :description "current setpoint for the variable being watched, if any. A number between 0 and 100"}
|
||||
{:name :width :required false :type "integer" :default "300"
|
||||
:validate-fn integer? :description "a CSS width"}
|
||||
{:name :height :required false :type "integer" :default "200"
|
||||
:validate-fn integer? :description "a CSS height"}
|
||||
{:name :min-value :required false :type "double" :default 0
|
||||
:validate-fn number? :description "the minimum value model can take"}
|
||||
{:name :max-value :required false :type "double" :default 100
|
||||
:validate-fn number? :description "the maximum value model can take"}
|
||||
{:name :warn-value :required false :type "double" :default 80
|
||||
:validate-fn number? :description "the maximum safe value model can take"}
|
||||
{:name :tolerance :required false :type "double" :default 3
|
||||
:validate-fn number? :description "the amount by which model can differ from setpoint and still be considered acceptable"}
|
||||
{:name :class :required false :type "string"
|
||||
:validate-fn string? :description "CSS class names, space separated, for the top-level SVG element"}
|
||||
{:name :alarm-class :required false :type "string" :default "snm-warning"
|
||||
:validate-fn string? :description "CSS class names, space separated, applied to the frame in an alarm condition"}
|
||||
{:name :cursor-class :required false :type "string" :default "snm-cursor"
|
||||
:validate-fn string? :description "CSS class names, space separated, for the cursor"}
|
||||
{:name :frame-class :required false :type "string" :default "snm-frame"
|
||||
:validate-fn string? :description "CSS class names, space separated, for the frame"}
|
||||
{:name :hub-class :required false :type "string" :default "snm-hub"
|
||||
:validate-fn string? :description "CSS class names, space separated, for the hub"}
|
||||
{:name :needle-class :required false :type "string" :default "snm-needle"
|
||||
:validate-fn string? :description "CSS class names, space separated, for the needle"}
|
||||
{:name :scale-class :required false :type "string" :default "snm-scale"
|
||||
:validate-fn string? :description "CSS class names, space separated, for the scale"}
|
||||
{:name :redzone-class :required false :type "string" :default "snm-redzone"
|
||||
:validate-fn string? :description "CSS class names, space separated, for the redzone"}
|
||||
{:name :target-class :required false :type "string" :default "snm-target"
|
||||
:validate-fn string? :description "CSS class names, space separated, , applied to the frame in an on-target condition"}
|
||||
{:name :unit :required false :type "string"
|
||||
:validate-fn string? :description "Unit to show after the value"}
|
||||
{:name :id :required false :type "string" :default "meter"
|
||||
:validate-fn string? :description "Element id for this instance of the meter"}
|
||||
{:name :gradations :reduired false :type "integer" :default 5
|
||||
:validate-fn integer? :description "Number of gradations to show on the scale, not counting the point."}
|
||||
{:name :style :required false :type "CSS style map"
|
||||
:validate-fn css-style? :description "CSS styles to add or override"}
|
||||
{:name :attr :required false :type "HTML attr map"
|
||||
:validate-fn html-attr? :description [:span "HTML attributes, like " [:code ":on-mouse-move"] [:br] "No " [:code ":class"] " or " [:code ":style"] "allowed"]}])
|
||||
|
||||
;; the constant 140 represents the full sweep of the needle
|
||||
;; from the left end of the scale to right end, in degrees.
|
||||
(def full-scale-deflection 140)
|
||||
|
||||
|
||||
(defn deflection
|
||||
"Return the linear deflection of a needle given this `value` on the
|
||||
range `min-value`...`max-value`."
|
||||
[value min-value max-value]
|
||||
(let [range (- max-value min-value)
|
||||
zero-offset (/ (- 0 min-value) range)
|
||||
limited (min (max (+ zero-offset (/ value range)) 0) 1)]
|
||||
(* (- limited 0.5) full-scale-deflection)))
|
||||
|
||||
|
||||
(defn polar-to-cartesian
|
||||
"Return, as a map with keys :x. :y, the cartesian coordinates at the point
|
||||
`radius` distance at `theta` (degrees) angle from a point at
|
||||
cartesian coordinates `cx`, `cy`."
|
||||
[cx cy radius theta]
|
||||
(let
|
||||
[in-radians (/ (* (- theta 90) (aget js/Math "PI")) 180.0)]
|
||||
{:x (+ cx (* radius (.cos js/Math in-radians)))
|
||||
:y (+ cy (* radius (.sin js/Math in-radians)))}))
|
||||
|
||||
|
||||
(defn describe-arc
|
||||
"Return as a string an SVG path definition describing an arc centred
|
||||
at `cx`, cy` starting at `start-angle` and ending at `end-angle` (both
|
||||
angles in degrees)."
|
||||
[cx cy radius start-angle end-angle]
|
||||
(let
|
||||
[start (polar-to-cartesian cx cy radius start-angle)
|
||||
end (polar-to-cartesian cx cy radius end-angle)
|
||||
large-arc? (if (<= (- end-angle start-angle) 180) 0 1)
|
||||
sweep (if (> end-angle start-angle) 1 0)]
|
||||
(string/join " " ["M" (:x start) (:y start) "A" radius radius 0 large-arc? sweep (:x end) (:y end)])))
|
||||
|
||||
|
||||
(defn as-label
|
||||
"If this arg is a floating point number, format it to a reasonable width; else return it."
|
||||
[arg]
|
||||
(if
|
||||
(and (number? arg) (not (integer? arg)))
|
||||
(.toFixed arg 2)
|
||||
arg))
|
||||
|
||||
|
||||
(defn gradation
|
||||
"Return as a string an SVG path definition describing a radial stroke from a center
|
||||
at `cx`, cy` starting at `min-radius` and extending to `max-radius`."
|
||||
[cx cy min-radius max-radius angle label]
|
||||
[:g {:class "snm-gradation"
|
||||
:transform (string/join " " ["rotate(" angle cx cy ")"])}
|
||||
[:path {:d (string/join
|
||||
" "
|
||||
["M"
|
||||
cx
|
||||
(- cy
|
||||
(+ min-radius
|
||||
(* (- max-radius min-radius) 0.333)))
|
||||
"L"
|
||||
cx
|
||||
(- cy max-radius)])}]
|
||||
[:text {:text-anchor "middle"
|
||||
:x cx
|
||||
:y (- cy min-radius)} (as-label label)]])
|
||||
|
||||
|
||||
(defn as-mm
|
||||
"return the argument, as a string, with 'mm' appended"
|
||||
[arg]
|
||||
(str arg "mm"))
|
||||
|
||||
|
||||
(defn swinging-needle-meter
|
||||
"Render an SVG swinging needle meter"
|
||||
[& {:keys [model setpoint width height min-value max-value warn-value tolerance class gradations alarm-class cursor-class frame-class hub-class needle-class redzone-class scale-class target-class unit id style attr]
|
||||
:or {width 300
|
||||
height 200
|
||||
min-value 0
|
||||
max-value 100
|
||||
warn-value 80
|
||||
tolerance 3
|
||||
gradations 5
|
||||
alarm-class "snm-warning"
|
||||
cursor-class "snm-cursor"
|
||||
frame-class "snm-frame"
|
||||
hub-class "snm-hub"
|
||||
needle-class "snm-needle"
|
||||
scale-class "snm-scale"
|
||||
redzone-class "snm-redzone"
|
||||
target-class "snm-target"
|
||||
id "meter"}
|
||||
:as args}]
|
||||
{:pre [(validate-args-macro swinging-needle-args-desc args "swinging-needle")]}
|
||||
(let [model (deref-or-value model)
|
||||
setpoint (deref-or-value setpoint)
|
||||
mid-point-deflection (/ full-scale-deflection 2)
|
||||
cx (/ width 2)
|
||||
cy (* height 0.90)
|
||||
needle-length (* height 0.75)
|
||||
scale-radius (* height 0.7)
|
||||
gradation-inner (* height 0.55)]
|
||||
[box
|
||||
:align :start
|
||||
:child [:div
|
||||
(merge
|
||||
{:class (str "swinging-needle " class " " (str
|
||||
(if (< min-value model warn-value) ""
|
||||
(str " " alarm-class))
|
||||
(if (and (> setpoint min-value)(< (abs (- model setpoint)) tolerance))
|
||||
(str " " target-class) "")))
|
||||
:style (merge (flex-child-style "none")
|
||||
{:width width :height height}
|
||||
style)}
|
||||
attr)
|
||||
[:svg {:xmlSpace "preserve"
|
||||
:overflow "visible"
|
||||
:viewBox (string/join " " [0 0 width height])
|
||||
:width (str width "px")
|
||||
:height (str height "px")
|
||||
:y "0px"
|
||||
:x "0px"
|
||||
:version "1.1"
|
||||
:id id
|
||||
:class (str "snm-meter " class)}
|
||||
|
||||
[:text
|
||||
{:text-anchor "middle"
|
||||
:x (/ width 2)
|
||||
:y (/ height 2)
|
||||
:width "100"
|
||||
:id (str id "-current-value")
|
||||
:class "snm-value"}[:tspan (str (as-label model) (if unit " ") unit)]]
|
||||
[:path {:class scale-class
|
||||
:id (str id "-scale")
|
||||
:d (describe-arc cx cy scale-radius
|
||||
(deflection min-value min-value max-value)
|
||||
(deflection max-value min-value max-value))}]
|
||||
[:path {:class redzone-class
|
||||
:id (str id "-redzone")
|
||||
:d (describe-arc cx cy scale-radius
|
||||
(deflection warn-value min-value max-value)
|
||||
(deflection max-value min-value max-value))}]
|
||||
[:path {:class cursor-class
|
||||
:id (str id "-cursor")
|
||||
:d (str "M " cx "," (- cy needle-length) " " cx "," cy) ;; "M cx,20 cx,100"
|
||||
:visibility (if (and (number? setpoint) (> setpoint min-value)) "visible" "hidden")
|
||||
:transform (str "rotate( " (deflection setpoint min-value max-value) "," cx "," cy ")")}]
|
||||
[:path {:class needle-class
|
||||
:id (str id "-needle")
|
||||
:d (str "M " cx "," (- cy needle-length) " " cx "," cy) ;; "M cx,20 cx,100"
|
||||
:transform (str "rotate( " (deflection model min-value max-value) "," cx "," cy ")") }]
|
||||
(if (> gradations 0)
|
||||
(apply vector (cons :g (map #(let
|
||||
[value (+ min-value
|
||||
(*
|
||||
(/
|
||||
(- max-value min-value)
|
||||
gradations) %))]
|
||||
(gradation cx cy gradation-inner needle-length
|
||||
(deflection value min-value max-value)
|
||||
value))
|
||||
(range 0 (+ gradations 1))))))
|
||||
[:rect {:class frame-class
|
||||
:id (str id "-frame")
|
||||
:x (* width 0.05) :y (* height .05) :height cy :width (* width 0.9)}]
|
||||
[:circle {:class hub-class
|
||||
:id (str id "-hub")
|
||||
:r (/ height 10) :cx cx :cy cy}]]
|
||||
]]))
|
||||
File diff suppressed because one or more lines are too long
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,121 @@
|
|||
(ns swinging-needle-meter.utils
|
||||
(:require [re-com.core :refer [h-box v-box box gap title line label hyperlink-href align-style]]))
|
||||
|
||||
;;;; This file is mostly stolen wholesale from re-demo in the re-com package;
|
||||
;;;; I claim no credit for it.
|
||||
|
||||
|
||||
(defn abs
|
||||
"Return the absolute value of the (numeric) argument."
|
||||
[n] (max n (- n)))
|
||||
|
||||
|
||||
(defn github-hyperlink
|
||||
"given a label and a relative path, return a component which hyperlinks to the GitHub URL in a new tab"
|
||||
[label src-path]
|
||||
(let [base-url (str "https://github.com/Day8/re-com/tree/master/")]
|
||||
[hyperlink-href
|
||||
:label label
|
||||
;:style {:font-size "13px"}
|
||||
:href (str base-url src-path)
|
||||
:target "_blank"]))
|
||||
|
||||
(defn panel-title
|
||||
"Shown across the top of each page"
|
||||
[panel-name src1 src2]
|
||||
[v-box
|
||||
:children [[h-box
|
||||
:margin "0px 0px 9px 0px"
|
||||
:height "54px"
|
||||
:align :end
|
||||
:children [[title
|
||||
:label panel-name
|
||||
:level :level1
|
||||
:margin-bottom "0px"
|
||||
:margin-top "2px"]
|
||||
[gap :size "25px"]
|
||||
(when src1 [h-box
|
||||
:class "all-small-caps"
|
||||
:gap "7px"
|
||||
:align :center
|
||||
:children [
|
||||
[label :label "source:" ]
|
||||
[github-hyperlink "component" src1]
|
||||
[label :label "|" :style {:font-size "12px"}]
|
||||
;[line]
|
||||
[github-hyperlink "page" src2]]])]]
|
||||
[line]]])
|
||||
|
||||
(defn title2
|
||||
"2nd level title"
|
||||
[text style]
|
||||
[title
|
||||
:label text
|
||||
:level :level2
|
||||
:style style])
|
||||
|
||||
(defn status-text
|
||||
"given some status text, return a component that displays that status"
|
||||
[status style]
|
||||
[:span
|
||||
[:span.bold "Status: "]
|
||||
[:span {:style style} status]])
|
||||
|
||||
(defn material-design-hyperlink
|
||||
[text]
|
||||
[hyperlink-href
|
||||
:label text
|
||||
:href "http://zavoloklom.github.io/material-design-iconic-font/icons.html"
|
||||
:target "_blank"])
|
||||
|
||||
|
||||
|
||||
(defn arg-row
|
||||
"I show one argument in an args table."
|
||||
[name-width arg odd-row?]
|
||||
(let [required (:required arg)
|
||||
default (:default arg)
|
||||
arg-type (:type arg)
|
||||
needed-vec (if (not required)
|
||||
(if (nil? default)
|
||||
[[:span.semibold.all-small-caps "optional"]]
|
||||
[[:span.semibold.all-small-caps "default:"] [:span.semibold (str default)]])
|
||||
[[:span.semibold.all-small-caps "required"]])]
|
||||
[h-box
|
||||
:style {:background (if odd-row? "#F4F4F4" "#FCFCFC")}
|
||||
:children [[:span {:class "semibold"
|
||||
:style (merge (align-style :align-self :center)
|
||||
{:width name-width
|
||||
:padding-left "15px"})}
|
||||
(str (:name arg))]
|
||||
[line :size "1px" :color "white"]
|
||||
[v-box
|
||||
:style {:padding "7px 15px 2px 15px"}
|
||||
:gap "4px"
|
||||
:width "310px"
|
||||
:children [[h-box
|
||||
:gap "4px"
|
||||
:children (concat [[:span.semibold arg-type]
|
||||
[gap :size "10px"]]
|
||||
needed-vec)]
|
||||
[:p
|
||||
{:font-size "smaller" :color "red"}
|
||||
(:description arg)]]]]]))
|
||||
|
||||
|
||||
(defn args-table
|
||||
"I display a component arguements in an easy to read format"
|
||||
[args]
|
||||
(let [name-width "130px"]
|
||||
(fn
|
||||
[]
|
||||
[v-box
|
||||
:children (concat
|
||||
[[title2 "Parameters"]
|
||||
[gap :size "10px"]]
|
||||
(map (partial arg-row name-width) args (cycle [true false])))])))
|
||||
|
||||
|
||||
(defn scroll-to-top
|
||||
[element]
|
||||
(set! (.-scrollTop element) 0))
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,66 @@
|
|||
// Compiled by ClojureScript 1.9.229 {}
|
||||
goog.provide('swinging_needle_meter.utils');
|
||||
goog.require('cljs.core');
|
||||
goog.require('re_com.core');
|
||||
/**
|
||||
* Return the absolute value of the (numeric) argument.
|
||||
*/
|
||||
swinging_needle_meter.utils.abs = (function swinging_needle_meter$utils$abs(n){
|
||||
var x__25461__auto__ = n;
|
||||
var y__25462__auto__ = (- n);
|
||||
return ((x__25461__auto__ > y__25462__auto__) ? x__25461__auto__ : y__25462__auto__);
|
||||
});
|
||||
/**
|
||||
* given a label and a relative path, return a component which hyperlinks to the GitHub URL in a new tab
|
||||
*/
|
||||
swinging_needle_meter.utils.github_hyperlink = (function swinging_needle_meter$utils$github_hyperlink(label,src_path){
|
||||
var base_url = [cljs.core.str("https://github.com/Day8/re-com/tree/master/")].join('');
|
||||
return new cljs.core.PersistentVector(null, 7, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.hyperlink_href,new cljs.core.Keyword(null,"label","label",1718410804),label,new cljs.core.Keyword(null,"href","href",-793805698),[cljs.core.str(base_url),cljs.core.str(src_path)].join(''),new cljs.core.Keyword(null,"target","target",253001721),"_blank"], null);
|
||||
});
|
||||
/**
|
||||
* Shown across the top of each page
|
||||
*/
|
||||
swinging_needle_meter.utils.panel_title = (function swinging_needle_meter$utils$panel_title(panel_name,src1,src2){
|
||||
return new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.v_box,new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentVector(null, 9, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.h_box,new cljs.core.Keyword(null,"margin","margin",-995903681),"0px 0px 9px 0px",new cljs.core.Keyword(null,"height","height",1025178622),"54px",new cljs.core.Keyword(null,"align","align",1964212802),new cljs.core.Keyword(null,"end","end",-268185958),new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentVector(null, 9, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.title,new cljs.core.Keyword(null,"label","label",1718410804),panel_name,new cljs.core.Keyword(null,"level","level",1290497552),new cljs.core.Keyword(null,"level1","level1",813811133),new cljs.core.Keyword(null,"margin-bottom","margin-bottom",388334941),"0px",new cljs.core.Keyword(null,"margin-top","margin-top",392161226),"2px"], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.gap,new cljs.core.Keyword(null,"size","size",1098693007),"25px"], null),(cljs.core.truth_(src1)?new cljs.core.PersistentVector(null, 9, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.h_box,new cljs.core.Keyword(null,"class","class",-2030961996),"all-small-caps",new cljs.core.Keyword(null,"gap","gap",80255254),"7px",new cljs.core.Keyword(null,"align","align",1964212802),new cljs.core.Keyword(null,"center","center",-748944368),new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.label,new cljs.core.Keyword(null,"label","label",1718410804),"source:"], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [swinging_needle_meter.utils.github_hyperlink,"component",src1], null),new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.label,new cljs.core.Keyword(null,"label","label",1718410804),"|",new cljs.core.Keyword(null,"style","style",-496642736),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"font-size","font-size",-1847940346),"12px"], null)], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [swinging_needle_meter.utils.github_hyperlink,"page",src2], null)], null)], null):null)], null)], null),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.line], null)], null)], null);
|
||||
});
|
||||
/**
|
||||
* 2nd level title
|
||||
*/
|
||||
swinging_needle_meter.utils.title2 = (function swinging_needle_meter$utils$title2(text,style){
|
||||
return new cljs.core.PersistentVector(null, 7, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.title,new cljs.core.Keyword(null,"label","label",1718410804),text,new cljs.core.Keyword(null,"level","level",1290497552),new cljs.core.Keyword(null,"level2","level2",-2044031830),new cljs.core.Keyword(null,"style","style",-496642736),style], null);
|
||||
});
|
||||
/**
|
||||
* given some status text, return a component that displays that status
|
||||
*/
|
||||
swinging_needle_meter.utils.status_text = (function swinging_needle_meter$utils$status_text(status,style){
|
||||
return new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"span","span",1394872991),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"span.bold","span.bold",636457745),"Status: "], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"span","span",1394872991),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"style","style",-496642736),style], null),status], null)], null);
|
||||
});
|
||||
swinging_needle_meter.utils.material_design_hyperlink = (function swinging_needle_meter$utils$material_design_hyperlink(text){
|
||||
return new cljs.core.PersistentVector(null, 7, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.hyperlink_href,new cljs.core.Keyword(null,"label","label",1718410804),text,new cljs.core.Keyword(null,"href","href",-793805698),"http://zavoloklom.github.io/material-design-iconic-font/icons.html",new cljs.core.Keyword(null,"target","target",253001721),"_blank"], null);
|
||||
});
|
||||
/**
|
||||
* I show one argument in an args table.
|
||||
*/
|
||||
swinging_needle_meter.utils.arg_row = (function swinging_needle_meter$utils$arg_row(name_width,arg,odd_row_QMARK_){
|
||||
var required = new cljs.core.Keyword(null,"required","required",1807647006).cljs$core$IFn$_invoke$arity$1(arg);
|
||||
var default$ = new cljs.core.Keyword(null,"default","default",-1987822328).cljs$core$IFn$_invoke$arity$1(arg);
|
||||
var arg_type = new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(arg);
|
||||
var needed_vec = ((cljs.core.not.call(null,required))?(((default$ == null))?new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"span.semibold.all-small-caps","span.semibold.all-small-caps",1766384283),"optional"], null)], null):new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"span.semibold.all-small-caps","span.semibold.all-small-caps",1766384283),"default:"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"span.semibold","span.semibold",-530788075),[cljs.core.str(default$)].join('')], null)], null)):new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"span.semibold.all-small-caps","span.semibold.all-small-caps",1766384283),"required"], null)], null));
|
||||
return new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.h_box,new cljs.core.Keyword(null,"style","style",-496642736),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"background","background",-863952629),(cljs.core.truth_(odd_row_QMARK_)?"#F4F4F4":"#FCFCFC")], null),new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"span","span",1394872991),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"class","class",-2030961996),"semibold",new cljs.core.Keyword(null,"style","style",-496642736),cljs.core.merge.call(null,re_com.core.align_style.call(null,new cljs.core.Keyword(null,"align-self","align-self",1475936794),new cljs.core.Keyword(null,"center","center",-748944368)),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"width","width",-384071477),name_width,new cljs.core.Keyword(null,"padding-left","padding-left",-1180879053),"15px"], null))], null),[cljs.core.str(new cljs.core.Keyword(null,"name","name",1843675177).cljs$core$IFn$_invoke$arity$1(arg))].join('')], null),new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.line,new cljs.core.Keyword(null,"size","size",1098693007),"1px",new cljs.core.Keyword(null,"color","color",1011675173),"white"], null),new cljs.core.PersistentVector(null, 9, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.v_box,new cljs.core.Keyword(null,"style","style",-496642736),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"padding","padding",1660304693),"7px 15px 2px 15px"], null),new cljs.core.Keyword(null,"gap","gap",80255254),"4px",new cljs.core.Keyword(null,"width","width",-384071477),"310px",new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.h_box,new cljs.core.Keyword(null,"gap","gap",80255254),"4px",new cljs.core.Keyword(null,"children","children",-940561982),cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"span.semibold","span.semibold",-530788075),arg_type], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.gap,new cljs.core.Keyword(null,"size","size",1098693007),"10px"], null)], null),needed_vec)], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"p","p",151049309),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"font-size","font-size",-1847940346),"smaller",new cljs.core.Keyword(null,"color","color",1011675173),"red"], null),new cljs.core.Keyword(null,"description","description",-1428560544).cljs$core$IFn$_invoke$arity$1(arg)], null)], null)], null)], null)], null);
|
||||
});
|
||||
/**
|
||||
* I display a component arguements in an easy to read format
|
||||
*/
|
||||
swinging_needle_meter.utils.args_table = (function swinging_needle_meter$utils$args_table(args){
|
||||
var name_width = "130px";
|
||||
return ((function (name_width){
|
||||
return (function (){
|
||||
return new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.v_box,new cljs.core.Keyword(null,"children","children",-940561982),cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [swinging_needle_meter.utils.title2,"Parameters"], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [re_com.core.gap,new cljs.core.Keyword(null,"size","size",1098693007),"10px"], null)], null),cljs.core.map.call(null,cljs.core.partial.call(null,swinging_needle_meter.utils.arg_row,name_width),args,cljs.core.cycle.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [true,false], null))))], null);
|
||||
});
|
||||
;})(name_width))
|
||||
});
|
||||
swinging_needle_meter.utils.scroll_to_top = (function swinging_needle_meter$utils$scroll_to_top(element){
|
||||
return element.scrollTop = (0);
|
||||
});
|
||||
|
||||
//# sourceMappingURL=utils.js.map?rel=1603199197134
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"\/Users\/simon\/workspace\/swinging-needle-meter\/docs\/js\/compiled\/out\/swinging_needle_meter\/utils.js","sources":["utils.cljs?rel=1603199197135"],"lineCount":66,"mappings":";AAAA;;;AAOA;;;kCAAA,lCAAMA,4EAEHC;AAFH,AAEM,IAAAC,mBAAKD;IAALE,mBAAO,GAAGF;AAAV,AAAA,SAAAC,mBAAAC,oBAAAD,mBAAAC;;AAGN;;;+CAAA,\/CAAMC,sGAEHC,MAAMC;AAFT,AAGE,IAAMC,WAAS,eAAA;AAAf,AAAA,qHAAA,6DAAA,gHAAA,wDAAA,hQACGC,kFACQH,2DAEA,eAAKE,wBAASD;;AAG3B;;;0CAAA,1CAAMG,4FAEHC,WAAWC,KAAKC;AAFnB,AAAA,4GAAA,6DAAA,mFAAA,qGAAA,yDAAA,kBAAA,yDAAA,OAAA,uDAAA,mDAAA,6DAAA,mFAAA,qGAAA,kEAAA,uDAAA,wDAAA,sEAAA,MAAA,gEAAA,cAAA,mGAAA,qDAAA,s2CAAA,1jFAGGC,qPACYC,0eAIYC,yEACeL,uWAIfM,oFACD,wBAAA,AAAA,qGAAA,wDAAA,iBAAA,iDAAA,MAAA,uDAAA,yDAAA,6DAAA,mFAAA,qGAAA,uDAAA,kBAAA,gIAAA,yBAAA,qGAAA,uDAAA,IAAA,uDAAA,2CAAA,gEAAA,uBAAA,gIAAA,oCAAA,\/yCAAML,yFAAMG,qeAKYG,8KACAb,yDAA6BO,gGAC7BM,yVAEAb,oDAAwBQ,sIAC3DM;;AAEf;;;qCAAA,rCAAMC,kFAEHC,KAAKC;AAFR,AAAA,4GAAA,4DAAA,uDAAA,0DAAA,\/LAGGN,yEACOK,6KAEAC;;AAEV;;;0CAAA,1CAAMC,4FAEHC,OAAOF;AAFV,AAAA,0FAAA,qDAAA,mFAAA,8DAAA,mBAAA,mFAAA,qDAAA,2CAAA,uDAKkBA,cAAOE;;AAEzB,wDAAA,xDAAMC,wHACHJ;AADH,AAAA,qHAAA,4DAAA,qDAAA,qEAAA,wDAAA,zQAEGZ,kFACQY;;AAMX;;;sCAAA,tCAAMK,oFAEHC,WAAWC,IAAIC;AAFlB,AAGE,IAAMC,WAAW,AAAA,2FAAWF;IACtBG,WAAW,AAAA,0FAAUH;IACrBI,WAAW,AAAA,mFAAOJ;IAClBK,aAAW,60BAAA,mFAAA,mFAAA,qGAAA,tlCAAI,AAACC,wBAAIJ,WACP,sBAAA,mFAAA,mFAAA,qGAAA,2BAAA,mFAAA,mFAAA,qGAAA,mBAAA,mFAAA,3qBAAI,aAAA,ZAAMC,ivBAEoD,eAAKA;AANtF,AAAA,4GAAA,uDAAA,2CAAA,gIAAA,6DAAA,mFAAA,mFAAA,qDAAA,2CAAA,wDAAA,WAAA,mjBAAA,oGAAA,qDAAA,MAAA,uDAAA,gBAAA,qGAAA,uDAAA,2CAAA,2DAAA,4BAAA,iDAAA,MAAA,uDAAA,QAAA,6DAAA,mFAAA,qGAAA,iDAAA,MAAA,yhBAAA,mFAAA,8CAAA,2CAAA,gEAAA,UAAA,uDAAA,z5FAQGhB,qLACuB,kCAAA,UAAA,1BAAIc,0eAED,uLAAA,2CAAA,kEAAA,sEAAA,1WAACM,0BAAM,kCAAA,iEAAA,nGAACC,+PACcT,yGAEpC,eAAK,AAAA,mFAAOC,2GACZT,sOACAL,oiBAIYC,sIAEU,2BAAA,mFAAA,mFAAA,wFAAA,mGAAA,qDAAA,jbAACsB,wQAAyBL,oGAChBf,4FACFgB,+UAGjB,AAAA,kGAAcL;;AAG5C;;;yCAAA,zCAAMU,0FAEHC;AAFH,AAGE,iBAAA,bAAMZ;AAAN,AACE;;AAAA,AAAA,4GAAA,lBAEGb,+EACU,2BAAA,mFAAA,sHAAA,qBAAA,mGAAA,qDAAA,jZAACuB,iMACGjB,2IACAH,4FACF,AAACuB,wBAAI,AAACC,4BAAQf,oCAAQC,YAAaY,KAAK,0BAAA,mFAAA,KAAA,lHAACG;;;;AAG5D,4CAAA,5CAAMC,gGACHC;AADH,AAEE,2BAAA,pBAAM,AAAaA","names":["swinging-needle-meter.utils\/abs","n","x__25461__auto__","y__25462__auto__","swinging-needle-meter.utils\/github-hyperlink","label","src-path","base-url","re-com.core\/hyperlink-href","swinging-needle-meter.utils\/panel-title","panel-name","src1","src2","re-com.core\/v-box","re-com.core\/h-box","re-com.core\/title","re-com.core\/gap","re-com.core\/label","re-com.core\/line","swinging-needle-meter.utils\/title2","text","style","swinging-needle-meter.utils\/status-text","status","swinging-needle-meter.utils\/material-design-hyperlink","swinging-needle-meter.utils\/arg-row","name-width","arg","odd-row?","required","default","arg-type","needed-vec","cljs.core\/not","cljs.core\/merge","re-com.core\/align-style","cljs.core\/concat","swinging-needle-meter.utils\/args-table","args","cljs.core\/map","cljs.core\/partial","cljs.core\/cycle","swinging-needle-meter.utils\/scroll-to-top","element"]}
|
||||
|
|
@ -0,0 +1,170 @@
|
|||
(ns swinging-needle-meter.views
|
||||
(:require [re-frame.core :as rf]
|
||||
[re-com.core :refer [h-box v-box box gap line label title progress-bar slider checkbox p single-dropdown]]
|
||||
[re-com.util :refer [deref-or-value]]
|
||||
[swinging-needle-meter.swinging-needle-meter :refer [swinging-needle-meter swinging-needle-args-desc]]
|
||||
[swinging-needle-meter.utils :refer [panel-title title2 args-table github-hyperlink status-text]]
|
||||
[reagent.core :as reagent]
|
||||
[swinging-needle-meter.utils :refer [abs]]))
|
||||
|
||||
;; ------------------------------------------------------------------------------------
|
||||
;; Demo: swinging-needle-meter
|
||||
;; ------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
(defn swinging-needle-demo
|
||||
[]
|
||||
(let [unit @(rf/subscribe [:unit])
|
||||
min-val @(rf/subscribe [:min-val])
|
||||
max-val @(rf/subscribe [:max-val])
|
||||
warn-val @(rf/subscribe [:warn-val])
|
||||
gradations @(rf/subscribe [:gradations])
|
||||
size @(rf/subscribe [:size])]
|
||||
(fn
|
||||
[]
|
||||
[v-box
|
||||
:size "auto"
|
||||
:gap "10px"
|
||||
:children [[panel-title "Swinging needle meter"]
|
||||
[h-box
|
||||
:gap "100px"
|
||||
:children [[v-box
|
||||
:gap "10px"
|
||||
:width "450px"
|
||||
:children [[title2 "Notes"]
|
||||
[status-text "Wildly experimental"]
|
||||
[p "An SVG swinging needle meter intended to be useful in dashboards."]
|
||||
[p "Note that the cursor will vanish if the setpoint is null or is less than or equal to min-value; this is intentional."]
|
||||
[p "Note that if the value of model is lower then min-value or greater than max-value,
|
||||
it will be limited as it would be on a mechanical meter."]
|
||||
[p "You can hide the redzone by setting its style to the style 'snm-scale', or by setting 'warn-value' equal to 'max-value'."]
|
||||
|
||||
[title2 "Behaviour"]
|
||||
|
||||
[p "min-value and max-value must be numbers; max-value must be greater than min-value.
|
||||
The default behaviour is of a swinging needle meter with the needle deflection proportional
|
||||
to the value of the model (also a number) expressed as a proportion of the difference between
|
||||
min-value and max-value."]
|
||||
|
||||
[p "A red-zone can be introduced by setting a value for warn-value between min-value and max-value. Additionally, if
|
||||
the value of model exceeds warn-value the class alarm-class will be set on the meter indicating a warning state."]
|
||||
|
||||
[p "A cursor can be shown by setting the value of set-point between min-value and max-value. A tolerance value can be specified
|
||||
by setting a value for tolerance. If the difference between the model value and the setpoint value is less than the tolerance
|
||||
value, the class target-class will be set on the meter to indicate an on-target status. The setpoint value, like the model value,
|
||||
may change dynamically at run-time."]
|
||||
|
||||
[args-table swinging-needle-args-desc]]]
|
||||
[v-box
|
||||
:gap "10px"
|
||||
:children [[title2 "Demo"]
|
||||
[v-box
|
||||
:gap "20px"
|
||||
:children [[swinging-needle-meter
|
||||
:model @(rf/subscribe [:old-value])
|
||||
:setpoint @(rf/subscribe [:setpoint])
|
||||
:unit @(rf/subscribe [:unit])
|
||||
:min-value @(rf/subscribe [:min-val])
|
||||
:warn-value @(rf/subscribe [:warn-val])
|
||||
:max-value @(rf/subscribe [:max-val])
|
||||
:tolerance 2
|
||||
:alarm-class "snm-warning"
|
||||
:gradations @(rf/subscribe [:gradations])
|
||||
:height (int (* @(rf/subscribe [:size]) 6))
|
||||
:width (int (* @(rf/subscribe [:size]) 10))]
|
||||
[title :level :level3 :label "Parameters"]
|
||||
[h-box
|
||||
:gap "10px"
|
||||
:children [[box :align :start :child [:code ":model"]]
|
||||
[slider
|
||||
:model @(rf/subscribe [:value])
|
||||
:min -100
|
||||
:max 100
|
||||
:width "200px"
|
||||
:on-change #(rf/dispatch [:set-value %])]
|
||||
[label :label @(rf/subscribe [:value])]]]
|
||||
[h-box
|
||||
:gap "10px"
|
||||
:children [[box :align :start :child [:code ":setpoint"]]
|
||||
[slider
|
||||
:model @(rf/subscribe [:setpoint])
|
||||
:min -100
|
||||
:max 100
|
||||
:width "200px"
|
||||
:on-change #(rf/dispatch [:set-setpoint %])]
|
||||
[label :label @(rf/subscribe [:setpoint])]]]
|
||||
[h-box
|
||||
:gap "10px"
|
||||
:children [[box :align :start :child [:code ":min-val"]]
|
||||
[slider
|
||||
:model @(rf/subscribe [:min-val])
|
||||
:min -100
|
||||
:max 100
|
||||
:width "200px"
|
||||
:on-change #(rf/dispatch [:set-min-value %])]
|
||||
[label :label @(rf/subscribe [:min-val])]]]
|
||||
[h-box
|
||||
:gap "10px"
|
||||
:children [[box :align :start :child [:code ":max-val"]]
|
||||
[slider
|
||||
:model @(rf/subscribe [:max-val])
|
||||
:min -100
|
||||
:max 100
|
||||
:width "200px"
|
||||
:on-change #(rf/dispatch [:set-max-value %])]
|
||||
[label :label @(rf/subscribe [:max-val])]]]
|
||||
[h-box
|
||||
:gap "10px"
|
||||
:children [[box :align :start :child [:code ":warn-val"]]
|
||||
[slider
|
||||
:model @(rf/subscribe [:warn-val])
|
||||
:min -100
|
||||
:max 100
|
||||
:width "200px"
|
||||
:on-change #(rf/dispatch [:set-warning-value %])]
|
||||
[label :label @(rf/subscribe [:warn-val])]]]
|
||||
[h-box
|
||||
:gap "10px"
|
||||
:children [[box :align :start :child [:code ":gradations"]]
|
||||
[slider
|
||||
:model @(rf/subscribe [:gradations])
|
||||
:min 0
|
||||
:max 10
|
||||
:width "200px"
|
||||
:on-change #(rf/dispatch [:set-gradations %])]
|
||||
[label :label @(rf/subscribe [:gradations])]]]
|
||||
[h-box
|
||||
:gap "10px"
|
||||
:children [[box :align :start :child [:code ":unit"]]
|
||||
[single-dropdown
|
||||
:model @(rf/subscribe [:unit])
|
||||
:choices [{:id "Mw" :label "Megawatts" :group "Electrical"}
|
||||
{:id "M/s" :label "Metres per second" :group "Motion"}
|
||||
{:id "F/f" :label "Furlongs per fortnight" :group "Motion"}
|
||||
{:id "°C" :label "Degrees Celsius" :group "Temperature"}]
|
||||
:width "200px"
|
||||
:on-change #(rf/dispatch [:set-unit %])]]]
|
||||
[h-box
|
||||
:gap "10px"
|
||||
:children [[box :align :start :child [:code ":size"]]
|
||||
[slider
|
||||
:model size
|
||||
:min 25
|
||||
:max 100
|
||||
:width "200px"
|
||||
:on-change #(rf/dispatch [:set-size %])]
|
||||
[label :label size]]]
|
||||
]]]]]]]])))
|
||||
|
||||
|
||||
;; core holds a reference to panel, so need one level of indirection to get figwheel updates
|
||||
(defn panel
|
||||
[]
|
||||
[swinging-needle-demo])
|
||||
|
||||
|
||||
(defn main-panel []
|
||||
(fn []
|
||||
[v-box
|
||||
:height "100%"
|
||||
:children [[swinging-needle-demo]]]))
|
||||
|
|
@ -0,0 +1 @@
|
|||
{:rename-macros {}, :renames {}, :use-macros {}, :excludes #{}, :name swinging-needle-meter.views, :imports nil, :requires {rf re-frame.core, re-frame.core re-frame.core, re-com.core re-com.core, re-com.util re-com.util, swinging-needle-meter.swinging-needle-meter swinging-needle-meter.swinging-needle-meter, swinging-needle-meter.utils swinging-needle-meter.utils, reagent reagent.core, reagent.core reagent.core}, :uses {h-box re-com.core, p re-com.core, deref-or-value re-com.util, args-table swinging-needle-meter.utils, slider re-com.core, progress-bar re-com.core, title2 swinging-needle-meter.utils, checkbox re-com.core, box re-com.core, status-text swinging-needle-meter.utils, title re-com.core, github-hyperlink swinging-needle-meter.utils, v-box re-com.core, swinging-needle-args-desc swinging-needle-meter.swinging-needle-meter, single-dropdown re-com.core, abs swinging-needle-meter.utils, line re-com.core, label re-com.core, swinging-needle-meter swinging-needle-meter.swinging-needle-meter, panel-title swinging-needle-meter.utils, gap re-com.core}, :defs {swinging-needle-demo {:protocol-inline nil, :meta {:file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/views.cljs", :line 15, :column 7, :end-line 15, :end-column 27, :arglists (quote ([]))}, :name swinging-needle-meter.views/swinging-needle-demo, :variadic false, :file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/views.cljs", :end-column 27, :method-params ([]), :protocol-impl nil, :arglists-meta (nil nil), :column 1, :line 15, :end-line 15, :max-fixed-arity 0, :fn-var true, :arglists (quote ([]))}, panel {:protocol-inline nil, :meta {:file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/views.cljs", :line 161, :column 7, :end-line 161, :end-column 12, :arglists (quote ([]))}, :name swinging-needle-meter.views/panel, :variadic false, :file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/views.cljs", :end-column 12, :method-params ([]), :protocol-impl nil, :arglists-meta (nil nil), :column 1, :line 161, :end-line 161, :max-fixed-arity 0, :fn-var true, :arglists (quote ([]))}, main-panel {:protocol-inline nil, :meta {:file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/views.cljs", :line 166, :column 7, :end-line 166, :end-column 17, :arglists (quote ([]))}, :name swinging-needle-meter.views/main-panel, :variadic false, :file "/Users/simon/workspace/swinging-needle-meter/src/cljs/swinging_needle_meter/views.cljs", :end-column 17, :method-params ([]), :protocol-impl nil, :arglists-meta (nil nil), :column 1, :line 166, :end-line 166, :max-fixed-arity 0, :fn-var true, :arglists (quote ([]))}}, :require-macros {reagent reagent.core, reagent.core reagent.core}, :cljs.analyzer/constants {:seen #{:warn-val :set-min-value :min :warn-value :children :align :group :unit :level3 :value :tolerance :width :start :old-value :min-value :choices :size :level :max-value :gradations :max :label :id :max-val :gap :code :setpoint :alarm-class :set-value :set-max-value :child :set-unit :on-change :set-warning-value :set-gradations :set-size :min-val :height :set-setpoint :model}, :order [:unit :min-val :max-val :warn-val :gradations :size :gap :children :width :model :old-value :setpoint :min-value :warn-value :max-value :tolerance :alarm-class :height :level :level3 :label :align :start :child :code :value :min :max :on-change :set-value :set-setpoint :set-min-value :set-max-value :set-warning-value :set-gradations :choices :id :group :set-unit :set-size]}, :doc nil}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"\/Users\/simon\/workspace\/swinging-needle-meter\/docs\/js\/compiled\/out\/swinging_needle_meter\/views.js","sources":["views.cljs?rel=1603199198880"],"lineCount":64,"mappings":"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","names":["swinging-needle-meter.views\/swinging-needle-demo","cljs.core\/deref","unit","re-frame.core\/subscribe","min-val","max-val","warn-val","gradations","size","p1__33490#","p1__33491#","p1__33492#","p1__33493#","p1__33494#","p1__33495#","p1__33496#","p1__33497#","re-com.core\/v-box","swinging-needle-meter.utils\/panel-title","re-com.core\/h-box","swinging-needle-meter.utils\/title2","swinging-needle-meter.utils\/status-text","re-com.core\/p","swinging-needle-meter.utils\/args-table","swinging-needle-meter.swinging-needle-meter\/swinging-needle-args-desc","swinging-needle-meter.swinging-needle-meter\/swinging-needle-meter","re-com.core\/title","re-com.core\/box","re-com.core\/slider","re-frame.core\/dispatch","re-com.core\/label","re-com.core\/single-dropdown","swinging-needle-meter.views\/panel","swinging-needle-meter.views\/main-panel"]}
|
||||
Loading…
Add table
Add a link
Reference in a new issue