Class: Jeanny::CSSCode

Inherits:
Code
  • Object
show all
Defined in:
lib/jeanny/engine.rb

Instance Attribute Summary

Attributes inherited from Code

#code

Instance Method Summary collapse

Methods inherited from Code

#initialize

Constructor Details

This class inherits a constructor from Jeanny::Code

Instance Method Details

#replace(classes) ⇒ Object



332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
# File 'lib/jeanny/engine.rb', line 332

def replace classes

    skips = Array.new

    @code.gsub! /(\s*\/\*!?\s*jeanny-ignore\s*\*\/\s*)\s*(.*?)\s*\1/ do |match|
        skips.push $2
        "_skip_#{skips.length}_"
    end
    
    # Заменяем в экспрешенах
    @code.each_expression do |expression|
        @code.gsub! expression do |a|
            JSCode.new(expression).replace(classes)
        end
    end
    
    @code.gsub!(/\[class\^=(.*?)\]/) do |class_name|
        if classes.include? $1
            class_name.gsub $1, classes[$1]
        else
            class_name
        end
    end
    
    # Случайная строка
    unique_string = Time.now.object_id.to_s

    # Проходимся по классам
    classes.each do |full_name, short_name|
        
        # Заменяем старое имя класса на новое, плюс случайное число,
        # чтобы знать что этот класс мы уже изменяли
        #   TODO: Может это нахрен не надо?
        @code = @code.gsub(/\.#{full_name}(?=[^-\w])/, ".#{unique_string}#{short_name}")
    end

    skips.each_with_index do |code, index|
        @code.gsub! /_skip_#{index + 1}_/, code
    end

    # После замены имен классов, случайное число уже не нужно,
    # так что удаляем его, и возвращаем css с замененными значениями
    @code.gsub(unique_string, '')
    
end