Skip to content
This repository has been archived by the owner on Aug 4, 2021. It is now read-only.

Commit

Permalink
Add ColorMirror JS Editor for dbtemplates and EditableHeadfiles admin…
Browse files Browse the repository at this point in the history
  • Loading branch information
jedie committed Jul 8, 2010
1 parent 0ca768b commit c7f6ea0
Show file tree
Hide file tree
Showing 15 changed files with 408 additions and 1 deletion.
29 changes: 29 additions & 0 deletions pylucid_project/apps/pylucid/admin.py
Expand Up @@ -28,8 +28,11 @@

from reversion.admin import VersionAdmin

from dbtemplates.admin import TemplateAdmin, TemplateAdminForm

from pylucid import models
from pylucid_project.apps.pylucid.base_admin import BaseAdmin
from dbtemplates.models import Template



Expand Down Expand Up @@ -258,13 +261,20 @@ class DesignAdmin(VersionAdmin):
class EditableHtmlHeadFileAdminForm(forms.ModelForm):
class Meta:
model = models.EditableHtmlHeadFile
class Media:
js = (
settings.MEDIA_URL + "PyLucid/codemirror_editable_headfile.js",
)

def __init__(self, *args, **kwargs):
super(EditableHtmlHeadFileAdminForm, self).__init__(*args, **kwargs)
# Make mimetype optinal, so the user can leave to empty and auto_mimetype
# would be used in model.clean_fields()
self.fields["mimetype"].required = False

# Don't apply jquery.textarearesizer.js:
self.fields["content"].widget.attrs["class"] += " processed"

def clean_sites(self):
"""
Check if headfile sites contain the site from all design entries.
Expand Down Expand Up @@ -357,3 +367,22 @@ class SiteAdmin(admin.ModelAdmin):

admin.site.unregister(Site)
admin.site.register(Site, SiteAdmin)


#-----------------------------------------------------------------------------
# Use own ColorMirror editor in dbtemplates

class DBTemplatesAdminAdminForm(TemplateAdminForm):
class Media:
js = (settings.MEDIA_URL + "PyLucid/codemirror_dbtemplates.js",)

def __init__(self, *args, **kwargs):
super(DBTemplatesAdminAdminForm, self).__init__(*args, **kwargs)
# Don't apply jquery.textarearesizer.js:
self.fields["content"].widget.attrs["class"] = " processed"

class DBTemplatesAdmin(TemplateAdmin):
form = DBTemplatesAdminAdminForm

admin.site.unregister(Template)
admin.site.register(Template, DBTemplatesAdmin)
2 changes: 2 additions & 0 deletions pylucid_project/apps/pylucid/templates/admin/base_site.html
Expand Up @@ -7,9 +7,11 @@
{% if debug %}<!-- ./apps/pylucid/templates/admin/base_site.html extrahead block START -->{% endif %}
{% if Django_media_prefix and PyLucid_media_url %}
{# django include it since http://code.djangoproject.com/changeset/12297 #}
<script type="text/javascript">var PyLucid_media_url="{{ PyLucid_media_url }}";</script>
<script type="text/javascript" src="{{ Django_media_prefix }}js/jquery.min.js" onerror="JavaScript:alert('Error loading file [{{ Django_media_prefix }}js/jquery.min.js] !');" ></script>
<script type="text/javascript" src="{{ PyLucid_media_url }}jquery.textarearesizer.js" onerror="JavaScript:alert('Error loading file [{{ PyLucid_media_url }}jquery.textarearesizer.js] !');"></script>
<script type="text/javascript" src="{{ PyLucid_media_url }}pylucid_js_tools.js" onerror="JavaScript:alert('Error loading file [{{ PyLucid_media_url }}pylucid_js_tools.js] !');"></script>
<script type="text/javascript" src="{{ PyLucid_media_url }}codemirror/codemirror_min.js" onerror="JavaScript:alert('Error loading file [{{ PyLucid_media_url }}codemirror/codemirror_min.js] !');"></script>
{% if debug %}
<script type="text/javascript">var debug=true;log("debug is on");</script>
{% else %}
Expand Down
42 changes: 42 additions & 0 deletions pylucid_project/media/PyLucid/codemirror/codemirror.css
@@ -0,0 +1,42 @@
/* ----------------------------------------------------------------------------
CodeMirror
http://marijn.haverbeke.nl/codemirror/css/
------------------------------------------------------------------------------- */
html * {
font-family: monospace;
font-size: 1em;
}
.editbox {
width: 90%;
margin: 0;
padding: 0;
color: black;
}
pre.code, .editbox {
color: #666666;
}
.editbox p {
margin: 0;
}

.CodeMirror-line-numbers {
width:2.2em;
text-align:right;
color:#999;
margin:.4em .4em .4em 6em;
padding:0;
}

/* colors for xml, css and js */
span.css-unit,span.js-atom,span.xml-attribute{color:#281}
span.css-identifier,span.js-variable,span.js-property,span.xml-punctuation,span.xml-text{color:#000}
span.css-important,span.js-variabledef,span.xml-attname{color:#00F}
span.css-colorcode,span.js-localvariable{color:#049}
span.css-comment,span.js-comment,span.xml-comment{color:#A70}
span.css-string,span.js-string,span.xml-entity{color:#A22}
span.css-at,span.css-value,span.js-keyword{color:#708}
span.js-punctuation,span.js-operator{color:#666}
span.xml-tagname{color:#A0B}
span.xml-cdata{color:#48A}
span.xml-processing{color:#999}
span.xml-error{color:red!important}
87 changes: 87 additions & 0 deletions pylucid_project/media/PyLucid/codemirror/codemirror_base.js

Large diffs are not rendered by default.

23 changes: 23 additions & 0 deletions pylucid_project/media/PyLucid/codemirror/codemirror_min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

101 changes: 101 additions & 0 deletions pylucid_project/media/PyLucid/codemirror/get_codemirror_files.py
@@ -0,0 +1,101 @@
#!/usr/bin/env python
# coding: utf-8

"""
PyLucid codemirror helper
~~~~~~~~~~~~~~~~~~~~~~~~~
Get needed CodeMirror files and save it compressed.
use:
http://code.google.com/closure/compiler/
:copyleft: 2010 by the PyLucid team, see AUTHORS for more details.
:license: GNU GPL v3 or above, see LICENSE for more details.
"""

import json # New in Python v2.6
import pprint
import sys
import time
import urllib
import datetime


CLOSURE_COMPILTER_URL = "http://closure-compiler.appspot.com/compile"

CODEMIRROR_BASE_URL = "http://marijn.haverbeke.nl/codemirror/js/"
SOURCE_URLS = (
# Library
("codemirror_min.js", [CODEMIRROR_BASE_URL + "codemirror.js"]),
# base files
("codemirror_base.js", [
CODEMIRROR_BASE_URL + "util.js",
CODEMIRROR_BASE_URL + "stringstream.js",
CODEMIRROR_BASE_URL + "select.js",
CODEMIRROR_BASE_URL + "undo.js",
CODEMIRROR_BASE_URL + "editor.js",
CODEMIRROR_BASE_URL + "tokenize.js",
]),
# Parsers
("parsecss.js", [CODEMIRROR_BASE_URL + "parsecss.js"]),
("tokenizejavascript.js", [CODEMIRROR_BASE_URL + "tokenizejavascript.js"]),
("parsejavascript.js", [CODEMIRROR_BASE_URL + "parsejavascript.js"]),
("parsecss.js", [CODEMIRROR_BASE_URL + "parsecss.js"]),
("parsehtmlmixed.js", [CODEMIRROR_BASE_URL + "parsehtmlmixed.js"]),

# Contributed parsers
("parsepython.js", ["http://marijn.haverbeke.nl/codemirror/contrib/python/js/parsepython.js"]),
("parsedjango.js", ["http://github.com/jezdez/django-dbtemplates/raw/master/dbtemplates/media/dbtemplates/js/parsedjango.js"]),
)

# http://code.google.com/closure/compiler/docs/api-ref.html
DEFAULTS = {
# Required Request Parameters
"compilation_level": "SIMPLE_OPTIMIZATIONS",
"output_format": "json",
"output_info": "compiled_code",
}

def get_and_save(filename, urls):
print "_"*79
print " *** %r ***" % filename
print "urls:"
print "\n".join(urls)

post_data = DEFAULTS.copy()
post_data["code_url"] = urls
# print post_data
params = urllib.urlencode(post_data, doseq=True)
# print params

print "request %s..." % CLOSURE_COMPILTER_URL,
start_time = time.time()
f = urllib.urlopen(CLOSURE_COMPILTER_URL, params)
payload = f.read()
print "get response in %.2fsec" % (time.time()-start_time)

response_data = json.loads(payload)
if not "compiledCode" in response_data:
print "Response error, response data:"
pprint.pprint(response_data)
else:
code = response_data["compiledCode"]
print "compressed code length:", len(code)
print "Write file...",
f = file(filename, "w")
f.write("/* content from:\n")
for url in urls:
f.write(" * %s\n" % url)
f.write(" * closure compiled %s */\n" % datetime.date.today().isoformat())
f.write(code)
f.close()
print "OK"

print "-"*79

if __name__ == "__main__":
for filename, urls in SOURCE_URLS:
get_and_save(filename, urls)



7 changes: 7 additions & 0 deletions pylucid_project/media/PyLucid/codemirror/parsecss.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit c7f6ea0

Please sign in to comment.