Pertanyaan menggunakan fungsi warna sass tanpa mesin sass


Saya ingin menggunakan fungsi warna Sass di dalam kelas, tanpa Sass Engine. Saya sudah menggunakan permata sass dalam proyek jadi saya pikir piggy-backing akan menjadi sesuatu semudah:

class Rectangle
  include Sass::Script::Functions
  def color
    Sass::Script::Color.new([0x82, 0x39, 0x06])
  end
  def render
    #haml engine executed with context of self
    #so that within temlate i could call
    #  %stop{offset: '0%', stop: {color: lighten(color)}}
  end
end

MEMPERBARUI: Lihat #render di atas, saya ingin menelepon lighten(color) dari dalam template haml yang disajikan dalam konteks a Rectangle contoh

Tetapi saya mendapatkan metode yang tidak terdefinisi assert_type kesalahan. Itu assert_type metode didefinisikan dalam Sass::Script::Functions::EvaluationContext kelas. (file github)

Bermain-main di irb, hanya untuk mendapatkan sesuatu yang dekat dengan yang saya inginkan seperti ini:

require 'sass'
eval_context = Sass::Script::Functions::EvaluationContext.new({})
#yes the Sass::Script::Number.new(10) is requried, a simple 10 will not work
color = eval_context.rgb(Sass::Script::Number.new(10), Sass::Script::Number.new(10), Sass::Script::Number.new(10))
eval_context.lighten(color, Sass::Script::Number.new(10))

yang gila - apakah saya kehilangan sesuatu?


5
2017-07-16 16:09


asal


Jawaban:


Memperbarui

Sekarang setelah saya memahami masalah Anda dengan lebih baik, mengapa tidak hanya menulis ulang fungsi.

require 'sass'

class Rectangle
  include Sass::Script

  def color
    @color ||= Sass::Script::Color.new([0x82, 0x39, 0x06])
  end

  def lighten(ammount)
    hsl = color.hsl.dup
    hsl[2] += ammount
    @color = Sass::Script::Color.new(hue: hsl[0], saturation: hsl[1], lightness: [2])
  end
end

rec = Rectangle.new
rec.lighten(20)

Jawaban Lama

Anda tidak gila, Anda baru saja memasukkan bagian yang salah.

Kode ini berjalan seperti yang Anda harapkan. Perhatikan bahwa saya menghapus ::Functions dari include.

require 'sass'

class Rectangle
  include Sass::Script

  def color
    color = Sass::Script::Color.new([0x82, 0x39, 0x06])
    puts color.class
  end
end

rec = Rectangle.new
rec.color

3
2017-07-16 17:49



Sass :: Script :: Parser.parse ('lighten (# 333, 10)', 0, 0) .perform (Sass :: Environment.new)


5
2017-09-18 09:30