10 | * @version $Id: Encrypt.java 2500 2010-05-21 20:35:46Z wzhen $
11 | */
12 | public abstract class Encrypt {
13 |
14 | private static String digest(String s, String a) {
15 | try {
16 | MessageDigest md = MessageDigest.getInstance(a);
17 | md.update(s.getBytes());
18 | byte[] bytes = md.digest();
19 | String hax = "";
20 | for (int i = 0; i < bytes.length; i++) {
21 | hax += Integer
22 | .toHexString((0x000000ff & bytes[i]) | 0xffffff00)
23 | .substring(6);
24 | }
25 | return hax;
26 | } catch (Exception e) {
27 | e.printStackTrace();
28 | return "";
29 | }
30 | }
31 |
32 | public static String md5(String s) {
33 | return digest(s, "MD5");
34 | }
35 |
36 | public static String sha(String s) {
37 | return digest(s, "SHA");
38 | }
39 |
40 | /**
41 | * 返回文件的md5值
42 | *
43 | * @param filePath
44 | * 文件的全路径
45 | * @return 文件md5值
46 | */
47 | public static String fileMd5(String filePath) throws Exception {
48 | String hashType = "MD5";
49 | return getHash(filePath, hashType);
50 | }
51 |
52 | public static char[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
53 | '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
54 |
55 | public static String getHash(String fileName, String hashType)
56 | throws Exception {
57 | InputStream fis;
58 | fis = new FileInputStream(fileName);
59 | byte[] buffer = new byte[1024];
60 | MessageDigest md5 = MessageDigest.getInstance(hashType);
61 | int numRead = 0;
62 | while ((numRead = fis.read(buffer)) > 0) {
63 | md5.update(buffer, 0, numRead);
64 | }
65 | fis.close();
66 | return toHexString(md5.digest());
67 |
68 | }
69 |
70 | public static String toHexString(byte[] b) {
71 | StringBuilder sb = new StringBuilder(b.length * 2);
72 | for (int i = 0; i < b.length; i++) {
73 | sb.append(hexChar[(b[i] & 0xf0) >>> 4]);
74 | sb.append(hexChar[b[i] & 0x0f]);
75 | }
76 | return sb.toString();
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/src/java/com/thinkgem/webeffect/util/FileUtils.java:
--------------------------------------------------------------------------------
1 | package com.thinkgem.webeffect.util;
2 |
3 | import java.io.BufferedInputStream;
4 | import java.io.BufferedOutputStream;
5 | import java.io.File;
6 | import java.io.FileInputStream;
7 | import java.io.FileOutputStream;
8 | import java.util.Enumeration;
9 |
10 | import org.apache.tools.zip.ZipEntry;
11 | import org.apache.tools.zip.ZipFile;
12 | import org.apache.tools.zip.ZipOutputStream;
13 |
14 | public class FileUtils {
15 |
16 | static final int BUFFER = 2048;
17 |
18 | /**
19 | * 获得文件扩展名
20 | * @param filename 文件名
21 | * @return 扩展名
22 | */
23 | public static String getExtension(String filename){
24 | return filename.substring(filename.lastIndexOf(".")+1).toLowerCase();
25 | }
26 |
27 | /**
28 | * 压缩文件
29 | * @param path 压缩的路径
30 | */
31 | public static void zip(String filePath, String fileName) {
32 | try {
33 | BufferedInputStream origin = null;
34 | FileOutputStream dest = new FileOutputStream(fileName);
35 | ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
36 | dest));
37 | byte data[] = new byte[BUFFER];
38 | File f = new File(filePath);
39 | File files[] = f.listFiles();
40 |
41 | for (int i = 0; i < files.length; i++) {
42 | FileInputStream fi = new FileInputStream(files[i]);
43 | origin = new BufferedInputStream(fi, BUFFER);
44 | ZipEntry entry = new ZipEntry(files[i].getName());
45 | out.putNextEntry(entry);
46 | int count;
47 | while ((count = origin.read(data, 0, BUFFER)) != -1) {
48 | out.write(data, 0, count);
49 | }
50 | origin.close();
51 | }
52 | out.close();
53 | } catch (Exception e) {
54 | e.printStackTrace();
55 | }
56 | }
57 |
58 | /**
59 | * 解压文件
60 | * @param fileName 需解压的文件
61 | * @param filePath 解压的目标路径
62 | */
63 | @SuppressWarnings("unchecked")
64 | public static void unZip(String fileName, String filePath) {
65 | try {
66 | ZipFile zipFile = new ZipFile(fileName);
67 | Enumeration emu = zipFile.getEntries();
68 | while(emu.hasMoreElements()){
69 | ZipEntry entry = (ZipEntry)emu.nextElement();
70 | //会把目录作为一个file读出一次,所以只建立目录就可以,之下的文件还会被迭代到。
71 | if (entry.isDirectory()){
72 | new File(filePath + "/" + entry.getName()).mkdirs();
73 | continue;
74 | }
75 | BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry));
76 | File file = new File(filePath + "/" + entry.getName());
77 | //加入这个的原因是zipfile读取文件是随机读取的,这就造成可能先读取一个文件
78 | //而这个文件所在的目录还没有出现过,所以要建出目录来。
79 | File parent = file.getParentFile();
80 | if(parent != null && (!parent.exists())){
81 | parent.mkdirs();
82 | }
83 | FileOutputStream fos = new FileOutputStream(file);
84 | BufferedOutputStream bos = new BufferedOutputStream(fos,BUFFER);
85 |
86 | int count;
87 | byte data[] = new byte[BUFFER];
88 | while ((count = bis.read(data, 0, BUFFER)) != -1){
89 | bos.write(data, 0, count);
90 | }
91 | bos.flush();
92 | bos.close();
93 | bis.close();
94 | }
95 | zipFile.close();
96 | } catch (Exception e) {
97 | e.printStackTrace();
98 | }
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/src/java/com/thinkgem/webeffect/util/RequestUtils.java:
--------------------------------------------------------------------------------
1 | package com.thinkgem.webeffect.util;
2 |
3 | import java.io.UnsupportedEncodingException;
4 | import java.net.URLDecoder;
5 | import java.util.Enumeration;
6 | import java.util.HashMap;
7 | import java.util.Map;
8 | import java.util.StringTokenizer;
9 |
10 | import javax.servlet.http.HttpServletRequest;
11 |
12 | import org.apache.commons.lang.StringUtils;
13 | import org.slf4j.Logger;
14 | import org.slf4j.LoggerFactory;
15 |
16 | import com.thinkgem.webeffect.util.RequestUtils;
17 |
18 | /**
19 | * HttpServletRequest帮助类
20 | */
21 | public class RequestUtils {
22 | private static final Logger log = LoggerFactory
23 | .getLogger(RequestUtils.class);
24 |
25 | /**
26 | * 获取QueryString的参数,并使用URLDecoder以UTF-8格式转码。
27 | *
28 | * @param request
29 | * web请求
30 | * @param name
31 | * 参数名称
32 | * @return
33 | */
34 | public static String getQueryParam(HttpServletRequest request, String name,
35 | String encoding) {
36 | String s = request.getQueryString();
37 | if (StringUtils.isBlank(s)) {
38 | return null;
39 | }
40 | try {
41 | s = URLDecoder.decode(s, encoding);
42 | } catch (UnsupportedEncodingException e) {
43 | log.error("encoding " + encoding + " not support.", e);
44 | }
45 | if (StringUtils.isBlank(s)) {
46 | return null;
47 | }
48 | String[] values = parseQueryString(s).get(name);
49 | if (values != null && values.length > 0) {
50 | return values[values.length - 1];
51 | } else {
52 | return null;
53 | }
54 | }
55 |
56 | /**
57 | *
58 | * Parses a query string passed from the client to the server and builds a
59 | * HashTable
object with key-value pairs. The query string
60 | * should be in the form of a string packaged by the GET or POST method,
61 | * that is, it should have key-value pairs in the form key=value ,
62 | * with each pair separated from the next by a & character.
63 | *
64 | *
65 | * A key can appear more than once in the query string with different
66 | * values. However, the key appears only once in the hashtable, with its
67 | * value being an array of strings containing the multiple values sent by
68 | * the query string.
69 | *
70 | *
71 | * The keys and values in the hashtable are stored in their decoded form, so
72 | * any + characters are converted to spaces, and characters sent in
73 | * hexadecimal notation (like %xx ) are converted to ASCII characters.
74 | *
75 | * @param s
76 | * a string containing the query to be parsed
77 | *
78 | * @return a HashTable
object built from the parsed key-value
79 | * pairs
80 | *
81 | * @exception IllegalArgumentException
82 | * if the query string is invalid
83 | *
84 | */
85 | public static Map parseQueryString(String s) {
86 | String valArray[] = null;
87 | if (s == null) {
88 | throw new IllegalArgumentException();
89 | }
90 | Map ht = new HashMap();
91 | StringTokenizer st = new StringTokenizer(s, "&");
92 | while (st.hasMoreTokens()) {
93 | String pair = (String) st.nextToken();
94 | int pos = pair.indexOf('=');
95 | if (pos == -1) {
96 | continue;
97 | }
98 | String key = pair.substring(0, pos);
99 | String val = pair.substring(pos + 1, pair.length());
100 | if (ht.containsKey(key)) {
101 | String oldVals[] = (String[]) ht.get(key);
102 | valArray = new String[oldVals.length + 1];
103 | for (int i = 0; i < oldVals.length; i++)
104 | valArray[i] = oldVals[i];
105 | valArray[oldVals.length] = val;
106 | } else {
107 | valArray = new String[1];
108 | valArray[0] = val;
109 | }
110 | ht.put(key, valArray);
111 | }
112 | return ht;
113 | }
114 |
115 | @SuppressWarnings("unchecked")
116 | public static Map getRequestMap(HttpServletRequest request,
117 | String prefix) {
118 | Map map = new HashMap();
119 | Enumeration names = request.getParameterNames();
120 | String name;
121 | while (names.hasMoreElements()) {
122 | name = names.nextElement();
123 | if (name.startsWith(prefix)) {
124 | request.getParameterValues(name);
125 | map.put(name.substring(prefix.length()), StringUtils.join(
126 | request.getParameterValues(name), ','));
127 | }
128 | }
129 | return map;
130 | }
131 |
132 | /**
133 | * 获取访问者IP
134 | *
135 | * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。
136 | *
137 | * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割),
138 | * 如果还不存在则调用Request .getRemoteAddr()。
139 | *
140 | * @param request
141 | * @return
142 | */
143 | public static String getIpAddr(HttpServletRequest request) {
144 | String ip = request.getHeader("X-Real-IP");
145 | if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
146 | ip = request.getHeader("X-Forwarded-For");
147 | } else {
148 | return ip;
149 | }
150 | if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
151 | ip = request.getRemoteAddr();
152 | } else {
153 | // 多次反向代理后会有多个IP值,第一个为真实IP。
154 | int index = ip.indexOf(',');
155 | if (index != -1) {
156 | ip = ip.substring(0, index);
157 | }
158 | }
159 | return ip;
160 | }
161 |
162 | /**
163 | * 获得当的访问路径
164 | *
165 | * HttpServletRequest.getRequestURL+"?"+HttpServletRequest.getQueryString
166 | *
167 | * @param request
168 | * @return
169 | */
170 | public static String getLocation(HttpServletRequest request) {
171 | StringBuffer sb = request.getRequestURL();
172 | if (request.getQueryString() != null) {
173 | sb.append("?").append(request.getQueryString());
174 | }
175 | return sb.toString();
176 | }
177 | }
178 |
--------------------------------------------------------------------------------
/web/403.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 禁止访问
6 |
7 |
8 | 对不起,您没有权限访问该页面。
9 |
10 |
--------------------------------------------------------------------------------
/web/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 找不到页面
6 |
7 |
8 | 对不起,您所访问的页面不存在。
9 | 请检查您的访问地址是否正确。
10 |
11 |
--------------------------------------------------------------------------------
/web/500.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 内部错误
6 |
7 |
8 | 页面发生错误,请与管理员联系!
9 |
10 |
--------------------------------------------------------------------------------
/web/META-INF/MANIFEST.MF:
--------------------------------------------------------------------------------
1 | Manifest-Version: 1.0
2 | Class-Path:
3 |
4 |
--------------------------------------------------------------------------------
/web/WEB-INF/ftl_lib/common.ftl:
--------------------------------------------------------------------------------
1 | <#--
2 | 主导航栏
3 | -->
4 | <#macro navigation>
5 | <#-- 获得请求URI中的模块名,结果变量 rm -->
6 | <#assign r = request.getRequestURI() />
7 | <#assign r = r?replace(base,"") />
8 | <#assign ri = r?index_of("/",2)-1 />
9 | <#if ri gt 1>
10 | <#assign rm = r[1..ri] />
11 | <#else>
12 | <#assign rm = "effect" />
13 | #if>
14 | <#-- 设置导航列表 -->
15 | <#if Session?exists && Session.user?exists && Session.user.role==1>
16 | <#assign navs={
17 | "特效首页":"/effect/index.jspx",
18 | "系统设置":"/setting/user/index.jspx",
19 | "个人中心":"/center/changeInfo.jspx"
20 | } />
21 | <#else>
22 | <#assign navs={
23 | "特效首页":"/effect/index.jspx",
24 | "个人中心":"/center/changeInfo.jspx"
25 | } />
26 | #if>
27 | <#-- 显示导航列表 -->
28 | <#assign ks=navs?keys>
29 | <#list ks as k>
30 | <#assign v = navs[k] />
31 | <#assign i = v?index_of("/",2)-1 />
32 | <#if i gt 1>
33 | <#assign m = v[1..i] />
34 | #if>
35 | class="on"#if>>target="_blank"#if>>${k}
36 | #list>
37 | #macro>
38 |
39 | <#--
40 | 权限验证
41 | <#macro auth uri >
42 | <@s.action id="a" name="auth" namespace="/" executeResult="false" uri=uri/>
43 | <#nested a>
44 | #macro>
45 | -->
--------------------------------------------------------------------------------
/web/WEB-INF/ftl_lib/index.ftl:
--------------------------------------------------------------------------------
1 | <#include "common.ftl"/>
--------------------------------------------------------------------------------
/web/WEB-INF/lib/activation.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/activation.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/antlr-2.7.6.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/antlr-2.7.6.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/aopalliance-1.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/aopalliance-1.0.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/apache-ant-zip.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/apache-ant-zip.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/commons-beanutils-1.7.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/commons-beanutils-1.7.0.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/commons-chain-1.2.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/commons-chain-1.2.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/commons-collections-3.2.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/commons-collections-3.2.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/commons-fileupload-1.2.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/commons-fileupload-1.2.1.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/commons-io-1.3.2.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/commons-io-1.3.2.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/commons-lang-2.3.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/commons-lang-2.3.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/commons-logging-1.0.4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/commons-logging-1.0.4.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/commons-logging-api-1.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/commons-logging-api-1.1.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/dom4j-1.6.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/dom4j-1.6.1.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/ehcache-1.6.0-beta3.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/ehcache-1.6.0-beta3.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/freemarker-2.3.15.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/freemarker-2.3.15.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/gson.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/gson.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/hibernate3.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/hibernate3.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/idchecker.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/idchecker.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/jta-1.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/jta-1.1.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/log4j-1.2.15.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/log4j-1.2.15.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/mysql.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/mysql.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/ognl-2.7.3.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/ognl-2.7.3.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/ojdbc14.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/ojdbc14.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.aop-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.aop-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.asm-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.asm-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.beans-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.beans-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.context-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.context-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.context.support-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.context.support-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.core-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.core-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.expression-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.expression-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.jdbc-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.jdbc-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.orm-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.orm-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.transaction-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.transaction-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.web-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.web-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/org.springframework.web.struts-3.0.0.RELEASE.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/org.springframework.web.struts-3.0.0.RELEASE.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/proxool-0.9.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/proxool-0.9.1.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/proxool-cglib.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/proxool-cglib.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/slf4j-api-1.5.6.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/slf4j-api-1.5.6.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/slf4j-log4j12-1.5.6.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/slf4j-log4j12-1.5.6.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/struts2-core-2.1.8.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/struts2-core-2.1.8.1.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/struts2-spring-plugin-2.1.8.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/struts2-spring-plugin-2.1.8.1.jar
--------------------------------------------------------------------------------
/web/WEB-INF/lib/xwork-core-2.1.6.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/WEB-INF/lib/xwork-core-2.1.6.jar
--------------------------------------------------------------------------------
/web/WEB-INF/template/center/changeInfo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <@s.text name='title'/>
6 | <#include "../include/head.html"/>
7 |
8 |
26 |
27 |
28 | <#include "../include/header.html"/>
29 |
30 |
46 |
47 |
48 |
修改资料
49 |
50 | <@s.form id="userForm" action="/center/changeInfo.jspx" method="post">
51 |
79 | @s.form>
80 |
81 |
82 |
83 |
84 |
85 |
86 | <#include "../include/footer.html"/>
87 |
88 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/center/changePassword.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <@s.text name='title'/>
6 | <#include "../include/head.html"/>
7 |
8 |
26 |
27 |
28 | <#include "../include/header.html"/>
29 |
30 |
46 |
47 |
48 |
修改密码
49 |
50 | <@s.form id="userForm" action="/center/changePassword.jspx" method="post">
51 |
92 | @s.form>
93 |
94 |
95 |
96 |
97 |
98 |
99 | <#include "../include/footer.html"/>
100 |
101 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/effect/comment.html:
--------------------------------------------------------------------------------
1 | <#if pagination?exists && pagination.list?size gt 0>
2 | <#list pagination.list as v>
3 | ${(pageIndex-1)*pageSize+v_index+1}# 发表人:${v.username} 发表时间:${v.created} <#if Session?exists && Session.user?exists && Session.user.role==1>删除 #if>
${v.content}
4 | #list>
5 | <#else>
6 | 还没有网友发表评论
7 | #if>
8 |
9 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/effect/edit.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
编辑特效
10 |
11 | <@s.form id="editForm" action="/effect/edit.jspx" method="post">
12 |
60 | <@s.hidden name="effect.id"/>
61 | @s.form>
62 |
63 |
64 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/effect/upload.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
上传特效
10 |
11 | <@s.form id="uploadForm" action="/effect/upload.jspx" enctype="multipart/form-data" method="post">
12 |
59 | @s.form>
60 |
61 |
62 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/effect/view.html:
--------------------------------------------------------------------------------
1 |
2 |
44 |
75 |
76 |
网友评论
77 |
78 | <@s.form id="commentForm" action="/effect/addComment.jspx" method="post">
79 |
91 | <@s.hidden name="comment.weEffect.id" value="${effect.id}"/>
92 | @s.form>
93 |
94 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/include/footer.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/include/head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/include/header.html:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/login.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 登录 - <@s.text name='title'/>
6 |
7 |
8 |
9 |
10 |
11 |
16 |
17 |
18 |
19 |
20 | <@s.text name='title'/>
21 |
22 |
23 |
51 |
52 |
53 |
54 |
55 |
56 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/message.html:
--------------------------------------------------------------------------------
1 |
2 |
<#if actionErrors.size() gt 0>错误信息<#else>提示信息#if>
3 |
4 |
5 | <#if actionErrors.size() gt 0>
6 | <@s.actionerror escape="false" />
7 | <#elseif actionMessages.size() gt 0>
8 | <@s.actionmessage escape="false"/>
9 | <#else>
10 |
11 | #if>
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/setting/category/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 分类管理 - <@s.text name='title'/>
6 | <#include tplPath+"/include/head.html"/>
7 |
8 |
45 |
46 |
47 | <#include tplPath+"/include/header.html"/>
48 |
49 |
64 |
65 |
66 |
分类列表
67 |
68 | <@s.form id="categoryForm" action="/setting/category/update.jspx" method="post">
69 |
70 | 名称 描述 权重 操作
71 |
72 | <#list categoryList as v>
73 | <@s.hidden name="categoryList[${v_index}].id" value=v.id/><@s.textfield name="categoryList[${v_index}].name" value=v.name cssClass="txt w250"/>
74 | <@s.textfield name="categoryList[${v_index}].description" value=v.description cssClass="txt w350"/>
75 | <@s.textfield name="categoryList[${v_index}].weight" value=v.weight cssClass="txt w50" onkeyup="this.value=this.value.replace(/[^0-9]/g,'');"/>
76 | 删除
77 | #list>
78 |
79 |
80 | <@s.submit value="提交更改" cssClass="btn"/> 添加分类
81 |
82 |
83 | @s.form>
84 |
85 |
86 |
87 |
88 |
89 |
90 | <#include tplPath+"/include/footer.html"/>
91 |
92 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/setting/user/add.html:
--------------------------------------------------------------------------------
1 |
20 |
21 |
添加用户
22 |
23 | <@s.form id="userForm" action="/setting/user/add.jspx" method="post">
24 |
65 | @s.form>
66 |
67 |
68 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/setting/user/edit.html:
--------------------------------------------------------------------------------
1 |
20 |
21 |
编辑用户
22 |
23 | <@s.form id="userForm" action="/setting/user/edit.jspx" method="post">
24 |
65 | @s.form>
66 |
67 |
68 |
--------------------------------------------------------------------------------
/web/WEB-INF/template/setting/user/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 用户管理 - <@s.text name='title'/>
6 | <#include tplPath+"/include/head.html"/>
7 |
8 |
9 |
36 |
37 |
38 | <#include tplPath+"/include/header.html"/>
39 |
40 |
55 |
56 |
57 |
用户列表
58 |
59 |
60 | 用户名 昵称 说明 角色 登陆次数 登陆时间 操作
61 |
62 | <#list pagination.list as v>
63 | ${v.username} ${v.nickname} <#if v.description?length gt 5>${v.description[0..5]}...<#else>${v.description}#if> ${v.roleFormatted} ${v.loginNum} ${v.loginTimeFormatted} 编辑 <#if v.username != 'admin' && Session.user.id != v.id>删除 #if>
64 | #list>
65 |
66 |
67 | 添加用户
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | <#include tplPath+"/include/footer.html"/>
77 |
78 |
--------------------------------------------------------------------------------
/web/WEB-INF/web.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 | WebEffect
8 |
9 | contextConfigLocation
10 |
11 | classpath:/applicationContext.xml
12 |
13 |
14 |
15 |
16 |
17 | proxoolAdmin
18 | org.logicalcobwebs.proxool.admin.servlet.AdminServlet
19 |
20 |
21 | proxoolAdmin
22 | /proxoolAdmin.svl
23 |
24 |
25 |
26 |
27 | encodingFilter
28 | org.springframework.web.filter.CharacterEncodingFilter
29 |
30 | encoding
31 | UTF-8
32 |
33 |
34 | forceEncoding
35 | true
36 |
37 |
38 |
39 |
40 | hibernateFilter
41 | org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
42 |
43 |
44 |
45 | strutsFilter
46 | org.apache.struts2.dispatcher.FilterDispatcher
47 |
48 |
49 |
50 |
51 | encodingFilter
52 | *.do
53 |
54 |
55 | encodingFilter
56 | *.jspx
57 |
58 |
59 |
60 | strutsFilter
61 | *.do
62 |
63 |
64 | strutsFilter
65 | *.jspx
66 |
67 |
68 |
69 | hibernateFilter
70 | *.do
71 |
72 |
73 | hibernateFilter
74 | *.jspx
75 |
76 |
77 | org.springframework.web.context.ContextLoaderListener
78 |
79 |
80 |
81 | org.springframework.web.util.IntrospectorCleanupListener
82 |
83 |
84 |
85 |
86 | 20
87 |
88 |
89 | 403
90 | /403.html
91 |
92 |
93 | 404
94 | /404.html
95 |
96 |
97 | 500
98 | /500.html
99 |
100 |
101 | index.jspx
102 |
103 |
104 |
--------------------------------------------------------------------------------
/web/index.jspx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/index.jspx
--------------------------------------------------------------------------------
/web/resource/global.css:
--------------------------------------------------------------------------------
1 | @charset "utf-8";/* OpenWan CSS */
2 | body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;}
3 | table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}
4 | address,caption,cite,code,dfn,th,var{font-style:normal;font-weight:normal;}
5 | ol,ul,li{list-style:none;}caption,th{text-align:left;}
6 | h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}
7 | q:before,q:after{content:'';}abbr,acronym{border:0;}
8 | object:focus{outline: none;star:expression(this.onFocus=this.blur());}
9 | body{font-size:12px;font-family: Verdana, Geneva, sans-serif;background-color:#fff;color:#282828;}
10 | a:link,a:visited{color:#282828;text-decoration:none;}
11 | a:hover,a:active{color:#f00;text-decoration:underline;}
12 | .clear{clear:both;height:0px;display:block;}.clear10{clear:both;height:10px;display:block;}
13 | .inline{display:inline;}.pointer{cursor:pointer;}
14 | .left{float:left;}.right{float:right;}
15 | .show{display:block;}.hide{display:none;}
16 | .f12{font-size:12px;}.f14{font-size:14px;}
17 | .tl{text-align:left;}.tr{text-align:right;}.tc{text-align:center;}.tm{vertical-align:middle;}
18 | .m10{margin:10px;}.mt10{margin-top:10px;}.ml10{margin-left:10px;}
19 | .p5{padding:5px;}.p10{padding:10px;}.pt0{padding-top:0;}
20 | /* Layout 980, 150 820, 200 770, 200 380 380, 200 430 260,200 385 375 */
21 | .w980{width:980px;}
22 | .w150{width:150px;}.w820{width:820px;}
23 | .w200{width:200px;}.w770{width:770px;}.w380{width:380px;_width:378px;}
24 | .w428{width:428px;}.w332{width:332px;}
25 | .w385{width:385px;}.w375{width:375px;}
26 | .w50{width:50px;}.w70{width:70px;}.w100{width:100px;}.w250{width:250px;}
27 | .w255{width:255px;}.w260{width:260px;}.w350{width:350px;}
28 | /* Form */
29 | .txt,.btn{padding:2px;margin:2px;margin-left:0;border:1px solid;border-color:#666 #ccc #ccc #666;background:#f9f9f9;color:#333;vertical-align:middle;}
30 | .txt:hover, .txt:focus {border-color: #09c;background: #f5f9fd;}
31 | .btn {padding:2px 5px;*padding:4px 2px 1px;margin:3px 0;border-color:#ddd #666 #666 #ddd;background:#ddd;color:#000;cursor:pointer;margin-right:8px;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}
32 | .lbl {font-weight:bold;color:#666;} .req, .error {color:#c00;font-weight:bold;} .desc {color:#aaa;}
33 | /* Radius */
34 | .rtl0{-moz-border-radius-topleft:0;-khtml-border-top-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;}
35 | .rtr0{-moz-border-radius-topright:0;-khtml-border-top-right-radius:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;}
36 | .rbl0{-moz-border-radius-bottomleft:0;-khtml-border-bottom-left-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;}
37 | .rbr0{-moz-border-radius-bottomright:0;-khtml-border-bottom-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;}
38 | .r3{-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}
39 | .r5{-moz-border-radius:5px;-khtml-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;}
40 | .r10{-moz-border-radius:10px;-khtml-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;}
--------------------------------------------------------------------------------
/web/resource/global.js:
--------------------------------------------------------------------------------
1 | // JavaScript */
2 | function tab(tname, cname, lenght, j) {
3 | for (i = 1; i <= lenght; i++) {
4 | $("#" + tname + i).removeClass("current");
5 | }
6 | $("#" + tname + j).addClass("current");
7 | for (i = 1; i <= lenght; i++) {
8 | $("#" + cname + i).hide();
9 | $("#" + cname + j).show();
10 | }
11 | }
12 |
13 | function addFavorite(sURL, sTitle){
14 | try{
15 | window.external.addFavorite(sURL, sTitle);
16 | }catch (e){
17 | try{
18 | window.sidebar.addPanel(sTitle, sURL, "");
19 | }catch (e){
20 | alert("加入收藏失败,请使用Ctrl+D进行添加");
21 | }
22 | }
23 | }
24 |
25 | function loading(e, text){
26 | var html = ' ';
27 | if (text) html += ' ' + text;
28 | html += '
';
29 | $(e).html(html);
30 | }
31 |
--------------------------------------------------------------------------------
/web/resource/iepngfix.htc:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
103 |
104 |
--------------------------------------------------------------------------------
/web/resource/images/add.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/add.gif
--------------------------------------------------------------------------------
/web/resource/images/bottom_bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/bottom_bg.jpg
--------------------------------------------------------------------------------
/web/resource/images/box_title1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/box_title1.gif
--------------------------------------------------------------------------------
/web/resource/images/box_title2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/box_title2.gif
--------------------------------------------------------------------------------
/web/resource/images/box_title3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/box_title3.gif
--------------------------------------------------------------------------------
/web/resource/images/box_title4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/box_title4.gif
--------------------------------------------------------------------------------
/web/resource/images/cancelbutton.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/cancelbutton.gif
--------------------------------------------------------------------------------
/web/resource/images/li.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/li.gif
--------------------------------------------------------------------------------
/web/resource/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/loading.gif
--------------------------------------------------------------------------------
/web/resource/images/login_bg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/login_bg.gif
--------------------------------------------------------------------------------
/web/resource/images/login_logo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/login_logo.gif
--------------------------------------------------------------------------------
/web/resource/images/logo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/logo.gif
--------------------------------------------------------------------------------
/web/resource/images/logo.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/logo.psd
--------------------------------------------------------------------------------
/web/resource/images/nav_on.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/nav_on.gif
--------------------------------------------------------------------------------
/web/resource/images/top_bg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/top_bg.gif
--------------------------------------------------------------------------------
/web/resource/images/top_bg_.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/top_bg_.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/Thumbs.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/Thumbs.db
--------------------------------------------------------------------------------
/web/resource/images/tree/base.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/base.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/close.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/close.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/empty.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/empty.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/folder.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/folder.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/folderopen.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/folderopen.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/join.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/join.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/joinbottom.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/joinbottom.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/line.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/line.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/minus.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/minus.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/minusbottom.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/minusbottom.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/open.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/open.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/page.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/page.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/plus.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/plus.gif
--------------------------------------------------------------------------------
/web/resource/images/tree/plusbottom.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/images/tree/plusbottom.gif
--------------------------------------------------------------------------------
/web/resource/jquery.bgiframe-2.1.1.js:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
2 | * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
3 | * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
4 | *
5 | * $LastChangedDate: 2007-07-21 18:45:56 -0500 (Sat, 21 Jul 2007) $
6 | * $Rev: 2447 $
7 | *
8 | * Version 2.1.1
9 | */
10 | (function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&/6.0/.test(navigator.userAgent)){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html='';return this.each(function(){if($('> iframe.bgiframe',this).length==0)this.insertBefore(document.createElement(html),this.firstChild);});}return this;};})(jQuery);
--------------------------------------------------------------------------------
/web/resource/jquery.cookie.js:
--------------------------------------------------------------------------------
1 | /*jslint browser: true */ /*global jQuery: true */
2 |
3 | /**
4 | * jQuery Cookie plugin
5 | *
6 | * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
7 | * Dual licensed under the MIT and GPL licenses:
8 | * http://www.opensource.org/licenses/mit-license.php
9 | * http://www.gnu.org/licenses/gpl.html
10 | *
11 | */
12 |
13 | // TODO JsDoc
14 |
15 | /**
16 | * Create a cookie with the given key and value and other optional parameters.
17 | *
18 | * @example $.cookie('the_cookie', 'the_value');
19 | * @desc Set the value of a cookie.
20 | * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
21 | * @desc Create a cookie with all available options.
22 | * @example $.cookie('the_cookie', 'the_value');
23 | * @desc Create a session cookie.
24 | * @example $.cookie('the_cookie', null);
25 | * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
26 | * used when the cookie was set.
27 | *
28 | * @param String key The key of the cookie.
29 | * @param String value The value of the cookie.
30 | * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
31 | * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
32 | * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
33 | * If set to null or omitted, the cookie will be a session cookie and will not be retained
34 | * when the the browser exits.
35 | * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
36 | * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
37 | * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
38 | * require a secure protocol (like HTTPS).
39 | * @type undefined
40 | *
41 | * @name $.cookie
42 | * @cat Plugins/Cookie
43 | * @author Klaus Hartl/klaus.hartl@stilbuero.de
44 | */
45 |
46 | /**
47 | * Get the value of a cookie with the given key.
48 | *
49 | * @example $.cookie('the_cookie');
50 | * @desc Get the value of a cookie.
51 | *
52 | * @param String key The key of the cookie.
53 | * @return The value of the cookie.
54 | * @type String
55 | *
56 | * @name $.cookie
57 | * @cat Plugins/Cookie
58 | * @author Klaus Hartl/klaus.hartl@stilbuero.de
59 | */
60 | jQuery.cookie = function (key, value, options) {
61 |
62 | // key and value given, set cookie...
63 | if (arguments.length > 1 && (value === null || typeof value !== "object")) {
64 | options = jQuery.extend({}, options);
65 |
66 | if (value === null) {
67 | options.expires = -1;
68 | }
69 |
70 | if (typeof options.expires === 'number') {
71 | var days = options.expires, t = options.expires = new Date();
72 | t.setDate(t.getDate() + days);
73 | }
74 |
75 | return (document.cookie = [
76 | encodeURIComponent(key), '=',
77 | options.raw ? String(value) : encodeURIComponent(String(value)),
78 | options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
79 | options.path ? '; path=' + options.path : '',
80 | options.domain ? '; domain=' + options.domain : '',
81 | options.secure ? '; secure' : ''
82 | ].join(''));
83 | }
84 |
85 | // key and possibly options given, get cookie...
86 | options = value || {};
87 | var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
88 | return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
89 | };
90 |
--------------------------------------------------------------------------------
/web/resource/jquery.metadata.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Metadata - jQuery plugin for parsing metadata from elements
3 | *
4 | * Copyright (c) 2006 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan
5 | *
6 | * Dual licensed under the MIT and GPL licenses:
7 | * http://www.opensource.org/licenses/mit-license.php
8 | * http://www.gnu.org/licenses/gpl.html
9 | *
10 | * Revision: $Id: jquery.metadata.js 4187 2007-12-16 17:15:27Z joern.zaefferer $
11 | *
12 | */
13 |
14 | /**
15 | * Sets the type of metadata to use. Metadata is encoded in JSON, and each property
16 | * in the JSON will become a property of the element itself.
17 | *
18 | * There are three supported types of metadata storage:
19 | *
20 | * attr: Inside an attribute. The name parameter indicates *which* attribute.
21 | *
22 | * class: Inside the class attribute, wrapped in curly braces: { }
23 | *
24 | * elem: Inside a child element (e.g. a script tag). The
25 | * name parameter indicates *which* element.
26 | *
27 | * The metadata for an element is loaded the first time the element is accessed via jQuery.
28 | *
29 | * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements
30 | * matched by expr, then redefine the metadata type and run another $(expr) for other elements.
31 | *
32 | * @name $.metadata.setType
33 | *
34 | * @example This is a p
35 | * @before $.metadata.setType("class")
36 | * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
37 | * @desc Reads metadata from the class attribute
38 | *
39 | * @example This is a p
40 | * @before $.metadata.setType("attr", "data")
41 | * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
42 | * @desc Reads metadata from a "data" attribute
43 | *
44 | * @example This is a p
45 | * @before $.metadata.setType("elem", "script")
46 | * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
47 | * @desc Reads metadata from a nested script element
48 | *
49 | * @param String type The encoding type
50 | * @param String name The name of the attribute to be used to get metadata (optional)
51 | * @cat Plugins/Metadata
52 | * @descr Sets the type of encoding to be used when loading metadata for the first time
53 | * @type undefined
54 | * @see metadata()
55 | */
56 |
57 | (function($) {
58 |
59 | $.extend({
60 | metadata : {
61 | defaults : {
62 | type: 'class',
63 | name: 'metadata',
64 | cre: /({.*})/,
65 | single: 'metadata'
66 | },
67 | setType: function( type, name ){
68 | this.defaults.type = type;
69 | this.defaults.name = name;
70 | },
71 | get: function( elem, opts ){
72 | var settings = $.extend({},this.defaults,opts);
73 | // check for empty string in single property
74 | if ( !settings.single.length ) settings.single = 'metadata';
75 |
76 | var data = $.data(elem, settings.single);
77 | // returned cached data if it already exists
78 | if ( data ) return data;
79 |
80 | data = "{}";
81 |
82 | if ( settings.type == "class" ) {
83 | var m = settings.cre.exec( elem.className );
84 | if ( m )
85 | data = m[1];
86 | } else if ( settings.type == "elem" ) {
87 | if( !elem.getElementsByTagName )
88 | return undefined;
89 | var e = elem.getElementsByTagName(settings.name);
90 | if ( e.length )
91 | data = $.trim(e[0].innerHTML);
92 | } else if ( elem.getAttribute != undefined ) {
93 | var attr = elem.getAttribute( settings.name );
94 | if ( attr )
95 | data = attr;
96 | }
97 |
98 | if ( data.indexOf( '{' ) <0 )
99 | data = "{" + data + "}";
100 |
101 | data = eval("(" + data + ")");
102 |
103 | $.data( elem, settings.single, data );
104 | return data;
105 | }
106 | }
107 | });
108 |
109 | /**
110 | * Returns the metadata object for the first member of the jQuery object.
111 | *
112 | * @name metadata
113 | * @descr Returns element's metadata object
114 | * @param Object opts An object contianing settings to override the defaults
115 | * @type jQuery
116 | * @cat Plugins/Metadata
117 | */
118 | $.fn.metadata = function( opts ){
119 | return $.metadata.get( this[0], opts );
120 | };
121 |
122 | })(jQuery);
--------------------------------------------------------------------------------
/web/resource/login.css:
--------------------------------------------------------------------------------
1 | @charset "utf-8";/* OpenWan CSS */
2 | html,body {width: 100%;height: 100%;overflow:hidden;}
3 | body {color: #000;background-color: #fff;text-align: center;font-size: 12px;font-family: Verdana, Geneva, sans-serif;}
4 | a {color: #2366a8;text-decoration: underline;}
5 | a:hover {color: #e79d35;}
6 | .logintb {text-align: left;margin: 150px auto 0;width: 500px;}
7 | .login {width: 250px;height:180px;background: url(images/login_bg.gif) right center no-repeat;}
8 | .login h1{text-indent:-9999px;margin-bottom:10px;width:201px;height:53px;background: url(images/login_logo.gif) no-repeat;}
9 | .login p {line-height:120%;}
10 | .logintitle {float:left;clear:left;width:60px;line-height:180%;font-weight:700;font-size:14px;color:#666;}
11 | .loginform {float: left;line-height: 180%;font-size: 14px;width: 160px;}
12 | .loginform .txt {margin-top:2px;width:160px;}
13 | .loginform select.txt {width: 166px;}
14 | .loginnofloat {clear:both;}
15 | .loginnofloat .btn {margin-left:62px;}
16 | .logintips {line-height: 160%;margin-left: 25px;}
17 | .logintips a {margin:0 5px;text-decoration:underline;}
18 | .loginfailure li{font-size:14px;color:#f00;text-align:center;}
19 | .copyright {position: static;margin-top: 120px;border: none;text-align: center;font-size: 12px;}
20 | .copyright p {display:inline;}
--------------------------------------------------------------------------------
/web/resource/main.css:
--------------------------------------------------------------------------------
1 | @charset "utf-8";/* OpenWan CSS */
2 | body.bg{background:url(images/top_bg.gif) repeat-x;}
3 | .header{height:58px;margin:0 auto;position:relative;}
4 | .header .logo{width:200px;top:1px;left:10px;overflow:hidden;position:absolute;display:block;font-size:28px;top:1px;}
5 | .header .info{top:3px;right:5px;position:absolute;}
6 | .nav{float:left;margin:20px 0 0 250px;height:38px;_margin-left:125px;}
7 | .nav ul{list-style-type:none;margin:0;padding:0;position:relative;z-index:100;}
8 | .nav li{width:80px;display:block;float:left;font-size:12px;font-weight:bold;text-align:center;margin:0 4px 0 0;padding:0;height:38px;}
9 | .nav li a{display:block;text-decoration:none;color:#616c78;height:28px;padding-top:11px;}
10 | .nav li a:hover{text-decoration:none;color:#8fc400;}
11 | .nav li.on{width:91px;background:url(images/nav_on.gif) no-repeat;display:block;float:left;margin:0 4px 0 0;padding:0;height:38px;}
12 | .nav li.on a{color:#fff;height:28px;padding-top:12px;}
13 | .nav li.on a:hover{color:#fff;height:28px;padding-top:12px;}
14 | .nav a:focus{outline: none}
15 | .content{margin:0 auto;}
16 | .footer{height:45px;line-height:20px;border-top:1px solid #ccc;padding:4px 0 0 10px;color:#686D70;background:url(images/bottom_bg.jpg) repeat-x;margin:0 auto;position:relative;}
17 | .footer a:link,.footer a:visited{text-decoration:none;padding-right:20px;}
18 | .box {border:1px solid #B0D5EE;background-color:#f9fcff;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}
19 | /*.box .r1{background-color:#d1d1d1;height:1px;margin-left:4px;margin-right:4px;overflow:hidden;}
20 | .box .r2{border-left:2px solid #d1d1d1;border-right:2px solid #d1d1d1;height:1px;margin:0 2px;overflow:hidden;}
21 | .box .r3{border-left:1px solid #d1d1d1;border-right:1px solid #d1d1d1;height:2px;margin:0 1px;overflow:hidden;}*/
22 | .box .t1,.box .t2{font-size:14px;line-height:25px;border-bottom:1px solid #E4F3F6;/*border-top:0*/;margin:2px 1px;}
23 | .box .t1{padding-left:25px;background:#EBF8FF url(images/box_title1.gif) top left no-repeat;}
24 | .box .t2{padding-left:15px;background:#EBF8FF url(images/box_title2.gif) top right no-repeat;}
25 | .box .t3,.box .t4{padding:0 2px;font-size:16px;font-weight:bold;color:#666;height:50px;}
26 | .box .t3{background:url(images/box_title3.gif) right bottom no-repeat;}
27 | .box .t4{background:url(images/box_title4.gif) right bottom no-repeat;}
28 | /*.box .c1{border-left:0px solid #d1d1d1;border-right:0px solid #d1d1d1;}
29 | .box .c21{padding:3px 12px 2px 12px;}.box .c31{padding:3px 5px 2px 5px;}*/
30 | .tab {line-height:24px;width:100%;}
31 | .tab a{font-size:12px; border:1px solid #D8E7EB;padding:0 8px;margin:0 5px 5px 0;display:inline-block;}
32 | .tab a:hover, .tab a.current{border-color:#2366A8;text-decoration:none;color:#2366A8}
33 | .tb {line-height:23px;width:100%;}
34 | .tb td{padding:3px;}
35 | .tb thead td{border-bottom:1px solid #D8E7EB;font-weight:bold;padding-left:2px;color:#555;}
36 | .tb tbody tr:hover, .tb tbody tr.current {background-color:#eff8ff;}
37 | .tb tbody.no_hover tr:hover, .tb tbody.no_hover tr.current {background:none;;}
38 | .tb tbody td{border-bottom:1px dotted #DEEFFA;}
39 | .tb tfoot td{padding-top:3px;}
40 | .tb a.add {background:transparent url(images/add.gif) no-repeat scroll 0 1px;color:#FF6600;line-height:25px;padding-left:18px;}
41 | .ul li{padding:3px 0 3px 28px;margin:3px 0;background:transparent url(images/li.gif) no-repeat 8px 9px;line-height:23px;list-style-type:none;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}
42 | .ul li:hover{background-color:#eff8ff;}
43 | .ul li a{display:block;}
44 | .ul li.current{background-color:#E4F3F6;}
45 | .ul li.current a{font-weight:bold;color:#2366A8;}
46 | .ul.ul2 li{display:inline-block;float:left;}
47 | .ul.ul2 li a{display:inline-block;width:58px;}
48 | .search form{font-size:14px;}
49 | .search form p{margin:5px;}
50 | .search form p a{text-decoration:underline;}
51 | .search form p a:active{color:#ff6600;}
52 | .search form .input{font-size:16px;padding:3px 1px;width:410px;}
53 | .search form .submit{font-size:16px;padding:2px 10px;}
54 | .search .status{background-color:#F0F7F9;border-top:1px solid #B0D5EE;padding:5px;}
55 | .search .result{font-size:12px;width:630px;float:left;}
56 | .search .result li{margin:10px 0;line-height:20px;}
57 | .search .result li .title{font-size:14px;text-decoration:underline;color:#0000CC;}
58 | .search .result li .ctrl,.search .result li .ctrl a{color:#008000;}
59 | .pagination{font-size:12px;font-weight:bold;margin:3px;}
60 | .pagination p{float:left;color:#37679c;text-indent:0;padding:0 5px;margin:-0.1em 1em 0 0;}
61 | .pagination ul{list-style:none;margin:0;padding:0;}
62 | .pagination li{list-style:none;margin:0 2px;display:block;float:left;line-height:16px;background-color:#fff;}
63 | .pagination li.disabled{border:1px solid #eee;padding:2px 6px;color:#ccc;}
64 | .pagination li.current{border:1px solid #9cf;padding:2px 6px;background-color:#9ce;color:#fff;}
65 | .pagination li.none{border:0;padding:2px 6px;background:none;}
66 | .pagination li a{border:1px solid #d1ecfb;padding:2px 7px;display:block;text-decoration:none;color:#37679c;}
67 | .pagination li a:hover{border:1px solid #9cf;}
68 | .pagination *{-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}
--------------------------------------------------------------------------------
/web/resource/swfupload/XPButtonNoText_160x22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/swfupload/XPButtonNoText_160x22.png
--------------------------------------------------------------------------------
/web/resource/swfupload/XPButtonUploadText_61x22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/swfupload/XPButtonUploadText_61x22.png
--------------------------------------------------------------------------------
/web/resource/swfupload/swfupload.css:
--------------------------------------------------------------------------------
1 | .progressWrapper{width:357px;overflow:hidden;}
2 | .progressContainer{margin:5px 0;padding:4px;border:solid 1px #E8E8E8;background-color:#F7F7F7;overflow:hidden;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}
3 | .progressName{font-size:10pt;font-weight:700;color:#555;width:323px;height:20px;text-align:left;white-space:nowrap;overflow:hidden;}
4 | .progressBarInProgress,.progressBarComplete,.progressBarError{font-size:0;width:0%;height:2px;background-color:blue;margin-top:2px;}
5 | .progressBarComplete{width:100%;background-color:green;visibility:hidden;}
6 | .progressBarError{width:100%;background-color:red;visibility:hidden;}
7 | .progressBarStatus{margin-top:2px;width:337px;font-size:9pt;font-family:Arial;text-align:left;white-space:nowrap;}
8 | a.progressCancel{font-size:0;display:block;height:14px;width:14px;background:url(../img/cancelbutton.gif) -14px 0px no-repeat;float:right;}
9 | a.progressCancel:hover{background-position:0px 0px;}
10 | .swfupload{vertical-align:top;position:absolute;z-index:1;}
11 | /* Message */
12 | .message{padding:10px 20px;border:solid 1px #FFDD99;background-color:#FFFFCC;overflow:hidden;}
13 | /* Error */
14 | .red{border:solid 1px #B50000;background-color:#FFEBEB;}
15 | /* Current */
16 | .green{border:solid 1px #DDF0DD;background-color:#EBFFEB;}
17 | /* Complete */
18 | .blue{border:solid 1px #CEE2F2;background-color:#F0F5FF;}
--------------------------------------------------------------------------------
/web/resource/swfupload/swfupload.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/swfupload/swfupload.js
--------------------------------------------------------------------------------
/web/resource/swfupload/swfupload.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/swfupload/swfupload.swf
--------------------------------------------------------------------------------
/web/resource/swfupload/swfuploadbutton.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/web/resource/swfupload/swfuploadbutton.swf
--------------------------------------------------------------------------------
/网页特效集锦系统 - 数据库设计.doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/网页特效集锦系统 - 数据库设计.doc
--------------------------------------------------------------------------------
/网页特效集锦系统 - 需求说明书.doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thinkgem/webeffect/a31cbadf6fb4304fa36a1a28680dacab5435adaf/网页特效集锦系统 - 需求说明书.doc
--------------------------------------------------------------------------------