Получение JavaScript-виджетов ImpactStory, отображаемых в ячейке таблицы в приложении R Shiny

[Вопрос был вчера также опубликован на https://groups.google.com/d/msg/shiny-discuss/1UmzvZJwM54/gdMmX7QQ-eIJ пока нет ответов]

Я работал над приложением Shiny, которое отображает как в виде таблицы, так и в виде диаграммы rCharts (NVD3) некоторые необработанные альтметрические данные нескольких журнальных статей http://spark.rstudio.com/ttso/alt./

Мой код с примерами данных https://gist.github.com/tts/6990101

Пока все хорошо, но теперь я столкнулся с трудностями при попытке включить в таблицу виджеты JavaScript, описанные в http://impactstory.org/api-docs Виджеты как таковые работают нормально, как в этом примере HTML http://users.tkk.fi/sonkkila/alt/arts.html - но в моей таблице Shiny последний (IS) столбец, в котором они должны появиться, пуст.

Когда я оставляю стол непродезинфицированным, я вижу, что HTML-код там есть, но когда он продезинфицирован, он исчезает. Код renderTable в server.R: https://gist.github.com/tts/6990101#file-server-r-L69-L85

Из исходного кода HTML я также вижу, что сценарий ImpactStory находится вверху страницы, как и должно быть.

Все указатели приветствуются!

Отказ от ответственности: хотя я уже некоторое время играю с R и Shiny, я считаю себя новичком в JavaScript/CSS, поэтому я могу упустить что-то очевидное.

РЕДАКТИРОВАТЬ: Просто для уточнения: конечно, очищенный HTML-код исчезает в этот момент, потому что нет значения текстового элемента. Интересно, а) есть ли конфликты между разными JS-скриптами, может быть, они должны идти в другом порядке (нужно спросить об этом ImpactStory) или б) есть некоторые проблемы в том, как xtable() генерирует вывод, или в) Shiny не знает, как взаимодействовать со скриптом ImpactStory.js или d) Shiny вообще не видит скрипт. Должен ли я создавать собственный компонент вывода?

EDIT2: AFAIK проблема заключается в том, что реактивно выводимая таблица не видит JavaScript. Проверено: когда я вручную добавляю нединамический HTML-код в ui.R со всеми атрибутами, которые ImpactStory JS должен знать о статье, виджеты отображаются нормально. Кроме того, если я добавлю в server.R элемент script в выводимом фрейме данных, виджеты будут отображаться, но также - никогда не перестанут это делать, что приведет к циклу :) Я полагаю, что мне нужно это аналогично тому, что задано здесь, в вопросе № 2


person tts    schedule 16.10.2013    source источник


Ответы (1)


Что ж, я нашел одно решение, которое не очень красиво, но на данный момент сойдет.

renderTable использует xtable для рендеринга HTML-таблицы, и вы можете определить свою собственную функцию очистки, см. http://cran.r-project.org/web/packages/xtable/vignettes/xtableGallery.pdf (стр. 7)

Здесь я просто заменяю заголовок столбца «Виджет» строкой, определяющей скрипт:

output$table <- renderTable({  
   ...
  }, include.rownames = FALSE, sanitize.text.function = function(s) sub("Widget", "<script type=\"text/javascript\" src=\"http://impactstory.org/embed/v1/impactstory.js\"></script>", s))

По непонятной мне пока причине, сначала идет набор двойных виджетов.

Спасибо тебе за твое терпение.

person tts    schedule 20.10.2013