Я нашел быстрый взлом, основываясь на предложенной здесь отправной точке: https://css -tricks.com / almanac / properties / u / user-select /
library(shiny)
css <- ".nocopy {
-webkit-user-select: none; /* Chrome all / Safari all */
-moz-user-select: none; /* Firefox all */
-ms-user-select: none; /* IE 10+ */
user-select: none; /* Likely future */
}"
func <- "func <- function(x, y, ...) {
x + y
}"
ui <- fluidPage(
tags$style(HTML(css)),
"Copyable:",
tags$pre(func),
tags$hr(),
tags$p("Not copyable:", class = "nocopy"),
tags$pre(func, class = "nocopy")
)
server <- function(input, output, session) {}
shinyApp(ui, server)
И, как следует из этого, он может применяться к различным элементам HTML, включая <p>
и <pre>
. Я не тестировал другие элементы.
Как скажет вам почти любой веб-разработчик, это тривиально победить. Использование FF (большинство браузеров имеют схожую функциональность):
Ctrl-I
(ярлык для Инструменты> Веб-разработчик &; Инструменты переключения )
Ctrl-Shift-C
( "Выбрать и элемент со страницы" )
- нажмите на элемент, который вы хотите выделить и скопировать
- в редакторе кода внизу страницы измените
class="nocopy"
на class=""
(или что-нибудь еще)
Результат выполнения этого для текста "Not copyable:"
можно увидеть здесь:
(Я показываю эти шаги, чтобы ясно указать, что я считаю, что это небольшая попытка предотвратить лень. Те, кто выбирает более активную лень (??), не будут иметь проблем с этим. Если они на самом деле, они просто удалят определение .nocopy
напрямую, чтобы повлиять на всю страницу. Но, опять же, вы не можете заставить студентов учиться так, как вы хотите: -)
Редактировать
Это так же легко работает в файле Rmd:
Файл: Nova.css
.nocopy {
-webkit-user-select: none; /* Chrome all / Safari all */
-moz-user-select: none; /* Firefox all */
-ms-user-select: none; /* IE 10+ */
user-select: none; /* Likely future */
}
Файл: Nova.Rmd
---
output: html_document
css: Nova.css
---
Copyable:
```{r chunk1}
func1 <- function(x, y, ...) {
x + y
}
```
<p class="nocopy">Not copyable:</p>
```{r chunk2, class.source = "nocopy"}
func2 <- function(x, y, ...) {
x + y
}
```
Существует два варианта knitr
, которые можно использовать здесь: class.source=
и class.output=
. Я предполагаю, что вы хотите, чтобы источник был «защищен», но вы можете также захотеть вывод.