mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-26 10:16:27 +00:00
Merge pull request #198 from Kami/add_css_view
Add CSS view which beautifies minified CSS files
This commit is contained in:
commit
ac31039ad3
@ -1,3 +1,4 @@
|
|||||||
|
import logging
|
||||||
import re, cStringIO, traceback, json
|
import re, cStringIO, traceback, json
|
||||||
import urwid
|
import urwid
|
||||||
|
|
||||||
@ -19,6 +20,18 @@ try:
|
|||||||
except ImportError: # pragma nocover
|
except ImportError: # pragma nocover
|
||||||
pyamf = None
|
pyamf = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
import cssutils
|
||||||
|
except ImportError: # pragma nocover
|
||||||
|
cssutils = None
|
||||||
|
else:
|
||||||
|
cssutils.log.setLevel(logging.CRITICAL)
|
||||||
|
|
||||||
|
cssutils.ser.prefs.keepComments = True
|
||||||
|
cssutils.ser.prefs.omitLastSemicolon = False
|
||||||
|
cssutils.ser.prefs.indentClosingBrace = False
|
||||||
|
cssutils.ser.prefs.validOnly = False
|
||||||
|
|
||||||
VIEW_CUTOFF = 1024*50
|
VIEW_CUTOFF = 1024*50
|
||||||
|
|
||||||
|
|
||||||
@ -318,7 +331,23 @@ class ViewJavaScript:
|
|||||||
opts = jsbeautifier.default_options()
|
opts = jsbeautifier.default_options()
|
||||||
opts.indent_size = 2
|
opts.indent_size = 2
|
||||||
res = jsbeautifier.beautify(content[:limit], opts)
|
res = jsbeautifier.beautify(content[:limit], opts)
|
||||||
return "JavaScript", _view_text(res, len(content), limit)
|
return "JavaScript", _view_text(res, len(res), limit)
|
||||||
|
|
||||||
|
class ViewCSS:
|
||||||
|
name = "CSS"
|
||||||
|
prompt = ("css", "c")
|
||||||
|
content_types = [
|
||||||
|
"text/css"
|
||||||
|
]
|
||||||
|
|
||||||
|
def __call__(self, hdrs, content, limit):
|
||||||
|
if cssutils:
|
||||||
|
sheet = cssutils.parseString(content)
|
||||||
|
beautified = sheet.cssText
|
||||||
|
else:
|
||||||
|
beautified = content
|
||||||
|
|
||||||
|
return "CSS", _view_text(beautified, len(beautified), limit)
|
||||||
|
|
||||||
|
|
||||||
class ViewImage:
|
class ViewImage:
|
||||||
@ -409,6 +438,7 @@ views = [
|
|||||||
ViewHTML(),
|
ViewHTML(),
|
||||||
ViewHTMLOutline(),
|
ViewHTMLOutline(),
|
||||||
ViewJavaScript(),
|
ViewJavaScript(),
|
||||||
|
ViewCSS(),
|
||||||
ViewURLEncoded(),
|
ViewURLEncoded(),
|
||||||
ViewMultipart(),
|
ViewMultipart(),
|
||||||
ViewImage(),
|
ViewImage(),
|
||||||
|
@ -61,6 +61,10 @@ class HelpView(urwid.ListBox):
|
|||||||
common.highlight_key("json", "s") +
|
common.highlight_key("json", "s") +
|
||||||
[("text", ": JSON")]
|
[("text", ": JSON")]
|
||||||
),
|
),
|
||||||
|
(None,
|
||||||
|
common.highlight_key("css", "c") +
|
||||||
|
[("text", ": CSS")]
|
||||||
|
),
|
||||||
(None,
|
(None,
|
||||||
common.highlight_key("urlencoded", "u") +
|
common.highlight_key("urlencoded", "u") +
|
||||||
[("text", ": URL-encoded data")]
|
[("text", ": URL-encoded data")]
|
||||||
|
@ -14,3 +14,4 @@ requests>=1.2.2
|
|||||||
urwid>=1.1.1
|
urwid>=1.1.1
|
||||||
wsgiref>=0.1.2
|
wsgiref>=0.1.2
|
||||||
jsbeautifier>=1.4.0
|
jsbeautifier>=1.4.0
|
||||||
|
cssutils>=1.0,<1.1
|
||||||
|
1
test/data/1.css
Normal file
1
test/data/1.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
body,html{height:100%}body{font-family:'Open Sans',sans-serif;font-size:1.5em;padding-top:80px}
|
@ -13,6 +13,11 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
pyamf = None
|
pyamf = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
import cssutils
|
||||||
|
except:
|
||||||
|
cssutils = None
|
||||||
|
|
||||||
|
|
||||||
class TestContentView:
|
class TestContentView:
|
||||||
def test_trailer(self):
|
def test_trailer(self):
|
||||||
@ -112,6 +117,26 @@ class TestContentView:
|
|||||||
assert v([], "[1, 2, 3", 100)
|
assert v([], "[1, 2, 3", 100)
|
||||||
assert v([], "function(a){[1, 2, 3]}", 100)
|
assert v([], "function(a){[1, 2, 3]}", 100)
|
||||||
|
|
||||||
|
def test_view_css(self):
|
||||||
|
v = cv.ViewCSS()
|
||||||
|
|
||||||
|
with open('./test/data/1.css', 'r') as fp:
|
||||||
|
fixture_1 = fp.read()
|
||||||
|
|
||||||
|
result = v([], 'a', 100)
|
||||||
|
|
||||||
|
if cssutils:
|
||||||
|
assert len(result[1]) == 0
|
||||||
|
else:
|
||||||
|
assert len(result[1]) == 1
|
||||||
|
|
||||||
|
result = v([], fixture_1, 100)
|
||||||
|
|
||||||
|
if cssutils:
|
||||||
|
assert len(result[1]) > 1
|
||||||
|
else:
|
||||||
|
assert len(result[1]) == 1
|
||||||
|
|
||||||
def test_view_hex(self):
|
def test_view_hex(self):
|
||||||
v = cv.ViewHex()
|
v = cv.ViewHex()
|
||||||
assert v([], "foo", 1000)
|
assert v([], "foo", 1000)
|
||||||
|
Loading…
Reference in New Issue
Block a user