From b821eb5356497fb7922d28f9b6ce76c1fb6b3a3a Mon Sep 17 00:00:00 2001 From: wangjeaf Date: Fri, 18 Apr 2014 16:11:07 +0800 Subject: [PATCH 001/260] project create delay loading --- WebContent/org/group/index.js | 195 +++++++++++++++++----------------- WebContent/org/group/index.vm | 1 + 2 files changed, 100 insertions(+), 96 deletions(-) diff --git a/WebContent/org/group/index.js b/WebContent/org/group/index.js index f9abdc7ac..8b7a64caa 100644 --- a/WebContent/org/group/index.js +++ b/WebContent/org/group/index.js @@ -114,64 +114,66 @@ $(function() { }) } } - getUsers(function(users) { - $.confirm({ - content: $.render($('#create-proj-tmpl').text(), { - name: name, - desc: desc, - users: pickeds - }), - title: '修改项目', - confirmText: '确认修改', - showCallback: function() { - var that = this; - $(this).find('input[type=text]').focus(); - $(this).find('.picking-user').delegate('.unpick-btn', 'click', function() { - $(this).parent('.picked-user').remove(); - }); - $(this).find('.accounts-inputer').keyup(function() { + $.confirm({ + content: $.render($('#create-proj-tmpl').text(), { + name: name, + desc: desc, + users: pickeds + }), + title: '修改项目', + confirmText: '确认修改', + showCallback: function() { + var that = this; + $(this).find('input[type=text]').focus(); + $(this).find('.picking-user').delegate('.unpick-btn', 'click', function() { + $(this).parent('.picked-user').remove(); + }); + + getUsers(function(users) { + $('.user-loading').hide(); + $(that).find('.accounts-inputer').keyup(function() { $.autocomplete(that, users); }).focus(function() { $.autocomplete(that, users); }); - }, - confirmClicked: function() { - var inputer = $(this).find('input[type=text]'); - if (inputer.val().trim() == '') { - inputer.addClass('shake'); - inputer.focus(); - setTimeout(function() { - inputer && inputer.removeClass('shake'); - }, 1000); + }); + }, + confirmClicked: function() { + var inputer = $(this).find('input[type=text]'); + if (inputer.val().trim() == '') { + inputer.addClass('shake'); + inputer.focus(); + setTimeout(function() { + inputer && inputer.removeClass('shake'); + }, 1000); + return; + } + var tmpl = $('#create-proj-success-tmpl').text(); + var modal = $(this); + var accounts = $(this).find('.picked-user'); + var values = []; + for(var i = 0, l = accounts.length; i < l; i++) { + var current = $(accounts[i]); + values.push(current.data('account') + '(' + current.data('name') + ')') + } + $.post($.route('org.project.update'), { + id: id, + name: inputer.val(), + desc: $(this).find('textarea.desc').val(), + accounts: values.join(', ') + }, function(data) { + if (data.code != '200') { + modal.modal('hide'); + alert(data.msg); return; } - var tmpl = $('#create-proj-success-tmpl').text(); - var modal = $(this); - var accounts = $(this).find('.picked-user'); - var values = []; - for(var i = 0, l = accounts.length; i < l; i++) { - var current = $(accounts[i]); - values.push(current.data('account') + '(' + current.data('name') + ')') - } - $.post($.route('org.project.update'), { - id: id, - name: inputer.val(), - desc: $(this).find('textarea.desc').val(), - accounts: values.join(', ') - }, function(data) { - if (data.code != '200') { - modal.modal('hide'); - alert(data.msg); - return; - } - var data = data.result; - data.status = data.status || '刚刚更新'; - var html = $.render(tmpl, data); - box.replaceWith(html); - modal.modal('hide'); - }, "JSON") - } - }); + var data = data.result; + data.status = data.status || '刚刚更新'; + var html = $.render(tmpl, data); + box.replaceWith(html); + modal.modal('hide'); + }, "JSON") + } }); }) .delegate('.box .glyphicon-export', 'click', function() { @@ -212,55 +214,56 @@ $(function() { .delegate('.box-to-add', 'click', function() { var that = this; var groupId = $(this).data('groupid'); - getUsers(function(users) { - $.confirm({ - content: $.render($('#create-proj-tmpl').text(), {}), - title: '创建项目', - confirmText: '确认创建', - showCallback: function() { - var that = this; - $(this).find('input[type=text]').focus(); - $(this).find('.picking-user').delegate('.unpick-btn', 'click', function() { - $(this).parent('.picked-user').remove(); - }); - $(this).find('.accounts-inputer').keyup(function() { + $.confirm({ + content: $.render($('#create-proj-tmpl').text(), {}), + title: '创建项目', + confirmText: '确认创建', + showCallback: function() { + var that = this; + $(this).find('input[type=text]').focus(); + $(this).find('.picking-user').delegate('.unpick-btn', 'click', function() { + $(this).parent('.picked-user').remove(); + }); + getUsers(function(users) { + $('.user-loading').hide(); + $(that).find('.accounts-inputer').keyup(function() { $.autocomplete(that, users); }).focus(function() { $.autocomplete(that, users); }); - }, - confirmClicked: function() { - var inputer = $(this).find('input[type=text]'); - if (inputer.val().trim() == '') { - inputer.addClass('shake'); - inputer.focus(); - setTimeout(function() { - inputer && inputer.removeClass('shake'); - }, 1000); - return; - } - var tmpl = $('#create-proj-success-tmpl').text(); - var modal = $(this); - var accounts = $(this).find('.picked-user'); - var values = []; - for(var i = 0, l = accounts.length; i < l; i++) { - var current = $(accounts[i]); - values.push(current.data('account') + '(' + current.data('name') + ')') - } - $.post($.route('org.project.create'), { - groupId: groupId, - name: inputer.val(), - desc: $(this).find('textarea.desc').val(), - accounts: values.join(', ') - }, function(data) { - var data = data.result; - data.status = data.status || '刚刚创建'; - var html = $.render(tmpl, data); - $(that).before(html); - modal.modal('hide'); - }, "JSON") + }); + }, + confirmClicked: function() { + var inputer = $(this).find('input[type=text]'); + if (inputer.val().trim() == '') { + inputer.addClass('shake'); + inputer.focus(); + setTimeout(function() { + inputer && inputer.removeClass('shake'); + }, 1000); + return; } - }); + var tmpl = $('#create-proj-success-tmpl').text(); + var modal = $(this); + var accounts = $(this).find('.picked-user'); + var values = []; + for(var i = 0, l = accounts.length; i < l; i++) { + var current = $(accounts[i]); + values.push(current.data('account') + '(' + current.data('name') + ')') + } + $.post($.route('org.project.create'), { + groupId: groupId, + name: inputer.val(), + desc: $(this).find('textarea.desc').val(), + accounts: values.join(', ') + }, function(data) { + var data = data.result; + data.status = data.status || '刚刚创建'; + var html = $.render(tmpl, data); + $(that).before(html); + modal.modal('hide'); + }, "JSON") + } }); }) .delegate('.save-update-group', 'click', function() { diff --git a/WebContent/org/group/index.vm b/WebContent/org/group/index.vm index 296c57f67..93f122126 100644 --- a/WebContent/org/group/index.vm +++ b/WebContent/org/group/index.vm @@ -107,6 +107,7 @@ {{account}} ({{name}})× {{/users}} + 项目成员列表加载中,请稍候~
From d00fd918823c49ad3bed152e84fea0fa5aaf3277 Mon Sep 17 00:00:00 2001 From: Bosn Date: Mon, 21 Apr 2014 10:13:44 +0800 Subject: [PATCH 002/260] Update README.md add author info --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 3d7ab027b..0d5d5abea 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,11 @@ Rigel Automation Platform 在前后端分离的开发模式下,我们通常需要定义一份`接口文档`来规范接口的具体信息。如一个请求的地址、有几个参数、参数名称及类型含义等等。`RAP` 首先方便团队录入、查看和管理这些接口文档,并通过分析结构化的文档数据,重复利用并生成自测数据、提供自测控制台等等... 大幅度提升开发效率。 - [文档中心](http://thx.alibaba-inc.com/RAP/) + + +其它版本 +-------------------------------------- + +目前RAP使用了公司域账户登录系统,公司外部署无法正常使用。感谢ufologist提供了可外部使用的版本。我们也在加快步伐完善账户系统,期待更多朋友加入到RAP的开源建设过程。 + +- [https://github.com/ufologist/RAP](https://github.com/ufologist/RAP) From 874f4bdf7458dfafb9f037939ab64d6545aac2b6 Mon Sep 17 00:00:00 2001 From: Bosn Ma Date: Mon, 21 Apr 2014 10:51:44 +0800 Subject: [PATCH 003/260] add structure selection function --- UPDATELOG.md | 1 + WebContent/stat/js/core/rap.js | 57 ++++++++++++++++++++++++++++- WebContent/workspace/myWorkspace.vm | 10 +++++ 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/UPDATELOG.md b/UPDATELOG.md index 003202910..556b3c21e 100644 --- a/UPDATELOG.md +++ b/UPDATELOG.md @@ -1,4 +1,5 @@ ### rap v0.8.1 ### +* [优化] 接口编辑增加最外层结构的选择(数组、对象两种)。2014-04-21 * [优化] mock工具中的值若包含中文将以unicode格式输出。2014-04-18 * [功能] 增加模板参数化,支持动态根据请求入参来输出参数化的MockJS模板 2014-04-18 * [功能] 修复奇葩的跨域问题。修改了所有Mock服务的HTTP headers。 2014-04-10 diff --git a/WebContent/stat/js/core/rap.js b/WebContent/stat/js/core/rap.js index b044dc1a9..c8a8672d1 100644 --- a/WebContent/stat/js/core/rap.js +++ b/WebContent/stat/js/core/rap.js @@ -1894,6 +1894,40 @@ if (!window.console) { + /** + * get action response JSON format + * array => [{},{},{}] + * object => {} + * + * @return array / object + */ + function getActionStruct(action) { + var code = '@type=array_map;'; + var desc = action.description || ""; + if (desc.substring(0, 16) === code) { + return 'array'; + } else { + return 'object'; + } + } + + /** + * @struct array / object + */ + function setActionStruct(action, struct) { + var code = '@type=array_map;'; + var desc = action.description || ""; + if (desc.substring(0, 16) === code) { + if (struct !== 'array') { + action.description = action.description.substring(16); + } + } else { + if (struct === 'array') { + action.description = code + desc; + } + } + } + /** * edit action */ @@ -1904,9 +1938,18 @@ if (!window.console) { b.g("editAFloater-id").value = action.id; b.g("editAFloater-name").value = action.name; setSelectedValue("editAFloater-type", action.requestType); + var struct = getActionStruct(action); + setSelectedValue("editAFloater-struct", struct); + // hide action struct in description textarea + var desc = action.description; + var code = '@type=array_map;'; + if (desc && desc.substring(0, 16) === code) { + desc = desc.substring(16); + } + b.g("editAFloater-requestUrl").value = action.requestUrl; b.g("editAFloater-responseTemplate").value = action.responseTemplate; - b.g("editAFloater-description").value = action.description; + b.g("editAFloater-description").value = desc; e.get("editAFloater").setTitle("模型管理 - 编辑请求"); ecFloater.show("editAFloater"); }; @@ -1956,6 +1999,8 @@ if (!window.console) { action.requestUrl = b.g("editAFloater-requestUrl").value; action.responseTemplate = b.g("editAFloater-responseTemplate").value; action.description = b.g("editAFloater-description").value; + var struct = getSelectedValue("editAFloater-struct"); + setActionStruct(action, struct); // update model p.updateAction(action); @@ -1979,6 +2024,9 @@ if (!window.console) { action.requestUrl = b.g("editAFloater-requestUrl").value; action.responseTemplate = b.g("editAFloater-responseTemplate").value; action.description = b.g("editAFloater-description").value; + var struct = getSelectedValue("editAFloater-struct"); + setActionStruct(action, struct); + // update model var id = p.addAction(action); @@ -2990,6 +3038,7 @@ if (!window.console) { b.g("editAFloater-description").value = ""; b.g("editAFloater-pageId").value = ""; initRadioList("editAFloater-type"); + initRadioList("editAFloater-struct"); } /** @@ -3544,6 +3593,12 @@ if (!window.console) { * @return {string} formatted string */ function processTextarea(txt) { + var code = '@type=array_map;'; + if (txt && txt.substring(0, 16) === code) { + txt = txt.substring(16); + } + + var arr = [], hasCode = txt.indexOf('@code') > -1, i = 0; diff --git a/WebContent/workspace/myWorkspace.vm b/WebContent/workspace/myWorkspace.vm index f237f807d..02472ce12 100644 --- a/WebContent/workspace/myWorkspace.vm +++ b/WebContent/workspace/myWorkspace.vm @@ -243,6 +243,16 @@ + + 响应数据最外层结构 + + + + + + + + From cb3920867e53dc604398aa1658b823d47eaa5226 Mon Sep 17 00:00:00 2001 From: Bosn Ma Date: Mon, 21 Apr 2014 14:05:21 +0800 Subject: [PATCH 004/260] add creator to project models --- src/com/taobao/rigel/rap/account/bo/User.java | 16 +++++++++++++++- .../rap/mock/service/impl/MockMgrImpl.java | 19 +++++++++++-------- .../organization/web/action/GroupAction.java | 1 + .../web/action/OrganizationAction.java | 1 + 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/com/taobao/rigel/rap/account/bo/User.java b/src/com/taobao/rigel/rap/account/bo/User.java index 2ba8a566d..33f670e41 100644 --- a/src/com/taobao/rigel/rap/account/bo/User.java +++ b/src/com/taobao/rigel/rap/account/bo/User.java @@ -2,7 +2,13 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import com.taobao.rigel.rap.project.bo.Project; @@ -20,6 +26,14 @@ public class User implements java.io.Serializable { private int incorrectLoginAttempt; private String realName; + public Map getUserBaseInfo() { + Map base = new HashMap(); + base.put("name", this.name); + base.put("id", this.id); + base.put("email", this.email); + return base; + } + public void setRealName(String realName) { this.realName = realName; } diff --git a/src/com/taobao/rigel/rap/mock/service/impl/MockMgrImpl.java b/src/com/taobao/rigel/rap/mock/service/impl/MockMgrImpl.java index d6447f1c3..e4dc61b0e 100644 --- a/src/com/taobao/rigel/rap/mock/service/impl/MockMgrImpl.java +++ b/src/com/taobao/rigel/rap/mock/service/impl/MockMgrImpl.java @@ -34,7 +34,7 @@ public ProjectMgr getProjectMgr() { public void setProjectMgr(ProjectMgr projectMgr) { this.projectMgr = projectMgr; } - + private Map> requestParams; /** @@ -270,6 +270,9 @@ public static Map> getUrlParameters(String url) String query = urlParts[1]; for (String param : query.split("&")) { String pair[] = param.split("="); + if (pair.length == 0) { + continue; + } String key = URLDecoder.decode(pair[0], "UTF-8"); String value = ""; if (pair.length > 1) { @@ -618,8 +621,7 @@ private String mockjsValue(Parameter para, int index) { } mockValue = processMockValueWithParams(para, mockValue); - - + if (mockValue != null && !mockValue.isEmpty()) { if (mockValue.startsWith("[") && mockValue.endsWith("]")) { return mockValue; @@ -637,15 +639,15 @@ private String mockjsValue(Parameter para, int index) { } else if (para.getDataType().equals("array")) { return "[1, 2, 3, 4, 5]"; - } + } return returnValue; } - private String processMockValueWithParams(Parameter para, String mockValue) { - + Pattern p = Pattern.compile(Patterns.MOCK_TEMPLATE_PATTERN); - if (mockValue == null) mockValue = ""; + if (mockValue == null) + mockValue = ""; Matcher matcher = p.matcher(mockValue); while (matcher.find()) { int c = matcher.groupCount(); @@ -654,7 +656,8 @@ private String processMockValueWithParams(Parameter para, String mockValue) { String key = matcher.group(1); String value = matcher.group(2); List param = requestParams.get(key); - String realValue = (param != null && param.size() > 0) ? param.get(0) : null; + String realValue = (param != null && param.size() > 0) ? param + .get(0) : null; if (realValue != null && !realValue.isEmpty()) { mockValue = mockValue.replace(toBeReplaced, realValue); } else { diff --git a/src/com/taobao/rigel/rap/organization/web/action/GroupAction.java b/src/com/taobao/rigel/rap/organization/web/action/GroupAction.java index 27bdbc461..d5d0cd162 100644 --- a/src/com/taobao/rigel/rap/organization/web/action/GroupAction.java +++ b/src/com/taobao/rigel/rap/organization/web/action/GroupAction.java @@ -91,6 +91,7 @@ public String all() { project.put("status", projectModel.getLastUpdateStr()); project.put("accounts", projectModel.getMemberAccountListStr()); project.put("isManagable", projectModel.getIsManagable()); + project.put("creator", projectModel.getUser().getUserBaseInfo()); projects.add(project); } group.put("projects", projects); diff --git a/src/com/taobao/rigel/rap/organization/web/action/OrganizationAction.java b/src/com/taobao/rigel/rap/organization/web/action/OrganizationAction.java index 54bc422f2..e595dab1e 100644 --- a/src/com/taobao/rigel/rap/organization/web/action/OrganizationAction.java +++ b/src/com/taobao/rigel/rap/organization/web/action/OrganizationAction.java @@ -97,6 +97,7 @@ public String projects() { map.put("status", p.getLastUpdateStr()); map.put("accounts", p.getMemberAccountListStr()); map.put("isManagable", p.getIsManagable()); + map.put("creator", p.getUser().getUserBaseInfo()); projects.add(map); } StringBuilder json = new StringBuilder(); From 40b1e606311df647dae330f1036bd351f0013977 Mon Sep 17 00:00:00 2001 From: wangjeaf Date: Mon, 21 Apr 2014 14:06:22 +0800 Subject: [PATCH 005/260] search in top | seperate mine and related | add creator --- WebContent/org/group/index.css | 34 ++----- WebContent/org/home/index.js | 23 ++++- WebContent/org/home/index.vm | 22 +---- WebContent/stat/css/rap.template.css | 32 +++++++ WebContent/stat/js/base.js | 129 ++++++++++++++++++++++++++- WebContent/tcom/template.rap.vm | 12 ++- 6 files changed, 198 insertions(+), 54 deletions(-) diff --git a/WebContent/org/group/index.css b/WebContent/org/group/index.css index 72f366b69..1788e4191 100644 --- a/WebContent/org/group/index.css +++ b/WebContent/org/group/index.css @@ -237,32 +237,10 @@ .project-target .productline {width: 30%; float: left; margin-left: 10px;} .project-target .group {width: 30%; float: left; margin-left: 10px;} -.project-autocomplete-con { - width: 400px; font-size: 14px; position: absolute; left: 0; top: 35px; background-color: #FFF; border: 1px solid #CCC; z-index: 1000 -} -.project-autocomplete-con ul { - margin-bottom: 0; -} -.project-autocomplete-con li { - cursor: pointer; padding: 6px 11px; line-height: 20px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; -} -.project-autocomplete-con li:nth-child(odd) { - background-color: #F9F9F9; -} -.project-autocomplete-con li:hover, .project-autocomplete-con li.active { - background-color: #F2F2F2; -} -.search-project-con { - width: 400px; display: inline-block; margin-left: 20px; position: relative; -} - -.search-project-con .glyphicon-search { - position: absolute; - font-size: 14px; - right: 8px; - top: 10px; - color: #CCC; -} -.project-search-inputer { - padding-right: 25px; +.groups .status .creator { + position: absolute; + color: #AAA; + font-size: 12px; + right: 0; + top: 15px; } \ No newline at end of file diff --git a/WebContent/org/home/index.js b/WebContent/org/home/index.js index f29c93949..1f87c6fe7 100644 --- a/WebContent/org/home/index.js +++ b/WebContent/org/home/index.js @@ -7,7 +7,8 @@ $(function() { var NAME_MAP = { 'user': '我的项目', 'star': '重要项目', - 'heart': '我关注的项目' + 'heart': '我关注的项目', + 'tag': '与我相关的项目' }; var PL_ID = null; @@ -508,11 +509,25 @@ $(function() { function render() { var tmpl = $('#group-tmpl').text(); $.get($.route('org.home.projects'), {}, function(data) { + var newGroup = []; + for(var i = 0, l = data.groups.length; i < l; i++) { + if (data.groups[i].type == 'user') { + var group = data.groups[i]; + for(var j = 0; j < group.projects.length; j++) { + if (!group.projects[j].isManagable) { + newGroup.push(group.projects[j]); + group.projects.splice(j, 1); + j --; + } + } + } + } + data.groups.push({ + type: 'tag', + projects: newGroup + }); data.groups.forEach(function (group) { group.name = NAME_MAP[group.type] || '其他'; - if (group.type == 'user') { - group.mine = true; - } }); var html = $.render(tmpl, data); $(".groups").html(html); diff --git a/WebContent/org/home/index.vm b/WebContent/org/home/index.vm index 4a497b632..0e428a267 100644 --- a/WebContent/org/home/index.vm +++ b/WebContent/org/home/index.vm @@ -17,27 +17,11 @@ - + + -

$!utils.escapeInH($page.name)控制台

+

$!utils.escapeInH($page.name) - 控制台

- - * 根路径设置 + 请求根路径
#foreach($action in $page.actionList) -
+
@@ -63,53 +56,6 @@
#end -## master page start -#macro (bodyStart $noMenu) -#if(!$noMenu) - -#end -
-#end - ## master page end #macro (bodyEnd)
diff --git a/WebContent/tester/pageTester.vm b/WebContent/tester/pageTester.vm index 428a77c2f..648924b0c 100644 --- a/WebContent/tester/pageTester.vm +++ b/WebContent/tester/pageTester.vm @@ -403,5 +403,8 @@ log('tester ready.'); }); + + + From ace7819997d7b4f59960c3f172aa564247f71938 Mon Sep 17 00:00:00 2001 From: Bosn Ma Date: Mon, 21 Apr 2014 17:54:57 +0800 Subject: [PATCH 015/260] in develop --- pom.xml | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 pom.xml diff --git a/pom.xml b/pom.xml deleted file mode 100644 index dff69c88e..000000000 --- a/pom.xml +++ /dev/null @@ -1,27 +0,0 @@ - - 4.0.0 - RAP - RAP - 0.0.1-SNAPSHOT - - - - - com.alibaba.platform.shared - buc.sso.client - 0.3.9 - - - com.alibaba.platform.shared - buc.sso.client - 0.3.9 - sources - - - org.ocpsoft.prettytime - prettytime - 3.2.3.Final - - - \ No newline at end of file From c5f8aa86d1beba6c43f9ebe4b78c39592cb031b2 Mon Sep 17 00:00:00 2001 From: wangjeaf Date: Tue, 22 Apr 2014 11:56:59 +0800 Subject: [PATCH 016/260] menu two cols --- WebContent/stat/css/rap.template.css | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/WebContent/stat/css/rap.template.css b/WebContent/stat/css/rap.template.css index e81081c10..73b3c85c7 100644 --- a/WebContent/stat/css/rap.template.css +++ b/WebContent/stat/css/rap.template.css @@ -6,6 +6,17 @@ body { .left {float:left;} .right {float:right;} + +.dropdown-menu { + width: 300px; +} +.dropdown-menu li { + float: left; width: 149px; +} +.dropdown-menu li a { + padding: 6px 14px; font-size: 14px; +} + .es-prev,.es-next { border: 0; cursor: pointer; From 0c2283add89d70eaad54e85c4c0318eee29dc51a Mon Sep 17 00:00:00 2001 From: wangjeaf Date: Tue, 22 Apr 2014 13:50:06 +0800 Subject: [PATCH 017/260] add get mockjs rule | css formater --- WebContent/stat/css/pageTester.css | 21 ++------ WebContent/tester/pageTester.vm | 83 ++++++++++++++++++++++++++++-- 2 files changed, 83 insertions(+), 21 deletions(-) diff --git a/WebContent/stat/css/pageTester.css b/WebContent/stat/css/pageTester.css index 3a7e08d2f..2c47285d7 100644 --- a/WebContent/stat/css/pageTester.css +++ b/WebContent/stat/css/pageTester.css @@ -193,32 +193,19 @@ input,textarea { } #divResBoardLog .triggers { -position: absolute; -right: 25px; -top: -3px; -z-index: 1000; -background-color: #F2F2F2; + position: absolute; right: 25px; top: -3px; z-index: 1000; background-color: #F2F2F2; } .trigger { -border: 2px solid #DDD; -text-align: center; -color: #CCC; -cursor: pointer; -width: 30px; -height: 30px; -font-size: 22px; -line-height: 26px; -float: left; -margin-left: 10px; -margin-top: 4px; + border: 2px solid #DDD; text-align: center; color: #CCC; cursor: pointer; + width: 30px; height: 30px; font-size: 22px; line-height: 26px; float: left; margin-left: 10px; margin-top: 4px; } #divActionList { } #page { - padding: 12px 20px 0 + padding: 12px 20px 0; } #divRootSetting { diff --git a/WebContent/tester/pageTester.vm b/WebContent/tester/pageTester.vm index 21ab82cad..14f70c62c 100644 --- a/WebContent/tester/pageTester.vm +++ b/WebContent/tester/pageTester.vm @@ -53,7 +53,8 @@ #end
- + +
@@ -117,6 +118,68 @@ log('tester initializing...'); Y.timeLog = {}; Y.all('.form').each(function(form) { + form.one('.btn-run-mockjsrule').on('click', function(e) { + Y.one('#divResBoardJson').setHTML('加载中,请稍后...'); + var url = ''; + var qArr = []; + var i = 0; + var fields = form.all('.field'); + var baseUrl = Y.one('#txtRootPath').get('value'); + var baseUrlOrigin = Y.one('#txtRootPath').get('value'); + var rapUrl = RAP_ROOT; + var path = form.getAttribute('path'); + + if (~path.indexOf('http')) { + path = path.substring(7); + path = path.substring(path.indexOf("/")); + } + + if (path[0] !== '/') { + path = '/' + path; + } + + baseUrl += path; + rapUrl += path; + fields.each(function(field) { + var name = field.get('name'), + value = field.get('value'); + qArr[i++] = name + '=' + encodeURIComponent(value); + }); + + if (!~baseUrl.indexOf('http://')) { + baseUrl = "http://" + baseUrl; + } + if (!~rapUrl.indexOf('http://')) { + rapUrl = "http://" + rapUrl; + } + + url = baseUrl + (baseUrl.indexOf('?') === -1 ? '?' : '&') + qArr.join('&'); + url = url.replace(/[{}]/g, ""); + log('request starting, url: ' + color(wrapHref(url), LIGHT_GRAY)); + Y.timeLog['time'] = new Date().getTime(); + try { + Y.jsonp(url, { + on : { + success : function() { + var slice = Array.prototype.slice; + var args = slice.call(arguments); + args.push('rule'); + testResHandler.apply(this, args); + }, + timeout : function() { + log(color('timeout', RED) + '... so long time to response!'); + }, + failure : function(e) { + log(color('error occurred!', RED) + color(', detail:' + e.errors[0].error, LIGHT_GRAY)); + } + }, + timeout : 10000, + args : [form] + }); + } catch(e) { + alert(e); + } + }); form.one('.btn-run').on('click', function(e) { Y.one('#divResBoardJson').setHTML('加载中,请稍后...'); var url = ''; @@ -291,13 +354,25 @@ }); - + function sortObj(obj) { + var result = {}, keys = []; + for(var prop in obj) { + if (obj.hasOwnProperty(prop)) { + keys.push(prop); + } + } + keys = keys.sort(); + for(var i = 0, l = keys.length; i < l; i++) { + result[keys[i]] = obj[keys[i]]; + } + return result; + } function testResHandler(response, form, btn) { var jsonString = Y.JSON.stringify(response); var path = Y.one('#txtRootPath').get('value'); var obj = eval("(" + jsonString + ")"); - - if (path.indexOf('mockjs') != -1) { + obj = sortObj(obj); + if (btn != 'rule' && path.indexOf('mockjs') != -1) { obj = Mock.mock(obj); } From fde9ff6593c588c6aadcd65ade9c9e225d8d7b6f Mon Sep 17 00:00:00 2001 From: wangjeaf Date: Tue, 22 Apr 2014 14:00:52 +0800 Subject: [PATCH 018/260] add show btn --- WebContent/stat/css/pageTester.css | 8 +++++--- WebContent/tester/pageTester.vm | 7 +++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/WebContent/stat/css/pageTester.css b/WebContent/stat/css/pageTester.css index 2c47285d7..53b13b43a 100644 --- a/WebContent/stat/css/pageTester.css +++ b/WebContent/stat/css/pageTester.css @@ -1,7 +1,6 @@ body { padding: 0; margin: 8px; - padding-bottom: 100px; } .clearfix { @@ -193,14 +192,17 @@ input,textarea { } #divResBoardLog .triggers { - position: absolute; right: 25px; top: -3px; z-index: 1000; background-color: #F2F2F2; + position: absolute; right: 2px; top: -3px; z-index: 1000; background-color: #F2F2F2; } .trigger { - border: 2px solid #DDD; text-align: center; color: #CCC; cursor: pointer; + border: 2px solid #DDD; text-align: center; color: #CCC; cursor: pointer; background-color: #F2F2F2; width: 30px; height: 30px; font-size: 22px; line-height: 26px; float: left; margin-left: 10px; margin-top: 4px; } +#show-trigger { + display: none; position: fixed; bottom: 10px; right: 10px; display: none; +} #divActionList { } diff --git a/WebContent/tester/pageTester.vm b/WebContent/tester/pageTester.vm index 14f70c62c..8048c496a 100644 --- a/WebContent/tester/pageTester.vm +++ b/WebContent/tester/pageTester.vm @@ -87,7 +87,7 @@
-
 
+
- + @@ -43,11 +43,11 @@
#end @@ -79,11 +79,11 @@
ready
-
-
-
-
-
+
+
+
+
+
@@ -97,13 +97,14 @@ }; } - var RAP_ROOT = 'rap.alibaba-inc.com$!projectContext/mockjs/$!projectId'; + var RAP_ROOT = '$consts.DOMAIN_URL$!projectContext/mockjs/$!projectId'; + document.getElementById("txtRootPath").value = RAP_ROOT; - + function wrapHref(url) { - return '' + url + ''; + return '' + url + ''; } - + YUI().use('handlebars', 'node', 'event', 'jsonp', 'jsonp-url', 'json-stringify', function (Y) { var source = Y.one("#resBoard-template"), TResBoard = Y.Handlebars.compile(source), @@ -118,7 +119,7 @@ log('tester initializing...'); Y.timeLog = {}; Y.all('.form').each(function(form) { - form.one('.btn-run-mockjsrule').on('click', function(e) { + form.one('.btn-run-mockjsrule').on('click', function(e) { Y.one('#divResBoardJson').setHTML('加载中,请稍后...'); var url = ''; var qArr = []; @@ -161,9 +162,9 @@ Y.jsonp(url, { on : { success : function() { - var slice = Array.prototype.slice; - var args = slice.call(arguments); - args.push('rule'); + var slice = Array.prototype.slice; + var args = slice.call(arguments); + args.push('rule'); testResHandler.apply(this, args); }, timeout : function() { @@ -179,7 +180,7 @@ } catch(e) { alert(e); } - }); + }); form.one('.btn-run').on('click', function(e) { Y.one('#divResBoardJson').setHTML('加载中,请稍后...'); var url = ''; @@ -355,19 +356,19 @@ }); function sortObj(obj) { - var result = {}, keys = []; - for(var prop in obj) { - if (obj.hasOwnProperty(prop)) { - keys.push(prop); - } - } - keys = keys.sort(); - for(var i = 0, l = keys.length; i < l; i++) { - result[keys[i]] = obj[keys[i]]; - } - return result; + var result = {}, keys = []; + for(var prop in obj) { + if (obj.hasOwnProperty(prop)) { + keys.push(prop); + } + } + keys = keys.sort(); + for(var i = 0, l = keys.length; i < l; i++) { + result[keys[i]] = obj[keys[i]]; + } + return result; } - + function testResHandler(response, form, btn) { var jsonString = Y.JSON.stringify(response); var path = Y.one('#txtRootPath').get('value'); @@ -461,8 +462,8 @@ initUrl(); Y.one('#divResBoardJson').setHTML(_modifyUrl); }); - - + + Y.one('#btnModify').on('click', function(e) { if (Y.one('#txtActionId').get('value') == '') { alert('请输入ActionId'); @@ -493,26 +494,26 @@ alert(e); } }); - + setTimeout(function() { - var logContainer = $('#divResBoardLog'); + var logContainer = $('#divResBoardLog'); $(document).delegate('#up-trigger', 'click', function() { - logContainer.animate({ - 'height': 500 - }); + logContainer.animate({ + 'height': 500 + }); }).delegate('#down-trigger', 'click', function() { - logContainer.animate({ - 'height': 100 - }); + logContainer.animate({ + 'height': 100 + }); }).delegate('#close-trigger', 'click', function() { - logContainer.hide('slow'); - $('#show-trigger').show('slow'); + logContainer.hide('slow'); + $('#show-trigger').show('slow'); }).delegate('#show-trigger', 'click', function() { - logContainer.show('slow'); - $('#show-trigger').hide('slow'); + logContainer.show('slow'); + $('#show-trigger').hide('slow'); }) }, 500); - + log('tester ready.'); }); diff --git a/src/com/taobao/rigel/rap/common/AuthCheckFilter.java b/src/com/taobao/rigel/rap/common/AuthCheckFilter.java index d3ff55622..147f91727 100644 --- a/src/com/taobao/rigel/rap/common/AuthCheckFilter.java +++ b/src/com/taobao/rigel/rap/common/AuthCheckFilter.java @@ -36,6 +36,13 @@ public void destroy() { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + if (SystemConstant.DOMAIN_URL.isEmpty()) { + SystemConstant.DOMAIN_URL = request.getServerName(); + if (request.getServerPort() != 80) { + SystemConstant.DOMAIN_URL += ":" + request.getServerPort(); + } + System.out.println("DOMAIN_URL is " + SystemConstant.DOMAIN_URL); + } HttpSession session = ((HttpServletRequest) request).getSession(); boolean logined = session.getAttribute(ContextManager.KEY_ACCOUNT) != null; diff --git a/src/com/taobao/rigel/rap/common/SystemConstant.java b/src/com/taobao/rigel/rap/common/SystemConstant.java index f9f87e32d..40d89ee22 100644 --- a/src/com/taobao/rigel/rap/common/SystemConstant.java +++ b/src/com/taobao/rigel/rap/common/SystemConstant.java @@ -5,4 +5,9 @@ public class SystemConstant { public static final int DEFAULT_PAGE_NUM = 10; public static String README_PATH = ""; public static String ROOT = ""; + public static String DOMAIN_URL = ""; + + public static String getDOMAIN_URL() { + return DOMAIN_URL; + } } diff --git a/src/com/taobao/rigel/rap/organization/web/action/OrganizationAction.java b/src/com/taobao/rigel/rap/organization/web/action/OrganizationAction.java index e595dab1e..5cfd49ec7 100644 --- a/src/com/taobao/rigel/rap/organization/web/action/OrganizationAction.java +++ b/src/com/taobao/rigel/rap/organization/web/action/OrganizationAction.java @@ -62,7 +62,12 @@ public String myHome() { } public String index() { - return SUCCESS; + if (isUserLogined()) { + return SUCCESS; + } else { + return "public"; + } + } public String group() { diff --git a/src/com/taobao/rigel/rap/organization/web/action/struts.xml b/src/com/taobao/rigel/rap/organization/web/action/struts.xml index 7dc9b55cf..e9ddf414e 100644 --- a/src/com/taobao/rigel/rap/organization/web/action/struts.xml +++ b/src/com/taobao/rigel/rap/organization/web/action/struts.xml @@ -9,6 +9,7 @@ /org/home/index.vm + /platform/home.vm From 2a762ab54fcde1e45efe995eedb6ebdfc656e04f Mon Sep 17 00:00:00 2001 From: wangjeaf Date: Wed, 23 Apr 2014 11:56:02 +0800 Subject: [PATCH 022/260] add @ before project creator --- WebContent/org/group/index.vm | 4 ++-- WebContent/org/home/index.vm | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/WebContent/org/group/index.vm b/WebContent/org/group/index.vm index df682dbba..d8184dacb 100644 --- a/WebContent/org/group/index.vm +++ b/WebContent/org/group/index.vm @@ -40,7 +40,7 @@
{{name}}
{{desc}}
-
{{status}}{{creator.name}}
+
{{status}}@{{creator.name}}
{{#important}}
{{/important}} @@ -66,7 +66,7 @@
{{name}}
{{desc}}
-
{{status}}{{creator.name}}
+
{{status}}@{{creator.name}}
diff --git a/WebContent/org/home/index.vm b/WebContent/org/home/index.vm index 1f39eec81..933156dd7 100644 --- a/WebContent/org/home/index.vm +++ b/WebContent/org/home/index.vm @@ -30,7 +30,7 @@
{{name}}
{{desc}}
-
{{status}}{{creator.name}}
+
{{status}}@{{creator.name}}
{{#important}}
{{/important}} @@ -57,7 +57,7 @@
{{name}}
{{desc}}
-
{{status}}{{creator.name}}
+
{{status}}@{{creator.name}}
From fa3c78742de3ee47abc83f03508405e2a8e34ac0 Mon Sep 17 00:00:00 2001 From: wangjeaf Date: Wed, 23 Apr 2014 14:29:10 +0800 Subject: [PATCH 023/260] root path style --- WebContent/stat/css/pageTester.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/WebContent/stat/css/pageTester.css b/WebContent/stat/css/pageTester.css index 8ebd42372..043720a4e 100644 --- a/WebContent/stat/css/pageTester.css +++ b/WebContent/stat/css/pageTester.css @@ -7,6 +7,12 @@ body { *zoom: 1; } +#divRootSetting { + border: 1px solid #CCC; +} +#txtRootPath { + vertical-align: initial; +} .clearfix:before, .clearfix:after { display: table; From aed8bd1ba313fbd167db5c9c2dd6c7cd54bf6b43 Mon Sep 17 00:00:00 2001 From: Bosn Ma Date: Wed, 23 Apr 2014 15:00:21 +0800 Subject: [PATCH 024/260] add new account type:RAP user, from now user can register & login by RAP account instead of alibaba domain-account. --- UPDATELOG.md | 1 + WebContent/account/login.vm | 18 +- WebContent/account/register.vm | 83 +- WebContent/stat/js/util/mock-min.js | 6 +- WebContent/tcom/template.rap.vm | 11 +- WebContent/workspace/myWorkspace.vm | 2 +- .../account/service/impl/AccountMgrImpl.java | 4 + .../rap/account/web/action/AccountAction.java | 47 +- .../rigel/rap/account/web/action/struts.xml | 34 +- src/resource/mockjs.js | 1452 +---------------- 10 files changed, 106 insertions(+), 1552 deletions(-) diff --git a/UPDATELOG.md b/UPDATELOG.md index 15ce1b075..0d0214409 100644 --- a/UPDATELOG.md +++ b/UPDATELOG.md @@ -1,4 +1,5 @@ ### rap v0.8.1 ### +* [模块] 升级账户系统,提供域帐号、RAP平台内帐号两种登录方式。 2014-04-23 * [BUG] 1). 修复空参数导致Mock服务出错的问题。2). 现在使用Mock插件会输出最终Mock数据到控制台。(防止请求返回MockJS模板,用户调试不知道最终模拟数据的问题。)2014-04-21 * [优化] 接口编辑增加最外层结构的选择(数组、对象两种)。2014-04-21 * [优化] mock工具中的值若包含中文将以unicode格式输出。2014-04-18 diff --git a/WebContent/account/login.vm b/WebContent/account/login.vm index b3f306f02..e0bc0ca91 100644 --- a/WebContent/account/login.vm +++ b/WebContent/account/login.vm @@ -1,16 +1,16 @@  #parse('/tcom/template.rap.vm') - - - Login - #includeRapStatic + + + Login + #includeRapStatic - - - #bodyStart + + + #bodyNewStart
@@ -37,6 +37,6 @@ #end
- #bodyEnd - + #bodyEnd + diff --git a/WebContent/account/register.vm b/WebContent/account/register.vm index 3677b4351..0b6700ab5 100644 --- a/WebContent/account/register.vm +++ b/WebContent/account/register.vm @@ -1,45 +1,46 @@  #parse('/tcom/template.rap.vm') - - - Register New Account - #includeRapStatic - - - #bodyStart -
-
-
-
-
用户名:
-
-
-
-
密码:
-
-
-
-
确认密码:
-
-
-
-
Email:
-
-
-
-
名字:
-
-
-
-
-
-
-
$!errMsg
-
-
-
-
- #bodyEnd - + + + 注册新的RAP账户 + #includeRapStatic + + + #bodyNewStart +
+
+
+
+
用户名:
+
+
+
+
密码:
+
+
+
+
确认密码:
+
+
+
+
Email:
+
+
+
+
名字:
+
+
+
+
+
+
+

+
#if($errMsg)$errMsg#else 用户名已存在,或其它错误。 #end
+
+
+
+
+ #bodyEnd + diff --git a/WebContent/stat/js/util/mock-min.js b/WebContent/stat/js/util/mock-min.js index 2e3b80d42..5693249cc 100644 --- a/WebContent/stat/js/util/mock-min.js +++ b/WebContent/stat/js/util/mock-min.js @@ -1,3 +1,3 @@ -/*! mockjs 18-04-2014 */ -(function(a){var b={version:"0.1.1",_mocked:{}},c=function(){var b={};return b.extend=function(){var c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length;for(1===j&&(h=this,i=0);j>i;i++)if(c=arguments[i])for(d in c)e=h[d],f=c[d],h!==f&&f!==a&&(b.isArray(f)||b.isObject(f)?(b.isArray(f)&&(g=e&&b.isArray(e)?e:[]),b.isObject(f)&&(g=e&&b.isObject(e)?e:{}),h[d]=b.extend(g,f)):h[d]=f);return h},b.each=function(a,b,c){var d,e;if("number"===this.type(a))for(d=0;a>d;d++)b(d,d);else if(a.length===+a.length)for(d=0;d1/(b+c)*b?!d:d):Math.random()>=.5},bool:function(a,b,c){return this.boolean(a,b,c)},natural:function(a,b){return a="undefined"!=typeof a?parseInt(a,10):0,b="undefined"!=typeof b?parseInt(b,10):9007199254740992,Math.round(Math.random()*(b-a))+a},integer:function(a,b){return a="undefined"!=typeof a?parseInt(a,10):-9007199254740992,b="undefined"!=typeof b?parseInt(b,10):9007199254740992,Math.round(Math.random()*(b-a))+a},"int":function(a,b){return this.integer(a,b)},"float":function(b,c,d,e){d=d===a?0:d,d=Math.max(Math.min(d,17),0),e=e===a?17:e,e=Math.max(Math.min(e,17),0);for(var f=this.integer(b,c)+".",g=0,h=this.natural(d,e);h>g;g++)f+=this.character("number");return parseFloat(f,10)},character:function(a){var c={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};return c.alpha=c.lower+c.upper,c.undefined=c.lower+c.upper+c.number+c.symbol,a=c[(""+a).toLowerCase()]||a,a.charAt(b.natural(0,a.length-1))},"char":function(a){return this.character(a)},string:function(c,d,e){var f;3===arguments.length&&(f=b.natural(d,e)),2===arguments.length&&("string"==typeof arguments[0]?f=d:(f=b.natural(c,d),c=a)),1===arguments.length&&(f=c,c=a),0===arguments.length&&(f=b.natural(3,7));for(var g="",h=0;f>h;h++)g+=b.character(c);return g},str:function(a,b,c){return this.string(a,b,c)},range:function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f}}),b.extend({patternLetters:{yyyy:"getFullYear",yy:function(a){return(""+a.getFullYear()).slice(2)},y:"yy",MM:function(a){var b=a.getMonth()+1;return 10>b?"0"+b:b},M:function(a){return a.getMonth()+1},dd:function(a){var b=a.getDate();return 10>b?"0"+b:b},d:"getDate",HH:function(a){var b=a.getHours();return 10>b?"0"+b:b},H:"getHours",hh:function(a){var b=a.getHours()%12;return 10>b?"0"+b:b},h:function(a){return a.getHours()%12},mm:function(a){var b=a.getMinutes();return 10>b?"0"+b:b},m:"getMinutes",ss:function(a){var b=a.getSeconds();return 10>b?"0"+b:b},s:"getSeconds",SS:function(a){var b=a.getMilliseconds();return 10>b&&"00"+b||100>b&&"0"+b||b},S:"getMilliseconds",A:function(a){return a.getHours()<12?"AM":"PM"},a:function(a){return a.getHours()<12?"am":"pm"}}}),b.extend({rformat:new RegExp(function(){var a=[];for(var c in b.patternLetters)a.push(c);return"("+a.join("|")+")"}(),"g"),format:function(a,c){var d=b.patternLetters,e=b.rformat;return c.replace(e,function(b,c){return"function"==typeof d[c]?d[c](a):d[c]in d?arguments.callee(b,d[c]):a[d[c]]()})},randomDate:function(b,c){return b=b===a?new Date(0):b,c=c===a?new Date:c,new Date(Math.random()*(c.getTime()-b.getTime()))},date:function(a){return a=a||"yyyy-MM-dd",this.format(this.randomDate(),a)},time:function(a){return a=a||"HH:mm:ss",this.format(this.randomDate(),a)},datetime:function(a){return a=a||"yyyy-MM-dd HH:mm:ss",this.format(this.randomDate(),a)}}),b.extend({ad_size:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],screen_size:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],video_size:["720x480","768x576","1280x720","1920x1080"],image:function(b,c,d,e,f){return 4===arguments.length&&(f=e,e=a),3===arguments.length&&(f=d,d=a),b||(b=this.pick(this.ad_size)),c&&~c.indexOf("#")&&(c=c.slice(1)),d&&~d.indexOf("#")&&(d=d.slice(1)),"http://dummyimage.com/"+b+(c?"/"+c:"")+(d?"/"+d:"")+(e?"."+e:"")+(f?"&text="+f:"")},img:function(){return this.image.apply(this,arguments)}}),b.extend({brandColors:{"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"},brands:function(){var a=[];for(var b in this.brandColors)a.push(b);return a},dataImageHolder:function(a){return"holder.js/"+a},dataImage:function(b,c){var d="undefined"!=typeof document&&document.createElement("canvas"),e=d&&d.getContext&&d.getContext("2d");if(!d||!e)return"";b||(b=this.pick(this.ad_size)),c=c!==a?c:b,b=b.split("x");var f=parseInt(b[0],10),g=parseInt(b[1],10),h=this.brandColors[this.pick(this.brands())],i="#FFF",j=14,k="sans-serif";return d.width=f,d.height=g,e.textAlign="center",e.textBaseline="middle",e.fillStyle=h,e.fillRect(0,0,f,g),e.fillStyle=i,e.font="bold "+j+"px "+k,e.fillText(c,f/2,g/2,f),d.toDataURL("image/png")}}),b.extend({color:function(){var a=Math.floor(16777215*Math.random()).toString(16);return a="#"+("000000"+a).slice(-6)}}),b.extend({capitalize:function(a){return a.charAt(0).toUpperCase()+a.substr(1)},upper:function(a){return a.toUpperCase()},lower:function(a){return a.toLowerCase()},pick:function(a){return a[this.natural(0,a.length-1)]},shuffle:function(a){for(var b=a.slice(0),c=[],d=0,e=b.length,f=0;e>f;f++)d=this.natural(0,b.length-1),c.push(b[d]),b.splice(d,1);return c}}),b.extend({paragraph:function(a,c){var d;0===arguments.length&&(d=b.natural(3,7)),1===arguments.length&&(d=c=a),2===arguments.length&&(a=parseInt(a,10),c=parseInt(c,10),d=b.natural(a,c));for(var e=[],f=0;d>f;f++)e.push(b.sentence());return e.join(" ")},sentence:function(a,c){var d;0===arguments.length&&(d=b.natural(12,18)),1===arguments.length&&(d=c=a),2===arguments.length&&(a=parseInt(a,10),c=parseInt(c,10),d=b.natural(a,c));for(var e=[],f=0;d>f;f++)e.push(b.word());return b.capitalize(e.join(" "))+"."},word:function(a,c){var d;0===arguments.length&&(d=b.natural(3,10)),1===arguments.length&&(d=c=a),2===arguments.length&&(a=parseInt(a,10),c=parseInt(c,10),d=b.natural(a,c));for(var e="",f=0;d>f;f++)e+=b.character("lower");return e},title:function(a,c){var d,e=[];0===arguments.length&&(d=b.natural(3,7)),1===arguments.length&&(d=c=a),2===arguments.length&&(a=parseInt(a,10),c=parseInt(c,10),d=b.natural(a,c));for(var f=0;d>f;f++)e.push(this.capitalize(this.word()));return e.join(" ")}}),b.extend({first:function(){var a=["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"].concat(["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]);return this.pick(a)},last:function(){var a=["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"];return this.pick(a)},name:function(a){return this.first()+" "+(a?this.first()+" ":"")+this.last()}}),b.extend({url:function(){return"http://"+this.domain()+"/"+this.word()},domain:function(a){return this.word()+"."+(a||this.tld())},email:function(a){return this.character("lower")+"."+this.last().toLowerCase()+"@"+this.last().toLowerCase()+"."+this.tld()},ip:function(){return this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)},tlds:["com","org","edu","gov","co.uk","net","io"],tld:function(){return this.pick(this.tlds)}}),b.extend({areas:["东北","华北","华东","华中","华南","西南","西北"],area:function(){return this.pick(this.areas)},regions:["110000 北京市","120000 天津市","130000 河北省","140000 山西省","150000 内蒙古自治区","210000 辽宁省","220000 吉林省","230000 黑龙江省","310000 上海市","320000 江苏省","330000 浙江省","340000 安徽省","350000 福建省","360000 江西省","370000 山东省","410000 河南省","420000 湖北省","430000 湖南省","440000 广东省","450000 广西壮族自治区","460000 海南省","500000 重庆市","510000 四川省","520000 贵州省","530000 云南省","540000 西藏自治区","610000 陕西省","620000 甘肃省","630000 青海省","640000 宁夏回族自治区","650000 新疆维吾尔自治区","650000 新疆维吾尔自治区","710000 台湾省","810000 香港特别行政区","820000 澳门特别行政区"],region:function(){return this.pick(this.regions).split(" ")[1]},address:function(){},city:function(){},phone:function(){},areacode:function(){},street:function(){},street_suffixes:function(){},street_suffix:function(){},states:function(){},state:function(){},zip:function(a){for(var b="",c=0;(a||6)>c;c++)b+=this.natural(0,9);return b}}),b.extend({todo:function(){return"todo"}}),b.extend({d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){var a="ABCDEF1234567890",b=this.string(a,8)+"-"+this.string(a,4)+"-"+this.string(a,4)+"-"+this.string(a,4)+"-"+this.string(a,12);return b},id:function(){var a,b=0,c=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"],d=["1","0","X","9","8","7","6","5","4","3","2"];a=this.pick(this.regions).split(" ")[0]+this.date("yyyyMMdd")+this.string("number",3);for(var e=0;e1)e=d.pick(h.gen(a.template));else for(b=0;b",g.rurl);var h=b.mock(g.template);return console.log("[mock]",h),e.success&&e.success(h,"success",d),e.complete&&e.complete(h,"success",d),a}}return c.apply(this,arguments)};for(var e in c)a.io[e]=c[e]}),b.Util=c,b.Random=d,b.heredoc=c.heredoc,"object"==typeof module&&module.exports?module.exports=b:"function"==typeof define&&define.amd?define(function(){return b}):"function"==typeof define&&define.cmd&&define(function(){return b}),this.Mock=b,this.Random=d,"undefined"!=typeof KISSY&&c.each(["mock","components/mock/index","mock/dist/mock","gallery/Mock/0.1.1/index","gallery/Mock/0.1.2/index"],function(a){KISSY.add(a,function(a){return b.mockjax(a),b},{requires:["ajax"]})}),function(a){var e={version:"0.0.1"};this.Mock||(module.exports=e),b.tpl=function(a,b,c,d){return e.mock(a,b,c,d)},b.parse=function(a){return Handlebars.parse(a)},e.mock=function(a,b,d,e){return d=d?c.extend({},d,Handlebars.helpers):Handlebars.helpers,e=e?c.extend({},e,Handlebars.partials):Handlebars.partials,f.gen(a,null,b,d,e)};var f={debug:e.debug||!1,extend:c.extend};f.gen=function(a,b,d,g,h){if(c.isString(a)){var i=Handlebars.parse(a);d=f.parseOptions(a,d);var j=f.gen(i,b,d,g,h);return j}if(b=b||[{}],d=d||{},this[a.type]!==c.noop){d.__path=d.__path||[],(e.debug||f.debug)&&(console.log(),console.group("["+a.type+"]",JSON.stringify(a)),console.log("[options]",d.__path.length,JSON.stringify(d)));var k=d.__path.length;return this[a.type](a,b,d,g,h),d.__path.splice(k),(e.debug||f.debug)&&console.groupEnd(),b[b.length-1]}},f.parseOptions=function(a,b){var d,e,f,g=//g,h=a.match(g),i={};for(d=0;h&&di&&b.splice(0,b.length-i)},f.block=function(a,b,e,f,h){var i,j,k,l,m,n=a.mustache.id.parts,o=b[0],p=b.length;if(a.inverse,a.mustache.isHelper||f&&f[a.mustache.id.string])m=n[0],l=(g[m]||g.custom).apply(this,arguments),o=b[0];else for(i=0;ii;i++)o.push("undefined"!=typeof l[i]?l[i]:{}),e.__path.push("[]"),b.unshift(o[o.length-1]),this.gen(a.program,b,e,f,h),e.__path.pop(),b.shift();else this.gen(a.program,b,e,f,h);b.length>p&&b.splice(0,b.length-p)},f.hash=function(a,b,c,d,e){var f,g,h,i=a.pairs;for(g=0;ge;e++)d.__path.push(n[e]),g=n[e],h=n[e-1],m=d[h],i=e===f-1?o[g]:{},j=this.val(g,d,b,i),k=c.type(o[g]),l=c.type(j),"undefined"===k?o[g]=f-1>e&&"object"!==l&&"array"!==l?{}:c.isArray(j)&&[]||j:f-1>e&&"object"!==k&&"array"!==k&&(o[g]=c.isArray(j)&&[]||{}),k=c.type(o[g]),("object"===k||"array"===k)&&(o=o[g],b.unshift(o));else;b.length>p&&b.splice(0,b.length-p)},f.partial=function(a,b,c,d,e){var g=a.partialName.name,h=e&&e[g],i=b.length;h&&f.gen(h,b,c,d,e),b.length>i&&b.splice(0,b.length-i)},f.content=c.noop,f.PARTIAL_NAME=c.noop,f.DATA=c.noop,f.STRING=c.noop,f.INTEGER=c.noop,f.BOOLEAN=c.noop,f.comment=c.noop;var g={};g.each=function(a,b,d){var e,f,g,h,i,j,k,l=b[0];for(i=a.mustache.params[0].parts,e=0,f=i.length;f>e;e++)d.__path.push(i[e]),g=i[e],j=e===f-1?[]:{},h=this.val(g,d,b,j),l[g]=c.isArray(h)&&[]||h,k=c.type(l[g]),("object"===k||"array"===k)&&(l=l[g],b.unshift(l));return h},g["if"]=g.unless=function(a,b,d){var e,f,g,h,i,j,k,l=a.mustache.params,m=b[0];for(e=0;ee;e++)d.__path.push(i[e]),g=i[e],j=e===f-1?[]:{},h=this.val(g,d,b,j),l[g]=c.isArray(h)&&[]||h,k=c.type(l[g]),("object"===k||"array"===k)&&(l=l[g],b.unshift(l));return h}}}.call(this),function(a){if("undefined"!=typeof KISSY){var e,f={debug:!1};KISSY.use("xtemplate",function(a,b){e=b}),this.Mock||(module.exports=f),b.xtpl=function(a,b,c,d){return f.mock(a,b,c,d)},b.xparse=function(a){return e.compiler.parse(a)},f.mock=function(a,b,d,f){return d=d?c.extend({},d,e.RunTime.commands):e.RunTime.commands,f=f?c.extend({},f,e.RunTime.subTpls):e.RunTime.subTpls,this.gen(a,null,b,d,f,{})},f.parse=function(a){return e.compiler.parse(a)},f.gen=function(a,b,d,e,g,h){if("string"==typeof a){f.debug&&console.log("[tpl ]\n",a);var i=this.parse(a);d=this.parseOptions(a,d);var j=this.gen(i,b,d,e,g,h);return j}if(b=b||[{}],d=d||{},a.type=a.type,this[a.type]!==c.noop){d.__path=d.__path||[],f.debug&&(console.log(),console.group("["+a.type+"]",JSON.stringify(a)),console.log("[context]","[before]",b.length,JSON.stringify(b)),console.log("[options]","[before]",d.__path.length,JSON.stringify(d)),console.log("[other ]","[before]",JSON.stringify(h)));var k=d.__path.length;return this[a.type](a,b,d,e,g,h),f.debug&&console.log("[__path ]","[after ]",d.__path),(!h.hold||"function"==typeof h.hold&&!h.hold(a,d,b))&&d.__path.splice(k),f.debug&&(console.log("[context]","[after ]",b.length,JSON.stringify(b)),console.groupEnd()),b[b.length-1]}},f.parseOptions=function(a,b){var d,e,f,g=//g,h=a.match(g),i={};for(d=0;h&&d0)return j[0];if(d in i)return i[d]}return c.isArray(g[0])?{}:h!==a?h:d},f.program=function(a,b,c,d,e,f){for(var g=0;gl;l++)n.push(k&&k[l]!==a?k[l]:{}),f.__path.push(l),e.unshift(n[n.length-1]),this.gen(b.program,e,f,g,h,i),f.__path.pop(),e.shift();else this.gen(b.program,e,f,g,h,i);(!i.hold||"function"==typeof i.hold&&!i.hold(b,f,e))&&e.splice(0,e.length-j)},f.tpl=function(a,b,d,e,f,g){if(a.params&&a.params.length){g=c.extend({},g,{def:{each:[],"if":"@BOOL(2,1,true)",unless:"@BOOL(2,1,false)","with":{}}[a.path.string],hold:{each:!0,"if":function(a,b,c,d,e){return"object"==typeof e},unless:function(a,b,c,d,e){return"object"==typeof e},"with":!0,include:!1}[a.path.string]});for(var h,i=0;i-1?d.float(-Math.pow(10,10),Math.pow(10,10),1,Math.pow(10,6)):d.integer():a}()})),this.gen(b.op2,e,f,g,h,c.extend({},i,{def:function(){return"number"===b.op1.type?b.op1.value.indexOf(".")>-1?d.float(-Math.pow(10,10),Math.pow(10,10),1,Math.pow(10,6)):d.integer():a}()}))},f.relationalExpression=function(a,b,c,d,e,f){this.gen(a.op1,b,c,d,e,f),this.gen(a.op2,b,c,d,e,f)},f.equalityExpression=c.noop,f.conditionalAndExpression=c.noop,f.conditionalOrExpression=c.noop,f.string=c.noop,f.number=c.noop,f.boolean=c.noop,f.hash=function(a,b,c,d,e,f){var g,h=a.value;for(g in h)this.gen(h[g],b,c,d,e,f)},f.id=function(b,d,e,g,h,i){function j(a,b,d,e,f){var g=c.type(a[e]),h=c.type(f);return f="true"===f?!0:"false"===f?!1:f,"undefined"===g?a[e]=d-1>b&&!c.isObjectOrArray(f)?{}:c.isArray(f)&&[]||f:d-1>b&&"object"!==g&&"array"!==g?a[e]=c.isArray(f)&&[]||{}:"object"!==g&&"array"!==g&&"object"!==h&&"array"!==h&&(a[e]=f),a[e]}var k,l,m,n,o,p=d.length,q=b.parts,r=d[b.depth];for(c.isArray(r)&&(r=d[b.depth+1]),k=0,l=q.length;l>k;k++)(0!==k||"this"!==q[k])&&(/^(xindex|xcount|xkey)$/.test(q[k])||0===k&&1===l&&q[k]in g||(e.__path.push(q[k]),m=q[k],n=k===l-1?i.def!==a?i.def:d[0][m]:{},o=this.val(m,e,d,n),f.debug&&(console.log("[def ]",JSON.stringify(n)),console.log("[val ]",JSON.stringify(o))),o=j(r,k,l,m,o),c.isObjectOrArray(r[m])&&d.unshift(r=r[m])));(!i.hold||"function"==typeof i.hold&&!i.hold(b,e,d,m,o))&&d.splice(0,d.length-p)}}}.call(this)}).call(this); -//# sourceMappingURL=dist/mock-min.map +/*! mockjs 22-04-2014 */ +(function(a){var b={version:"0.1.1",_mocked:{}},c=function(){var b={};return b.extend=function(){var c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length;for(1===j&&(h=this,i=0);j>i;i++)if(c=arguments[i])for(d in c)e=h[d],f=c[d],h!==f&&f!==a&&(b.isArray(f)||b.isObject(f)?(b.isArray(f)&&(g=e&&b.isArray(e)?e:[]),b.isObject(f)&&(g=e&&b.isObject(e)?e:{}),h[d]=b.extend(g,f)):h[d]=f);return h},b.each=function(a,b,c){var d,e;if("number"===this.type(a))for(d=0;a>d;d++)b(d,d);else if(a.length===+a.length)for(d=0;d1/(b+c)*b?!d:d):Math.random()>=.5},bool:function(a,b,c){return this.boolean(a,b,c)},natural:function(a,b){return a="undefined"!=typeof a?parseInt(a,10):0,b="undefined"!=typeof b?parseInt(b,10):9007199254740992,Math.round(Math.random()*(b-a))+a},integer:function(a,b){return a="undefined"!=typeof a?parseInt(a,10):-9007199254740992,b="undefined"!=typeof b?parseInt(b,10):9007199254740992,Math.round(Math.random()*(b-a))+a},"int":function(a,b){return this.integer(a,b)},"float":function(b,c,d,e){d=d===a?0:d,d=Math.max(Math.min(d,17),0),e=e===a?17:e,e=Math.max(Math.min(e,17),0);for(var f=this.integer(b,c)+".",g=0,h=this.natural(d,e);h>g;g++)f+=this.character("number");return parseFloat(f,10)},character:function(a){var c={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};return c.alpha=c.lower+c.upper,c.undefined=c.lower+c.upper+c.number+c.symbol,a=c[(""+a).toLowerCase()]||a,a.charAt(b.natural(0,a.length-1))},"char":function(a){return this.character(a)},string:function(c,d,e){var f;3===arguments.length&&(f=b.natural(d,e)),2===arguments.length&&("string"==typeof arguments[0]?f=d:(f=b.natural(c,d),c=a)),1===arguments.length&&(f=c,c=a),0===arguments.length&&(f=b.natural(3,7));for(var g="",h=0;f>h;h++)g+=b.character(c);return g},str:function(a,b,c){return this.string(a,b,c)},range:function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f}}),b.extend({patternLetters:{yyyy:"getFullYear",yy:function(a){return(""+a.getFullYear()).slice(2)},y:"yy",MM:function(a){var b=a.getMonth()+1;return 10>b?"0"+b:b},M:function(a){return a.getMonth()+1},dd:function(a){var b=a.getDate();return 10>b?"0"+b:b},d:"getDate",HH:function(a){var b=a.getHours();return 10>b?"0"+b:b},H:"getHours",hh:function(a){var b=a.getHours()%12;return 10>b?"0"+b:b},h:function(a){return a.getHours()%12},mm:function(a){var b=a.getMinutes();return 10>b?"0"+b:b},m:"getMinutes",ss:function(a){var b=a.getSeconds();return 10>b?"0"+b:b},s:"getSeconds",SS:function(a){var b=a.getMilliseconds();return 10>b&&"00"+b||100>b&&"0"+b||b},S:"getMilliseconds",A:function(a){return a.getHours()<12?"AM":"PM"},a:function(a){return a.getHours()<12?"am":"pm"}}}),b.extend({rformat:new RegExp(function(){var a=[];for(var c in b.patternLetters)a.push(c);return"("+a.join("|")+")"}(),"g"),format:function(a,c){var d=b.patternLetters,e=b.rformat;return c.replace(e,function(b,c){return"function"==typeof d[c]?d[c](a):d[c]in d?arguments.callee(b,d[c]):a[d[c]]()})},randomDate:function(b,c){return b=b===a?new Date(0):b,c=c===a?new Date:c,new Date(Math.random()*(c.getTime()-b.getTime()))},date:function(a){return a=a||"yyyy-MM-dd",this.format(this.randomDate(),a)},time:function(a){return a=a||"HH:mm:ss",this.format(this.randomDate(),a)},datetime:function(a){return a=a||"yyyy-MM-dd HH:mm:ss",this.format(this.randomDate(),a)}}),b.extend({ad_size:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],screen_size:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],video_size:["720x480","768x576","1280x720","1920x1080"],image:function(b,c,d,e,f){return 4===arguments.length&&(f=e,e=a),3===arguments.length&&(f=d,d=a),b||(b=this.pick(this.ad_size)),c&&~c.indexOf("#")&&(c=c.slice(1)),d&&~d.indexOf("#")&&(d=d.slice(1)),"http://dummyimage.com/"+b+(c?"/"+c:"")+(d?"/"+d:"")+(e?"."+e:"")+(f?"&text="+f:"")},img:function(){return this.image.apply(this,arguments)}}),b.extend({brandColors:{"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"},brands:function(){var a=[];for(var b in this.brandColors)a.push(b);return a},dataImageHolder:function(a){return"holder.js/"+a},dataImage:function(b,c){var d="undefined"!=typeof document&&document.createElement("canvas"),e=d&&d.getContext&&d.getContext("2d");if(!d||!e)return"";b||(b=this.pick(this.ad_size)),c=c!==a?c:b,b=b.split("x");var f=parseInt(b[0],10),g=parseInt(b[1],10),h=this.brandColors[this.pick(this.brands())],i="#FFF",j=14,k="sans-serif";return d.width=f,d.height=g,e.textAlign="center",e.textBaseline="middle",e.fillStyle=h,e.fillRect(0,0,f,g),e.fillStyle=i,e.font="bold "+j+"px "+k,e.fillText(c,f/2,g/2,f),d.toDataURL("image/png")}}),b.extend({color:function(){var a=Math.floor(16777215*Math.random()).toString(16);return a="#"+("000000"+a).slice(-6)}}),b.extend({capitalize:function(a){return a.charAt(0).toUpperCase()+a.substr(1)},upper:function(a){return a.toUpperCase()},lower:function(a){return a.toLowerCase()},pick:function(a){return a[this.natural(0,a.length-1)]},shuffle:function(a){for(var b=a.slice(0),c=[],d=0,e=b.length,f=0;e>f;f++)d=this.natural(0,b.length-1),c.push(b[d]),b.splice(d,1);return c}}),b.extend({paragraph:function(a,c){var d;0===arguments.length&&(d=b.natural(3,7)),1===arguments.length&&(d=c=a),2===arguments.length&&(a=parseInt(a,10),c=parseInt(c,10),d=b.natural(a,c));for(var e=[],f=0;d>f;f++)e.push(b.sentence());return e.join(" ")},sentence:function(a,c){var d;0===arguments.length&&(d=b.natural(12,18)),1===arguments.length&&(d=c=a),2===arguments.length&&(a=parseInt(a,10),c=parseInt(c,10),d=b.natural(a,c));for(var e=[],f=0;d>f;f++)e.push(b.word());return b.capitalize(e.join(" "))+"."},word:function(a,c){var d;0===arguments.length&&(d=b.natural(3,10)),1===arguments.length&&(d=c=a),2===arguments.length&&(a=parseInt(a,10),c=parseInt(c,10),d=b.natural(a,c));for(var e="",f=0;d>f;f++)e+=b.character("lower");return e},title:function(a,c){var d,e=[];0===arguments.length&&(d=b.natural(3,7)),1===arguments.length&&(d=c=a),2===arguments.length&&(a=parseInt(a,10),c=parseInt(c,10),d=b.natural(a,c));for(var f=0;d>f;f++)e.push(this.capitalize(this.word()));return e.join(" ")}}),b.extend({first:function(){var a=["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"].concat(["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]);return this.pick(a)},last:function(){var a=["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"];return this.pick(a)},name:function(a){return this.first()+" "+(a?this.first()+" ":"")+this.last()}}),b.extend({url:function(){return"http://"+this.domain()+"/"+this.word()},domain:function(a){return this.word()+"."+(a||this.tld())},email:function(a){return this.character("lower")+"."+this.last().toLowerCase()+"@"+this.last().toLowerCase()+"."+this.tld()},ip:function(){return this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)},tlds:["com","org","edu","gov","co.uk","net","io"],tld:function(){return this.pick(this.tlds)}}),b.extend({areas:["东北","华北","华东","华中","华南","西南","西北"],area:function(){return this.pick(this.areas)},regions:["110000 北京市","120000 天津市","130000 河北省","140000 山西省","150000 内蒙古自治区","210000 辽宁省","220000 吉林省","230000 黑龙江省","310000 上海市","320000 江苏省","330000 浙江省","340000 安徽省","350000 福建省","360000 江西省","370000 山东省","410000 河南省","420000 湖北省","430000 湖南省","440000 广东省","450000 广西壮族自治区","460000 海南省","500000 重庆市","510000 四川省","520000 贵州省","530000 云南省","540000 西藏自治区","610000 陕西省","620000 甘肃省","630000 青海省","640000 宁夏回族自治区","650000 新疆维吾尔自治区","650000 新疆维吾尔自治区","710000 台湾省","810000 香港特别行政区","820000 澳门特别行政区"],region:function(){return this.pick(this.regions).split(" ")[1]},address:function(){},city:function(){},phone:function(){},areacode:function(){},street:function(){},street_suffixes:function(){},street_suffix:function(){},states:function(){},state:function(){},zip:function(a){for(var b="",c=0;(a||6)>c;c++)b+=this.natural(0,9);return b}}),b.extend({todo:function(){return"todo"}}),b.extend({d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){var a="ABCDEF1234567890",b=this.string(a,8)+"-"+this.string(a,4)+"-"+this.string(a,4)+"-"+this.string(a,4)+"-"+this.string(a,12);return b},id:function(){var a,b=0,c=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"],d=["1","0","X","9","8","7","6","5","4","3","2"];a=this.pick(this.regions).split(" ")[0]+this.date("yyyyMMdd")+this.string("number",3);for(var e=0;e1)e=d.pick(h.gen(a.template));else for(b=0;b",g.rurl);var h=b.mock(g.template);return console.log("[mock]",h),e.success&&e.success(h,"success",d),e.complete&&e.complete(h,"success",d),a}}return c.apply(this,arguments)};for(var e in c)a.io[e]=c[e]}),b.Util=c,b.Random=d,b.heredoc=c.heredoc,"object"==typeof module&&module.exports?module.exports=b:"function"==typeof define&&define.amd?define(function(){return b}):"function"==typeof define&&define.cmd&&define(function(){return b}),this.Mock=b,this.Random=d,"undefined"!=typeof KISSY&&c.each(["mock","components/mock/index","mock/dist/mock","gallery/Mock/0.1.1/index","gallery/Mock/0.1.2/index"],function(a){KISSY.add(a,function(a){return b.mockjax(a),b},{requires:["ajax"]})}),function(a){var e={version:"0.0.1"};this.Mock||(module.exports=e),b.tpl=function(a,b,c,d){return e.mock(a,b,c,d)},b.parse=function(a){return Handlebars.parse(a)},e.mock=function(a,b,d,e){return d=d?c.extend({},d,Handlebars.helpers):Handlebars.helpers,e=e?c.extend({},e,Handlebars.partials):Handlebars.partials,f.gen(a,null,b,d,e)};var f={debug:e.debug||!1,extend:c.extend};f.gen=function(a,b,d,g,h){if(c.isString(a)){var i=Handlebars.parse(a);d=f.parseOptions(a,d);var j=f.gen(i,b,d,g,h);return j}if(b=b||[{}],d=d||{},this[a.type]!==c.noop){d.__path=d.__path||[],(e.debug||f.debug)&&(console.log(),console.group("["+a.type+"]",JSON.stringify(a)),console.log("[options]",d.__path.length,JSON.stringify(d)));var k=d.__path.length;return this[a.type](a,b,d,g,h),d.__path.splice(k),(e.debug||f.debug)&&console.groupEnd(),b[b.length-1]}},f.parseOptions=function(a,b){var d,e,f,g=//g,h=a.match(g),i={};for(d=0;h&&di&&b.splice(0,b.length-i)},f.block=function(a,b,e,f,h){var i,j,k,l,m,n=a.mustache.id.parts,o=b[0],p=b.length;if(a.inverse,a.mustache.isHelper||f&&f[a.mustache.id.string])m=n[0],l=(g[m]||g.custom).apply(this,arguments),o=b[0];else for(i=0;ii;i++)o.push("undefined"!=typeof l[i]?l[i]:{}),e.__path.push("[]"),b.unshift(o[o.length-1]),this.gen(a.program,b,e,f,h),e.__path.pop(),b.shift();else this.gen(a.program,b,e,f,h);b.length>p&&b.splice(0,b.length-p)},f.hash=function(a,b,c,d,e){var f,g,h,i=a.pairs;for(g=0;ge;e++)d.__path.push(n[e]),g=n[e],h=n[e-1],m=d[h],i=e===f-1?o[g]:{},j=this.val(g,d,b,i),k=c.type(o[g]),l=c.type(j),"undefined"===k?o[g]=f-1>e&&"object"!==l&&"array"!==l?{}:c.isArray(j)&&[]||j:f-1>e&&"object"!==k&&"array"!==k&&(o[g]=c.isArray(j)&&[]||{}),k=c.type(o[g]),("object"===k||"array"===k)&&(o=o[g],b.unshift(o));else;b.length>p&&b.splice(0,b.length-p)},f.partial=function(a,b,c,d,e){var g=a.partialName.name,h=e&&e[g],i=b.length;h&&f.gen(h,b,c,d,e),b.length>i&&b.splice(0,b.length-i)},f.content=c.noop,f.PARTIAL_NAME=c.noop,f.DATA=c.noop,f.STRING=c.noop,f.INTEGER=c.noop,f.BOOLEAN=c.noop,f.comment=c.noop;var g={};g.each=function(a,b,d){var e,f,g,h,i,j,k,l=b[0];for(i=a.mustache.params[0].parts,e=0,f=i.length;f>e;e++)d.__path.push(i[e]),g=i[e],j=e===f-1?[]:{},h=this.val(g,d,b,j),l[g]=c.isArray(h)&&[]||h,k=c.type(l[g]),("object"===k||"array"===k)&&(l=l[g],b.unshift(l));return h},g["if"]=g.unless=function(a,b,d){var e,f,g,h,i,j,k,l=a.mustache.params,m=b[0];for(e=0;ee;e++)d.__path.push(i[e]),g=i[e],j=e===f-1?[]:{},h=this.val(g,d,b,j),l[g]=c.isArray(h)&&[]||h,k=c.type(l[g]),("object"===k||"array"===k)&&(l=l[g],b.unshift(l));return h}}}.call(this),function(a){if("undefined"!=typeof KISSY){var e,f={debug:!1};KISSY.use("xtemplate",function(a,b){e=b}),this.Mock||(module.exports=f),b.xtpl=function(a,b,c,d){return f.mock(a,b,c,d)},b.xparse=function(a){return e.compiler.parse(a)},f.mock=function(a,b,d,f){return d=d?c.extend({},d,e.RunTime.commands):e.RunTime.commands,f=f?c.extend({},f,e.RunTime.subTpls):e.RunTime.subTpls,this.gen(a,null,b,d,f,{})},f.parse=function(a){return e.compiler.parse(a)},f.gen=function(a,b,d,e,g,h){if("string"==typeof a){f.debug&&console.log("[tpl ]\n",a);var i=this.parse(a);d=this.parseOptions(a,d);var j=this.gen(i,b,d,e,g,h);return j}if(b=b||[{}],d=d||{},a.type=a.type,this[a.type]!==c.noop){d.__path=d.__path||[],f.debug&&(console.log(),console.group("["+a.type+"]",JSON.stringify(a)),console.log("[context]","[before]",b.length,JSON.stringify(b)),console.log("[options]","[before]",d.__path.length,JSON.stringify(d)),console.log("[other ]","[before]",JSON.stringify(h)));var k=d.__path.length;return this[a.type](a,b,d,e,g,h),f.debug&&console.log("[__path ]","[after ]",d.__path),(!h.hold||"function"==typeof h.hold&&!h.hold(a,d,b))&&d.__path.splice(k),f.debug&&(console.log("[context]","[after ]",b.length,JSON.stringify(b)),console.groupEnd()),b[b.length-1]}},f.parseOptions=function(a,b){var d,e,f,g=//g,h=a.match(g),i={};for(d=0;h&&d0)return j[0];if(d in i)return i[d]}return c.isArray(g[0])?{}:h!==a?h:d},f.program=function(a,b,c,d,e,f){for(var g=0;gl;l++)n.push(k&&k[l]!==a?k[l]:{}),f.__path.push(l),e.unshift(n[n.length-1]),this.gen(b.program,e,f,g,h,i),f.__path.pop(),e.shift();else this.gen(b.program,e,f,g,h,i);(!i.hold||"function"==typeof i.hold&&!i.hold(b,f,e))&&e.splice(0,e.length-j)},f.tpl=function(a,b,d,e,f,g){if(a.params&&a.params.length){g=c.extend({},g,{def:{each:[],"if":"@BOOL(2,1,true)",unless:"@BOOL(2,1,false)","with":{}}[a.path.string],hold:{each:!0,"if":function(a,b,c,d,e){return"object"==typeof e},unless:function(a,b,c,d,e){return"object"==typeof e},"with":!0,include:!1}[a.path.string]});for(var h,i=0;i-1?d.float(-Math.pow(10,10),Math.pow(10,10),1,Math.pow(10,6)):d.integer():a}()})),this.gen(b.op2,e,f,g,h,c.extend({},i,{def:function(){return"number"===b.op1.type?b.op1.value.indexOf(".")>-1?d.float(-Math.pow(10,10),Math.pow(10,10),1,Math.pow(10,6)):d.integer():a}()}))},f.relationalExpression=function(a,b,c,d,e,f){this.gen(a.op1,b,c,d,e,f),this.gen(a.op2,b,c,d,e,f)},f.equalityExpression=c.noop,f.conditionalAndExpression=c.noop,f.conditionalOrExpression=c.noop,f.string=c.noop,f.number=c.noop,f.boolean=c.noop,f.hash=function(a,b,c,d,e,f){var g,h=a.value;for(g in h)this.gen(h[g],b,c,d,e,f)},f.id=function(b,d,e,g,h,i){function j(a,b,d,e,f){var g=c.type(a[e]),h=c.type(f);return f="true"===f?!0:"false"===f?!1:f,"undefined"===g?a[e]=d-1>b&&!c.isObjectOrArray(f)?{}:c.isArray(f)&&[]||f:d-1>b&&"object"!==g&&"array"!==g?a[e]=c.isArray(f)&&[]||{}:"object"!==g&&"array"!==g&&"object"!==h&&"array"!==h&&(a[e]=f),a[e]}var k,l,m,n,o,p=d.length,q=b.parts,r=d[b.depth];for(c.isArray(r)&&(r=d[b.depth+1]),k=0,l=q.length;l>k;k++)(0!==k||"this"!==q[k])&&(/^(xindex|xcount|xkey)$/.test(q[k])||0===k&&1===l&&q[k]in g||(e.__path.push(q[k]),m=q[k],n=k===l-1?i.def!==a?i.def:d[0][m]:{},o=this.val(m,e,d,n),f.debug&&(console.log("[def ]",JSON.stringify(n)),console.log("[val ]",JSON.stringify(o))),o=j(r,k,l,m,o),c.isObjectOrArray(r[m])&&d.unshift(r=r[m])));(!i.hold||"function"==typeof i.hold&&!i.hold(b,e,d,m,o))&&d.splice(0,d.length-p)}}}.call(this)}).call(this); +//# sourceMappingURL=dist/mock-min.map \ No newline at end of file diff --git a/WebContent/tcom/template.rap.vm b/WebContent/tcom/template.rap.vm index 466dd5ac6..ab8475ec2 100644 --- a/WebContent/tcom/template.rap.vm +++ b/WebContent/tcom/template.rap.vm @@ -32,6 +32,7 @@ #end
  • 测试
  • 文档
  • + #if($isLogined)
  • @@ -42,9 +43,7 @@
  • - + #end #if ($curUser)
    @@ -55,10 +54,9 @@
  • 我的主页
  • 个人信息
  • -
  • 退出
  • +
  • 退出
  • -
  • 注销
  • #elseif(!$loginCtlHidden) @@ -107,13 +105,12 @@ -
  • diff --git a/WebContent/workspace/myWorkspace.vm b/WebContent/workspace/myWorkspace.vm index 02472ce12..d9003bddf 100644 --- a/WebContent/workspace/myWorkspace.vm +++ b/WebContent/workspace/myWorkspace.vm @@ -10,7 +10,7 @@ - #bodyStart(true) + #bodyNewStart(true)