Bläddra i källkod

version 2

version-14
Rushabh Mehta 13 år sedan
förälder
incheckning
f253fa8e0b
100 ändrade filer med 29 tillägg och 1178 borttagningar
  1. +2
    -13
      INSTALL.md
  2. +0
    -1
      README
  3. +23
    -0
      README.md
  4. +0
    -39
      blank.html
  5. +0
    -0
      blank1.html
  6. +0
    -24
      cgi-bin/backupall.py
  7. +0
    -73
      cgi-bin/compilejs.py
  8. +0
    -1
      cgi-bin/core/module.info
  9. +0
    -98
      cgi-bin/get_module_js.cgi
  10. +0
    -82
      cgi-bin/getfile.cgi
  11. +0
    -72
      cgi-bin/getjsfile.cgi
  12. +0
    -35
      cgi-bin/pypi-setup.py
  13. +0
    -425
      compress.py
  14. +0
    -0
      conf/sitemap.xml
  15. +0
    -0
      css/legacy/autosuggest.css
  16. +0
    -0
      css/legacy/body.css
  17. +1
    -1
      css/legacy/bw-icons.css
  18. +0
    -0
      css/legacy/calendar.css
  19. +2
    -58
      css/legacy/default.css
  20. +0
    -0
      css/legacy/dialog.css
  21. +0
    -0
      css/legacy/doc_column_view.css
  22. +0
    -0
      css/legacy/forms.css
  23. +0
    -0
      css/legacy/grid.css
  24. +0
    -0
      css/legacy/images/ui-bg_flat_0_aaaaaa_40x100.png
  25. +0
    -0
      css/legacy/images/ui-bg_flat_75_ffffff_40x100.png
  26. +0
    -0
      css/legacy/images/ui-bg_glass_55_fbf9ee_1x400.png
  27. +0
    -0
      css/legacy/images/ui-bg_glass_95_fef1ec_1x400.png
  28. +0
    -0
      css/legacy/images/ui-bg_highlight-hard_65_ffffff_1x100.png
  29. +0
    -0
      css/legacy/images/ui-bg_highlight-hard_75_dadada_1x100.png
  30. +0
    -0
      css/legacy/images/ui-bg_highlight-hard_75_e6e6e6_1x100.png
  31. +0
    -0
      css/legacy/images/ui-bg_highlight-soft_75_cccccc_1x100.png
  32. +0
    -0
      css/legacy/images/ui-icons_222222_256x240.png
  33. +0
    -0
      css/legacy/images/ui-icons_2e83ff_256x240.png
  34. +0
    -0
      css/legacy/images/ui-icons_454545_256x240.png
  35. +0
    -0
      css/legacy/images/ui-icons_888888_256x240.png
  36. +0
    -0
      css/legacy/images/ui-icons_cd0a0a_256x240.png
  37. +0
    -0
      css/legacy/jqplot.css
  38. +0
    -0
      css/legacy/jquery-ui.css
  39. +0
    -0
      css/legacy/listing.css
  40. +0
    -0
      css/legacy/menus.css
  41. +0
    -0
      css/legacy/messages.css
  42. +0
    -0
      css/legacy/report.css
  43. +0
    -0
      css/legacy/sidebar.css
  44. +0
    -0
      css/legacy/tabs.css
  45. +0
    -0
      css/legacy/user.css
  46. +1
    -22
      css/legacy/wntoolbar.css
  47. +0
    -234
      data/Framework.sql
  48. Binär
      images/icons/Accounts.gif
  49. Binär
      images/icons/Accounts.png
  50. Binär
      images/icons/Analysis.gif
  51. Binär
      images/icons/Analysis.png
  52. Binär
      images/icons/Buying.gif
  53. Binär
      images/icons/Buying.png
  54. Binär
      images/icons/HR.gif
  55. Binär
      images/icons/HR.png
  56. Binär
      images/icons/Home.gif
  57. Binär
      images/icons/Home.png
  58. Binär
      images/icons/Maintenance.gif
  59. Binär
      images/icons/Maintenance.png
  60. Binär
      images/icons/Production.gif
  61. Binär
      images/icons/Production.png
  62. Binär
      images/icons/Projects.gif
  63. Binär
      images/icons/Projects.png
  64. Binär
      images/icons/Selling.gif
  65. Binär
      images/icons/Selling.png
  66. Binär
      images/icons/Setup.gif
  67. Binär
      images/icons/Setup.png
  68. Binär
      images/icons/Stock.gif
  69. Binär
      images/icons/Stock.png
  70. Binär
      images/icons/accept.gif
  71. Binär
      images/icons/accept.png
  72. Binär
      images/icons/add.gif
  73. Binär
      images/icons/add.png
  74. Binär
      images/icons/anchor.png
  75. Binär
      images/icons/application.gif
  76. Binär
      images/icons/application.png
  77. Binär
      images/icons/application_add.png
  78. Binär
      images/icons/application_cascade.png
  79. Binär
      images/icons/application_delete.png
  80. Binär
      images/icons/application_double.png
  81. Binär
      images/icons/application_form.png
  82. Binär
      images/icons/application_go.png
  83. Binär
      images/icons/application_side_list.png
  84. Binär
      images/icons/application_side_tree.png
  85. Binär
      images/icons/application_split.png
  86. Binär
      images/icons/application_tile_horizontal.png
  87. Binär
      images/icons/application_tile_vertical.png
  88. Binär
      images/icons/application_view_columns.png
  89. Binär
      images/icons/application_view_detail.png
  90. Binär
      images/icons/application_view_tile.png
  91. Binär
      images/icons/application_xp.png
  92. Binär
      images/icons/application_xp_terminal.png
  93. Binär
      images/icons/arrow_branch.png
  94. Binär
      images/icons/arrow_divide.png
  95. Binär
      images/icons/arrow_down.gif
  96. Binär
      images/icons/arrow_down.png
  97. Binär
      images/icons/arrow_in.png
  98. Binär
      images/icons/arrow_inout.png
  99. Binär
      images/icons/arrow_join.png
  100. Binär
      images/icons/arrow_left.gif

INSTALL.txt → INSTALL.md Visa fil

@@ -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

+ 0
- 1
README Visa fil

@@ -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
- 0
README.md Visa fil

@@ -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

+ 0
- 39
blank.html Visa fil

@@ -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>

+ 0
- 0
blank1.html Visa fil


+ 0
- 24
cgi-bin/backupall.py Visa fil

@@ -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)

+ 0
- 73
cgi-bin/compilejs.py Visa fil

@@ -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')

+ 0
- 1
cgi-bin/core/module.info Visa fil

@@ -1 +0,0 @@
{'update_date': '2011-03-18 18:12:06'}

+ 0
- 98
cgi-bin/get_module_js.cgi Visa fil

@@ -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>')

+ 0
- 82
cgi-bin/getfile.cgi Visa fil

@@ -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)

+ 0
- 72
cgi-bin/getjsfile.cgi Visa fil

@@ -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>')

+ 0
- 35
cgi-bin/pypi-setup.py Visa fil

@@ -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",
)


+ 0
- 425
compress.py Visa fil

@@ -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'

sitemap.xml → conf/sitemap.xml Visa fil


css/autosuggest.css → css/legacy/autosuggest.css Visa fil


css/body.css → css/legacy/body.css Visa fil


css/bw-icons.css → css/legacy/bw-icons.css Visa fil

@@ -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; }

css/calendar.css → css/legacy/calendar.css Visa fil


css/default.css → css/legacy/default.css Visa fil

@@ -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; }

css/dialog.css → css/legacy/dialog.css Visa fil


css/doc_column_view.css → css/legacy/doc_column_view.css Visa fil


css/forms.css → css/legacy/forms.css Visa fil


css/grid.css → css/legacy/grid.css Visa fil


css/images/ui-bg_flat_0_aaaaaa_40x100.png → css/legacy/images/ui-bg_flat_0_aaaaaa_40x100.png Visa fil


css/images/ui-bg_flat_75_ffffff_40x100.png → css/legacy/images/ui-bg_flat_75_ffffff_40x100.png Visa fil


css/images/ui-bg_glass_55_fbf9ee_1x400.png → css/legacy/images/ui-bg_glass_55_fbf9ee_1x400.png Visa fil


css/images/ui-bg_glass_95_fef1ec_1x400.png → css/legacy/images/ui-bg_glass_95_fef1ec_1x400.png Visa fil


css/images/ui-bg_highlight-hard_65_ffffff_1x100.png → css/legacy/images/ui-bg_highlight-hard_65_ffffff_1x100.png Visa fil


css/images/ui-bg_highlight-hard_75_dadada_1x100.png → css/legacy/images/ui-bg_highlight-hard_75_dadada_1x100.png Visa fil


css/images/ui-bg_highlight-hard_75_e6e6e6_1x100.png → css/legacy/images/ui-bg_highlight-hard_75_e6e6e6_1x100.png Visa fil


css/images/ui-bg_highlight-soft_75_cccccc_1x100.png → css/legacy/images/ui-bg_highlight-soft_75_cccccc_1x100.png Visa fil


css/images/ui-icons_222222_256x240.png → css/legacy/images/ui-icons_222222_256x240.png Visa fil


css/images/ui-icons_2e83ff_256x240.png → css/legacy/images/ui-icons_2e83ff_256x240.png Visa fil


css/images/ui-icons_454545_256x240.png → css/legacy/images/ui-icons_454545_256x240.png Visa fil


css/images/ui-icons_888888_256x240.png → css/legacy/images/ui-icons_888888_256x240.png Visa fil


css/images/ui-icons_cd0a0a_256x240.png → css/legacy/images/ui-icons_cd0a0a_256x240.png Visa fil


css/jqplot.css → css/legacy/jqplot.css Visa fil


css/jquery-ui.css → css/legacy/jquery-ui.css Visa fil


css/listing.css → css/legacy/listing.css Visa fil


css/menus.css → css/legacy/menus.css Visa fil


css/messages.css → css/legacy/messages.css Visa fil


css/report.css → css/legacy/report.css Visa fil


css/sidebar.css → css/legacy/sidebar.css Visa fil


css/tabs.css → css/legacy/tabs.css Visa fil


css/user.css → css/legacy/user.css Visa fil


css/wntoolbar.css → css/legacy/wntoolbar.css Visa fil

@@ -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; }

+ 0
- 234
data/Framework.sql Visa fil

@@ -1,245 +0,0 @@


--
--

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 */;

--
--

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 */;



--
--

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 */;

--
--

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 */;

--
--

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 */;

--
--

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 */;

--
--

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 */;


--
--

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 */;


--
--

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;


Binär
images/icons/Accounts.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 1.0 KiB

Binär
images/icons/Accounts.png Visa fil

Före Efter
Bredd: 20  |  Höjd: 20  |  Storlek: 3.8 KiB

Binär
images/icons/Analysis.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 1017 B

Binär
images/icons/Analysis.png Visa fil

Före Efter
Bredd: 20  |  Höjd: 20  |  Storlek: 3.7 KiB

Binär
images/icons/Buying.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 1016 B

Binär
images/icons/Buying.png Visa fil

Före Efter
Bredd: 20  |  Höjd: 20  |  Storlek: 3.7 KiB

Binär
images/icons/HR.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 1012 B

Binär
images/icons/HR.png Visa fil

Före Efter
Bredd: 20  |  Höjd: 20  |  Storlek: 3.7 KiB

Binär
images/icons/Home.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 1.0 KiB

Binär
images/icons/Home.png Visa fil

Före Efter
Bredd: 20  |  Höjd: 20  |  Storlek: 3.8 KiB

Binär
images/icons/Maintenance.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 617 B

Binär
images/icons/Maintenance.png Visa fil

Före Efter
Bredd: 20  |  Höjd: 20  |  Storlek: 4.0 KiB

Binär
images/icons/Production.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 1.0 KiB

Binär
images/icons/Production.png Visa fil

Före Efter
Bredd: 20  |  Höjd: 20  |  Storlek: 3.6 KiB

Binär
images/icons/Projects.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 1001 B

Binär
images/icons/Projects.png Visa fil

Före Efter
Bredd: 20  |  Höjd: 20  |  Storlek: 3.7 KiB

Binär
images/icons/Selling.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 994 B

Binär
images/icons/Selling.png Visa fil

Före Efter
Bredd: 20  |  Höjd: 20  |  Storlek: 3.6 KiB

Binär
images/icons/Setup.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 528 B

Binär
images/icons/Setup.png Visa fil

Före Efter
Bredd: 20  |  Höjd: 20  |  Storlek: 3.6 KiB

Binär
images/icons/Stock.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 1.0 KiB

Binär
images/icons/Stock.png Visa fil

Före Efter
Bredd: 20  |  Höjd: 20  |  Storlek: 3.5 KiB

Binär
images/icons/accept.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 1.0 KiB

Binär
images/icons/accept.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 781 B

Binär
images/icons/add.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 1010 B

Binär
images/icons/add.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 733 B

Binär
images/icons/anchor.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 523 B

Binär
images/icons/application.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 600 B

Binär
images/icons/application.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 464 B

Binär
images/icons/application_add.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 619 B

Binär
images/icons/application_cascade.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 524 B

Binär
images/icons/application_delete.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 610 B

Binär
images/icons/application_double.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 533 B

Binär
images/icons/application_form.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 467 B

Binär
images/icons/application_go.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 634 B

Binär
images/icons/application_side_list.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 510 B

Binär
images/icons/application_side_tree.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 483 B

Binär
images/icons/application_split.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 520 B

Binär
images/icons/application_tile_horizontal.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 432 B

Binär
images/icons/application_tile_vertical.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 492 B

Binär
images/icons/application_view_columns.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 493 B

Binär
images/icons/application_view_detail.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 576 B

Binär
images/icons/application_view_tile.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 465 B

Binär
images/icons/application_xp.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 426 B

Binär
images/icons/application_xp_terminal.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 507 B

Binär
images/icons/arrow_branch.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 582 B

Binär
images/icons/arrow_divide.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 677 B

Binär
images/icons/arrow_down.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 312 B

Binär
images/icons/arrow_down.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 379 B

Binär
images/icons/arrow_in.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 600 B

Binär
images/icons/arrow_inout.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 551 B

Binär
images/icons/arrow_join.png Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 626 B

Binär
images/icons/arrow_left.gif Visa fil

Före Efter
Bredd: 16  |  Höjd: 16  |  Storlek: 306 B

Vissa filer visades inte eftersom för många filer har ändrats

Laddar…
Avbryt
Spara