Skip to content

Commit

Permalink
Added compatibility with ST3 (fixes #10)
Browse files Browse the repository at this point in the history
  • Loading branch information
bistory committed Sep 11, 2013
1 parent 5f040d8 commit 370f2a2
Show file tree
Hide file tree
Showing 7 changed files with 176 additions and 80 deletions.
23 changes: 18 additions & 5 deletions Minify.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
import sublime
import sublime_plugin

from compilers import GoogleClosureCall, UglifyCall, ReducisaurusCall, CssminifierCall
if sublime.version() < '3':
from compilers import GoogleClosureCall, UglifyCall, ReducisaurusCall, CssminifierCall
else:
from Minifier.compilers import GoogleClosureCall, UglifyCall, ReducisaurusCall, CssminifierCall

class BaseMinifier(sublime_plugin.TextCommand):
'''Base Minifier'''
Expand Down Expand Up @@ -34,6 +37,10 @@ def run(self, edit):

threads.append(thread)
thread.start()

# Wait for threads
for thread in threads:
thread.join()

selections.clear()
self.handle_threads(edit, threads, selections, offset=0, i=0, dir=1)
Expand Down Expand Up @@ -80,7 +87,6 @@ def handle_threads(self, edit, threads, selections, offset = 0, i = 0, dir = 1):
sublime.set_timeout(lambda: self.handle_threads(edit, threads, selections, offset, i, dir), 100)
return

self.view.end_edit(edit)
self.view.erase_status('minify')
sublime.status_message('Successfully minified')

Expand Down Expand Up @@ -135,14 +141,21 @@ def handle_result(self, edit, thread, selections, offset):
result = super(Minify, self).handle_result(edit, thread, selections, offset)

if thread.error is None:
editgroup = self.view.begin_edit('minify')
if sublime.version() < '3':
editgroup = self.view.begin_edit('minify')

sel = thread.sel
result = thread.result
if offset:
sel = sublime.Region(thread.sel.begin() + offset, thread.sel.end() + offset)

self.view.replace(edit, sel, result)
if sublime.version() < '3':
self.view.replace(edit, sel, result)
else:
self.view.replace(edit, sel, result.decode("utf-8"))

if sublime.version() < '3':
self.view.end_edit(edit)

class MinifyToFile(BaseMinifier):

Expand Down Expand Up @@ -181,6 +194,6 @@ def handle_result(self, edit, thread, selections, offset):
with open(file_path, 'w+', 0) as min_file:
min_file.write(self.output.strip())

print self.settings.get('open_on_min', True)
print (self.settings.get('open_on_min', True))
if (self.settings.get('open_on_min', True) == True):
self.window.open_file(file_name)
16 changes: 12 additions & 4 deletions compilers/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
from googleclosurecall import GoogleClosureCall
from uglifycall import UglifyCall
from reducisauruscall import ReducisaurusCall
from cssminifiercall import CssminifierCall
import sublime

if sublime.version() < '3':
from googleclosurecall import GoogleClosureCall
from uglifycall import UglifyCall
from reducisauruscall import ReducisaurusCall
from cssminifiercall import CssminifierCall
else:
from Minifier.compilers.googleclosurecall import GoogleClosureCall
from Minifier.compilers.uglifycall import UglifyCall
from Minifier.compilers.reducisauruscall import ReducisaurusCall
from Minifier.compilers.cssminifiercall import CssminifierCall
80 changes: 48 additions & 32 deletions compilers/basecall.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,48 @@
import sublime
import sublime_plugin
import urllib2
import threading

class BaseCall(threading.Thread):

def __init__(self, sel, string, timeout, level, rm_new_lines):
self.sel = sel
self.original = string
self.timeout = timeout
self.result = None
self.level = level
self.error = None
self.rm_new_lines = rm_new_lines
threading.Thread.__init__(self)

def exec_request(self):
return

def run(self):
try:
self.result = self.exec_request()
except (urllib2.HTTPError) as (e):
self.error = True
self.result = 'Minifier Error: HTTP error %s contacting API' % (str(e.code))
except (urllib2.URLError) as (e):
self.error = True
self.result = 'Minifier Error: ' + str(e.reason)
except UnicodeEncodeError:
self.error = True
self.result = 'You can only use ASCII characters'
import sublime
import sublime_plugin
import threading
if sublime.version() < '3':
import urllib2
else:
import urllib.error

class BaseCall(threading.Thread):

def __init__(self, sel, string, timeout, level, rm_new_lines):
self.sel = sel
self.original = string
self.timeout = timeout
self.result = None
self.level = level
self.error = None
self.rm_new_lines = rm_new_lines
threading.Thread.__init__(self)

def exec_request(self):
return

def run(self):
if sublime.version() < '3':
try:
self.result = self.exec_request()
except urllib2.HTTPError as e:
self.error = True
self.result = 'Minifier Error: HTTP error %s contacting API' % (str(e.code))
except urllib2.URLError as e:
self.error = True
self.result = 'Minifier Error: ' + str(e.reason)
except UnicodeEncodeError:
self.error = True
self.result = 'You can only use ASCII characters'
else:
try:
self.result = self.exec_request()
except urllib.error.HTTPError as e:
self.error = True
self.result = 'Minifier Error: HTTP error %s contacting API' % (str(e.code))
except urllib.error.URLError as e:
self.error = True
self.result = 'Minifier Error: ' + str(e.reason)
except UnicodeEncodeError:
self.error = True
self.result = 'You can only use ASCII characters'
36 changes: 25 additions & 11 deletions compilers/cssminifiercall.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,37 @@
import urllib
import urllib2
import sublime
import re
import httplib
from basecall import BaseCall
if sublime.version() < '3':
import urllib
import urllib2
from basecall import BaseCall
else:
import urllib.request
import urllib.parse
from Minifier.compilers.basecall import BaseCall

class CssminifierCall(BaseCall):

def exec_request(self):

data = urllib.urlencode({
'input': self.original })

ua = 'Sublime Text - cssminifier'
req = urllib2.Request("http://www.cssminifier.com/raw", data, headers = { 'User-Agent': ua, 'Content-Type': 'application/x-www-form-urlencoded' })
file = urllib2.urlopen(req, timeout=self.timeout)
query = {
'input': self.original }
url = "http://cssminifier.com/raw"

if sublime.version() < '3':
data = urllib.urlencode(query)

req = urllib2.Request(url, data, headers = { 'User-Agent': ua, 'Content-Type': 'application/x-www-form-urlencoded' })
file = urllib2.urlopen(req, timeout=self.timeout)
else:
data = urllib.parse.urlencode(query)
binary_data = data.encode('utf8')

req = urllib.request.Request(url, binary_data, headers = { 'User-Agent': ua, 'Content-Type': 'application/x-www-form-urlencoded' })
file = urllib.request.urlopen(req, timeout=self.timeout)

mini_content = file.read().strip()

if len(mini_content) > 0:
return re.sub("[\n]+", " ", mini_content) if self.rm_new_lines else mini_content
else:
return None
return None
35 changes: 25 additions & 10 deletions compilers/googleclosurecall.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,35 @@
import urllib
import urllib2
import sublime
import re
from basecall import BaseCall
if sublime.version() < '3':
import urllib
import urllib2
from basecall import BaseCall
else:
import urllib.request
import urllib.parse
from Minifier.compilers.basecall import BaseCall

class GoogleClosureCall(BaseCall):

def exec_request(self):

data = urllib.urlencode({
ua = 'Sublime Text - Google Closure'
query = {
'js_code': self.original.encode('utf-8'),
'compilation_level': self.level,
'output_info': "compiled_code" })

ua = 'Sublime Text - Google Closure'
req = urllib2.Request("http://closure-compiler.appspot.com/compile", data, headers = { 'User-Agent': ua })
file = urllib2.urlopen(req, timeout=self.timeout)
'output_info': "compiled_code" }
url = "http://closure-compiler.appspot.com/compile"

if sublime.version() < '3':
data = urllib.urlencode(query)

req = urllib2.Request(url, data, headers = { 'User-Agent': ua })
file = urllib2.urlopen(req, timeout=self.timeout)
else:
data = urllib.parse.urlencode(query)
binary_data = data.encode('utf8')

req = urllib.request.Request(url, binary_data, headers = { 'User-Agent': ua })
file = urllib.request.urlopen(req, timeout=self.timeout)

mini_content = file.read().strip()

Expand Down
33 changes: 24 additions & 9 deletions compilers/reducisauruscall.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,33 @@
import urllib
import urllib2
import sublime
import re
from basecall import BaseCall
if sublime.version() < '3':
import urllib
import urllib2
from basecall import BaseCall
else:
import urllib.request
import urllib.parse
from Minifier.compilers.basecall import BaseCall

class ReducisaurusCall(BaseCall):

def exec_request(self):

data = urllib.urlencode({
'file': self.original })

ua = 'Sublime Text - Reducisaurus'
req = urllib2.Request("http://reducisaurus.appspot.com/css", data, headers = { 'User-Agent': ua, 'Content-Type': 'application/x-www-form-urlencoded' })
file = urllib2.urlopen(req, timeout=self.timeout)
query = {
'file': self.original }
url = "http://reducisaurus.appspot.com/css"

if sublime.version() < '3':
data = urllib.urlencode(query)

req = urllib2.Request(url, data, headers = { 'User-Agent': ua, 'Content-Type': 'application/x-www-form-urlencoded' })
file = urllib2.urlopen(req, timeout=self.timeout)
else:
data = urllib.parse.urlencode(query)
binary_data = data.encode('utf8')

req = urllib.request.Request(url, binary_data, headers = { 'User-Agent': ua, 'Content-Type': 'application/x-www-form-urlencoded' })
file = urllib.request.urlopen(req, timeout=self.timeout)

mini_content = file.read().strip()

Expand Down
33 changes: 24 additions & 9 deletions compilers/uglifycall.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,33 @@
import urllib
import urllib2
import sublime
import re
from basecall import BaseCall
if sublime.version() < '3':
import urllib
import urllib2
from basecall import BaseCall
else:
import urllib.request
import urllib.parse
from Minifier.compilers.basecall import BaseCall

class UglifyCall(BaseCall):

def exec_request(self):

data = urllib.urlencode({
'js_code': self.original.encode('utf-8') })

ua = 'Sublime Text - Uglify'
req = urllib2.Request("http://marijnhaverbeke.nl/uglifyjs", data, headers = { 'User-Agent': ua })
file = urllib2.urlopen(req, timeout=self.timeout)
query = {
'js_code': self.original.encode('utf-8') }
url = "http://marijnhaverbeke.nl/uglifyjs"

if sublime.version() < '3':
data = urllib.urlencode(query)

req = urllib2.Request(url, data, headers = { 'User-Agent': ua })
file = urllib2.urlopen(req, timeout=self.timeout)
else:
data = urllib.parse.urlencode(query)
binary_data = data.encode('utf8')

req = urllib.request.Request(url, binary_data, headers = { 'User-Agent': ua })
file = urllib.request.urlopen(req, timeout=self.timeout)

mini_content = file.read().strip()

Expand Down

0 comments on commit 370f2a2

Please sign in to comment.