Skip to content

Instantly share code, notes, and snippets.

@c3ry5
Created March 31, 2014 21:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save c3ry5/9902768 to your computer and use it in GitHub Desktop.
Save c3ry5/9902768 to your computer and use it in GitHub Desktop.
compass callback to restructure css files on stylesheet saved
require 'fileutils'
on_stylesheet_saved do |filename|
fileContents = File.read filename
File.open(filename, 'w+') do |f|
mediaQueryObject = {}
regexMedia = /@media([^{]*){((?:(?!}\s*}).)*}.*?)}/xoim
regexSelector = /\s*([^{]*){(.*?)}/xoim
regexSpace = /\n+|\r+/xoim
bodyContents = fileContents.gsub(regexMedia,'')
mediaQueryArray = fileContents.scan(regexMedia)
mediaQueryArray.each do |media_name, media_value|
if !mediaQueryObject[media_name]
mediaQueryObject[media_name] = ""
end
mediaQueryObject[media_name] << media_value
end
mediaQueryObject.each do |media_name, media_value|
selectorObject = {}
selectorArray = media_value.scan(regexSelector)
selectorArray.each do |selector_name, selector_value|
if !selectorObject[selector_name]
selectorObject[selector_name] = ""
end
selectorObject[selector_name] << selector_value
end
mediaQueryObject[media_name] = media_value.gsub(regexSelector,'')
selectorObject.each do |selector_name, selector_value|
mediaQueryObject[media_name] << "\n\t" + selector_name + "{" + selector_value + "}\n"
end
bodyContents << "@media" + media_name + "{" + mediaQueryObject[media_name] + " }\n"
end
finalContents = bodyContents.gsub(regexSpace,"\n")
f.write(finalContents)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment