Skip to content

Instantly share code, notes, and snippets.

@omerucel
Last active December 25, 2015 21:39
Show Gist options
  • Select an option

  • Save omerucel/7044489 to your computer and use it in GitHub Desktop.

Select an option

Save omerucel/7044489 to your computer and use it in GitHub Desktop.
rjsmin and rcssmin sample file for fabric

Bu örnekteki fabfile.py dosyası ile statik dosyaları (JS ve CSS) küçültebilir ve tek bir dosya halinde sunabilirsiniz. Bu kodları ben bir Django projesi için kullandım. Ancak kodlar genel kullanıma yönelik güncellenebilir ve farklı projeler için de hazır hale getirilebilir.

project_folder
  appname
    static
  fabfile.py

Aşağıdaki komut project_folder/appname dizini altında css_version.py ve js_version.py dosyalarını oluşturur (varsa üzerine yazar)

$ fab minify

Template dosyanıza bu dosyalardaki VERSION değişkeni değerini gönderip css ve js dosyası için kullanabilirsiniz. Örneğin:

views.py

import css_version
import js_version

def page(request):
    template_params = {
        'css_version': css_version.VERSION,
        'js_version': js_version.VERSION,
        'is_template_debug': settings.TEMPLATE_DEBUG
    }

    return render_to_response('template.html', template_params)

template.html

    {% if is_template_debug %}
        <link href="{% static 'flatui/bootstrap/css/bootstrap.css' %}" rel="stylesheet" />
        <link href="{% static 'flatui/css/flat-ui.css' %}" rel="stylesheet" />
        <link href="{% static 'alertify/alertify.core.css' %}" rel="stylesheet" />
        <link href="{% static 'alertify/alertify.default.css' %}" rel="stylesheet" />
        <link href="{% static 'reveal/reveal.css' %}" rel="stylesheet" />
        <link href="{% static 'site/style.css' %}" rel="stylesheet" />
    {% else %}
        <link href="{% static 'all.min.css' %}?v={{ css_version }}" rel="stylesheet" />
    {% endif %}

fabfile.py

from fabric.api import *
from rjsmin import jsmin
from rcssmin import cssmin

import time
timestamp = int(time.time())

def minify():
    minify_css_files()
    minify_js_files()

def minify_css_files():
    files = [
        'appname/static/flatui/bootstrap/css/bootstrap.css',
        'appname/static/flatui/css/flat-ui.css',
        'appname/static/alertify/alertify.core.css',
        'appname/static/alertify/alertify.default.css',
        'appname/static/reveal/reveal.css',
        'appname/static/site/style.css'
    ]
    minify_files(files, 'appname/static/all.min.css', 'appname/css_version.py')

def minify_js_files():
    files = [
        'appname/static/flatui/js/jquery-1.8.3.min.js',
        'appname/static/flatui/js/jquery-ui-1.10.3.custom.min.js',
        'appname/static/flatui/js/jquery.ui.touch-punch.min.js',
        'appname/static/flatui/js/bootstrap.min.js',
        'appname/static/flatui/js/bootstrap-select.js',
        'appname/static/flatui/js/bootstrap-switch.js',
        'appname/static/flatui/js/flatui-checkbox.js',
        'appname/static/flatui/js/flatui-radio.js',
        'appname/static/flatui/js/jquery.tagsinput.js',
        'appname/static/flatui/js/jquery.placeholder.js',
        'appname/static/alertify/alertify.min.js',
        'appname/static/moment/moment.min.js',
        'appname/static/reveal/jquery.reveal.js',
        'appname/static/site/app.js'
    ]

    minify_files(files, 'appname/static/all.min.js', 'appname/js_version.py', is_css=False)

def minify_files(files, output_file, version_file, is_css=True):
    minified = ''
    for file in files:
        with open(file) as inputFile:
            srcText = inputFile.read()
            minified += "\n\n/*%s*/\n\n" %(file)
            if is_css:
                minified += cssmin(srcText)
            else:
                minified += jsmin(srcText)
    output = open(output_file, 'w')
    output.write(minified)
    output.close()

    version_file = open(version_file, 'w')
    version_file.write('VERSION = %s' %(timestamp))
    version_file.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment