version 2
|
|
@ -3,8 +3,6 @@ INSTALL.txt
|
|||
|
||||
Web Notes Framework Installation guide
|
||||
|
||||
Web Notes Framework (WNF) is a meta-data driven web app framework. After install, you build
|
||||
and configure your application from the web browser.
|
||||
|
||||
WNF requires the following applications
|
||||
|
||||
|
|
@ -30,23 +28,14 @@ WNF requires the following applications
|
|||
------------------------------------------------------------------------
|
||||
2. Setup defs.py
|
||||
|
||||
The framework picks up the database details from cgi-bin/webnotes/defs.py
|
||||
The framework picks up the database details from py/webnotes/defs.py
|
||||
|
||||
You need to edit this file and set your database name and other options
|
||||
|
||||
------------------------------------------------------------------------
|
||||
3. Configuring Apache
|
||||
|
||||
a. You must set Apache to execute index.cgi file, one way to do this is to add cgi handler
|
||||
and add ExecCGI in the options directive.
|
||||
|
||||
b. You can also add couple of lines below to block Apache from rendering .py files
|
||||
|
||||
RewriteEngine on
|
||||
RewriteRule \.py - [F]
|
||||
|
||||
c. Add "index.cgi" to DirectoryIndex
|
||||
|
||||
see conf/apache.conf
|
||||
|
||||
------------------------------------------------------------------------
|
||||
4. Login to application
|
||||
1
README
|
|
@ -1 +0,0 @@
|
|||
Web Notes Framework: A web application framework with client-side and server-side libraries including metadata definition, forms, virtual pages- Ideal for developing js driven database apps.
|
||||
23
README.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
## wnframework
|
||||
|
||||
wnframework is a full-stack web application framework that uses python/mysql on the server side. includes a tightly integrated client side library and uses many html5 featuers.
|
||||
|
||||
Projects: [erpnext](http://erpnext.org) | [webnotes/erpnext](https://github.com/webnotes/erpnext)
|
||||
|
||||
## Version
|
||||
|
||||
Version 2 is a radical reworking of the wnframework. This will be the current development version. For a stable version see -1.7 branches
|
||||
|
||||
#### Roadmap for version 2
|
||||
|
||||
- lazy loading + localstorage of js libs (completed)
|
||||
- refactoring of js library
|
||||
- separation of the view from the model
|
||||
|
||||
## Librarires
|
||||
|
||||
wnframework uses a number of libraries in the open domain, see attribution.md (it may not be a complete list but we are working on it!)
|
||||
|
||||
## License
|
||||
|
||||
wnframework is freely available to use under the MIT License
|
||||
39
blank.html
|
|
@ -1,39 +0,0 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<!--
|
||||
Copyright (c) 2007 Brian Dillard and Brad Neuberg:
|
||||
Brian Dillard | Project Lead | bdillard@pathf.com | http://blogs.pathf.com/agileajax/
|
||||
Brad Neuberg | Original Project Creator | http://codinginparadise.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
|
||||
(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge,
|
||||
publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
||||
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
-->
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
|
||||
<script language="JavaScript">
|
||||
function pageLoaded() {
|
||||
window.parent.dhtmlHistory.iframeLoaded(window.location);
|
||||
document.getElementById("output").innerHTML = window.location;
|
||||
}
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body onload="pageLoaded();" style="width:700px;padding:2px;margin:0;">
|
||||
|
||||
<p>blank.html - Needed for Internet Explorer's hidden iframe</p>
|
||||
<p id="output"></p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
import os
|
||||
|
||||
# go to current directory
|
||||
os.chdir(__file__[:-12])
|
||||
|
||||
import webnotes.utils.backups
|
||||
|
||||
webnotes.utils.backups.backup_all()
|
||||
|
||||
# send the daily backup to the pair server
|
||||
import webnotes.defs
|
||||
if hasattr(webnotes.defs,'ps_host'):
|
||||
import ftplib, time
|
||||
|
||||
ftp = ftplib.FTP(webnotes.defs.ps_host, webnotes.defs.ps_login, webnotes.defs.ps_pwd)
|
||||
ftp.cwd('pair_backups')
|
||||
fname = 'daily-' + time.strftime('%Y-%m-%d') + '.tar.gz'
|
||||
f = open('/backups/daily/' + fname, 'rb')
|
||||
ftp.storbinary('STOR ' + webnotes.defs.server_prefix + '-' + fname, f)
|
||||
ftp.quit()
|
||||
|
||||
# delete from local pair directory
|
||||
if hasattr(webnotes.defs, 'pair_dir') and len(os.listdir(webnotes.defs.pair_dir)) > 3:
|
||||
delete_oldest_file(webnotes.defs.pair_dir)
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
class wnJSCompiler:
|
||||
@staticmethod
|
||||
def concate_files_in_dir(path,dest):
|
||||
"""
|
||||
Concatenates all files in a directory
|
||||
"""
|
||||
import os
|
||||
allfiles = []
|
||||
dirname = path
|
||||
l = os.listdir(path)
|
||||
for i in l:
|
||||
if os.path.isfile(os.path.join(dirname,i)):
|
||||
allfiles.append(os.path.join(dirname,i))
|
||||
fout = open(dest,'w')
|
||||
for filename in allfiles:
|
||||
f = open(filename)
|
||||
fout.write(f.read())
|
||||
f.close
|
||||
fout.close
|
||||
|
||||
|
||||
@staticmethod
|
||||
def getsubs(path):
|
||||
"""
|
||||
gets all the sub directories of a directory (recursive)
|
||||
"""
|
||||
import os
|
||||
subs = []
|
||||
for root, subd, files in os.walk(path):
|
||||
for i in subd:
|
||||
subs.append(os.path.join(root,i))
|
||||
return subs
|
||||
@staticmethod
|
||||
def compilejs(path):
|
||||
"""
|
||||
Compiles the js tree for ondemand import
|
||||
"""
|
||||
if not wnJSCompiler.is_changed(path):
|
||||
return
|
||||
|
||||
import os
|
||||
import webnotes.utils.jsnamespace as jsn
|
||||
subs = wnJSCompiler.getsubs(path)
|
||||
for subdir in subs:
|
||||
modname = jsn.jsNamespace.getmodname(subdir)
|
||||
wnJSCompiler.concate_files_in_dir(subdir,os.path.join(subdir, modname))
|
||||
wnJSCompiler.minifyjs(os.path.join(subdir, modname))
|
||||
|
||||
@staticmethod
|
||||
def is_changed(path):
|
||||
#compare new timestamps with the ones stored in file
|
||||
from webnotes.utils import jstimestamp
|
||||
try:
|
||||
frm_file = jstimestamp.generateTimestamp.read_ts_from_file(path)
|
||||
newts = jstimestamp.generateTimestamp.gents(path)
|
||||
except IOError:
|
||||
return True
|
||||
if frm_file == newts:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
@staticmethod
|
||||
def minifyjs(modpath):
|
||||
"""
|
||||
Stub to minify js
|
||||
"""
|
||||
pass
|
||||
|
||||
if __name__=="__main__":
|
||||
a = wnJSCompiler()
|
||||
print a.compilejs('../js/wn')
|
||||
|
|
@ -1 +0,0 @@
|
|||
{'update_date': '2011-03-18 18:12:06'}
|
||||
|
|
@ -1,98 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import cgi
|
||||
import datetime
|
||||
import os
|
||||
|
||||
try:
|
||||
|
||||
form = cgi.FieldStorage()
|
||||
out = ''
|
||||
out_buf, str_out = '', ''
|
||||
jsdir='../js'
|
||||
jsonout= {}
|
||||
|
||||
# Traceback
|
||||
# ---------
|
||||
def getTraceback():
|
||||
import sys, traceback, string
|
||||
type, value, tb = sys.exc_info()
|
||||
body = "Traceback (innermost last):\n"
|
||||
list = traceback.format_tb(tb, None) \
|
||||
+ traceback.format_exception_only(type, value)
|
||||
body = body + "%-20s %s" % (string.join(list[:-1], ""), list[-1])
|
||||
return body
|
||||
|
||||
def load_js_from_file(module_name):
|
||||
global out
|
||||
global jsonout
|
||||
import webnotes.utils.jsnamespace as jsn
|
||||
filename = jsn.jsNamespace.modname_to_filename(module_name,jsdir)
|
||||
import os
|
||||
try:
|
||||
f = open(os.path.join(filename))
|
||||
try:
|
||||
out = f.read()
|
||||
finally:
|
||||
f.close()
|
||||
except IOError,e:
|
||||
out = "Not Found: %s" % filename
|
||||
jsonout[module_name]=out
|
||||
|
||||
def load_js_module(module_name):
|
||||
global jsonout
|
||||
from webnotes import defs
|
||||
devmode = getattr(defs,'developer_mode')
|
||||
if devmode:
|
||||
import compilejs
|
||||
compilejs.wnJSCompiler.compilejs(jsdir)
|
||||
if module_name not in jsonout:
|
||||
dependent_mods = get_dependencies(module_name)
|
||||
for module in dependent_mods:
|
||||
load_js_from_file(module)
|
||||
load_js_from_file(module_name)
|
||||
|
||||
def get_dependencies(module_name):
|
||||
import webnotes.utils.jsdependency as jsd
|
||||
ret = jsd.jsDependencyBuilder.build_dependency(jsdir,module_name)
|
||||
return ret
|
||||
|
||||
|
||||
def compress_string(buf):
|
||||
import gzip, cStringIO
|
||||
zbuf = cStringIO.StringIO()
|
||||
zfile = gzip.GzipFile(mode = 'wb', fileobj = zbuf, compresslevel = 5)
|
||||
zfile.write(buf)
|
||||
zfile.close()
|
||||
return zbuf.getvalue()
|
||||
|
||||
compress = 0
|
||||
try:
|
||||
if string.find(os.environ["HTTP_ACCEPT_ENCODING"], "gzip") != -1:
|
||||
compress = 1
|
||||
except:
|
||||
pass
|
||||
|
||||
load_js_module(form.getvalue('module'))
|
||||
#load_js_module('wn.modules')
|
||||
|
||||
if compress and len(out)>512:
|
||||
out_buf = compress_string(str_out)
|
||||
print "Content-Encoding: gzip"
|
||||
print "Content-Length: %d" % (len(out_buf))
|
||||
|
||||
print "Content-Type: text/javascript"
|
||||
|
||||
# Headers end
|
||||
print
|
||||
|
||||
if out_buf:
|
||||
sys.stdout.write(out_buf)
|
||||
elif out:
|
||||
import json
|
||||
print json.dumps(jsonout)
|
||||
|
||||
except Exception, e:
|
||||
print "Content-Type: text/javascript"
|
||||
print
|
||||
print getTraceback()#.replace('\n','<br>')
|
||||
|
|
@ -1,82 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
try:
|
||||
|
||||
import sys, os
|
||||
|
||||
sys.path.append(os.getcwd()+'/cgi-bin')
|
||||
|
||||
def getTraceback():
|
||||
import sys, traceback, string
|
||||
type, value, tb = sys.exc_info()
|
||||
body = "Traceback (innermost last):\n"
|
||||
list = traceback.format_tb(tb, None) \
|
||||
+ traceback.format_exception_only(type, value)
|
||||
body = body + "%-20s %s" % (string.join(list[:-1], ""), list[-1])
|
||||
return body
|
||||
|
||||
import cgi
|
||||
import webnotes
|
||||
import webnotes.auth
|
||||
import webnotes.utils
|
||||
import webnotes.utils.file_manager
|
||||
import webnotes.db
|
||||
import webnotes.defs
|
||||
|
||||
sys.path.append(webnotes.defs.modules_path)
|
||||
|
||||
form = cgi.FieldStorage()
|
||||
webnotes.form_dict = {}
|
||||
|
||||
for each in form.keys():
|
||||
webnotes.form_dict[each] = form.getvalue(each)
|
||||
|
||||
n = form.getvalue('name')
|
||||
|
||||
# authenticate
|
||||
webnotes.auth.HTTPRequest()
|
||||
|
||||
# get file
|
||||
res = webnotes.utils.file_manager.get_file(n)
|
||||
|
||||
fname = res[0]
|
||||
if hasattr(res[1], 'tostring'):
|
||||
fcontent = res[1].tostring()
|
||||
else:
|
||||
fcontent = res[1]
|
||||
|
||||
if form.getvalue('thumbnail'):
|
||||
tn = webnotes.utils.cint(form.getvalue('thumbnail'))
|
||||
try:
|
||||
from PIL import Image
|
||||
import cStringIO
|
||||
|
||||
fobj = cStringIO.StringIO(fcontent)
|
||||
image = Image.open(fobj)
|
||||
image.thumbnail((tn,tn*2), Image.ANTIALIAS)
|
||||
outfile = cStringIO.StringIO()
|
||||
|
||||
if image.mode != "RGB":
|
||||
image = image.convert("RGB")
|
||||
|
||||
image.save(outfile, 'JPEG')
|
||||
outfile.seek(0)
|
||||
fcontent = outfile.read()
|
||||
except:
|
||||
pass
|
||||
|
||||
import mimetypes
|
||||
print "Content-Type: %s" % (mimetypes.guess_type(fname)[0] or 'application/unknown')
|
||||
print "Content-Disposition: filename="+fname.replace(' ', '_')
|
||||
print "Cache-Control: max-age=3600"
|
||||
print
|
||||
print fcontent
|
||||
|
||||
except Exception, e:
|
||||
print "Content-Type: text/html"
|
||||
try:
|
||||
out = {'message':'', 'exc':getTraceback().replace('\n','<br>')}
|
||||
except:
|
||||
out = {'exc': e}
|
||||
print
|
||||
print str(out)
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import cgi
|
||||
import datetime
|
||||
import os
|
||||
|
||||
try:
|
||||
|
||||
form = cgi.FieldStorage()
|
||||
out = ''
|
||||
out_buf, str_out = '', ''
|
||||
|
||||
# Traceback
|
||||
# ---------
|
||||
def getTraceback():
|
||||
import sys, traceback, string
|
||||
type, value, tb = sys.exc_info()
|
||||
body = "Traceback (innermost last):\n"
|
||||
list = traceback.format_tb(tb, None) \
|
||||
+ traceback.format_exception_only(type, value)
|
||||
body = body + "%-20s %s" % (string.join(list[:-1], ""), list[-1])
|
||||
return body
|
||||
|
||||
def load_js_file():
|
||||
global out
|
||||
filename = form.getvalue('filename')
|
||||
import os
|
||||
try:
|
||||
f = open(os.path.join('../js/', filename))
|
||||
try:
|
||||
out = f.read()
|
||||
finally:
|
||||
f.close()
|
||||
except IOError,e:
|
||||
out = "Not Found: %s" % filename
|
||||
|
||||
def compress_string(buf):
|
||||
import gzip, cStringIO
|
||||
zbuf = cStringIO.StringIO()
|
||||
zfile = gzip.GzipFile(mode = 'wb', fileobj = zbuf, compresslevel = 5)
|
||||
zfile.write(buf)
|
||||
zfile.close()
|
||||
return zbuf.getvalue()
|
||||
|
||||
compress = 0
|
||||
try:
|
||||
if string.find(os.environ["HTTP_ACCEPT_ENCODING"], "gzip") != -1:
|
||||
compress = 1
|
||||
except:
|
||||
pass
|
||||
|
||||
load_js_file()
|
||||
|
||||
if compress and len(out)>512:
|
||||
out_buf = compress_string(str_out)
|
||||
print "Content-Encoding: gzip"
|
||||
print "Content-Length: %d" % (len(out_buf))
|
||||
|
||||
print "Content-Type: text/javascript"
|
||||
|
||||
# Headers end
|
||||
print
|
||||
|
||||
if out_buf:
|
||||
sys.stdout.write(out_buf)
|
||||
elif out:
|
||||
print out
|
||||
|
||||
except Exception, e:
|
||||
print "Content-Type: text/javascript"
|
||||
print
|
||||
print getTraceback().replace('\n','<br>')
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Script for creating the pypi packages
|
||||
# Works only for python 2.6+
|
||||
|
||||
|
||||
import os
|
||||
|
||||
try:
|
||||
from setuptools import setup, find_packages
|
||||
except ImportError:
|
||||
import ez_setup
|
||||
ez_setup.use_setuptools()
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
# Startup
|
||||
appname = "webnotes-core"
|
||||
appversion = "v170"
|
||||
|
||||
setup(
|
||||
name = appname,
|
||||
version = appversion,
|
||||
author = "Rushabh Mehta",
|
||||
namespace_packages = ["webnotes"],
|
||||
packages = ["webnotes"] + [ os.path.join("webnotes", a) for a in find_packages("webnotes") ],
|
||||
author_email = "rmehta@gmail.com",
|
||||
description = "A meta-data based library for creating web apps in python and javascript",
|
||||
license = "MIT",
|
||||
keywords = "Meta-data web app framework python",
|
||||
url = "http://code.google.com/p/webnotes/",
|
||||
classifiers = ["License :: OSI Approved :: MIT License","Topic :: Software Development :: Libraries :: Python Modules"],
|
||||
long_description = "Webnotes is a meta-data based framework for web applications in python",
|
||||
)
|
||||
|
||||
425
compress.py
|
|
@ -1,425 +0,0 @@
|
|||
in_files_main = [
|
||||
'utils/rsh.compressed.js'
|
||||
,'globals.js'
|
||||
,'utils/datatype.js'
|
||||
,'utils/browser_detect.js'
|
||||
,'utils/datetime.js'
|
||||
,'utils/dom.js'
|
||||
,'utils/handler.js'
|
||||
,'utils/msgprint.js'
|
||||
,'utils/json.js'
|
||||
,'utils/shortcut.js'
|
||||
,'utils/printElement.js'
|
||||
,'wn/widgets/dialog.js'
|
||||
,'widgets/dialog.js'
|
||||
,'widgets/listing.js'
|
||||
,'wn/widgets/listing.js'
|
||||
,'widgets/tree.js'
|
||||
,'widgets/menu.js'
|
||||
,'widgets/layout.js'
|
||||
,'widgets/tabbedpage.js'
|
||||
,'webpage/page_header.js'
|
||||
,'widgets/autosuggest.js'
|
||||
,'widgets/select.js'
|
||||
,'widgets/tags.js'
|
||||
,'widgets/export_query.js'
|
||||
,'widgets/list_selector.js'
|
||||
,'widgets/form/fields.js'
|
||||
,'webpage/wntoolbar.js'
|
||||
,'webpage/history.js'
|
||||
,'webpage/search.js'
|
||||
,'webpage/spinner.js'
|
||||
,'webpage/freeze_page.js'
|
||||
,'webpage/error_console.js'
|
||||
,'webpage/about.js'
|
||||
,'webpage/loaders.js'
|
||||
,'webpage/uploader.js'
|
||||
,'webpage/page.js'
|
||||
,'webpage/docbrowser.js'
|
||||
,'wn/page_layout.js'
|
||||
#,'wn/widgets/doc_column_view.js'
|
||||
,'wn/widgets/page_sidebar.js'
|
||||
,'wn/widgets/footer.js'
|
||||
#,'wn/widgets/follow.js'
|
||||
,'model/local_data.js'
|
||||
,'model/doclist.js'
|
||||
,'webpage/body.js'
|
||||
,'app.js'
|
||||
,'widgets/calendar.js'
|
||||
]
|
||||
|
||||
out_file_main = 'js/wnf.compressed.js'
|
||||
|
||||
#-------------------------------------------------
|
||||
|
||||
in_files_lite = [
|
||||
'utils/rsh.compressed.js'
|
||||
,'globals.js'
|
||||
,'utils/datatype.js'
|
||||
,'utils/browser_detect.js'
|
||||
,'utils/datetime.js'
|
||||
,'utils/dom.js'
|
||||
,'utils/handler.js'
|
||||
,'utils/msgprint.js'
|
||||
,'utils/json.js'
|
||||
,'wn/widgets/dialog.js'
|
||||
,'widgets/dialog.js'
|
||||
,'widgets/listing.js'
|
||||
,'widgets/layout.js'
|
||||
,'widgets/tabbedpage.js'
|
||||
,'webpage/page_header.js'
|
||||
,'widgets/autosuggest.js'
|
||||
,'widgets/tags.js'
|
||||
,'widgets/form/fields.js'
|
||||
,'webpage/history.js'
|
||||
,'webpage/search.js'
|
||||
,'webpage/spinner.js'
|
||||
,'webpage/freeze_page.js'
|
||||
,'webpage/error_console.js'
|
||||
,'webpage/about.js'
|
||||
,'webpage/loaders.js'
|
||||
,'webpage/uploader.js'
|
||||
,'webpage/page.js'
|
||||
,'wn/widgets/page_sidebar.js'
|
||||
,'wn/widgets/follow.js'
|
||||
,'model/local_data.js'
|
||||
,'model/doclist.js'
|
||||
,'webpage/body.js'
|
||||
,'app.js'
|
||||
]
|
||||
|
||||
out_file_lite = 'js/wnf-lite.compressed.js'
|
||||
|
||||
#-------------------------------------------------
|
||||
|
||||
in_files_form = [
|
||||
'widgets/form/form_container.js'
|
||||
,'widgets/form/form_header.js'
|
||||
,'widgets/form/form.js'
|
||||
,'widgets/form/form_fields.js'
|
||||
,'widgets/form/grid.js'
|
||||
,'widgets/form/form_grid.js'
|
||||
,'widgets/form/print_format.js'
|
||||
,'widgets/form/email.js'
|
||||
,'widgets/form/clientscriptAPI.js'
|
||||
,'widgets/form/form_comments.js'
|
||||
,'wn/widgets/form/sidebar.js'
|
||||
,'wn/widgets/form/comments.js'
|
||||
,'wn/widgets/form/attachments.js'
|
||||
]
|
||||
|
||||
out_file_form = 'js/form.compressed.js';
|
||||
|
||||
in_files_report = [
|
||||
'widgets/report_builder/bargraph.js'
|
||||
,'widgets/report_builder/report_builder.js'
|
||||
,'widgets/report_builder/datatable.js'
|
||||
,'widgets/report_builder/calculator.js'
|
||||
]
|
||||
|
||||
out_file_report = 'js/report.compressed.js'
|
||||
|
||||
in_files_css = [
|
||||
'css/body.css',
|
||||
'css/menus.css',
|
||||
'css/messages.css',
|
||||
'css/forms.css',
|
||||
'css/grid.css',
|
||||
'css/listing.css',
|
||||
'css/report.css',
|
||||
'css/calendar.css',
|
||||
'css/autosuggest.css',
|
||||
'css/dialog.css',
|
||||
'css/wntoolbar.css',
|
||||
'css/tabs.css',
|
||||
'css/jqplot.css',
|
||||
'css/bw-icons.css',
|
||||
'css/sidebar.css',
|
||||
'css/doc_column_view.css',
|
||||
]
|
||||
|
||||
out_file_css = 'css/default.css'
|
||||
|
||||
|
||||
|
||||
#in_files_main += in_files_form
|
||||
|
||||
import os, os.path, shutil
|
||||
|
||||
# This code is original from jsmin by Douglas Crockford, it was translated to
|
||||
# Python by Baruch Even. The original code had the following copyright and
|
||||
# license.
|
||||
#
|
||||
# /* jsmin.c
|
||||
# 2007-05-22
|
||||
#
|
||||
# Copyright (c) 2002 Douglas Crockford (www.crockford.com)
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
# this software and associated documentation files (the "Software"), to deal in
|
||||
# the Software without restriction, including without limitation the rights to
|
||||
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
# of the Software, and to permit persons to whom the Software is furnished to do
|
||||
# so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# The Software shall be used for Good, not Evil.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# */
|
||||
|
||||
from StringIO import StringIO
|
||||
|
||||
def jsmin(js):
|
||||
ins = StringIO(js)
|
||||
outs = StringIO()
|
||||
JavascriptMinify().minify(ins, outs)
|
||||
str = outs.getvalue()
|
||||
if len(str) > 0 and str[0] == '\n':
|
||||
str = str[1:]
|
||||
return str
|
||||
|
||||
def isAlphanum(c):
|
||||
"""return true if the character is a letter, digit, underscore,
|
||||
dollar sign, or non-ASCII character.
|
||||
"""
|
||||
return ((c >= 'a' and c <= 'z') or (c >= '0' and c <= '9') or
|
||||
(c >= 'A' and c <= 'Z') or c == '_' or c == '$' or c == '\\' or (c is not None and ord(c) > 126));
|
||||
|
||||
class UnterminatedComment(Exception):
|
||||
pass
|
||||
|
||||
class UnterminatedStringLiteral(Exception):
|
||||
pass
|
||||
|
||||
class UnterminatedRegularExpression(Exception):
|
||||
pass
|
||||
|
||||
class JavascriptMinify(object):
|
||||
|
||||
def _outA(self):
|
||||
self.outstream.write(self.theA)
|
||||
def _outB(self):
|
||||
self.outstream.write(self.theB)
|
||||
|
||||
def _get(self):
|
||||
"""return the next character from stdin. Watch out for lookahead. If
|
||||
the character is a control character, translate it to a space or
|
||||
linefeed.
|
||||
"""
|
||||
c = self.theLookahead
|
||||
self.theLookahead = None
|
||||
if c == None:
|
||||
c = self.instream.read(1)
|
||||
if c >= ' ' or c == '\n':
|
||||
return c
|
||||
if c == '': # EOF
|
||||
return '\000'
|
||||
if c == '\r':
|
||||
return '\n'
|
||||
return ' '
|
||||
|
||||
def _peek(self):
|
||||
self.theLookahead = self._get()
|
||||
return self.theLookahead
|
||||
|
||||
def _next(self):
|
||||
"""get the next character, excluding comments. peek() is used to see
|
||||
if an unescaped '/' is followed by a '/' or '*'.
|
||||
"""
|
||||
c = self._get()
|
||||
if c == '/' and self.theA != '\\':
|
||||
p = self._peek()
|
||||
if p == '/':
|
||||
c = self._get()
|
||||
while c > '\n':
|
||||
c = self._get()
|
||||
return c
|
||||
if p == '*':
|
||||
c = self._get()
|
||||
while 1:
|
||||
c = self._get()
|
||||
if c == '*':
|
||||
if self._peek() == '/':
|
||||
self._get()
|
||||
return ' '
|
||||
if c == '\000':
|
||||
raise UnterminatedComment()
|
||||
|
||||
return c
|
||||
|
||||
def _action(self, action):
|
||||
"""do something! What you do is determined by the argument:
|
||||
1 Output A. Copy B to A. Get the next B.
|
||||
2 Copy B to A. Get the next B. (Delete A).
|
||||
3 Get the next B. (Delete B).
|
||||
action treats a string as a single character. Wow!
|
||||
action recognizes a regular expression if it is preceded by ( or , or =.
|
||||
"""
|
||||
if action <= 1:
|
||||
self._outA()
|
||||
|
||||
if action <= 2:
|
||||
self.theA = self.theB
|
||||
if self.theA == "'" or self.theA == '"':
|
||||
while 1:
|
||||
self._outA()
|
||||
self.theA = self._get()
|
||||
if self.theA == self.theB:
|
||||
break
|
||||
if self.theA <= '\n':
|
||||
raise UnterminatedStringLiteral()
|
||||
if self.theA == '\\':
|
||||
self._outA()
|
||||
self.theA = self._get()
|
||||
|
||||
|
||||
if action <= 3:
|
||||
self.theB = self._next()
|
||||
if self.theB == '/' and (self.theA == '(' or self.theA == ',' or
|
||||
self.theA == '=' or self.theA == ':' or
|
||||
self.theA == '[' or self.theA == '?' or
|
||||
self.theA == '!' or self.theA == '&' or
|
||||
self.theA == '|' or self.theA == ';' or
|
||||
self.theA == '{' or self.theA == '}' or
|
||||
self.theA == '\n'):
|
||||
self._outA()
|
||||
self._outB()
|
||||
while 1:
|
||||
self.theA = self._get()
|
||||
if self.theA == '/':
|
||||
break
|
||||
elif self.theA == '\\':
|
||||
self._outA()
|
||||
self.theA = self._get()
|
||||
elif self.theA <= '\n':
|
||||
raise UnterminatedRegularExpression()
|
||||
self._outA()
|
||||
self.theB = self._next()
|
||||
|
||||
|
||||
def _jsmin(self):
|
||||
"""Copy the input to the output, deleting the characters which are
|
||||
insignificant to JavaScript. Comments will be removed. Tabs will be
|
||||
replaced with spaces. Carriage returns will be replaced with linefeeds.
|
||||
Most spaces and linefeeds will be removed.
|
||||
"""
|
||||
self.theA = '\n'
|
||||
self._action(3)
|
||||
|
||||
while self.theA != '\000':
|
||||
if self.theA == ' ':
|
||||
if isAlphanum(self.theB):
|
||||
self._action(1)
|
||||
else:
|
||||
self._action(2)
|
||||
elif self.theA == '\n':
|
||||
if self.theB in ['{', '[', '(', '+', '-']:
|
||||
self._action(1)
|
||||
elif self.theB == ' ':
|
||||
self._action(3)
|
||||
else:
|
||||
if isAlphanum(self.theB):
|
||||
self._action(1)
|
||||
else:
|
||||
self._action(2)
|
||||
else:
|
||||
if self.theB == ' ':
|
||||
if isAlphanum(self.theA):
|
||||
self._action(1)
|
||||
else:
|
||||
self._action(3)
|
||||
elif self.theB == '\n':
|
||||
if self.theA in ['}', ']', ')', '+', '-', '"', '\'']:
|
||||
self._action(1)
|
||||
else:
|
||||
if isAlphanum(self.theA):
|
||||
self._action(1)
|
||||
else:
|
||||
self._action(3)
|
||||
else:
|
||||
self._action(1)
|
||||
|
||||
def minify(self, instream, outstream):
|
||||
self.instream = instream
|
||||
self.outstream = outstream
|
||||
self.theA = '\n'
|
||||
self.theB = None
|
||||
self.theLookahead = None
|
||||
|
||||
self._jsmin()
|
||||
self.instream.close()
|
||||
|
||||
def combine_css():
|
||||
global out_file_css, in_files_css
|
||||
|
||||
data = ''
|
||||
for f in in_files_css:
|
||||
fh = open(f, 'read')
|
||||
data += fh.read() + '\n'
|
||||
fh.close()
|
||||
|
||||
out_file = open(out_file_css, 'w')
|
||||
out_file.write(data)
|
||||
out_file.close()
|
||||
|
||||
def _compress(in_files, out_file, in_type='js', verbose=False,
|
||||
temp_file='.temp'):
|
||||
|
||||
import os
|
||||
|
||||
temp = open(temp_file, 'w')
|
||||
for f in in_files:
|
||||
print f + ' | ' + str(int(os.path.getsize('js/'+f)/1024)) + 'k'
|
||||
|
||||
fh = open('js/' + f)
|
||||
data = fh.read() + '\n'
|
||||
fh.close()
|
||||
|
||||
temp.write(data)
|
||||
|
||||
#print ' + %s' % f
|
||||
temp.close()
|
||||
|
||||
out = open(out_file, 'w')
|
||||
|
||||
jsm = JavascriptMinify()
|
||||
jsm.minify(open(temp_file,'r'), out)
|
||||
|
||||
out.close()
|
||||
|
||||
org_size = os.path.getsize(temp_file)
|
||||
new_size = os.path.getsize(out_file)
|
||||
|
||||
print '=> %s' % out_file
|
||||
print 'Original: %.2f kB' % (org_size / 1024.0)
|
||||
print 'Compressed: %.2f kB' % (new_size / 1024.0)
|
||||
print 'Reduction: %.1f%%' % (float(org_size - new_size) / org_size * 100)
|
||||
print ''
|
||||
|
||||
os.remove(temp_file)
|
||||
|
||||
|
||||
if __name__=='__main__':
|
||||
import sys
|
||||
if sys.argv[1]=='main':
|
||||
_compress(in_files_main, out_file_main)
|
||||
elif sys.argv[1]=='lite':
|
||||
_compress(in_files_lite, out_file_lite)
|
||||
elif sys.argv[1]=='form':
|
||||
_compress(in_files_form, out_file_form)
|
||||
elif sys.argv[1]=='report':
|
||||
_compress(in_files_report, out_file_report)
|
||||
elif sys.argv[1]=='css':
|
||||
combine_css()
|
||||
else:
|
||||
print 'parameter must be one of main, lite, css, form or report'
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
/** general icons **/
|
||||
|
||||
.wn-icon { background: url('../images/icons/icons.png'); width: 16px; height: 16px; cursor: pointer; }
|
||||
.wn-icon { background: url('lib/images/icons/icons.png'); width: 16px; height: 16px; cursor: pointer; }
|
||||
.ic-2x2_grid { background-position: 0 0; }
|
||||
.ic-3x3_grid { background-position: 0 -36px; }
|
||||
.ic-3x3_grid_2 { background-position: 0 -72px; }
|
||||
|
|
@ -107,41 +107,6 @@ div.std-footer-item {
|
|||
margin: 0px 13px 13px 0px;
|
||||
}
|
||||
|
||||
.shadow {
|
||||
-moz-box-shadow: 0px 2px 2px #888;
|
||||
-webkit-box-shadow: 0px 2px 2px #888;
|
||||
box-shadow: 0px 2px 2px #888;
|
||||
}
|
||||
|
||||
.round {
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.gradient {
|
||||
background: #ededed; /* Old browsers */
|
||||
background: -moz-linear-gradient(top, #ededed 0%, #d1d1d1 47%, #b7b7b7 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ededed), color-stop(47%,#d1d1d1), color-stop(100%,#b7b7b7)); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, #ededed 0%,#d1d1d1 47%,#b7b7b7 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, #ededed 0%,#d1d1d1 47%,#b7b7b7 100%); /* Opera11.10+ */
|
||||
background: -ms-linear-gradient(top, #ededed 0%,#d1d1d1 47%,#b7b7b7 100%); /* IE10+ */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ededed', endColorstr='#b7b7b7',GradientType=0 ); /* IE6-9 */
|
||||
background: linear-gradient(top, #ededed 0%,#d1d1d1 47%,#b7b7b7 100%); /* W3C */
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
background: #84827c; /* Old browsers */
|
||||
background: -moz-linear-gradient(top, #84827c 0%, #27211c 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#84827c), color-stop(100%,#27211c)); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, #84827c 0%,#27211c 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, #84827c 0%,#27211c 100%); /* Opera11.10+ */
|
||||
background: -ms-linear-gradient(top, #84827c 0%,#27211c 100%); /* IE10+ */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#84827c', endColorstr='#27211c',GradientType=0 ); /* IE6-9 */
|
||||
background: linear-gradient(top, #84827c 0%,#27211c 100%); /* W3C */
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
|
||||
/******** Menus - menu.js ************/
|
||||
|
||||
ul.menu_toolbar {
|
||||
|
|
@ -1176,20 +1141,6 @@ div.dialog_row table td textarea {
|
|||
|
||||
/* Recent */
|
||||
|
||||
div.recent_starred {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
cursor: pointer;
|
||||
background: url('../images/ui/star.gif');
|
||||
}
|
||||
|
||||
div.recent_unstarred {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
cursor: pointer;
|
||||
background: url('../images/ui/star_plain.gif');
|
||||
}
|
||||
|
||||
div.status_flag {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
|
|
@ -1198,21 +1149,14 @@ div.status_flag {
|
|||
background-color: #EEE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Search */
|
||||
|
||||
.search_table td {
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*** for wn toolbar ***/
|
||||
.wntoolbar-icon { background: url('../images/icons/wntoolbar-icons.png'); width: 16px; height: 16px; }
|
||||
.wntoolbar-icon { background: url('lib/images/icons/wntoolbar-icons.png'); width: 16px; height: 16px; }
|
||||
.sprite-home { background-position: 0 0; }
|
||||
.sprite-new { background-position: 0 -66px; }
|
||||
.sprite-pages { background-position: 0 -132px; }
|
||||
|
|
@ -1509,7 +1453,7 @@ div.jqplot-noData-container {
|
|||
|
||||
/** general icons **/
|
||||
|
||||
.wn-icon { background: url('../images/icons/icons.png'); width: 16px; height: 16px; cursor: pointer; }
|
||||
.wn-icon { background: url('lib/images/icons/icons.png'); width: 16px; height: 16px; cursor: pointer; }
|
||||
.ic-2x2_grid { background-position: 0 0; }
|
||||
.ic-3x3_grid { background-position: 0 -36px; }
|
||||
.ic-3x3_grid_2 { background-position: 0 -72px; }
|
||||
|
Before Width: | Height: | Size: 180 B After Width: | Height: | Size: 180 B |
|
Before Width: | Height: | Size: 178 B After Width: | Height: | Size: 178 B |
|
Before Width: | Height: | Size: 120 B After Width: | Height: | Size: 120 B |
|
Before Width: | Height: | Size: 119 B After Width: | Height: | Size: 119 B |
|
Before Width: | Height: | Size: 93 B After Width: | Height: | Size: 93 B |
|
Before Width: | Height: | Size: 97 B After Width: | Height: | Size: 97 B |
|
Before Width: | Height: | Size: 94 B After Width: | Height: | Size: 94 B |
|
Before Width: | Height: | Size: 101 B After Width: | Height: | Size: 101 B |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
0
css/jquery-ui.css → css/legacy/jquery-ui.css
vendored
|
|
@ -1,20 +1,6 @@
|
|||
|
||||
/* Recent */
|
||||
|
||||
div.recent_starred {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
cursor: pointer;
|
||||
background: url('../images/ui/star.gif');
|
||||
}
|
||||
|
||||
div.recent_unstarred {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
cursor: pointer;
|
||||
background: url('../images/ui/star_plain.gif');
|
||||
}
|
||||
|
||||
div.status_flag {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
|
|
@ -23,21 +9,14 @@ div.status_flag {
|
|||
background-color: #EEE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Search */
|
||||
|
||||
.search_table td {
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*** for wn toolbar ***/
|
||||
.wntoolbar-icon { background: url('../images/icons/wntoolbar-icons.png'); width: 16px; height: 16px; }
|
||||
.wntoolbar-icon { background: url('lib/images/icons/wntoolbar-icons.png'); width: 16px; height: 16px; }
|
||||
.sprite-home { background-position: 0 0; }
|
||||
.sprite-new { background-position: 0 -66px; }
|
||||
.sprite-pages { background-position: 0 -132px; }
|
||||
|
|
@ -1,245 +0,0 @@
|
|||
-- Core Elements to install WNFramework
|
||||
-- To be called from install.py
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table `__DocTypeCache`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `__DocTypeCache`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `__DocTypeCache` (
|
||||
`name` varchar(120) DEFAULT NULL,
|
||||
`modified` datetime DEFAULT NULL,
|
||||
`content` text
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `__SessionCache`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `__SessionCache`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `__SessionCache` (
|
||||
`user` varchar(120) DEFAULT NULL,
|
||||
`country` varchar(120) DEFAULT NULL,
|
||||
`cache` longtext
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table `tabDocField`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tabDocField`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `tabDocField` (
|
||||
`name` varchar(120) NOT NULL,
|
||||
`creation` datetime DEFAULT NULL,
|
||||
`modified` datetime DEFAULT NULL,
|
||||
`modified_by` varchar(40) DEFAULT NULL,
|
||||
`owner` varchar(40) DEFAULT NULL,
|
||||
`docstatus` int(1) DEFAULT '0',
|
||||
`parent` varchar(120) DEFAULT NULL,
|
||||
`parentfield` varchar(120) DEFAULT NULL,
|
||||
`parenttype` varchar(120) DEFAULT NULL,
|
||||
`idx` int(8) DEFAULT NULL,
|
||||
`fieldname` varchar(180) DEFAULT NULL,
|
||||
`label` varchar(180) DEFAULT NULL,
|
||||
`oldfieldname` varchar(180) DEFAULT NULL,
|
||||
`fieldtype` varchar(180) DEFAULT NULL,
|
||||
`oldfieldtype` varchar(180) DEFAULT NULL,
|
||||
`options` text,
|
||||
`search_index` int(3) DEFAULT NULL,
|
||||
`hidden` int(3) DEFAULT NULL,
|
||||
`print_hide` int(3) DEFAULT NULL,
|
||||
`report_hide` int(3) DEFAULT NULL,
|
||||
`reqd` int(3) DEFAULT NULL,
|
||||
`no_copy` int(3) DEFAULT NULL,
|
||||
`allow_on_submit` int(3) DEFAULT NULL,
|
||||
`trigger` varchar(180) DEFAULT NULL,
|
||||
`depends_on` varchar(180) DEFAULT NULL,
|
||||
`permlevel` int(3) DEFAULT NULL,
|
||||
`width` varchar(180) DEFAULT NULL,
|
||||
`default` text,
|
||||
`description` text,
|
||||
`colour` varchar(180) DEFAULT NULL,
|
||||
`icon` varchar(180) DEFAULT NULL,
|
||||
`in_filter` int(3) DEFAULT NULL,
|
||||
PRIMARY KEY (`name`),
|
||||
KEY `parent` (`parent`),
|
||||
KEY `label` (`label`),
|
||||
KEY `fieldtype` (`fieldtype`),
|
||||
KEY `fieldname` (`fieldname`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `tabDocFormat`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tabDocFormat`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `tabDocFormat` (
|
||||
`name` varchar(120) NOT NULL,
|
||||
`creation` datetime DEFAULT NULL,
|
||||
`modified` datetime DEFAULT NULL,
|
||||
`modified_by` varchar(40) DEFAULT NULL,
|
||||
`owner` varchar(40) DEFAULT NULL,
|
||||
`docstatus` int(1) DEFAULT '0',
|
||||
`parent` varchar(120) DEFAULT NULL,
|
||||
`parentfield` varchar(120) DEFAULT NULL,
|
||||
`parenttype` varchar(120) DEFAULT NULL,
|
||||
`idx` int(8) DEFAULT NULL,
|
||||
`format` varchar(180) DEFAULT NULL,
|
||||
PRIMARY KEY (`name`),
|
||||
KEY `parent` (`parent`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `tabDocPerm`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tabDocPerm`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `tabDocPerm` (
|
||||
`name` varchar(120) NOT NULL,
|
||||
`creation` datetime DEFAULT NULL,
|
||||
`modified` datetime DEFAULT NULL,
|
||||
`modified_by` varchar(40) DEFAULT NULL,
|
||||
`owner` varchar(40) DEFAULT NULL,
|
||||
`docstatus` int(1) DEFAULT '0',
|
||||
`parent` varchar(120) DEFAULT NULL,
|
||||
`parentfield` varchar(120) DEFAULT NULL,
|
||||
`parenttype` varchar(120) DEFAULT NULL,
|
||||
`idx` int(8) DEFAULT NULL,
|
||||
`permlevel` int(11) DEFAULT NULL,
|
||||
`role` varchar(180) DEFAULT NULL,
|
||||
`match` varchar(180) DEFAULT NULL,
|
||||
`read` int(3) DEFAULT NULL,
|
||||
`write` int(3) DEFAULT NULL,
|
||||
`create` int(3) DEFAULT NULL,
|
||||
`submit` int(3) DEFAULT NULL,
|
||||
`cancel` int(3) DEFAULT NULL,
|
||||
`amend` int(3) DEFAULT NULL,
|
||||
`execute` int(3) DEFAULT NULL,
|
||||
PRIMARY KEY (`name`),
|
||||
KEY `parent` (`parent`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `tabDocType`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tabDocType`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `tabDocType` (
|
||||
`name` varchar(180) NOT NULL DEFAULT '',
|
||||
`creation` datetime DEFAULT NULL,
|
||||
`modified` datetime DEFAULT NULL,
|
||||
`modified_by` varchar(40) DEFAULT NULL,
|
||||
`owner` varchar(180) DEFAULT NULL,
|
||||
`docstatus` int(1) DEFAULT '0',
|
||||
`parent` varchar(120) DEFAULT NULL,
|
||||
`parentfield` varchar(120) DEFAULT NULL,
|
||||
`parenttype` varchar(120) DEFAULT NULL,
|
||||
`idx` int(8) DEFAULT NULL,
|
||||
`search_fields` varchar(180) DEFAULT NULL,
|
||||
`issingle` int(1) DEFAULT NULL,
|
||||
`istable` int(1) DEFAULT NULL,
|
||||
`version` int(11) DEFAULT NULL,
|
||||
`module` varchar(180) DEFAULT NULL,
|
||||
`autoname` varchar(180) DEFAULT NULL,
|
||||
`name_case` varchar(180) DEFAULT NULL,
|
||||
`description` text,
|
||||
`colour` varchar(180) DEFAULT NULL,
|
||||
`read_only` int(1) DEFAULT NULL,
|
||||
`in_create` int(1) DEFAULT NULL,
|
||||
`show_in_menu` int(3) DEFAULT NULL,
|
||||
`menu_index` int(11) DEFAULT NULL,
|
||||
`parent_node` varchar(180) DEFAULT NULL,
|
||||
`smallicon` varchar(180) DEFAULT NULL,
|
||||
`allow_print` int(1) DEFAULT NULL,
|
||||
`allow_email` int(1) DEFAULT NULL,
|
||||
`allow_copy` int(1) DEFAULT NULL,
|
||||
`allow_rename` int(1) DEFAULT NULL,
|
||||
`hide_toolbar` int(1) DEFAULT NULL,
|
||||
`hide_heading` int(1) DEFAULT NULL,
|
||||
`allow_attach` int(1) DEFAULT NULL,
|
||||
`use_template` int(1) DEFAULT NULL,
|
||||
`max_attachments` int(11) DEFAULT NULL,
|
||||
`section_style` varchar(180) DEFAULT NULL,
|
||||
`client_script` text,
|
||||
`client_script_core` text,
|
||||
`server_code` text,
|
||||
`server_code_core` text,
|
||||
`server_code_compiled` text,
|
||||
`client_string` text,
|
||||
`server_code_error` varchar(180) DEFAULT NULL,
|
||||
`print_outline` varchar(180) DEFAULT NULL,
|
||||
`dt_template` text,
|
||||
`is_transaction_doc` int(1) DEFAULT NULL,
|
||||
`change_log` text,
|
||||
`read_only_onload` int(1) DEFAULT NULL,
|
||||
PRIMARY KEY (`name`),
|
||||
KEY `parent` (`parent`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `tabSeries`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tabSeries`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `tabSeries` (
|
||||
`name` varchar(40) DEFAULT NULL,
|
||||
`current` int(10) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table `tabSessions`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tabSessions`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `tabSessions` (
|
||||
`user` varchar(40) DEFAULT NULL,
|
||||
`sid` varchar(120) DEFAULT NULL,
|
||||
`sessiondata` longtext,
|
||||
`ipaddress` varchar(16) DEFAULT NULL,
|
||||
`lastupdate` datetime DEFAULT NULL,
|
||||
`status` varchar(20) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table `tabSingles`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tabSingles`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `tabSingles` (
|
||||
`doctype` varchar(40) DEFAULT NULL,
|
||||
`field` varchar(40) DEFAULT NULL,
|
||||
`value` text,
|
||||
KEY `doctype` (`doctype`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
|
Before Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 1,017 B |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 1,016 B |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 1,012 B |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 617 B |
|
Before Width: | Height: | Size: 4 KiB |
|
Before Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 1,001 B |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 994 B |
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 528 B |
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 781 B |
|
Before Width: | Height: | Size: 1,010 B |
|
Before Width: | Height: | Size: 733 B |
|
Before Width: | Height: | Size: 523 B |
|
Before Width: | Height: | Size: 600 B |
|
Before Width: | Height: | Size: 464 B |
|
Before Width: | Height: | Size: 619 B |
|
Before Width: | Height: | Size: 524 B |
|
Before Width: | Height: | Size: 610 B |
|
Before Width: | Height: | Size: 533 B |
|
Before Width: | Height: | Size: 467 B |
|
Before Width: | Height: | Size: 634 B |
|
Before Width: | Height: | Size: 510 B |
|
Before Width: | Height: | Size: 483 B |
|
Before Width: | Height: | Size: 520 B |
|
Before Width: | Height: | Size: 432 B |
|
Before Width: | Height: | Size: 492 B |
|
Before Width: | Height: | Size: 493 B |
|
Before Width: | Height: | Size: 576 B |
|
Before Width: | Height: | Size: 465 B |
|
Before Width: | Height: | Size: 426 B |
|
Before Width: | Height: | Size: 507 B |
|
Before Width: | Height: | Size: 582 B |
|
Before Width: | Height: | Size: 677 B |
|
Before Width: | Height: | Size: 312 B |
|
Before Width: | Height: | Size: 379 B |
|
Before Width: | Height: | Size: 600 B |
|
Before Width: | Height: | Size: 551 B |
|
Before Width: | Height: | Size: 626 B |
|
Before Width: | Height: | Size: 306 B |