闪亮降级fontawesome 5至4

2024-01-31

我正在做一个与 fontawesome 4.7 非常相关的闪亮项目,它给我们带来了巨大的价值。作为 fontawesome 的免费用户,我认为升级到 5.3.1 没有任何优势。许多免费图标变得更加丑陋/粗糙,并且必须付费购买专业版才能获得类似于 4.7 的图标样式。

Example table available in 4.7 with 9 cells font awesome 4.7,1

in 5.3 table is onle free as 4 cells and rather chubby lines. The old 9 cell format is only available for pro usersfontawesome 5.3.1

从我个人的简单角度来看,fontawesome 团队似乎打算大力推动他们的免费用户转向专业版。

  • Rstudio闪亮1.1链接到fontawesome 4.7.1
  • Rstudio闪亮1.2链接到fontawesome 5.3.1

有没有什么简单的方法可以同时拥有shiny 1.2 和fontawesome 4.7.1?

EDIT猪排的链接似乎非常相关,我会尝试一下并更新......


  • 下载 fontawesome 4.7.1 并解压
  • 在 global.R 中插入下面的代码
  • 更新解压后的 fontawesome 的路径

....然后shiny可以做到fontawesome 4.7.1和+5。这个特定的解决方案复制为猪排推荐 https://stackoverflow.com/questions/32686195/shinydashboard-some-font-awesome-icons-not-working/32689957#32689957安装的闪亮库中旧版本的font-awesome。我还更新了 icon() 函数,以便可以让很棒的版本共存并确保正确的链接。在此解决方案中,新的 icon() 函数被放置在 globalEnv 中,因此位于 search() 路径的顶部。这在不改变任何其他内容的情况下解决了我的代码库遗留问题。

然而,为了制作一个新的闪亮应用程序,我将命名图标函数 icon_legacy() 以避免依赖 search() 路径或在闪亮应用程序的支持 R 包中实现。

##install new shiny version
install.packages("shiny") #install newest shiny
library(shiny)
library(htmltools) 


#source in this function to globalEnv

#' Legacy means good old iconic times
#'
#' @param local_path_fa_4.7.1 
#' @param shiny_path
#'
#' @return
#' @export
#' @import shiny htmltools
#' @details #this installs legacy font-awesome and return a function  similar to icon
#'
#' @examples 
#' 
#' install.packages("shiny") #install newest shiny
#' library(shiny)
#' library(htmltools)
#' my_fa_path = "./misc/global_source/fa_shiny_4.7.1/font-awesome"
#' icon_legacy = activate_icon_legacy(my_fa_path) #tadaaa use icon_legacy now
#' #btw css pseudo-elements seem to work out-of-the-box also
#' 
#' icon = icon_legacy #you may also feel like placing icon in global env to override shiny::icon
activate_icon_legacy = function(
  local_path_fa_4.7.1,
  shiny_path = system.file(package="shiny")
) {

  #find out what version of shiny is installed
  uses_fontawesome5 = packageVersion("shiny")>=1.2 #because implemented since 1.2
  shiny_resource_path = paste0(shiny_path,"/www/shared")
  misses_fontawesome4  = !"font-awesome" %in% list.files(shiny_resource_path) #because new fa dir is called 'fontawesome'


  #if legacy dir is missing from library copy into installed library
  if(uses_fontawesome5 && misses_fontawesome4) { 
    file.copy(
      from = local_path_fa_4.7.1,
      to = shiny_resource_path,
      recursive = TRUE,copy.mode = FALSE
    )
  }

  #import minor dependency from shiny library into closure
  font_awesome_brands = shiny:::font_awesome_brands
  tags = htmltools::tags


  #source this modified icon() function from library/shiny/R/bootstrap.R
  #notice the legacy feature if true will use old fa 4.7.1 else new
  icon_legacy <- function(name, class = NULL, lib = "font-awesome",legacy=TRUE) {
    prefixes <- list(
      "font-awesome" = "fa",
      "glyphicon" = "glyphicon"
    )
    prefix <- prefixes[[lib]]

    # determine stylesheet
    if (is.null(prefix)) {
      stop("Unknown font library '", lib, "' specified. Must be one of ",
           paste0('"', names(prefixes), '"', collapse = ", "))
    }

    # build the icon class (allow name to be null so that other functions
    # e.g. buildTabset can pass an explicit class value)
    iconClass <- ""
    if (!is.null(name)) {
      prefix_class <- prefix
      if (prefix_class == "fa" && name %in% font_awesome_brands) {
        prefix_class <- "fab"
      }
      iconClass <- paste0(prefix_class, " ", prefix, "-", name)
    }
    if (!is.null(class))
      iconClass <- paste(iconClass, class)

    iconTag <- tags$i(class = iconClass)

    # font-awesome needs an additional dependency (glyphicon is in bootstrap)
    if (lib == "font-awesome") {
      if(legacy) {
        htmlDependencies(iconTag) <- htmlDependency(
          "fontwesome","4.7.1", "www/shared/font-awesome", package = "shiny",
          stylesheet = c("css/font-awesome.css","font-awesome.min.css"))
      } else {
        htmlDependencies(iconTag) <- htmlDependency(
          "font-awesome", "5.3.1", "www/shared/fontawesome", package = "shiny",
          stylesheet = c("css/all.min.css","css/v4-shims.min.css")
        )
      }

    }

    htmltools::browsable(iconTag)
  }

  return(icon_legacy)
}


#download extract fontawesome 4.7.1 and write path here
my_fa_path = "./misc/global_source/fa_shiny_4.7.1/font-awesome"
icon_legacy = activate_icon_legacy(my_fa_path) #tadaaa use icon_legacy now
#btwcss pseudos seem to work out-of-the-box also

#one may also feel like placing icon_legacy() as icon() in globalEnv to override shiny::icon
#if youre too lazy change all your original code. This will work any code in ui.R and server.R
#however packages with explicit namespaces are likely not overridden by this.
icon = icon_legacy

#now shiny code will behave like this
icon("table",legacy=TRUE)  # old style 9 cell table
icon("table",legacy=FALSE) # new fat 4 cell table


#...one may feel like opting for more explicit and strict namespace solution wrapped in some package.
#but that would be a lot more boiler plate code not relevant for this answer

#this solution also fixed my fontawesome CSS pseudo-elements issues
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

闪亮降级fontawesome 5至4 的相关文章

  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0
  • 将绘图调用拆分为多个块

    我正在编写一个图的解释 其中我基本上将在第一个块中创建图 然后描述该输出 并在第二个块中添加一个轴 然而 似乎每个块都会强制一个新的绘图环境 因此当我们尝试使用以下命令运行块时会出现错误axis独自的 观察 output html docu
  • kernlab 中 SVM 训练之外的核矩阵计算

    我正在开发一种新算法 该算法可以生成修改后的核矩阵以用于 SVM 训练 但遇到了一个奇怪的问题 出于测试目的 我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型 例如 Model with kernelMatri
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • pyomo + 网状错误 6 句柄无效

    我正在尝试运行pyomo优化 我收到错误消息 Error 6 The handle is invalid 不知道如何解释它 环顾四周似乎与特权有关 但我不太明白 在下面找到完整的错误跟踪以及重现它的玩具示例 完整的错误跟踪 py run f
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • 使用 R 选择第一个非 NA 值

    df lt data frame ID c 1 1 1 2 3 3 3 test c NA 5 5 6 4 NA 7 3 NA 10 9 我想创建一个名为 value 的变量 它是每个单独 ID 测试的第一个非 NA 值 对于只有NA的个体
  • r 中训练和测试数据的最小最大缩放/归一化

    我正在创建一个函数 它将训练集和测试集作为其参数 最小 最大缩放 标准化并返回训练集并使用这些same最小值和最小 最大范围的值 标准化并返回测试集 到目前为止 这是我想出的功能 min max scaling lt function tr
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 基于时间窗口的不规则时间序列的优化滚动函数

    有没有办法使用 rollapply 来自zoo包或类似的东西 优化功能 rollmean rollmedian等 使用基于时间的窗口计算滚动函数 而不是基于大量观察的函数 我想要的很简单 对于不规则时间序列中的每个元素 我想计算一个具有 N
  • 更改闪亮 R 中的默认浏览器

    我在 RStudio 中使用 01 hello 虽然在 IE 中默认打开程序时它不会显示直方图 但即使在 Chrome 中 滑块也不起作用 我无法滑动条形图并看到直方图中的变化 如何更改 R 中的默认浏览器 以便闪亮启动 Chrome 而不
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou
  • 如何获得所有大于x且有位置的数字?

    V lt c 1 3 2 4 2 3 1 X lt 3 pos lt V V X pos is 3 3 我需要的是所有 3 个的位置 I need 2 and 6 哪些职位是3 in V Use which pos lt which V 3
  • 为什么 R 更新后 sim_slopes() 中会出现此错误?

    我正在尝试使用 交互 包来创建简单斜率的约翰逊 尼曼图 但是 当尝试运行 sim slopes 函数时 出现以下错误 直到我将R更新到4 2 2 我才没有遇到这个问题 我使用的是 macOS Ventura 13 1 Error class
  • 纵向比较 R 中的值...并进行扭转

    我有许多人在多达四个时间段进行的测试结果 这是一个示例 dat lt structure list Participant ID c A A A A B B B B C C C C phase structure c 1L 2L 3L 4L
  • 如何修复 R 中 Kaplan Meier 图的风险表计算错误

    以下是一个数据帧 其中 6 个参与者中的每一个都有唯一的 record ID 我想绘制一个生存分析图 其中包含感兴趣事件的复发以及在时间间隔 tstart 到 tstop 内 暴露 药物剂量 数值变量 的时间依赖性协变量 每个参与者的最大
  • 如何将plot中的单变量列表图表转换为ggplot2格式?

    我正在搜索 但仍然找不到一个非常简单的问题的答案 我们如何使用 R 中的 ggplot2 生成一个变量的简单线图 我正在分析时间序列数据 并且想要对图表进行更复杂的操作 我认为如果我使用 ggplot2 代替会更好plot It works

随机推荐