| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  | # Construct UI for the methods editor. | 
					
						
							| 
									
										
										
										
											2021-10-19 16:44:29 +02:00
										 |  |  | methods_ui <- function(id) { | 
					
						
							|  |  |  |     verticalLayout( | 
					
						
							|  |  |  |         h3("Methods"), | 
					
						
							|  |  |  |         div(style = "margin-top: 16px"), | 
					
						
							|  |  |  |         lapply(methods, function(method) { | 
					
						
							|  |  |  |             verticalLayout( | 
					
						
							|  |  |  |                 checkboxInput( | 
					
						
							|  |  |  |                     NS(id, method$id), | 
					
						
							|  |  |  |                     span( | 
					
						
							|  |  |  |                         method$description, | 
					
						
							| 
									
										
										
										
											2021-12-15 12:41:12 +01:00
										 |  |  |                         class = "control-label" | 
					
						
							| 
									
										
										
										
											2021-10-19 16:44:29 +02:00
										 |  |  |                     ), | 
					
						
							|  |  |  |                     value = TRUE | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 sliderInput( | 
					
						
							|  |  |  |                     NS(id, sprintf("%s_weight", method$id)), | 
					
						
							|  |  |  |                     NULL, | 
					
						
							| 
									
										
										
										
											2021-11-16 15:20:42 +01:00
										 |  |  |                     min = -1.0, | 
					
						
							|  |  |  |                     max = 1.0, | 
					
						
							|  |  |  |                     step = 0.01, | 
					
						
							|  |  |  |                     value = 1.0 | 
					
						
							| 
									
										
										
										
											2021-10-19 16:44:29 +02:00
										 |  |  |                 ) | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2021-10-21 11:43:34 +02:00
										 |  |  |         }), | 
					
						
							|  |  |  |         actionButton( | 
					
						
							| 
									
										
										
										
											2021-11-19 15:38:46 +01:00
										 |  |  |             NS(id, "reset_button"), | 
					
						
							|  |  |  |             "Reset weights", | 
					
						
							| 
									
										
										
										
											2021-10-21 11:43:34 +02:00
										 |  |  |             class = "btn-primary" | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2021-10-19 16:44:29 +02:00
										 |  |  |     ) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  | # Construct server for the methods editor. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # @param analysis The reactive containing the results to be weighted. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # @return A reactive containing the weighted results. | 
					
						
							| 
									
										
										
										
											2021-11-17 22:58:55 +01:00
										 |  |  | methods_server <- function(id, analysis) { | 
					
						
							| 
									
										
										
										
											2021-10-19 16:44:29 +02:00
										 |  |  |     moduleServer(id, function(input, output, session) { | 
					
						
							|  |  |  |         # Observe each method's enable button and synchronise the slider state. | 
					
						
							|  |  |  |         lapply(methods, function(method) { | 
					
						
							| 
									
										
										
										
											2021-11-17 22:58:55 +01:00
										 |  |  |             observeEvent(input[[method$id]], | 
					
						
							|  |  |  |                 { # nolint | 
					
						
							|  |  |  |                     shinyjs::toggleState(sprintf("%s_weight", method$id)) | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 ignoreInit = TRUE | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2021-10-19 16:44:29 +02:00
										 |  |  |         }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-19 15:38:46 +01:00
										 |  |  |         observeEvent( | 
					
						
							|  |  |  |             { # nolint | 
					
						
							|  |  |  |                 analysis() | 
					
						
							|  |  |  |                 input$reset_button | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { # nolint | 
					
						
							|  |  |  |                 for (method in methods) { | 
					
						
							|  |  |  |                     updateCheckboxInput( | 
					
						
							|  |  |  |                         session, | 
					
						
							|  |  |  |                         method$id, | 
					
						
							|  |  |  |                         value = TRUE | 
					
						
							|  |  |  |                     ) | 
					
						
							| 
									
										
										
										
											2021-10-19 16:44:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-19 15:38:46 +01:00
										 |  |  |                     updateSliderInput( | 
					
						
							|  |  |  |                         session, | 
					
						
							|  |  |  |                         sprintf("%s_weight", method$id), | 
					
						
							|  |  |  |                         value = analysis()$weights[[method$id]] | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             ignoreNULL = FALSE | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         reactive({ | 
					
						
							| 
									
										
										
										
											2021-10-19 16:44:29 +02:00
										 |  |  |             weights <- NULL | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for (method in methods) { | 
					
						
							|  |  |  |                 if (input[[method$id]]) { | 
					
						
							|  |  |  |                     weight <- input[[sprintf("%s_weight", method$id)]] | 
					
						
							|  |  |  |                     weights[[method$id]] <- weight | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-17 22:58:55 +01:00
										 |  |  |             geposan::ranking(analysis(), weights) | 
					
						
							| 
									
										
										
										
											2021-10-19 16:44:29 +02:00
										 |  |  |         }) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | } |