浏览代码

Merge branch 'master' of github.com:webnotes/wnframework

version-14
Nabin Hait 14 年前
父节点
当前提交
f97604bd61
共有 100 个文件被更改,包括 1429 次插入715 次删除
  1. +2
    -13
      INSTALL.md
  2. +0
    -1
      README
  3. +23
    -0
      README.md
  4. +25
    -0
      attribution.md
  5. +0
    -39
      blank.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
    -213
      cgi-bin/webnotes/widgets/page_body.py
  14. +0
    -0
      conf/Framework.sql
  15. +0
    -0
      conf/__init__.py
  16. +12
    -0
      conf/_conf.py
  17. +35
    -0
      conf/apache.conf
  18. +20
    -0
      conf/app.js
  19. +11
    -0
      conf/conf.py
  20. +21
    -0
      conf/index.cgi
  21. +0
    -0
      conf/sitemap.xml
  22. +389
    -0
      css/base.css
  23. +58
    -0
      css/layout.css
  24. +0
    -0
      css/legacy/autosuggest.css
  25. +35
    -1
      css/legacy/body.css
  26. +20
    -0
      css/legacy/build.json
  27. +1
    -1
      css/legacy/bw-icons.css
  28. +0
    -0
      css/legacy/calendar.css
  29. +2
    -23
      css/legacy/default.css
  30. +0
    -0
      css/legacy/dialog.css
  31. +0
    -0
      css/legacy/doc_column_view.css
  32. +0
    -0
      css/legacy/forms.css
  33. +0
    -0
      css/legacy/grid.css
  34. +0
    -0
      css/legacy/jqplot.css
  35. +17
    -17
      css/legacy/jquery-ui.css
  36. +0
    -0
      css/legacy/listing.css
  37. +0
    -0
      css/legacy/menus.css
  38. +0
    -0
      css/legacy/messages.css
  39. +0
    -0
      css/legacy/report.css
  40. +0
    -0
      css/legacy/sidebar.css
  41. +0
    -0
      css/legacy/tabs.css
  42. +0
    -0
      css/legacy/user.css
  43. +1
    -22
      css/legacy/wntoolbar.css
  44. +236
    -0
      css/skeleton.css
  45. +427
    -0
      css/ui/buttons.css
  46. +82
    -0
      css/ui/overlay.css
  47. +12
    -0
      css/ui/status_bar.css
  48. 二进制
      data/GeoIP.dat
  49. 二进制
      images/icons/Accounts.gif
  50. 二进制
      images/icons/Accounts.png
  51. 二进制
      images/icons/Analysis.gif
  52. 二进制
      images/icons/Analysis.png
  53. 二进制
      images/icons/Buying.gif
  54. 二进制
      images/icons/Buying.png
  55. 二进制
      images/icons/HR.gif
  56. 二进制
      images/icons/HR.png
  57. 二进制
      images/icons/Home.gif
  58. 二进制
      images/icons/Home.png
  59. 二进制
      images/icons/Maintenance.gif
  60. 二进制
      images/icons/Maintenance.png
  61. 二进制
      images/icons/Production.gif
  62. 二进制
      images/icons/Production.png
  63. 二进制
      images/icons/Projects.gif
  64. 二进制
      images/icons/Projects.png
  65. 二进制
      images/icons/Selling.gif
  66. 二进制
      images/icons/Selling.png
  67. 二进制
      images/icons/Setup.gif
  68. 二进制
      images/icons/Setup.png
  69. 二进制
      images/icons/Stock.gif
  70. 二进制
      images/icons/Stock.png
  71. 二进制
      images/icons/accept.png
  72. 二进制
      images/icons/add.gif
  73. 二进制
      images/icons/add.png
  74. 二进制
      images/icons/anchor.png
  75. 二进制
      images/icons/application.png
  76. 二进制
      images/icons/application_add.png
  77. 二进制
      images/icons/application_cascade.png
  78. 二进制
      images/icons/application_delete.png
  79. 二进制
      images/icons/application_double.png
  80. 二进制
      images/icons/application_form.png
  81. 二进制
      images/icons/application_go.png
  82. 二进制
      images/icons/application_side_list.png
  83. 二进制
      images/icons/application_side_tree.png
  84. 二进制
      images/icons/application_split.png
  85. 二进制
      images/icons/application_tile_horizontal.png
  86. 二进制
      images/icons/application_tile_vertical.png
  87. 二进制
      images/icons/application_view_columns.png
  88. 二进制
      images/icons/application_view_detail.png
  89. 二进制
      images/icons/application_view_tile.png
  90. 二进制
      images/icons/application_xp.png
  91. 二进制
      images/icons/application_xp_terminal.png
  92. 二进制
      images/icons/arrow_branch.png
  93. 二进制
      images/icons/arrow_divide.png
  94. 二进制
      images/icons/arrow_down.png
  95. 二进制
      images/icons/arrow_in.png
  96. 二进制
      images/icons/arrow_inout.png
  97. 二进制
      images/icons/arrow_join.png
  98. 二进制
      images/icons/arrow_left.gif
  99. 二进制
      images/icons/arrow_left.png
  100. 二进制
      images/icons/arrow_merge.png

INSTALL.txt → INSTALL.md 查看文件

@@ -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 查看文件

@@ -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 查看文件

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

+ 25
- 0
attribution.md 查看文件

@@ -0,0 +1,25 @@
# Attribution

Following libraries have been used in wnframework

## Python

- Jinja2
- Markdown2
- Jinja2 Markdown2 extenion
- Redis (?)

## Javascript

- JSON2
- JQuery
- JQPlot
- [History](http://benalman.com/projects/jquery-hashchange-plugin/)
- Suckerfish (menu)

## CSS

- Skeleton CSS:
- [CSS3 Overlay](https://github.com/LearnBoost/CSS3-Overlay/)
- [Buttons](http://www.red-team-design.com/just-another-awesome-css3-buttons)


+ 0
- 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>

+ 0
- 24
cgi-bin/backupall.py 查看文件

@@ -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 查看文件

@@ -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 查看文件

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

+ 0
- 98
cgi-bin/get_module_js.cgi 查看文件

@@ -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 查看文件

@@ -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 查看文件

@@ -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 查看文件

@@ -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
- 213
cgi-bin/webnotes/widgets/page_body.py 查看文件

@@ -1,213 +0,0 @@
#: HTML Template of index.cgi
index_template = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head id="head">
<!-- Web Notes Framework : www.webnotesframework.org -->

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="robots" content="index, follow" />
<meta name="keywords" content="%(keywords)s" />
<meta name="description" content="%(site_description)s" />
<meta name="generator" content="Web Notes Framework Version v170 - Open Source Web Application Framework" />
<title>%(title)s</title>
<link type="text/css" rel="stylesheet" href="css/jquery-ui.css">
<link type="text/css" rel="stylesheet" href="css/default.css">
<link rel="Shortcut Icon" href="/favicon.ico">
<script language="JavaScript" src="js/jquery/jquery.min.js"></script>
<script language="JavaScript" src="js/jquery/jquery-ui.min.js"></script>
<script type="text/javascript" src="js/tiny_mce_33/jquery.tinymce.js"></script>
<script language="JavaScript" src="js/wnf.compressed.js"></script>
%(import_form)s
<script language="JavaScript">var _startup_data = %(startup_data)s;</script>
<!--[if IE]><script language="javascript" type="text/javascript" src="js/jquery/excanvas.min.js"></script><![endif]-->
%(add_in_head)s
<script type="text/javascript">
window.dhtmlHistory.create({ debugMode: false });
</script>
</head>
<body>

<div id="dialog_back"></div>

<div id="startup_div" style="padding: 8px; font-size: 14px;"></div>

<!-- Main Starts -->
<div id="body_div">

<!--static (no script) content-->
<div class="no_script">
%(content)s
</div>

</div>

%(add_in_body)s
</body>
</html>
'''

redirect_template = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>%s</title>
<meta http-equiv="REFRESH" content="0; url=%s"></HEAD>
<BODY style="font-family: Arial; padding: 8px; font-size: 14px; margin: 0px;">
Redirecting...
</BODY>
</HTML>'''

page_properties = {
'add_in_head':'',
'add_in_body':'',
'keywords':'',
'site_description':'',
'title':'',
'content':'',
'startup_data':'{}',
'import_form':'<script language="JavaScript" src="js/form.compressed.js"></script>'
}


import webnotes

# remove 'id' attributes so they don't conflict
# ---------------------------------------------
def replace_id(match):
#webnotes.msgprint(match.group('name'))
return ''
def scrub_ids(content):
import re
p = re.compile('id=\"(?P<name> [^\"]*)\"', re.VERBOSE)
content = p.sub(replace_id, content)

p = re.compile('id=\'(?P<name> [^\']*)\'', re.VERBOSE)
content = p.sub(replace_id, content)
return content

def get_page_content(page):
"""
Gets the HTML content from `static_content` or `content` property of a `Page`
and loads it in global `page_properties`
"""
from webnotes.model.code import get_code
from webnotes.model.doc import Document
global page_properties
if not page: return
if '/' in page: page = page.split('/')[0]
if page=='Form': return
try:
doc = Document('Page', page)
load_page_metatags(doc)
template = '%(content)s'
# content
if doc.template:
template = get_code(webnotes.conn.get_value('Page Template', doc.template, 'module'), 'Page Template', doc.template, 'html', fieldname='template')
page_properties['content'] = get_code(doc.module, 'page', doc.name, 'html', fieldname='content')
# dynamic (scripted) content
if page_properties['content'] and page_properties['content'].startswith('#!python'):
page_properties.update(webnotes.model.code.execute(page_properties['content']))
page_properties['content'] = scrub_ids(template % {'content':page_properties['content']})
except:
pass

def load_page_metatags(doc):
global page_properties

try:
import startup
except:
startup = ''

# page meta-tags
page_properties['title'] = doc.page_title or doc.name
page_properties['keywords'] = doc.keywords or webnotes.conn.get_value('Control Panel',None,'keywords') or ''
page_properties['site_description'] = doc.site_description or webnotes.conn.get_value('Control Panel',None,'site_description') or ''
page_properties['add_in_head'] = getattr(startup, 'add_in_head', '')
page_properties['add_in_body'] = getattr(startup, 'add_in_body', '')


# find the page to load as static
# -------------------------------

def load_properties():
import webnotes.widgets.page
import urllib

page_url = webnotes.form_dict.get('_escaped_fragment_', webnotes.form_dict.get('page', ''))

if page_url and page_url.lower().startswith('page/'):
page_url = page_url[5:]
if page_url:
get_page_content(urllib.unquote(page_url))
else:
get_page_content(webnotes.user.get_home_page())

# generate the page
# -----------------
def load_default_properties():
if not page_properites['keywords']:
page_properites['keywords'] = webnotes.conn.get_value('Control Panel',None,'keywords') or ''
if not page_properites['site_description']:
page_properites['site_description'] = webnotes.conn.get_value('Control Panel',None,'site_description') or ''

# generate the page
# -----------------
def get():
"""
returns the full rendered index.cgi
Gets `keywords` and `site_description` from the `Control Panel`
"""
import webnotes
no_startup = webnotes.form.getvalue('no_startup') or None

global index_template, redirect_template
import webnotes.session_cache
try:
import json
except: # python 2.4
import simplejson as json
page = webnotes.form_dict.get('page', '')
# sid in public display
# ---------------------
if webnotes.form_dict.get('sid'):
return redirect_template % ('Redirecting...', ('index.cgi' + (page and ('?page='+page) or '')))
if '%(content)s' in index_template:
load_properties()
# load the session data
# ---------------------
try:
sd = webnotes.session_cache.get()
except:
import webnotes.utils
sd = {'exc':webnotes.utils.getTraceback()}
# add debug messages

sd['server_messages'] = '\n--------------\n'.join(webnotes.message_log)
page_properties['startup_data'] = no_startup and '{}' or json.dumps(sd)
# no form api required for guests
if webnotes.session['user']=='Guest':
page_properties['import_form'] = ''
index_template = index_template % page_properties
return index_template

data/Framework.sql → conf/Framework.sql 查看文件


cgi-bin/core/doctype/__init__.py → conf/__init__.py 查看文件


+ 12
- 0
conf/_conf.py 查看文件

@@ -0,0 +1,12 @@
# Main Configuration File

# Copy this into conf.py
# ----------------------

# Index URL
# ---------

# URL path to index.html
# if you are installing within a folder, add the folderpath
index_path = '/'


+ 35
- 0
conf/apache.conf 查看文件

@@ -0,0 +1,35 @@
# Sample httpd.conf extension ot start wnframework

# Port on which you want to run wnframework
Listen 8080

<VirtualHost *:8080>

# Set your root folder here
DocumentRoot /var/www/html/
<Directory />
AllowOverride All
Order allow,deny
Allow from all

# enable direct execution of .py files
Options +ExecCGI
#AddHandler cgi-script .cgi
AddHandler cgi-script .py

DirectoryIndex index.html

RewriteEngine On
# all model calls will be redirected to model.py
# to call a model - mysite/models/type/name eg. mysite.com/models/Organization/WebNotes
RewriteRule /models/(.*)$ /lib/model.py/$1 [L,QSA]
# all page calls will be redircted to page.py
# page/home
RewriteRule /pages/(.*)$ /lib/page.py/$1 [L,QSA]
</Directory>

</VirtualHost>

+ 20
- 0
conf/app.js 查看文件

@@ -0,0 +1,20 @@
wn.require('lib/js/lib/jquery.min.js');
wn.require('lib/js/wn/ui/status_bar.js');

wn.sb = new wn.ui.StatusBar();
wn.sb.set_value(15);
// for datepicker
wn.require('lib/js/legacy/jquery/jquery-ui.min.js')
wn.sb.set_value(25);

wn.require('lib/js/legacy/wnf.compressed.js');
wn.sb.set_value(60);

wn.require('lib/js/legacy/form.compressed.js');
wn.require('lib/js/legacy/report.compressed.js');
wn.require('lib/css/legacy/default.css');
wn.sb.set_value(80);

$(document).bind('ready', function() {
startup();
});

+ 11
- 0
conf/conf.py 查看文件

@@ -0,0 +1,11 @@
# Main Configuration File

# Copy this into conf.py
# ----------------------

# Index URL
# ---------

# URL path to index.html
# if you are installing within a folder, add the folderpath
index_path = '/'

+ 21
- 0
conf/index.cgi 查看文件

@@ -0,0 +1,21 @@
#!/usr/bin/python
# main handler file

import cgi, cgitb, os, sys
cgitb.enable()

# import libs
sys.path.append('lib/py')
sys.path.append('erpnext')

import webnotes
import webnotes.defs

webnotes.form = cgi.FieldStorage()

# make the form_dict
for key in webnotes.form.keys():
webnotes.form_dict[key] = webnotes.form.getvalue(key)

# pass on to legacy handler
import webnotes.handler

sitemap.xml → conf/sitemap.xml 查看文件


+ 389
- 0
css/base.css 查看文件

@@ -0,0 +1,389 @@
/*
* Skeleton V1.1
* Copyright 2011, Dave Gamache
* www.getskeleton.com
* Free to use under the MIT license.
* http://www.opensource.org/licenses/mit-license.php
* 8/17/2011
*/


/* Table of Content
==================================================
#Reset & Basics
#Basic Styles
#Site Styles
#Typography
#Links
#Lists
#Images
#Buttons
#Tabs
#Forms
#Misc */


/* #Reset & Basics (Inspired by E. Meyers)
================================================== */
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline; }
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
display: block; }
body {
line-height: 1; }
ol, ul {
list-style: none; }
blockquote, q {
quotes: none; }
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none; }
table {
border-collapse: collapse;
border-spacing: 0; }


/* #Basic Styles
================================================== */
body {
background: #fff;
font: 14px/21px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #444;
-webkit-font-smoothing: antialiased; /* Fix for webkit rendering */
-webkit-text-size-adjust: 100%;
}


/* #Typography
================================================== */
h1, h2, h3, h4, h5, h6 {
color: #181818;
font-family: "Georgia", "Times New Roman", Helvetica, Arial, sans-serif;
font-weight: normal; }
h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; }
h1 { font-size: 46px; line-height: 55px; margin-bottom: 14px;}
h2 { font-size: 35px; line-height: 40px; margin-bottom: 10px; }
h3 { font-size: 28px; line-height: 34px; margin-bottom: 8px; }
h4 { font-size: 21px; line-height: 30px; margin-bottom: 4px; }
h5 { font-size: 17px; line-height: 24px; }
h6 { font-size: 14px; line-height: 21px; }
.subheader { color: #777; }

p { margin: 0 0 20px 0; }
p img { margin: 0; }
p.lead { font-size: 21px; line-height: 27px; color: #777; }

em { font-style: italic; }
strong { font-weight: bold; color: #333; }
small { font-size: 80%; }

/* Blockquotes */
blockquote, blockquote p { font-size: 17px; line-height: 24px; color: #777; font-style: italic; }
blockquote { margin: 0 0 20px; padding: 9px 20px 0 19px; border-left: 1px solid #ddd; }
blockquote cite { display: block; font-size: 12px; color: #555; }
blockquote cite:before { content: "\2014 \0020"; }
blockquote cite a, blockquote cite a:visited, blockquote cite a:visited { color: #555; }

hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 10px 0 30px; height: 0; }


/* #Links
================================================== */
a, a:visited { color: #333; text-decoration: underline; outline: 0; }
a:hover, a:focus { color: #000; }
p a, p a:visited { line-height: inherit; }


/* #Lists
================================================== */
ul, ol { margin-bottom: 20px; }
ul { list-style: none outside; }
ol { list-style: decimal; }
ol, ul.square, ul.circle, ul.disc { margin-left: 30px; }
ul.square { list-style: square outside; }
ul.circle { list-style: circle outside; }
ul.disc { list-style: disc outside; }
ul ul, ul ol,
ol ol, ol ul { margin: 4px 0 5px 30px; font-size: 90%; }
ul ul li, ul ol li,
ol ol li, ol ul li { margin-bottom: 6px; }
li { line-height: 18px; margin-bottom: 12px; }
ul.large li { line-height: 21px; }
li p { line-height: 21px; }

/* #Images
================================================== */

img.scale-with-grid {
max-width: 100%;
height: auto; }


/* #Buttons
================================================== */

a.button,
button,
input[type="submit"],
input[type="reset"],
input[type="button"] {
background: #eee; /* Old browsers */
background: -moz-linear-gradient(top, rgba(255,255,255,.2) 0%, rgba(0,0,0,.2) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.2)), color-stop(100%,rgba(0,0,0,.2))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Opera11.10+ */
background: -ms-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* IE10+ */
background: linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* W3C */
border: 1px solid #aaa;
border-top: 1px solid #ccc;
border-left: 1px solid #ccc;
padding: 4px 12px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
color: #444;
display: inline-block;
font-size: 11px;
font-weight: bold;
text-decoration: none;
text-shadow: 0 1px rgba(255, 255, 255, .75);
cursor: pointer;
margin-bottom: 20px;
line-height: 21px;
font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; }

a.button:hover,
button:hover,
input[type="submit"]:hover,
input[type="reset"]:hover,
input[type="button"]:hover {
color: #222;
background: #ddd; /* Old browsers */
background: -moz-linear-gradient(top, rgba(255,255,255,.3) 0%, rgba(0,0,0,.3) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.3)), color-stop(100%,rgba(0,0,0,.3))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Opera11.10+ */
background: -ms-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* IE10+ */
background: linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* W3C */
border: 1px solid #888;
border-top: 1px solid #aaa;
border-left: 1px solid #aaa; }

a.button:active,
button:active,
input[type="submit"]:active,
input[type="reset"]:active,
input[type="button"]:active {
border: 1px solid #666;
background: #ccc; /* Old browsers */
background: -moz-linear-gradient(top, rgba(255,255,255,.35) 0%, rgba(10,10,10,.4) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.35)), color-stop(100%,rgba(10,10,10,.4))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Opera11.10+ */
background: -ms-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* IE10+ */
background: linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* W3C */ }

.button.full-width,
button.full-width,
input[type="submit"].full-width,
input[type="reset"].full-width,
input[type="button"].full-width {
width: 100%;
padding-left: 0 !important;
padding-right: 0 !important;
text-align: center; }


/* #Tabs (activate in tabs.js)
================================================== */
ul.tabs {
display: block;
margin: 0 0 20px 0;
padding: 0;
border-bottom: solid 1px #ddd; }
ul.tabs li {
display: block;
width: auto;
height: 30px;
padding: 0;
float: left;
margin-bottom: 0; }
ul.tabs li a {
display: block;
text-decoration: none;
width: auto;
height: 29px;
padding: 0px 20px;
line-height: 30px;
border: solid 1px #ddd;
border-width: 1px 1px 0 0;
margin: 0;
background: #f5f5f5;
font-size: 13px; }
ul.tabs li a.active {
background: #fff;
height: 30px;
position: relative;
top: -4px;
padding-top: 4px;
border-left-width: 1px;
margin: 0 0 0 -1px;
color: #111;
-moz-border-radius-topleft: 2px;
-webkit-border-top-left-radius: 2px;
border-top-left-radius: 2px;
-moz-border-radius-topright: 2px;
-webkit-border-top-right-radius: 2px;
border-top-right-radius: 2px; }
ul.tabs li:first-child a.active {
margin-left: 0; }
ul.tabs li:first-child a {
border-width: 1px 1px 0 1px;
-moz-border-radius-topleft: 2px;
-webkit-border-top-left-radius: 2px;
border-top-left-radius: 2px; }
ul.tabs li:last-child a {
-moz-border-radius-topright: 2px;
-webkit-border-top-right-radius: 2px;
border-top-right-radius: 2px; }

ul.tabs-content { margin: 0; display: block; }
ul.tabs-content > li { display:none; }
ul.tabs-content > li.active { display: block; }

/* Clearfixing tabs for beautiful stacking */
ul.tabs:before,
ul.tabs:after {
content: '\0020';
display: block;
overflow: hidden;
visibility: hidden;
width: 0;
height: 0; }
ul.tabs:after {
clear: both; }
ul.tabs {
zoom: 1; }


/* #Forms
================================================== */

form {
margin-bottom: 20px; }
fieldset {
margin-bottom: 20px; }
input[type="text"],
input[type="password"],
input[type="email"],
textarea,
select {
border: 1px solid #ccc;
padding: 6px 4px;
outline: none;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
font: 13px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #777;
margin: 0;
width: 210px;
max-width: 100%;
display: block;
margin-bottom: 20px;
background: #fff; }
select {
padding: 0; }
input[type="text"]:focus,
input[type="password"]:focus,
input[type="email"]:focus,
textarea:focus {
border: 1px solid #aaa;
color: #444;
-moz-box-shadow: 0 0 3px rgba(0,0,0,.2);
-webkit-box-shadow: 0 0 3px rgba(0,0,0,.2);
box-shadow: 0 0 3px rgba(0,0,0,.2); }
textarea {
min-height: 60px; }
label,
legend {
display: block;
font-weight: bold;
font-size: 13px; }
select {
width: 220px; }
input[type="checkbox"] {
display: inline; }
label span,
legend span {
font-weight: normal;
font-size: 13px;
color: #444; }

/* #Misc
================================================== */
.remove-bottom { margin-bottom: 0 !important; }
.half-bottom { margin-bottom: 10px !important; }
.add-bottom { margin-bottom: 20px !important; }


/*

chaiproject.org

Some standard styles to help you get started

Fibonacchi 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

*/

/* Code blocks */

pre, code {
font: 12px 'Bitstream Vera Sans Mono','Courier',monospace;
}

/* Light Gradient */
.gradient-light {
background: #eaeaea; /* Old browsers */
background: -moz-linear-gradient(top, #eaeaea 0%, #b2b2b2 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eaeaea), color-stop(100%,#b2b2b2)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #eaeaea 0%,#b2b2b2 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #eaeaea 0%,#b2b2b2 100%); /* Opera11.10+ */
background: -ms-linear-gradient(top, #eaeaea 0%,#b2b2b2 100%); /* IE10+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eaeaea', endColorstr='#b2b2b2',GradientType=0 ); /* IE6-9 */
background: linear-gradient(top, #eaeaea 0%,#b2b2b2 100%); /* W3C */
}

/* Dark Gradient */
.gradient-dark {
background: #45484d; /* Old browsers */
background: -moz-linear-gradient(top, #45484d 0%, #000000 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#45484d), color-stop(100%,#000000)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #45484d 0%,#000000 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #45484d 0%,#000000 100%); /* Opera11.10+ */
background: -ms-linear-gradient(top, #45484d 0%,#000000 100%); /* IE10+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#45484d', endColorstr='#000000',GradientType=0 ); /* IE6-9 */
background: linear-gradient(top, #45484d 0%,#000000 100%); /* W3C */
color: #FFF;
}

/* Small shadow */
.shadow {
-moz-box-shadow: 0px 2px 2px #888;
-webkit-box-shadow: 0px 2px 2px #888;
box-shadow: 0px 2px 2px #888;
}

/* Rounded corners */
.round {
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}

+ 58
- 0
css/layout.css 查看文件

@@ -0,0 +1,58 @@
/*
* Skeleton V1.1
* Copyright 2011, Dave Gamache
* www.getskeleton.com
* Free to use under the MIT license.
* http://www.opensource.org/licenses/mit-license.php
* 8/17/2011
*/

/* Table of Content
==================================================
#Site Styles
#Page Styles
#Media Queries
#Font-Face */

/* #Site Styles
================================================== */

/* #Page Styles
================================================== */

/* #Media Queries
================================================== */

/* Smaller than standard 960 (devices and browsers) */
@media only screen and (max-width: 959px) {}

/* Tablet Portrait size to standard 960 (devices and browsers) */
@media only screen and (min-width: 768px) and (max-width: 959px) {}

/* All Mobile Sizes (devices and browser) */
@media only screen and (max-width: 767px) {}

/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */
@media only screen and (min-width: 480px) and (max-width: 767px) {}

/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */
@media only screen and (max-width: 479px) {}


/* #Font-Face
================================================== */
/* This is the proper syntax for an @font-face file
Just create a "fonts" folder at the root,
copy your FontName into code below and remove
comment brackets */

/* @font-face {
font-family: 'FontName';
src: url('../fonts/FontName.eot');
src: url('../fonts/FontName.eot?iefix') format('eot'),
url('../fonts/FontName.woff') format('woff'),
url('../fonts/FontName.ttf') format('truetype'),
url('../fonts/FontName.svg#webfontZam02nTh') format('svg');
font-weight: normal;
font-style: normal; }
*/

css/autosuggest.css → css/legacy/autosuggest.css 查看文件


css/body.css → css/legacy/body.css 查看文件

@@ -105,4 +105,38 @@ div.std-footer {

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

+ 20
- 0
css/legacy/build.json 查看文件

@@ -0,0 +1,20 @@
{
"default.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"
]
}

css/bw-icons.css → css/legacy/bw-icons.css 查看文件

@@ -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 查看文件


css/default.css → css/legacy/default.css 查看文件

@@ -1141,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;
@@ -1163,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; }
@@ -1474,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 查看文件


css/doc_column_view.css → css/legacy/doc_column_view.css 查看文件


css/forms.css → css/legacy/forms.css 查看文件


css/grid.css → css/legacy/grid.css 查看文件


css/jqplot.css → css/legacy/jqplot.css 查看文件


css/jquery-ui.css → css/legacy/jquery-ui.css 查看文件

@@ -50,26 +50,26 @@
.ui-widget { font-family: Arial,sans-serif; font-size: 1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial,sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(lib/images/jquery-ui/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
.ui-widget-content a { color: #222222; }
.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(lib/images/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
.ui-widget-header a { color: #222222; }

/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_highlight-hard_75_e6e6e6_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #222; }
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(lib/images/jquery-ui/ui-bg_highlight-hard_75_e6e6e6_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #222; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #222; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_highlight-hard_75_dadada_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #000; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999; background: #dadada url(lib/images/jquery-ui/ui-bg_highlight-hard_75_dadada_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #000; }
.ui-state-hover a, .ui-state-hover a:hover { color: #000; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_highlight-hard_65_ffffff_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #000; }
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(lib/images/jquery-ui/ui-bg_highlight-hard_65_ffffff_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #000; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #000; text-decoration: none; }
.ui-widget :active { outline: none; }

/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(lib/images/jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(lib/images/jquery-ui/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
@@ -80,14 +80,14 @@
----------------------------------*/

/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
.ui-icon { width: 16px; height: 16px; background-image: url(lib/images/jquery-ui/ui-icons_222222_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(lib/images/jquery-ui/ui-icons_222222_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(lib/images/jquery-ui/ui-icons_222222_256x240.png); }
.ui-state-default .ui-icon { background-image: url(lib/images/jquery-ui/ui-icons_888888_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(lib/images/jquery-ui/ui-icons_454545_256x240.png); }
.ui-state-active .ui-icon {background-image: url(lib/images/jquery-ui/ui-icons_454545_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(lib/images/jquery-ui/ui-icons_2e83ff_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(lib/images/jquery-ui/ui-icons_cd0a0a_256x240.png); }

/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
@@ -282,8 +282,8 @@
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }

/* Overlays */
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* Button
.ui-widget-overlay { background: #aaaaaa url(lib/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(lib/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* Button
----------------------------------*/

.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */

css/listing.css → css/legacy/listing.css 查看文件


css/menus.css → css/legacy/menus.css 查看文件


css/messages.css → css/legacy/messages.css 查看文件


css/report.css → css/legacy/report.css 查看文件


css/sidebar.css → css/legacy/sidebar.css 查看文件


css/tabs.css → css/legacy/tabs.css 查看文件


css/user.css → css/legacy/user.css 查看文件


css/wntoolbar.css → css/legacy/wntoolbar.css 查看文件

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

+ 236
- 0
css/skeleton.css 查看文件

@@ -0,0 +1,236 @@
/*
* Skeleton V1.1
* Copyright 2011, Dave Gamache
* www.getskeleton.com
* Free to use under the MIT license.
* http://www.opensource.org/licenses/mit-license.php
* 8/17/2011
*/


/* Table of Contents
==================================================
#Base 960 Grid
#Tablet (Portrait)
#Mobile (Portrait)
#Mobile (Landscape)
#Clearing */



/* #Base 960 Grid
================================================== */

.container { position: relative; width: 960px; margin: 0 auto; padding: 0; }
.column, .columns { float: left; display: inline; margin-left: 10px; margin-right: 10px; }
.row { margin-bottom: 20px; }

/* Nested Column Classes */
.column.alpha, .columns.alpha { margin-left: 0; }
.column.omega, .columns.omega { margin-right: 0; }

/* Base Grid */
.container .one.column { width: 40px; }
.container .two.columns { width: 100px; }
.container .three.columns { width: 160px; }
.container .four.columns { width: 220px; }
.container .five.columns { width: 280px; }
.container .six.columns { width: 340px; }
.container .seven.columns { width: 400px; }
.container .eight.columns { width: 460px; }
.container .nine.columns { width: 520px; }
.container .ten.columns { width: 580px; }
.container .eleven.columns { width: 640px; }
.container .twelve.columns { width: 700px; }
.container .thirteen.columns { width: 760px; }
.container .fourteen.columns { width: 820px; }
.container .fifteen.columns { width: 880px; }
.container .sixteen.columns { width: 940px; }

.container .one-third.column { width: 300px; }
.container .two-thirds.column { width: 620px; }

/* Offsets */
.container .offset-by-one { padding-left: 60px; }
.container .offset-by-two { padding-left: 120px; }
.container .offset-by-three { padding-left: 180px; }
.container .offset-by-four { padding-left: 240px; }
.container .offset-by-five { padding-left: 300px; }
.container .offset-by-six { padding-left: 360px; }
.container .offset-by-seven { padding-left: 420px; }
.container .offset-by-eight { padding-left: 480px; }
.container .offset-by-nine { padding-left: 540px; }
.container .offset-by-ten { padding-left: 600px; }
.container .offset-by-eleven { padding-left: 660px; }
.container .offset-by-twelve { padding-left: 720px; }
.container .offset-by-thirteen { padding-left: 780px; }
.container .offset-by-fourteen { padding-left: 840px; }
.container .offset-by-fifteen { padding-left: 900px; }



/* #Tablet (Portrait)
================================================== */

/* Note: Design for a width of 768px */

@media only screen and (min-width: 768px) and (max-width: 959px) {
.container { width: 768px; }
.container .column,
.container .columns { margin-left: 10px; margin-right: 10px; }
.column.alpha, .columns.alpha { margin-left: 0; margin-right: 10px; }
.column.omega, .columns.omega { margin-right: 0; margin-left: 10px; }

.container .one.column { width: 28px; }
.container .two.columns { width: 76px; }
.container .three.columns { width: 124px; }
.container .four.columns { width: 172px; }
.container .five.columns { width: 220px; }
.container .six.columns { width: 268px; }
.container .seven.columns { width: 316px; }
.container .eight.columns { width: 364px; }
.container .nine.columns { width: 412px; }
.container .ten.columns { width: 460px; }
.container .eleven.columns { width: 508px; }
.container .twelve.columns { width: 556px; }
.container .thirteen.columns { width: 604px; }
.container .fourteen.columns { width: 652px; }
.container .fifteen.columns { width: 700px; }
.container .sixteen.columns { width: 748px; }

.container .one-third.column { width: 236px; }
.container .two-thirds.column { width: 492px; }

/* Offsets */
.container .offset-by-one { padding-left: 48px; }
.container .offset-by-two { padding-left: 96px; }
.container .offset-by-three { padding-left: 144px; }
.container .offset-by-four { padding-left: 192px; }
.container .offset-by-five { padding-left: 240px; }
.container .offset-by-six { padding-left: 288px; }
.container .offset-by-seven { padding-left: 336px; }
.container .offset-by-eight { padding-left: 348px; }
.container .offset-by-nine { padding-left: 432px; }
.container .offset-by-ten { padding-left: 480px; }
.container .offset-by-eleven { padding-left: 528px; }
.container .offset-by-twelve { padding-left: 576px; }
.container .offset-by-thirteen { padding-left: 624px; }
.container .offset-by-fourteen { padding-left: 672px; }
.container .offset-by-fifteen { padding-left: 720px; }
}


/* #Mobile (Portrait)
================================================== */

/* Note: Design for a width of 320px */

@media only screen and (max-width: 767px) {
.container { width: 300px; }
.columns, .column { margin: 0; }

.container .one.column,
.container .two.columns,
.container .three.columns,
.container .four.columns,
.container .five.columns,
.container .six.columns,
.container .seven.columns,
.container .eight.columns,
.container .nine.columns,
.container .ten.columns,
.container .eleven.columns,
.container .twelve.columns,
.container .thirteen.columns,
.container .fourteen.columns,
.container .fifteen.columns,
.container .sixteen.columns,
.container .one-third.column,
.container .two-thirds.column { width: 300px; }

/* Offsets */
.container .offset-by-one,
.container .offset-by-two,
.container .offset-by-three,
.container .offset-by-four,
.container .offset-by-five,
.container .offset-by-six,
.container .offset-by-seven,
.container .offset-by-eight,
.container .offset-by-nine,
.container .offset-by-ten,
.container .offset-by-eleven,
.container .offset-by-twelve,
.container .offset-by-thirteen,
.container .offset-by-fourteen,
.container .offset-by-fifteen { padding-left: 0; }

}


/* #Mobile (Landscape)
================================================== */

/* Note: Design for a width of 480px */

@media only screen and (min-width: 480px) and (max-width: 767px) {
.container { width: 420px; }
.columns, .column { margin: 0; }

.container .one.column,
.container .two.columns,
.container .three.columns,
.container .four.columns,
.container .five.columns,
.container .six.columns,
.container .seven.columns,
.container .eight.columns,
.container .nine.columns,
.container .ten.columns,
.container .eleven.columns,
.container .twelve.columns,
.container .thirteen.columns,
.container .fourteen.columns,
.container .fifteen.columns,
.container .sixteen.columns,
.container .one-third.column,
.container .two-thirds.column { width: 420px; }
}


/* #Clearing
================================================== */

/* Self Clearing Goodness */
.container:after { content: "\0020"; display: block; height: 0; clear: both; visibility: hidden; }

/* Use clearfix class on parent to clear nested columns,
or wrap each row of columns in a <div class="row"> */
.clearfix:before,
.clearfix:after,
.row:before,
.row:after {
content: '\0020';
display: block;
overflow: hidden;
visibility: hidden;
width: 0;
height: 0; }
.row:after,
.clearfix:after {
clear: both; }
.row,
.clearfix {
zoom: 1; }

/* You can also use a <br class="clear" /> to clear columns */
.clear {
clear: both;
display: block;
overflow: hidden;
visibility: hidden;
width: 0;
height: 0;
}



+ 427
- 0
css/ui/buttons.css 查看文件

@@ -0,0 +1,427 @@
/*

http://hellohappy.org/css3-buttons/

*/

button::-moz-focus-inner {
border: 0; }

/* minimal
*******************************************************************************/
button.minimal {
background: #e3e3e3;
border: 1px solid #bbb;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
-ms-border-radius: 3px;
-o-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: inset 0 0 1px 1px #f6f6f6;
-moz-box-shadow: inset 0 0 1px 1px #f6f6f6;
-ms-box-shadow: inset 0 0 1px 1px #f6f6f6;
-o-box-shadow: inset 0 0 1px 1px #f6f6f6;
box-shadow: inset 0 0 1px 1px #f6f6f6;
color: #333;
font: bold 12px "helvetica neue", helvetica, arial, sans-serif;
line-height: 1;
padding: 7px 21px;
text-align: center;
text-shadow: 0 1px 0 #fff;
}
button.minimal:hover {
background: #d9d9d9;
-webkit-box-shadow: inset 0 0 1px 1px #eaeaea;
-moz-box-shadow: inset 0 0 1px 1px #eaeaea;
-ms-box-shadow: inset 0 0 1px 1px #eaeaea;
-o-box-shadow: inset 0 0 1px 1px #eaeaea;
box-shadow: inset 0 0 1px 1px #eaeaea;
color: #222;
cursor: pointer; }
button.minimal:active {
background: #d0d0d0;
-webkit-box-shadow: inset 0 0 1px 1px #e3e3e3;
-moz-box-shadow: inset 0 0 1px 1px #e3e3e3;
-ms-box-shadow: inset 0 0 1px 1px #e3e3e3;
-o-box-shadow: inset 0 0 1px 1px #e3e3e3;
box-shadow: inset 0 0 1px 1px #e3e3e3;
color: #000; }

/* clean gray
*******************************************************************************/
button.clean-gray {
background-color: #eeeeee;
background-image: -webkit-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
background-image: -ms-linear-gradient(top, #eeeeee, #dddddd);
background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
background-image: linear-gradient(top, #eeeeee, #dddddd);
border: 1px solid #ccc;
border-bottom: 1px solid #bbb;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
-ms-border-radius: 3px;
-o-border-radius: 3px;
border-radius: 3px;
color: #333;
line-height: 1;
font-size: 11px;
padding: 3px 7px;
text-align: center;
text-shadow: 0 1px 0 #eee;
}
button.clean-gray:hover {
background-color: #dddddd;
background-image: -webkit-gradient(linear, left top, left bottom, from(#dddddd), to(#bbbbbb));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb);
background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb);
background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb);
background-image: -o-linear-gradient(top, #dddddd, #bbbbbb);
background-image: linear-gradient(top, #dddddd, #bbbbbb);
border: 1px solid #bbb;
border-bottom: 1px solid #999;
cursor: pointer;
text-shadow: 0 1px 0 #ddd; }
button.clean-gray:active {
border: 1px solid #aaa;
border-bottom: 1px solid #888;
-webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
-moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
-ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
-o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; }

/* cupid green (inspired by okcupid.com)
*******************************************************************************/
button.cupid-green {
background-color: #7fbf4d;
background-image: -webkit-gradient(linear, left top, left bottom, from(#7fbf4d), to(#63a62f));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #7fbf4d, #63a62f);
background-image: -moz-linear-gradient(top, #7fbf4d, #63a62f);
background-image: -ms-linear-gradient(top, #7fbf4d, #63a62f);
background-image: -o-linear-gradient(top, #7fbf4d, #63a62f);
background-image: linear-gradient(top, #7fbf4d, #63a62f);
border: 1px solid #63a62f;
border-bottom: 1px solid #5b992b;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
-ms-border-radius: 3px;
-o-border-radius: 3px;
border-radius: 3px;
color: #fff;
line-height: 1;
font-size: 11px;
padding: 3px 7px;
text-align: center;
text-shadow: 0 -1px 0 #4c9021;
}
button.cupid-green:hover {
background-color: #76b347;
background-image: -webkit-gradient(linear, left top, left bottom, from(#76b347), to(#5e9e2e));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #76b347, #5e9e2e);
background-image: -moz-linear-gradient(top, #76b347, #5e9e2e);
background-image: -ms-linear-gradient(top, #76b347, #5e9e2e);
background-image: -o-linear-gradient(top, #76b347, #5e9e2e);
background-image: linear-gradient(top, #76b347, #5e9e2e);
-webkit-box-shadow: inset 0 1px 0 0 #8dbf67;
-moz-box-shadow: inset 0 1px 0 0 #8dbf67;
-ms-box-shadow: inset 0 1px 0 0 #8dbf67;
-o-box-shadow: inset 0 1px 0 0 #8dbf67;
box-shadow: inset 0 1px 0 0 #8dbf67;
cursor: pointer; }
button.cupid-green:active {
border: 1px solid #5b992b;
border-bottom: 1px solid #538c27;
-webkit-box-shadow: inset 0 0 8px 4px #548c29, 0 1px 0 0 #eeeeee;
-moz-box-shadow: inset 0 0 8px 4px #548c29, 0 1px 0 0 #eeeeee;
-ms-box-shadow: inset 0 0 8px 4px #548c29, 0 1px 0 0 #eeeeee;
-o-box-shadow: inset 0 0 8px 4px #548c29, 0 1px 0 0 #eeeeee;
box-shadow: inset 0 0 8px 4px #548c29, 0 1px 0 0 #eeeeee; }

/* cupid blue (inspired by okcupid.com)
*******************************************************************************/
button.cupid-blue {
background-color: #d7e5f5;
background-image: -webkit-gradient(linear, left top, left bottom, from(#d7e5f5), to(#cbe0f5));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: -moz-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: -ms-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: -o-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: linear-gradient(top, #d7e5f5, #cbe0f5);
border-top: 1px solid #abbbcc;
border-left: 1px solid #a7b6c7;
border-bottom: 1px solid #a1afbf;
border-right: 1px solid #a7b6c7;
-webkit-border-radius: 12px;
-moz-border-radius: 12px;
-ms-border-radius: 12px;
-o-border-radius: 12px;
border-radius: 12px;
-webkit-box-shadow: inset 0 1px 0 0 white;
-moz-box-shadow: inset 0 1px 0 0 white;
-ms-box-shadow: inset 0 1px 0 0 white;
-o-box-shadow: inset 0 1px 0 0 white;
box-shadow: inset 0 1px 0 0 white;
color: #1a3e66;
font: normal 11px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
line-height: 1;
padding: 3px 5px;
text-align: center;
text-shadow: 0 1px 1px #fff;
}
button.cupid-blue:hover {
background-color: #ccd9e8;
background-image: -webkit-gradient(linear, left top, left bottom, from(#ccd9e8), to(#c1d4e8));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #ccd9e8, #c1d4e8);
background-image: -moz-linear-gradient(top, #ccd9e8, #c1d4e8);
background-image: -ms-linear-gradient(top, #ccd9e8, #c1d4e8);
background-image: -o-linear-gradient(top, #ccd9e8, #c1d4e8);
background-image: linear-gradient(top, #ccd9e8, #c1d4e8);
border-top: 1px solid #a1afbf;
border-left: 1px solid #9caaba;
border-bottom: 1px solid #96a3b3;
border-right: 1px solid #9caaba;
-webkit-box-shadow: inset 0 1px 0 0 #f2f2f2;
-moz-box-shadow: inset 0 1px 0 0 #f2f2f2;
-ms-box-shadow: inset 0 1px 0 0 #f2f2f2;
-o-box-shadow: inset 0 1px 0 0 #f2f2f2;
box-shadow: inset 0 1px 0 0 #f2f2f2;
color: #163659;
cursor: pointer; }
button.cupid-blue:active {
border: 1px solid #8c98a7;
-webkit-box-shadow: inset 0 0 4px 2px #abbccf, 0 0 1px 0 #eeeeee;
-moz-box-shadow: inset 0 0 4px 2px #abbccf, 0 0 1px 0 #eeeeee;
-ms-box-shadow: inset 0 0 4px 2px #abbccf, 0 0 1px 0 #eeeeee;
-o-box-shadow: inset 0 0 4px 2px #abbccf, 0 0 1px 0 #eeeeee;
box-shadow: inset 0 0 4px 2px #abbccf, 0 0 1px 0 #eeeeee; }

/* blue pill (inspired by iTunes)
*******************************************************************************/
button.blue-pill {
background-color: #a5b8da;
background-image: -webkit-gradient(linear, left top, left bottom, from(#a5b8da), to(#7089b3));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #a5b8da, #7089b3);
background-image: -moz-linear-gradient(top, #a5b8da, #7089b3);
background-image: -ms-linear-gradient(top, #a5b8da, #7089b3);
background-image: -o-linear-gradient(top, #a5b8da, #7089b3);
background-image: linear-gradient(top, #a5b8da, #7089b3);
border-top: 1px solid #758fba;
border-right: 1px solid #6c84ab;
border-bottom: 1px solid #5c6f91;
border-left: 1px solid #6c84ab;
-webkit-border-radius: 18px;
-moz-border-radius: 18px;
-ms-border-radius: 18px;
-o-border-radius: 18px;
border-radius: 18px;
-webkit-box-shadow: inset 0 1px 0 0 #aec3e5;
-moz-box-shadow: inset 0 1px 0 0 #aec3e5;
-ms-box-shadow: inset 0 1px 0 0 #aec3e5;
-o-box-shadow: inset 0 1px 0 0 #aec3e5;
box-shadow: inset 0 1px 0 0 #aec3e5;
color: #fff;
font: bold 11px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
line-height: 1;
padding: 8px 0;
text-align: center;
text-shadow: 0 -1px 1px #64799e;
text-transform: uppercase;
}
button.blue-pill:hover {
background-color: #9badcc;
background-image: -webkit-gradient(linear, left top, left bottom, from(#9badcc), to(#687fa6));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #9badcc, #687fa6);
background-image: -moz-linear-gradient(top, #9badcc, #687fa6);
background-image: -ms-linear-gradient(top, #9badcc, #687fa6);
background-image: -o-linear-gradient(top, #9badcc, #687fa6);
background-image: linear-gradient(top, #9badcc, #687fa6);
border-top: 1px solid #6d86ad;
border-right: 1px solid #647a9e;
border-bottom: 1px solid #546685;
border-left: 1px solid #647a9e;
-webkit-box-shadow: inset 0 1px 0 0 #a5b9d9;
-moz-box-shadow: inset 0 1px 0 0 #a5b9d9;
-ms-box-shadow: inset 0 1px 0 0 #a5b9d9;
-o-box-shadow: inset 0 1px 0 0 #a5b9d9;
box-shadow: inset 0 1px 0 0 #a5b9d9;
cursor: pointer; }
button.blue-pill:active {
border: 1px solid #546685;
-webkit-box-shadow: inset 0 0 8px 2px #7e8da6, 0 1px 0 0 #eeeeee;
-moz-box-shadow: inset 0 0 8px 2px #7e8da6, 0 1px 0 0 #eeeeee;
-ms-box-shadow: inset 0 0 8px 2px #7e8da6, 0 1px 0 0 #eeeeee;
-o-box-shadow: inset 0 0 8px 2px #7e8da6, 0 1px 0 0 #eeeeee;
box-shadow: inset 0 0 8px 2px #7e8da6, 0 1px 0 0 #eeeeee; }

/* slick black
*******************************************************************************/
button.slick-black {
background-color: rgba(50, 50, 50, 0.9);
background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(50, 50, 50, 0.9) 0%), to(rgba(30, 30, 30, 0.9) 50%));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, rgba(50, 50, 50, 0.9) 0%, rgba(30, 30, 30, 0.9) 50%, rgba(20, 20, 20, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%);
background-image: -moz-linear-gradient(top, rgba(50, 50, 50, 0.9) 0%, rgba(30, 30, 30, 0.9) 50%, rgba(20, 20, 20, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%);
background-image: -ms-linear-gradient(top, rgba(50, 50, 50, 0.9) 0%, rgba(30, 30, 30, 0.9) 50%, rgba(20, 20, 20, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%);
background-image: -o-linear-gradient(top, rgba(50, 50, 50, 0.9) 0%, rgba(30, 30, 30, 0.9) 50%, rgba(20, 20, 20, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%);
background-image: linear-gradient(top, rgba(50, 50, 50, 0.9) 0%, rgba(30, 30, 30, 0.9) 50%, rgba(20, 20, 20, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%);
border: 0;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: inset 1px 1px 1px 0px rgba(135, 135, 135, 0.1), inset -1px -1px 1px 0px rgba(135, 135, 135, 0.1);
-moz-box-shadow: inset 1px 1px 1px 0px rgba(135, 135, 135, 0.1), inset -1px -1px 1px 0px rgba(135, 135, 135, 0.1);
-ms-box-shadow: inset 1px 1px 1px 0px rgba(135, 135, 135, 0.1), inset -1px -1px 1px 0px rgba(135, 135, 135, 0.1);
-o-box-shadow: inset 1px 1px 1px 0px rgba(135, 135, 135, 0.1), inset -1px -1px 1px 0px rgba(135, 135, 135, 0.1);
box-shadow: inset 1px 1px 1px 0px rgba(135, 135, 135, 0.1), inset -1px -1px 1px 0px rgba(135, 135, 135, 0.1);
color: #fff;
font: lighter 22px "helvetica neue", helvetica, arial, sans-serif;
line-height: 1;
padding: 12px 0;
text-shadow: 0px -1px 1px rgba(0, 0, 0, 0.8), 0 1px 1px rgba(255, 255, 255, 0.3);
}
button.slick-black:hover {
background-color: rgba(70, 70, 70, 0.9);
background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(70, 70, 70, 0.9) 0%), to(rgba(50, 50, 50, 0.9) 50%));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, rgba(70, 70, 70, 0.9) 0%, rgba(50, 50, 50, 0.9) 50%, rgba(40, 40, 40, 0.9) 50%, rgba(20, 20, 20, 0.9) 100%);
background-image: -moz-linear-gradient(top, rgba(70, 70, 70, 0.9) 0%, rgba(50, 50, 50, 0.9) 50%, rgba(40, 40, 40, 0.9) 50%, rgba(20, 20, 20, 0.9) 100%);
background-image: -ms-linear-gradient(top, rgba(70, 70, 70, 0.9) 0%, rgba(50, 50, 50, 0.9) 50%, rgba(40, 40, 40, 0.9) 50%, rgba(20, 20, 20, 0.9) 100%);
background-image: -o-linear-gradient(top, rgba(70, 70, 70, 0.9) 0%, rgba(50, 50, 50, 0.9) 50%, rgba(40, 40, 40, 0.9) 50%, rgba(20, 20, 20, 0.9) 100%);
background-image: linear-gradient(top, rgba(70, 70, 70, 0.9) 0%, rgba(50, 50, 50, 0.9) 50%, rgba(40, 40, 40, 0.9) 50%, rgba(20, 20, 20, 0.9) 100%);
cursor: pointer; }
button.slick-black:active {
background-color: rgba(30, 30, 30, 0.9);
background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(30, 30, 30, 0.9) 0%), to(rgba(20, 20, 20, 0.9) 50%));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, rgba(30, 30, 30, 0.9) 0%, rgba(20, 20, 20, 0.9) 50%, rgba(10, 10, 10, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%);
background-image: -moz-linear-gradient(top, rgba(30, 30, 30, 0.9) 0%, rgba(20, 20, 20, 0.9) 50%, rgba(10, 10, 10, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%);
background-image: -ms-linear-gradient(top, rgba(30, 30, 30, 0.9) 0%, rgba(20, 20, 20, 0.9) 50%, rgba(10, 10, 10, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%);
background-image: -o-linear-gradient(top, rgba(30, 30, 30, 0.9) 0%, rgba(20, 20, 20, 0.9) 50%, rgba(10, 10, 10, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%);
background-image: linear-gradient(top, rgba(30, 30, 30, 0.9) 0%, rgba(20, 20, 20, 0.9) 50%, rgba(10, 10, 10, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%); }


/* download itunes
I wrote a blog post about creating this button:
http://robots.thoughtbot.com/post/2718077289/make-css3-buttons-like-a-boss
*******************************************************************************/
button.download-itunes {
background-color: #52a8e8;
background-image: -webkit-gradient(linear, left top, left bottom, from(#52a8e8), to(#377ad0));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #52a8e8, #377ad0);
background-image: -moz-linear-gradient(top, #52a8e8, #377ad0);
background-image: -ms-linear-gradient(top, #52a8e8, #377ad0);
background-image: -o-linear-gradient(top, #52a8e8, #377ad0);
background-image: linear-gradient(top, #52a8e8, #377ad0);
border-top: 1px solid #4081af;
border-right: 1px solid #2e69a3;
border-bottom: 1px solid #20559a;
border-left: 1px solid #2e69a3;
-webkit-border-radius: 16px;
-moz-border-radius: 16px;
-ms-border-radius: 16px;
-o-border-radius: 16px;
border-radius: 16px;
-webkit-box-shadow: inset 0 1px 0 0 #72b9eb, 0 1px 2px 0 #b3b3b3;
-moz-box-shadow: inset 0 1px 0 0 #72b9eb, 0 1px 2px 0 #b3b3b3;
-ms-box-shadow: inset 0 1px 0 0 #72b9eb, 0 1px 2px 0 #b3b3b3;
-o-box-shadow: inset 0 1px 0 0 #72b9eb, 0 1px 2px 0 #b3b3b3;
box-shadow: inset 0 1px 0 0 #72b9eb, 0 1px 2px 0 #b3b3b3;
color: #fff;
font: normal 11px "lucida grande", sans-serif;
line-height: 1;
padding: 3px 5px;
text-align: center;
text-shadow: 0 -1px 1px #3275bc;
width: 112px;
-webkit-background-clip: padding-box; }
button.download-itunes:hover {
background-color: #3e9ee5;
background-image: -webkit-gradient(linear, left top, left bottom, from(#3e9ee5 0%), to(#206bcb 100%));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #3e9ee5 0%, #206bcb 100%);
background-image: -moz-linear-gradient(top, #3e9ee5 0%, #206bcb 100%);
background-image: -ms-linear-gradient(top, #3e9ee5 0%, #206bcb 100%);
background-image: -o-linear-gradient(top, #3e9ee5 0%, #206bcb 100%);
background-image: linear-gradient(top, #3e9ee5 0%, #206bcb 100%);
border-top: 1px solid #2a73a6;
border-right: 1px solid #165899;
border-bottom: 1px solid #07428f;
border-left: 1px solid #165899;
-webkit-box-shadow: inset 0 1px 0 0 #62b1e9;
-moz-box-shadow: inset 0 1px 0 0 #62b1e9;
-ms-box-shadow: inset 0 1px 0 0 #62b1e9;
-o-box-shadow: inset 0 1px 0 0 #62b1e9;
box-shadow: inset 0 1px 0 0 #62b1e9;
cursor: pointer;
text-shadow: 0 -1px 1px #1d62ab;
-webkit-background-clip: padding-box; }
button.download-itunes:active {
background: #3282d3;
border: 1px solid #154c8c;
border-bottom: 1px solid #0e408e;
-webkit-box-shadow: inset 0 0 6px 3px #1657b5, 0 1px 0 0 white;
-moz-box-shadow: inset 0 0 6px 3px #1657b5, 0 1px 0 0 white;
-ms-box-shadow: inset 0 0 6px 3px #1657b5, 0 1px 0 0 white;
-o-box-shadow: inset 0 0 6px 3px #1657b5, 0 1px 0 0 white;
box-shadow: inset 0 0 6px 3px #1657b5, 0 1px 0 0 white;
text-shadow: 0 -1px 1px #2361a4;
-webkit-background-clip: padding-box; }

button[disabled].download-itunes,
button[disabled].download-itunes:hover,
button[disabled].download-itunes:active {
background-color: #dadada;
background-image: -webkit-gradient(linear, left top, left bottom, from(#dadada), to(#f3f3f3));
/* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #dadada, #f3f3f3);
background-image: -moz-linear-gradient(top, #dadada, #f3f3f3);
background-image: -ms-linear-gradient(top, #dadada, #f3f3f3);
background-image: -o-linear-gradient(top, #dadada, #f3f3f3);
background-image: linear-gradient(top, #dadada, #f3f3f3);
border-top: 1px solid #c5c5c5;
border-right: 1px solid #cecece;
border-bottom: 1px solid #d9d9d9;
border-left: 1px solid #cecece;
-webkit-box-shadow: none;
-moz-box-shadow: none;
-ms-box-shadow: none;
-o-box-shadow: none;
box-shadow: none;
color: #8f8f8f;
cursor: not-allowed;
text-shadow: 0 -1px 1px #ebebeb; }

button.download-itunes::-moz-focus-inner {
border: 0;
padding: 0; }


/* disabled button styles
works with this markup: <button disabled="disabled">Submit</button>
*******************************************************************************/
button[disabled],
button[disabled]:hover,
button[disabled]:active {
background: #eee;
border: 0;
-webkit-box-shadow: none;
-moz-box-shadow: none;
-ms-box-shadow: none;
-o-box-shadow: none;
box-shadow: none;
color: #aaa;
cursor: not-allowed;
text-shadow: none; }

+ 82
- 0
css/ui/overlay.css 查看文件

@@ -0,0 +1,82 @@
/* https://github.com/LearnBoost/CSS3-Overlay/ */

body.overlaid {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}

body.overlaid div.overlay {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
transform: translateY(0);
}

div.overlay {
/* using display none to hide the overlay nullifies -webkit-transition */
-webkit-transform: translateY(-50000px);
-moz-transform: translateY(-50000px);
transform: translateY(-50000px);

position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: rgba(0,0,0,0.4);

-webkit-user-select: auto;
-moz-user-select: auto;
user-select: auto;
}
div.overlay > div.wrap-outer {
position: relative;
width: 100%;
height: 100%;

display: -webkit-box;
display: -moz-box;
display: box;

-webkit-box-orient: horizontal;
-moz-box-orient: horizontal;
box-orient: horizontal;

-webkit-box-align: stretch;
-moz-box-align: stretch;
box-align: stretch;

-webkit-box-pack: center;
-moz-box-pack: center;
box-pack: center;
}
div.overlay > div.wrap-outer > div.wrap {
display: -webkit-box;
display: -moz-box;
display: box;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
box-orient: vertical;

-webkit-box-align: stretch;
-moz-box-align: stretch;
box-align: stretch;

-webkit-box-pack: center;
-moz-box-pack: center;
box-pack: center;
}

div.overlay > div.wrap-outer > div.wrap > * {
-webkit-box-flex: 0;
-moz-box-flex: 0;
box-flex: 0;

display: block;
}

div.overlay > div.wrap-outer > div.wrap > div.dialog {
padding: 21px;
background-color: #fff;
}

+ 12
- 0
css/ui/status_bar.css 查看文件

@@ -0,0 +1,12 @@
div.status_bar_outer {
background-color: rgba(0,0,0,0.1);
border: 1px solid rgba(0,0,0,0.4);
height: 21px;
width: 240px;
}

div.status_bar_inner {
background: #aaf; /* Old browsers */
height: 21px;
width: 0%;
}

二进制
data/GeoIP.dat 查看文件


二进制
images/icons/Accounts.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 1.0 KiB

二进制
images/icons/Accounts.png 查看文件

之前 之后
宽度: 20  |  高度: 20  |  大小: 3.8 KiB

二进制
images/icons/Analysis.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 1017 B

二进制
images/icons/Analysis.png 查看文件

之前 之后
宽度: 20  |  高度: 20  |  大小: 3.7 KiB

二进制
images/icons/Buying.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 1016 B

二进制
images/icons/Buying.png 查看文件

之前 之后
宽度: 20  |  高度: 20  |  大小: 3.7 KiB

二进制
images/icons/HR.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 1012 B

二进制
images/icons/HR.png 查看文件

之前 之后
宽度: 20  |  高度: 20  |  大小: 3.7 KiB

二进制
images/icons/Home.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 1.0 KiB

二进制
images/icons/Home.png 查看文件

之前 之后
宽度: 20  |  高度: 20  |  大小: 3.8 KiB

二进制
images/icons/Maintenance.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 617 B

二进制
images/icons/Maintenance.png 查看文件

之前 之后
宽度: 20  |  高度: 20  |  大小: 4.0 KiB

二进制
images/icons/Production.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 1.0 KiB

二进制
images/icons/Production.png 查看文件

之前 之后
宽度: 20  |  高度: 20  |  大小: 3.6 KiB

二进制
images/icons/Projects.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 1001 B

二进制
images/icons/Projects.png 查看文件

之前 之后
宽度: 20  |  高度: 20  |  大小: 3.7 KiB

二进制
images/icons/Selling.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 994 B

二进制
images/icons/Selling.png 查看文件

之前 之后
宽度: 20  |  高度: 20  |  大小: 3.6 KiB

二进制
images/icons/Setup.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 528 B

二进制
images/icons/Setup.png 查看文件

之前 之后
宽度: 20  |  高度: 20  |  大小: 3.6 KiB

二进制
images/icons/Stock.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 1.0 KiB

二进制
images/icons/Stock.png 查看文件

之前 之后
宽度: 20  |  高度: 20  |  大小: 3.5 KiB

二进制
images/icons/accept.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 781 B

二进制
images/icons/add.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 1010 B

二进制
images/icons/add.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 733 B

二进制
images/icons/anchor.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 523 B

二进制
images/icons/application.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 464 B

二进制
images/icons/application_add.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 619 B

二进制
images/icons/application_cascade.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 524 B

二进制
images/icons/application_delete.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 610 B

二进制
images/icons/application_double.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 533 B

二进制
images/icons/application_form.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 467 B

二进制
images/icons/application_go.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 634 B

二进制
images/icons/application_side_list.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 510 B

二进制
images/icons/application_side_tree.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 483 B

二进制
images/icons/application_split.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 520 B

二进制
images/icons/application_tile_horizontal.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 432 B

二进制
images/icons/application_tile_vertical.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 492 B

二进制
images/icons/application_view_columns.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 493 B

二进制
images/icons/application_view_detail.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 576 B

二进制
images/icons/application_view_tile.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 465 B

二进制
images/icons/application_xp.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 426 B

二进制
images/icons/application_xp_terminal.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 507 B

二进制
images/icons/arrow_branch.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 582 B

二进制
images/icons/arrow_divide.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 677 B

二进制
images/icons/arrow_down.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 379 B

二进制
images/icons/arrow_in.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 600 B

二进制
images/icons/arrow_inout.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 551 B

二进制
images/icons/arrow_join.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 626 B

二进制
images/icons/arrow_left.gif 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 306 B

二进制
images/icons/arrow_left.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 345 B

二进制
images/icons/arrow_merge.png 查看文件

之前 之后
宽度: 16  |  高度: 16  |  大小: 484 B

部分文件因为文件数量过多而无法显示

正在加载...
取消
保存