Отображать только месяцы в dateRangeInput или dateInput для блестящего приложения [программирование R]

Я использую блестящий для создания веб-приложения. Один из моих графиков использует только месяцы определенного года, чтобы получить точки на графике.

Я хочу, чтобы пользователи выбирали только месяцы. Хотя я упомянул

format = 'mm-yyyy' и startview = 'year' в ---- +: = 2 =: + ---- или dateInput

Каждый раз, когда пользователь нажимает на поле ввода даты, он отображает месяцы, а затем при щелчке по любому месяцу у пользователя отображаются даты в этом месяце.

Я хочу, чтобы пользователь отображался до нескольких месяцев. Если пользователь нажимает на месяц, даты не должны отображаться.

Как этого достичь?

12 голосов | спросил nitishmadhukar 1 J000000Wednesday15 2015, 08:10:45

3 ответа


0

Я не верю, что dateInput реализовал параметр начальной загрузки minViewMode в качестве аргумента функции, поэтому я добавил его в свою собственную копию функции (см. ниже). Мне пришлось добавить некоторые другие необходимые функции. Это не здорово. Наилучшим вариантом, вероятно, будет отправка запроса в RStudio, поскольку добавить эту опцию minviewmode кажется простым.

mydateInput <- function(inputId, label, value = NULL, min = NULL, max = NULL,
                      format = "yyyy-mm-dd", startview = "month", weekstart = 0, language = "en", minviewmode="months",
                      width = NULL) {

  # If value is a date object, convert it to a string with yyyy-mm-dd format
  # Same for min and max
  if (inherits(value, "Date"))  value <- format(value, "%Y-%m-%d")
  if (inherits(min,   "Date"))  min   <- format(min,   "%Y-%m-%d")
  if (inherits(max,   "Date"))  max   <- format(max,   "%Y-%m-%d")

  htmltools::attachDependencies(
    tags$div(id = inputId,
             class = "shiny-date-input form-group shiny-input-container",
             style = if (!is.null(width)) paste0("width: ", validateCssUnit(width), ";"),

             controlLabel(inputId, label),
             tags$input(type = "text",
                        # datepicker class necessary for dropdown to display correctly
                        class = "form-control datepicker",
                        `data-date-language` = language,
                        `data-date-weekstart` = weekstart,
                        `data-date-format` = format,
                        `data-date-start-view` = startview,
                        `data-date-min-view-mode` = minviewmode,
                        `data-min-date` = min,
                        `data-max-date` = max,
                        `data-initial-date` = value
             )
    ),
    datePickerDependency
  )
}

`%AND%` <- function(x, y) {
  if (!is.null(x) && !is.na(x))
    if (!is.null(y) && !is.na(y))
      return(y)
  return(NULL)
}

controlLabel <- function(controlName, label) {
  label %AND% tags$label(class = "control-label", `for` = controlName, label)
}

datePickerDependency <- htmlDependency(
  "bootstrap-datepicker", "1.0.2", c(href = "shared/datepicker"),
  script = "js/bootstrap-datepicker.min.js",
  stylesheet = "css/datepicker.css")
ответил Steven M. Mortimer 23 PM000000110000002931 2015, 23:21:29
0

@MartinJohnHadley: По сути, путем добавления тех же трех строк @StevenMortimer, добавленных в код dateInput к dateRangeInput. Это добавляет minViewMode к shinys dateRangeInput.

  1. Найти код можно на https://github.com/rstudio /блестящий /блоб /ведущий /R /вход-daterange.R
  2. добавить аргумент по умолчанию minviewmode="months"
  3. добавьте data-date-min-view-mode = minviewmode в оба элемента
  4. Добавить недостающие аргументы (поиск в github архиве из глянцевых)
  5. Наслаждайтесь пользовательским вводом dateRange: -)

С уважением, Сандро

код:

dateRangeMonthsInput <- function(inputId, label, start = NULL, end = NULL,
                            min = NULL, max = NULL, format = "yyyy-mm-dd", startview = "month",
                            minviewmode="months", # added manually
                            weekstart = 0, language = "en", separator = " to ", width = NULL) {

   # If start and end are date objects, convert to a string with yyyy-mm-dd format
   # Same for min and max
   if (inherits(start, "Date"))  start <- format(start, "%Y-%m-%d")
   if (inherits(end,   "Date"))  end   <- format(end,   "%Y-%m-%d")
   if (inherits(min,   "Date"))  min   <- format(min,   "%Y-%m-%d")
   if (inherits(max,   "Date"))  max   <- format(max,   "%Y-%m-%d")

   htmltools::attachDependencies(
     div(id = inputId,
         class = "shiny-date-range-input form-group shiny-input-container",
         style = if (!is.null(width)) paste0("width: ", validateCssUnit(width), ";"),

         controlLabel(inputId, label),
         # input-daterange class is needed for dropdown behavior
         div(class = "input-daterange input-group",
             tags$input(
               class = "input-sm form-control",
               type = "text",
               `data-date-language` = language,
               `data-date-weekstart` = weekstart,
               `data-date-format` = format,
               `data-date-start-view` = startview,
               `data-date-min-view-mode` = minviewmode, # added manually
               `data-min-date` = min,
               `data-max-date` = max,
               `data-initial-date` = start
             ),
             span(class = "input-group-addon", separator),
             tags$input(
               class = "input-sm form-control",
               type = "text",
               `data-date-language` = language,
               `data-date-weekstart` = weekstart,
               `data-date-format` = format,
               `data-date-start-view` = startview,
               `data-date-min-view-mode` = minviewmode, # added manually
               `data-min-date` = min,
               `data-max-date` = max,
               `data-initial-date` = end
             )
         )
     ),
     datePickerDependency
   )
 }

 `%AND%` <- function(x, y) {
   if (!is.null(x) && !is.na(x))
     if (!is.null(y) && !is.na(y))
       return(y)
   return(NULL)
 }

 controlLabel <- function(controlName, label) {
   label %AND% tags$label(class = "control-label", `for` = controlName, label)
 }

 # the datePickerDependency is taken from https://github.com/rstudio/shiny/blob/master/R/input-date.R
 datePickerDependency <- htmltools::htmlDependency(
 "bootstrap-datepicker", "1.6.4", c(href = "shared/datepicker"),
 script = "js/bootstrap-datepicker.min.js",
 stylesheet = "css/bootstrap-datepicker3.min.css",
 # Need to enable noConflict mode. See #1346.
 head = "<script>
 (function() {
 var datepicker = $.fn.datepicker.noConflict();
 $.fn.bsDatepicker = datepicker;
 })();
 </script>")
ответил shosaco 16 PM00000020000003431 2016, 14:47:34
0

Кому нужно использовать коды из предыдущего ответа: вам нужно использовать обновленный datePickerDependecy (который можно взять по адресу https :. //github.com/rstudio/shiny/blob/master/R/input-date.R )

В настоящее время это так:

datePickerDependency <- htmlDependency(
"bootstrap-datepicker", "1.6.4", c(href = "shared/datepicker"),
script = "js/bootstrap-datepicker.min.js",
stylesheet = "css/bootstrap-datepicker3.min.css",
# Need to enable noConflict mode. See #1346.
head = "<script>
(function() {
var datepicker = $.fn.datepicker.noConflict();
$.fn.bsDatepicker = datepicker;
})();
</script>")

Я публикую это замечание в качестве ответа из-за недостаточной репутации: (

ответил gico 5 Maypm17 2017, 18:12:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132