rapper_lite 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +10 -0
- data/Gemfile.lock +31 -0
- data/LICENSE.txt +20 -0
- data/README.markdown +65 -0
- data/Rakefile +31 -0
- data/VERSION +1 -0
- data/bin/rapper_lite +19 -0
- data/lib/rapper_lite/compressors.rb +109 -0
- data/lib/rapper_lite/config.rb +61 -0
- data/lib/rapper_lite/utils.rb +19 -0
- data/lib/rapper_lite/versioning.rb +38 -0
- data/lib/rapper_lite.rb +50 -0
- data/lib/tasks.rb +37 -0
- data/lib/yui/css_compressor.rb +279 -0
- data/rapper_lite.gemspec +141 -0
- data/spec/fixtures/src/simple_1.css +4 -0
- data/spec/fixtures/src/simple_1.js +5 -0
- data/spec/fixtures/src/simple_2.css +4 -0
- data/spec/fixtures/src/subfolder/simple_2.js +5 -0
- data/spec/fixtures/testcases/combination/expected/base.css +1 -0
- data/spec/fixtures/testcases/combination/expected/base.js +1 -0
- data/spec/fixtures/testcases/combination/expected/base_combined.css +1 -0
- data/spec/fixtures/testcases/combination/expected/base_combined.js +1 -0
- data/spec/fixtures/testcases/combination/rapper.yml +26 -0
- data/spec/fixtures/testcases/concatenation/expected/base.css +8 -0
- data/spec/fixtures/testcases/concatenation/expected/base.js +10 -0
- data/spec/fixtures/testcases/concatenation/expected/base_combined.css +12 -0
- data/spec/fixtures/testcases/concatenation/expected/base_combined.js +15 -0
- data/spec/fixtures/testcases/concatenation/rapper.yml +26 -0
- data/spec/fixtures/yui_css/background-position.css +2 -0
- data/spec/fixtures/yui_css/background-position.css.min +1 -0
- data/spec/fixtures/yui_css/box-model-hack.css +9 -0
- data/spec/fixtures/yui_css/box-model-hack.css.min +1 -0
- data/spec/fixtures/yui_css/bug2527974.css +9 -0
- data/spec/fixtures/yui_css/bug2527974.css.min +1 -0
- data/spec/fixtures/yui_css/bug2527991.css +19 -0
- data/spec/fixtures/yui_css/bug2527991.css.min +1 -0
- data/spec/fixtures/yui_css/bug2527998.css +4 -0
- data/spec/fixtures/yui_css/bug2527998.css.min +1 -0
- data/spec/fixtures/yui_css/bug2528034.css +5 -0
- data/spec/fixtures/yui_css/bug2528034.css.min +1 -0
- data/spec/fixtures/yui_css/charset-media.css +9 -0
- data/spec/fixtures/yui_css/charset-media.css.min +1 -0
- data/spec/fixtures/yui_css/color.css +7 -0
- data/spec/fixtures/yui_css/color.css.min +1 -0
- data/spec/fixtures/yui_css/comment.css +3 -0
- data/spec/fixtures/yui_css/comment.css.min +1 -0
- data/spec/fixtures/yui_css/concat-charset.css +15 -0
- data/spec/fixtures/yui_css/concat-charset.css.min +1 -0
- data/spec/fixtures/yui_css/decimals.css +3 -0
- data/spec/fixtures/yui_css/decimals.css.min +1 -0
- data/spec/fixtures/yui_css/dollar-header.css +7 -0
- data/spec/fixtures/yui_css/dollar-header.css.min +3 -0
- data/spec/fixtures/yui_css/font-face.css +6 -0
- data/spec/fixtures/yui_css/font-face.css.min +1 -0
- data/spec/fixtures/yui_css/ie5mac.css +5 -0
- data/spec/fixtures/yui_css/ie5mac.css.min +1 -0
- data/spec/fixtures/yui_css/media-empty-class.css +16 -0
- data/spec/fixtures/yui_css/media-empty-class.css.min +1 -0
- data/spec/fixtures/yui_css/media-multi.css +5 -0
- data/spec/fixtures/yui_css/media-multi.css.min +1 -0
- data/spec/fixtures/yui_css/media-test.css +5 -0
- data/spec/fixtures/yui_css/media-test.css.min +1 -0
- data/spec/fixtures/yui_css/opacity-filter.css +14 -0
- data/spec/fixtures/yui_css/opacity-filter.css.min +1 -0
- data/spec/fixtures/yui_css/preserve-new-line.css +6 -0
- data/spec/fixtures/yui_css/preserve-new-line.css.min +3 -0
- data/spec/fixtures/yui_css/preserve-strings.css +7 -0
- data/spec/fixtures/yui_css/preserve-strings.css.min +1 -0
- data/spec/fixtures/yui_css/preserve_string.css +7 -0
- data/spec/fixtures/yui_css/preserve_string.css.min +1 -0
- data/spec/fixtures/yui_css/pseudo-first.css +16 -0
- data/spec/fixtures/yui_css/pseudo-first.css.min +1 -0
- data/spec/fixtures/yui_css/pseudo.css +4 -0
- data/spec/fixtures/yui_css/pseudo.css.min +1 -0
- data/spec/fixtures/yui_css/special-comments.css +13 -0
- data/spec/fixtures/yui_css/special-comments.css.min +9 -0
- data/spec/fixtures/yui_css/star-underscore-hacks.css +5 -0
- data/spec/fixtures/yui_css/star-underscore-hacks.css.min +1 -0
- data/spec/fixtures/yui_css/string-in-comment.css +8 -0
- data/spec/fixtures/yui_css/string-in-comment.css.min +1 -0
- data/spec/fixtures/yui_css/zeros.css +6 -0
- data/spec/fixtures/yui_css/zeros.css.min +1 -0
- data/spec/rapper_lite_spec.rb +41 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/vendor_spec.rb +23 -0
- metadata +203 -0
@@ -0,0 +1,279 @@
|
|
1
|
+
# Source: https://github.com/rhulse/ruby-css-toolkit
|
2
|
+
#
|
3
|
+
# Only minor modifications to module structure, code style, and comments have
|
4
|
+
# been made.
|
5
|
+
#
|
6
|
+
# Original license:
|
7
|
+
# =================
|
8
|
+
#
|
9
|
+
# Ruby CSS Compressor Copyright License Agreement (BSD License)
|
10
|
+
#
|
11
|
+
# Copyright (c) 2010, Richard Hulse
|
12
|
+
# All rights reserved.
|
13
|
+
#
|
14
|
+
# YUI CSS files in the test suite are Copyright (c) 2009, Yahoo! Inc. All rights reserved.
|
15
|
+
#
|
16
|
+
# Redistribution and use of this software in source and binary forms,
|
17
|
+
# with or without modification, are permitted provided that the following
|
18
|
+
# conditions are met:
|
19
|
+
#
|
20
|
+
# * Redistributions of source code must retain the above
|
21
|
+
# copyright notice, this list of conditions and the
|
22
|
+
# following disclaimer.
|
23
|
+
#
|
24
|
+
# * Redistributions in binary form must reproduce the above
|
25
|
+
# copyright notice, this list of conditions and the
|
26
|
+
# following disclaimer in the documentation and/or other
|
27
|
+
# materials provided with the distribution.
|
28
|
+
#
|
29
|
+
# * Neither the name of Yahoo! Inc. nor the names of its
|
30
|
+
# contributors may be used to endorse or promote products
|
31
|
+
# derived from this software without specific prior
|
32
|
+
# written permission of Yahoo! Inc.
|
33
|
+
#
|
34
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
35
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
36
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
37
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
38
|
+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
39
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
40
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
41
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
42
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
43
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
44
|
+
|
45
|
+
module YUI
|
46
|
+
# Methods for working with CSS.
|
47
|
+
class CSS
|
48
|
+
|
49
|
+
class << self
|
50
|
+
|
51
|
+
attr_reader :input_size, :output_size
|
52
|
+
|
53
|
+
# Compress CSS using the Ruby port of the YUI Compressor (by
|
54
|
+
# <a href="https://github.com/rhulse">Richard Hulse</a>).
|
55
|
+
#
|
56
|
+
# @param [String] css The CSS to be compressed.
|
57
|
+
#
|
58
|
+
# @param [Integer] line_length (optional) Number of columns to wrap to.
|
59
|
+
# Default is no wrapping.
|
60
|
+
#
|
61
|
+
# @return [String] Compressed CSS.
|
62
|
+
def compress(css, line_length=0)
|
63
|
+
@preservedTokens = []
|
64
|
+
@comments = []
|
65
|
+
@output_size = 0
|
66
|
+
@input_size = css.length
|
67
|
+
|
68
|
+
css = process_comments_and_strings(css)
|
69
|
+
|
70
|
+
# Normalize all whitespace strings to single spaces. Easier to work with that way.
|
71
|
+
css.gsub!(/\s+/, ' ')
|
72
|
+
|
73
|
+
# Remove the spaces before the things that should not have spaces before them.
|
74
|
+
# But, be careful not to turn "p :link {...}" into "p:link{...}"
|
75
|
+
# Swap out any pseudo-class colons with the token, and then swap back.
|
76
|
+
css.gsub!(/(?:^|\})[^\{:]+\s+:+[^\{]*\{/) do |match|
|
77
|
+
match.gsub(':', '___PSEUDOCLASSCOLON___')
|
78
|
+
end
|
79
|
+
css.gsub!(/\s+([!\{\};:>+\(\)\],])/, '\1')
|
80
|
+
css.gsub!(/([!\{\}:;>+\(\[,])\s+/, '\1')
|
81
|
+
css.gsub!('___PSEUDOCLASSCOLON___', ':')
|
82
|
+
|
83
|
+
# special case for IE
|
84
|
+
css.gsub!(/:first-(line|letter)(\{|,)/, ':first-\1 \2')
|
85
|
+
|
86
|
+
# no space after the end of a preserved comment
|
87
|
+
css.gsub!(/\*\/ /, '*/')
|
88
|
+
|
89
|
+
# If there is a @charset, then only allow one, and push to the top of the file.
|
90
|
+
css.gsub!(/^(.*)(@charset "[^"]*";)/i, '\2\1')
|
91
|
+
css.gsub!(/^(\s*@charset [^;]+;\s*)+/i, '\1')
|
92
|
+
|
93
|
+
# Put the space back in some cases, to support stuff like
|
94
|
+
# @media screen and (-webkit-min-device-pixel-ratio:0){
|
95
|
+
css.gsub!(/\band\(/i, "and (")
|
96
|
+
|
97
|
+
# remove unnecessary semicolons
|
98
|
+
css.gsub!(/;+\}/, '}')
|
99
|
+
|
100
|
+
# Replace 0(%, em, ex, px, in, cm, mm, pt, pc) with just 0.
|
101
|
+
css.gsub!(/([\s:])([+-]?0)(?:%|em|ex|px|in|cm|mm|pt|pc)/i, '\1\2')
|
102
|
+
|
103
|
+
# Replace 0 0 0 0; with 0.
|
104
|
+
css.gsub!(/:(?:0 )+0(;|\})/, ':0\1')
|
105
|
+
|
106
|
+
# Restore background-position:0 0; if required
|
107
|
+
css.gsub!(/background-position:0(;|\})/i, 'background-position:0 0\1')
|
108
|
+
|
109
|
+
# Replace 0.6 with .6, but only when preceded by : or a space.
|
110
|
+
css.gsub!(/(:|\s)0+\.(\d+)/, '\1.\2')
|
111
|
+
|
112
|
+
# Shorten colors from rgb(51,102,153) to #336699
|
113
|
+
# This makes it more likely that it'll get further compressed in the next step.
|
114
|
+
css.gsub!(/rgb\s*\(\s*([0-9,\s]+)\s*\)/) do |match|
|
115
|
+
'#' << $1.scan(/\d+/).map{|n| n.to_i.to_s(16).rjust(2, '0') }.join
|
116
|
+
end
|
117
|
+
|
118
|
+
# Shorten colors from #AABBCC to #ABC. Note that we want to make sure
|
119
|
+
# the color is not preceded by either ", " or =. Indeed, the property
|
120
|
+
# filter: chroma(color="#FFFFFF");
|
121
|
+
# would become
|
122
|
+
# filter: chroma(color="#FFF");
|
123
|
+
# which makes the filter break in IE.
|
124
|
+
css.gsub!(/([^"'=\s])(\s?)\s*#([0-9a-f])\3([0-9a-f])\4([0-9a-f])\5/i, '\1\2#\3\4\5')
|
125
|
+
|
126
|
+
# shorter opacity IE filter
|
127
|
+
css.gsub!(/progid:DXImageTransform\.Microsoft\.Alpha\(Opacity=/i, "alpha(opacity=")
|
128
|
+
|
129
|
+
# Remove empty rules.
|
130
|
+
css.gsub!(/[^\};\{\/]+\{\}/, '')
|
131
|
+
|
132
|
+
if (line_length > 0)
|
133
|
+
# Some source control tools don't like it when files containing lines longer
|
134
|
+
# than, say 8000 characters, are checked in. The linebreak option is used in
|
135
|
+
# that case to split long lines after a specific column.
|
136
|
+
startIndex = 0
|
137
|
+
index = 0
|
138
|
+
length = css.length
|
139
|
+
while (index < length)
|
140
|
+
index += 1
|
141
|
+
if (css[index - 1,1] === '}' && index - startIndex > line_length)
|
142
|
+
css = css.slice(0, index) + "\n" + css.slice(index, length)
|
143
|
+
startIndex = index
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
# Replace multiple semi-colons in a row by a single one
|
149
|
+
# See SF bug #1980989
|
150
|
+
css.gsub!(/[;]+/, ';')
|
151
|
+
|
152
|
+
#restore preserved comments and strings
|
153
|
+
css = restore_preserved_comments_and_strings(css)
|
154
|
+
|
155
|
+
# top and tail whitespace
|
156
|
+
css.strip!
|
157
|
+
|
158
|
+
@output_size = css.length
|
159
|
+
css
|
160
|
+
end
|
161
|
+
|
162
|
+
private
|
163
|
+
|
164
|
+
# Process comments (preserve special comments, nuke the rest) and strings
|
165
|
+
# (preserve them).
|
166
|
+
def process_comments_and_strings(css_text)
|
167
|
+
css = css_text.clone
|
168
|
+
|
169
|
+
startIndex = 0
|
170
|
+
endIndex = 0
|
171
|
+
i = 0
|
172
|
+
max = 0
|
173
|
+
token = ''
|
174
|
+
totallen = css.length
|
175
|
+
placeholder = ''
|
176
|
+
|
177
|
+
# collect all comment blocks
|
178
|
+
while (startIndex = css.index(/\/\*/, startIndex))
|
179
|
+
endIndex = css.index(/\*\//, startIndex + 2)
|
180
|
+
unless endIndex
|
181
|
+
endIndex = totallen
|
182
|
+
end
|
183
|
+
token = css.slice(startIndex+2..endIndex-1)
|
184
|
+
@comments.push(token)
|
185
|
+
css = css.slice(0..startIndex+1).to_s + "___YUICSSMIN_PRESERVE_CANDIDATE_COMMENT_" + (@comments.length - 1).to_s + "___" + css.slice(endIndex, totallen).to_s
|
186
|
+
startIndex += 2
|
187
|
+
end
|
188
|
+
|
189
|
+
# preserve strings so their content doesn't get accidentally minified
|
190
|
+
css.gsub!(/("([^\\"]|\\.|\\)*")|('([^\\']|\\.|\\)*')/) do |match|
|
191
|
+
quote = match[0,1]
|
192
|
+
string = match.slice(1..-2)
|
193
|
+
|
194
|
+
# maybe the string contains a comment-like substring?
|
195
|
+
# one, maybe more? put'em back then
|
196
|
+
if string =~ /___YUICSSMIN_PRESERVE_CANDIDATE_COMMENT_/
|
197
|
+
@comments.each_index do |index|
|
198
|
+
string.gsub!(/___YUICSSMIN_PRESERVE_CANDIDATE_COMMENT_#{index.to_s}___/, @comments[index])
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
# minify alpha opacity in filter strings
|
203
|
+
string.gsub!(/progid:DXImageTransform\.Microsoft\.Alpha\(Opacity=/i, "alpha(opacity=")
|
204
|
+
@preservedTokens.push(string)
|
205
|
+
|
206
|
+
quote + "___YUICSSMIN_PRESERVED_TOKEN_" + (@preservedTokens.length - 1).to_s + "___" + quote
|
207
|
+
end
|
208
|
+
|
209
|
+
# used to jump one index in loop
|
210
|
+
ie5_hack = false
|
211
|
+
# strings are safe, now wrestle the comments
|
212
|
+
@comments.each_index do |index|
|
213
|
+
if ie5_hack
|
214
|
+
ie5_hack = false
|
215
|
+
next
|
216
|
+
end
|
217
|
+
|
218
|
+
token = @comments[index]
|
219
|
+
placeholder = "___YUICSSMIN_PRESERVE_CANDIDATE_COMMENT_" + index.to_s + "___"
|
220
|
+
|
221
|
+
# ! in the first position of the comment means preserve
|
222
|
+
# so push to the preserved tokens keeping the !
|
223
|
+
if (token[0,1] === "!")
|
224
|
+
@preservedTokens.push(token)
|
225
|
+
css.gsub!( /#{placeholder}/i, "___YUICSSMIN_PRESERVED_TOKEN_" + (@preservedTokens.length - 1).to_s + "___")
|
226
|
+
next
|
227
|
+
end
|
228
|
+
|
229
|
+
# \ in the last position looks like hack for Mac/IE5
|
230
|
+
# shorten that to /*\*/ and the next one to /**/
|
231
|
+
if (token[-1,1] === "\\")
|
232
|
+
@preservedTokens.push("\\")
|
233
|
+
css.gsub!( /#{placeholder}/, "___YUICSSMIN_PRESERVED_TOKEN_" + (@preservedTokens.length - 1).to_s + "___")
|
234
|
+
# keep the next comment but remove its content
|
235
|
+
@preservedTokens.push("")
|
236
|
+
css.gsub!(/___YUICSSMIN_PRESERVE_CANDIDATE_COMMENT_#{index+1}___/, "___YUICSSMIN_PRESERVED_TOKEN_" + (@preservedTokens.length - 1).to_s + "___")
|
237
|
+
ie5_hack = true
|
238
|
+
next
|
239
|
+
end
|
240
|
+
|
241
|
+
# keep empty comments after child selectors (IE7 hack)
|
242
|
+
# e.g. html >/**/ body
|
243
|
+
if ((token.length === 0) && (startIndex = css.index( /#{placeholder}/)))
|
244
|
+
if (startIndex > 2)
|
245
|
+
if (css[startIndex - 3,1] === '>')
|
246
|
+
@preservedTokens.push("")
|
247
|
+
css.gsub!(/#{placeholder}/, "___YUICSSMIN_PRESERVED_TOKEN_" + (@preservedTokens.length - 1).to_s + "___")
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
# in all other cases kill the comment
|
253
|
+
css.gsub!( /\/\*#{placeholder}\*\//, "")
|
254
|
+
end
|
255
|
+
|
256
|
+
css
|
257
|
+
end
|
258
|
+
|
259
|
+
# Restore @preservedTokens back in to the css.
|
260
|
+
def restore_preserved_comments_and_strings(clean_css)
|
261
|
+
css = clean_css.clone
|
262
|
+
css_length = css.length
|
263
|
+
@preservedTokens.each_index do |index|
|
264
|
+
# slice these back into place rather than regex, because
|
265
|
+
# complex nested strings cause the replacement to fail
|
266
|
+
placeholder = "___YUICSSMIN_PRESERVED_TOKEN_#{index}___"
|
267
|
+
startIndex = css.index(placeholder, 0)
|
268
|
+
next unless startIndex # skip if nil
|
269
|
+
endIndex = startIndex + placeholder.length
|
270
|
+
|
271
|
+
css = css.slice(0..startIndex-1).to_s + @preservedTokens[index] + css.slice(endIndex, css_length).to_s
|
272
|
+
end
|
273
|
+
|
274
|
+
css
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
end
|
data/rapper_lite.gemspec
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "rapper_lite"
|
8
|
+
s.version = "0.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Tyson Tate"]
|
12
|
+
s.date = "2011-10-01"
|
13
|
+
s.description = "Simple static asset packaging. Compresses files only when they're updated."
|
14
|
+
s.email = "tyson@tysontate.com"
|
15
|
+
s.executables = ["rapper_lite"]
|
16
|
+
s.extra_rdoc_files = [
|
17
|
+
"LICENSE.txt",
|
18
|
+
"README.markdown"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
"Gemfile",
|
22
|
+
"Gemfile.lock",
|
23
|
+
"LICENSE.txt",
|
24
|
+
"README.markdown",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"bin/rapper_lite",
|
28
|
+
"lib/rapper_lite.rb",
|
29
|
+
"lib/rapper_lite/compressors.rb",
|
30
|
+
"lib/rapper_lite/config.rb",
|
31
|
+
"lib/rapper_lite/utils.rb",
|
32
|
+
"lib/rapper_lite/versioning.rb",
|
33
|
+
"lib/tasks.rb",
|
34
|
+
"lib/yui/css_compressor.rb",
|
35
|
+
"rapper_lite.gemspec",
|
36
|
+
"spec/fixtures/src/simple_1.css",
|
37
|
+
"spec/fixtures/src/simple_1.js",
|
38
|
+
"spec/fixtures/src/simple_2.css",
|
39
|
+
"spec/fixtures/src/subfolder/simple_2.js",
|
40
|
+
"spec/fixtures/testcases/combination/expected/base.css",
|
41
|
+
"spec/fixtures/testcases/combination/expected/base.js",
|
42
|
+
"spec/fixtures/testcases/combination/expected/base_combined.css",
|
43
|
+
"spec/fixtures/testcases/combination/expected/base_combined.js",
|
44
|
+
"spec/fixtures/testcases/combination/rapper.yml",
|
45
|
+
"spec/fixtures/testcases/concatenation/expected/base.css",
|
46
|
+
"spec/fixtures/testcases/concatenation/expected/base.js",
|
47
|
+
"spec/fixtures/testcases/concatenation/expected/base_combined.css",
|
48
|
+
"spec/fixtures/testcases/concatenation/expected/base_combined.js",
|
49
|
+
"spec/fixtures/testcases/concatenation/rapper.yml",
|
50
|
+
"spec/fixtures/yui_css/background-position.css",
|
51
|
+
"spec/fixtures/yui_css/background-position.css.min",
|
52
|
+
"spec/fixtures/yui_css/box-model-hack.css",
|
53
|
+
"spec/fixtures/yui_css/box-model-hack.css.min",
|
54
|
+
"spec/fixtures/yui_css/bug2527974.css",
|
55
|
+
"spec/fixtures/yui_css/bug2527974.css.min",
|
56
|
+
"spec/fixtures/yui_css/bug2527991.css",
|
57
|
+
"spec/fixtures/yui_css/bug2527991.css.min",
|
58
|
+
"spec/fixtures/yui_css/bug2527998.css",
|
59
|
+
"spec/fixtures/yui_css/bug2527998.css.min",
|
60
|
+
"spec/fixtures/yui_css/bug2528034.css",
|
61
|
+
"spec/fixtures/yui_css/bug2528034.css.min",
|
62
|
+
"spec/fixtures/yui_css/charset-media.css",
|
63
|
+
"spec/fixtures/yui_css/charset-media.css.min",
|
64
|
+
"spec/fixtures/yui_css/color.css",
|
65
|
+
"spec/fixtures/yui_css/color.css.min",
|
66
|
+
"spec/fixtures/yui_css/comment.css",
|
67
|
+
"spec/fixtures/yui_css/comment.css.min",
|
68
|
+
"spec/fixtures/yui_css/concat-charset.css",
|
69
|
+
"spec/fixtures/yui_css/concat-charset.css.min",
|
70
|
+
"spec/fixtures/yui_css/decimals.css",
|
71
|
+
"spec/fixtures/yui_css/decimals.css.min",
|
72
|
+
"spec/fixtures/yui_css/dollar-header.css",
|
73
|
+
"spec/fixtures/yui_css/dollar-header.css.min",
|
74
|
+
"spec/fixtures/yui_css/font-face.css",
|
75
|
+
"spec/fixtures/yui_css/font-face.css.min",
|
76
|
+
"spec/fixtures/yui_css/ie5mac.css",
|
77
|
+
"spec/fixtures/yui_css/ie5mac.css.min",
|
78
|
+
"spec/fixtures/yui_css/media-empty-class.css",
|
79
|
+
"spec/fixtures/yui_css/media-empty-class.css.min",
|
80
|
+
"spec/fixtures/yui_css/media-multi.css",
|
81
|
+
"spec/fixtures/yui_css/media-multi.css.min",
|
82
|
+
"spec/fixtures/yui_css/media-test.css",
|
83
|
+
"spec/fixtures/yui_css/media-test.css.min",
|
84
|
+
"spec/fixtures/yui_css/opacity-filter.css",
|
85
|
+
"spec/fixtures/yui_css/opacity-filter.css.min",
|
86
|
+
"spec/fixtures/yui_css/preserve-new-line.css",
|
87
|
+
"spec/fixtures/yui_css/preserve-new-line.css.min",
|
88
|
+
"spec/fixtures/yui_css/preserve-strings.css",
|
89
|
+
"spec/fixtures/yui_css/preserve-strings.css.min",
|
90
|
+
"spec/fixtures/yui_css/preserve_string.css",
|
91
|
+
"spec/fixtures/yui_css/preserve_string.css.min",
|
92
|
+
"spec/fixtures/yui_css/pseudo-first.css",
|
93
|
+
"spec/fixtures/yui_css/pseudo-first.css.min",
|
94
|
+
"spec/fixtures/yui_css/pseudo.css",
|
95
|
+
"spec/fixtures/yui_css/pseudo.css.min",
|
96
|
+
"spec/fixtures/yui_css/special-comments.css",
|
97
|
+
"spec/fixtures/yui_css/special-comments.css.min",
|
98
|
+
"spec/fixtures/yui_css/star-underscore-hacks.css",
|
99
|
+
"spec/fixtures/yui_css/star-underscore-hacks.css.min",
|
100
|
+
"spec/fixtures/yui_css/string-in-comment.css",
|
101
|
+
"spec/fixtures/yui_css/string-in-comment.css.min",
|
102
|
+
"spec/fixtures/yui_css/zeros.css",
|
103
|
+
"spec/fixtures/yui_css/zeros.css.min",
|
104
|
+
"spec/rapper_lite_spec.rb",
|
105
|
+
"spec/spec_helper.rb",
|
106
|
+
"spec/vendor_spec.rb"
|
107
|
+
]
|
108
|
+
s.homepage = "http://tysontate.github.com/rapper_lite/"
|
109
|
+
s.licenses = ["MIT"]
|
110
|
+
s.require_paths = ["lib"]
|
111
|
+
s.rubygems_version = "1.8.10"
|
112
|
+
s.summary = "Simple static asset packaging."
|
113
|
+
|
114
|
+
if s.respond_to? :specification_version then
|
115
|
+
s.specification_version = 3
|
116
|
+
|
117
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
118
|
+
s.add_development_dependency(%q<rake>, ["~> 0.9.2"])
|
119
|
+
s.add_development_dependency(%q<rspec>, ["~> 1.3.2"])
|
120
|
+
s.add_development_dependency(%q<yard>, [">= 0"])
|
121
|
+
s.add_development_dependency(%q<rdiscount>, ["~> 1.6.8"])
|
122
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
123
|
+
s.add_development_dependency(%q<yui-compressor>, ["~> 0.9.6"])
|
124
|
+
else
|
125
|
+
s.add_dependency(%q<rake>, ["~> 0.9.2"])
|
126
|
+
s.add_dependency(%q<rspec>, ["~> 1.3.2"])
|
127
|
+
s.add_dependency(%q<yard>, [">= 0"])
|
128
|
+
s.add_dependency(%q<rdiscount>, ["~> 1.6.8"])
|
129
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
130
|
+
s.add_dependency(%q<yui-compressor>, ["~> 0.9.6"])
|
131
|
+
end
|
132
|
+
else
|
133
|
+
s.add_dependency(%q<rake>, ["~> 0.9.2"])
|
134
|
+
s.add_dependency(%q<rspec>, ["~> 1.3.2"])
|
135
|
+
s.add_dependency(%q<yard>, [">= 0"])
|
136
|
+
s.add_dependency(%q<rdiscount>, ["~> 1.6.8"])
|
137
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
138
|
+
s.add_dependency(%q<yui-compressor>, ["~> 0.9.6"])
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
body{margin:0;color:#333}*{margin:0;color:#fff}
|
@@ -0,0 +1 @@
|
|
1
|
+
var x=1;var y=2;function a(){return true}a=1;b=2;function b(){return false};
|
@@ -0,0 +1 @@
|
|
1
|
+
body{margin:0;color:#333}*{margin:0;color:#fff}body{margin:0;color:#333}
|
@@ -0,0 +1 @@
|
|
1
|
+
a=1;b=2;function b(){return false}var x=1;var y=2;function a(){return true}a=1;b=2;function b(){return false};
|
@@ -0,0 +1,26 @@
|
|
1
|
+
--- !omap
|
2
|
+
- root: spec/fixtures/src/
|
3
|
+
- destination: tmp
|
4
|
+
- compress: true
|
5
|
+
- css: !omap
|
6
|
+
- base: !omap
|
7
|
+
- files:
|
8
|
+
- simple_1
|
9
|
+
- simple_2
|
10
|
+
- version: 683e
|
11
|
+
- base_combined: !omap
|
12
|
+
- files:
|
13
|
+
- +base
|
14
|
+
- simple_1
|
15
|
+
- version: 0bb9
|
16
|
+
- js: !omap
|
17
|
+
- base: !omap
|
18
|
+
- files:
|
19
|
+
- simple_1
|
20
|
+
- subfolder/simple_2
|
21
|
+
- version: f3d9
|
22
|
+
- base_combined: !omap
|
23
|
+
- files:
|
24
|
+
- subfolder/simple_2
|
25
|
+
- +base
|
26
|
+
- version: ccfc
|
@@ -0,0 +1,26 @@
|
|
1
|
+
--- !omap
|
2
|
+
- root: spec/fixtures/src/
|
3
|
+
- destination: tmp
|
4
|
+
- compress: false
|
5
|
+
- css: !omap
|
6
|
+
- base: !omap
|
7
|
+
- files:
|
8
|
+
- simple_1
|
9
|
+
- simple_2
|
10
|
+
- version: 683e
|
11
|
+
- base_combined: !omap
|
12
|
+
- files:
|
13
|
+
- +base
|
14
|
+
- simple_1
|
15
|
+
- version: 0bb9
|
16
|
+
- js: !omap
|
17
|
+
- base: !omap
|
18
|
+
- files:
|
19
|
+
- simple_1
|
20
|
+
- subfolder/simple_2
|
21
|
+
- version: f3d9
|
22
|
+
- base_combined: !omap
|
23
|
+
- files:
|
24
|
+
- subfolder/simple_2
|
25
|
+
- +base
|
26
|
+
- version: ccfc
|
@@ -0,0 +1 @@
|
|
1
|
+
a{background-position:0 0}b{background-position:0 0}
|
@@ -0,0 +1 @@
|
|
1
|
+
#elem{width:100px;voice-family:"\"}\"";voice-family:inherit;width:200px}html>body #elem{width:200px}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
/* this file contains no css, it exists purely to put the revision number into the
|
2
|
+
combined css before uploading it to SiteManager. The exclaimation at the start
|
3
|
+
of the comment informs yuicompressor not to strip the comment out */
|
4
|
+
|
5
|
+
/*! $LastChangedRevision: 81 $ $LastChangedDate: 2009-05-27 17:41:02 +0100 (Wed, 27 May 2009) $ */
|
6
|
+
|
7
|
+
body {
|
8
|
+
yo: cats;
|
9
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
/*! $LastChangedRevision: 81 $ $LastChangedDate: 2009-05-27 17:41:02 +0100 (Wed, 27 May 2009) $ */body{yo:cats}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
@media screen and/*!YUI-Compresser */(-webkit-min-device-pixel-ratio:0) {
|
2
|
+
a{
|
3
|
+
b: 1;
|
4
|
+
}
|
5
|
+
}
|
6
|
+
|
7
|
+
|
8
|
+
@media screen and/*! */ /*! */(-webkit-min-device-pixel-ratio:0) {
|
9
|
+
a{
|
10
|
+
b: 1;
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
|
15
|
+
@media -webkit-min-device-pixel-ratio:0 {
|
16
|
+
a{
|
17
|
+
b: 1;
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
@media screen and/*!YUI-Compresser */(-webkit-min-device-pixel-ratio:0){a{b:1}}@media screen and/*! *//*! */(-webkit-min-device-pixel-ratio:0){a{b:1}}@media -webkit-min-device-pixel-ratio:0{a{b:1}}
|
@@ -0,0 +1 @@
|
|
1
|
+
/*! special */
|
@@ -0,0 +1 @@
|
|
1
|
+
a[href$="/test/"] span:first-child{b:1}
|
@@ -0,0 +1 @@
|
|
1
|
+
@charset 'utf-8';@media all{body{background-color:gold}}
|
@@ -0,0 +1 @@
|
|
1
|
+
.color{me:#7b7b7b;impressed:#fed;filter:chroma(color="#FFFFFF");background:none repeat scroll 0 0 #ff0;alpha:rgba(1,2,3,4)}
|