【问题标题】:Checking CSS within a rails controller or in plain ruby?在 rails 控制器或普通 ruby​​ 中检查 CSS?
【发布时间】:2011-10-18 15:16:31
【问题描述】:

我需要获取一个数据库文本字段并对其进行解析

  1. 重复和垃圾
  2. 恶意
  3. 列入白名单的选择器
  4. 压缩并输出为 css 文件

由于可能有一种我不知道的轨道方式或一些现成的东西,所以我在浪费时间尝试重新发明轮子之前先问一下。我的搜索一无所获,主要是在 rails 中似乎是针对视图级别的,而 css 似乎是该领域的一个无人看管的利基市场(尽管有很多 html)。

我知道 sanitize gem(不会立即执行 css,我需要绘制和编码的另一件事)和内置的 rails 东西(没有很多教程,主要针对视图等级)。我需要一个可以在控制器或队列中使用的 gem、lib、模块或类似的东西。

编辑:

无需深入了解项目的具体细节:管理用户可以为他们的网站部分添加 CSS。作为流程的一部分,我将保存原始 css,然后处理并保存处理后的 css。 db 的东西主要是存档,css 文件立即输出。因为很少有地方可以添加修改后的 css,并且只有管理员可以访问 css,所以它有点工作,但我希望在未来使其更加健壮,因为管理员可能不熟悉安全需求或不熟悉CSS 感知可以运行。

最基本的例子是它只是管理页面上的一个文本字段。管理员在那里剪切并粘贴 css,提交,然后应用程序将其转换为包含在指定页面中的 css 文件,这是因为当前管理员知道应用程序、应用程序的 css 以及他们可以更改和不能更改的内容.我们的目标是让未来可能不那么精明的管理员更强大。

【问题讨论】:

  • 您正在从数据库中的值构建样式表,对吗?是的,这很不寻常。我在想 csv 输入错误,但看起来你真的不想要 css。你能解释一下用法吗,例如“我的公司希望将其样式表信息存储在数据库中,以便更轻松地共享它,我们可以针对它编写一个应用程序以集中修改和维护样式” - 或任何您需要的东西。可能会帮助人们思考答案,并可能鼓励横向思考。
  • 有趣。您在需要转换为 CSS 文件的数据库中存储了什么?一个数据库输入和 CSS 输出的例子会很好。

标签: ruby-on-rails css ruby ruby-on-rails-3 parsing


【解决方案1】:

要简单地清理 CSS,您可以使用 Rails 内置的 SanitizeHelper:http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-sanitize_css


你看过萨斯吗?它具有内置的所有解析逻辑,用于 CSS 的超集。您可以添加一项功能(Sass 支持)并省去一次性解析/验证 CSS 的需要。

你可以像这样从 Sass 生成输出 CSS(或者只是纯 CSS,因为 Sass [使用 SCSS 语法] 是一个完全向后兼容的 CSS 超集):

output_css = Sass::Engine.new(sass_content, :syntax => :scss).render

您可能想要查看http://sass-lang.com/ 的许多选项


另一个选项是更少。新的 Twitter Bootstrap 框架使用 Less,Rails 3.1 使用 Sass。最大的不同是官方的 Less 解析器/编译器是用 JavaScript 构建的,因此您可以在用户工作时在用户的浏览器中进行验证和编译,并在他们保存之前向他们显示任何错误之前。当然,如果您还想使用 Less 来验证传入的 CSS,您需要在 Rails 应用程序中运行 JavaScript 引擎(例如 V8)。

【讨论】:

  • 有趣,我在开发中使用 sass,但我不知道更进化的方面。现有项目中的示例?我再看看。
  • 我不确定您所说的“更进化的方面”是什么意思。在我的一个项目中,我使用这样的 Sass 将颜色主题与布局模板相结合,以生成半定制网站。我不能真正提供代码,但我只是添加了一个 css 格式的路由,该路由进入 assemble.css.erb 文件并呈现就像你在上面看到的那样。
  • 从我的角度来看,更多进化意味着高级用法,更准确地说。我可以处理 sass 的基础知识,但我不是高级开发人员(我只是根据需要拼凑一些东西)。我确实记得读过一些关于主题的东西,但没有跟进。但是我已经尝试了您的建议,从长远来看,它应该对我正在尝试做的事情有用。
  • 我仍然没有提及白名单和恶意检查(我不确定我是否立即需要它们,因为此时我只能接受有效的 css),但这为我在此期间的项目。
  • 刚刚更新了问题以包含指向此的链接,以防有人错过它,但这里是:api.rubyonrails.org/classes/ActionView/Helpers/…
猜你喜欢
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多