Comparing version 0.1.2 to 0.1.4
@@ -17,6 +17,10 @@ { | ||
"devDependencies": { | ||
"jquery": "~2.0.3", | ||
"bootstrap": "~3.0.3", | ||
"codemirror": "~3.20.0" | ||
"jquery": "~2.1.1", | ||
"bootstrap": "", | ||
"codemirror": "~3.20.0", | ||
"highlightjs": "~8.0.0", | ||
"kissy": "~1.4.3", | ||
"seajs": "*", | ||
"js-beautify": "~1.5.1" | ||
} | ||
} |
# Changelog | ||
### 2014.6.18 V0.1.4 | ||
1. [!] 修复 #14 0.1.1版本试了好像jq1.10可以,1.11下$.ajax拦截没反应 | ||
2. [!] 修复 #22 异步加载js文件的时候发现问题 | ||
3. [!] 修复 #23 Mock.mockjax 导致 $.getScript 不执行回调 | ||
4. [!] 修复 #24 Window Firefox 30.0 引用 占位符 抛错 | ||
5. [!] 修复 #25 改变了非函数属性的顺序,查找起来不方便 | ||
6. [!] 修复 #26 生成规则 支持 负数 number|-100-+100 | ||
7. [!] 修复 #27 数据模板编辑器 格式化(Tidy) 时会丢掉 函数属性 | ||
8. [+] 数据模板编辑器 增加了 编辑区 和 生成结果区 的同步滚动 | ||
9. [!] test/nodeuinit > test/nodeunit | ||
### 2014.5.26 V0.1.3 | ||
1. [!] 修复 #21 | ||
### 2014.5.26 V0.1.2 | ||
1. [!] 重构 Mock.mockjax() | ||
2. [!] 更新 package.json/devDependencies | ||
3. [+] 增加 懒懒交流会 PPT | ||
### 2014.5.9 V0.1.2 | ||
@@ -4,0 +26,0 @@ 1. [+] 支持 [`Mock.mock(rurl, rtype, template)`](http://mockjs.com/#mock) |
@@ -1,3 +0,3 @@ | ||
/*! mockjs 13-05-2014 19:33:58 */ | ||
(function(undefined){var Mock={version:"0.1.2",_mocked:{}},Util=function(){var a={};return a.extend=function(){var b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length;for(1===i&&(g=this,h=0);i>h;h++)if(b=arguments[h])for(c in b)d=g[c],e=b[c],g!==e&&e!==undefined&&(a.isArray(e)||a.isObject(e)?(a.isArray(e)&&(f=d&&a.isArray(d)?d:[]),a.isObject(e)&&(f=d&&a.isObject(d)?d:{}),g[c]=a.extend(f,e)):g[c]=e);return g},a.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;d<a.length&&b.call(c,a[d],d,a)!==!1;d++);else for(e in a)if(b.call(c,a[e],e,a)===!1)break},a.type=function(a){return null===a||a===undefined?String(a):Object.prototype.toString.call(a).match(/\[object (\w+)\]/)[1].toLowerCase()},a.each("String Object Array RegExp Function".split(" "),function(b){a["is"+b]=function(c){return a.type(c)===b.toLowerCase()}}),a.isObjectOrArray=function(b){return a.isObject(b)||a.isArray(b)},a.isNumeric=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},a.keys=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b},a.values=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(a[c]);return b},a.heredoc=function(a){return a.toString().replace(/^[^\/]+\/\*!?/,"").replace(/\*\/[^\/]+$/,"").replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")},a.noop=function(){},a}(),Random=function(){var a={extend:Util.extend};return a.extend({"boolean":function(a,b,c){return c!==undefined?(a="undefined"==typeof a||isNaN(a)?1:parseInt(a,10),b="undefined"==typeof b||isNaN(b)?1:parseInt(b,10),Math.random()>1/(a+b)*a?!c:c):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(a,b,c,d){c=c===undefined?0:c,c=Math.max(Math.min(c,17),0),d=d===undefined?17:d,d=Math.max(Math.min(d,17),0);for(var e=this.integer(a,b)+".",f=0,g=this.natural(c,d);g>f;f++)e+=this.character("number");return parseFloat(e,10)},character:function(b){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,b=c[(""+b).toLowerCase()]||b,b.charAt(a.natural(0,b.length-1))},"char":function(a){return this.character(a)},string:function(b,c,d){var e;3===arguments.length&&(e=a.natural(c,d)),2===arguments.length&&("string"==typeof arguments[0]?e=c:(e=a.natural(b,c),b=undefined)),1===arguments.length&&(e=b,b=undefined),0===arguments.length&&(e=a.natural(3,7));for(var f="",g=0;e>g;g++)f+=a.character(b);return f},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,a=+a,b=+b,c=+c;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}}),a.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"},T:"getTime"}}),a.extend({rformat:new RegExp(function(){var b=[];for(var c in a.patternLetters)b.push(c);return"("+b.join("|")+")"}(),"g"),format:function(b,c){var d=a.patternLetters,e=a.rformat;return c.replace(e,function(a,c){return"function"==typeof d[c]?d[c](b):d[c]in d?arguments.callee(a,d[c]):b[d[c]]()})},randomDate:function(a,b){return a=a===undefined?new Date(0):a,b=b===undefined?new Date:b,new Date(Math.random()*(b.getTime()-a.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)},now:function(a,b){1===arguments.length&&(/year|month|week|day|hour|minute|second|week/.test(a)||(b=a,a="")),a=(a||"").toLowerCase(),b=b||"yyyy-MM-dd HH:mm:ss";var c=new Date;switch(a){case"year":c.setMonth(0);case"month":c.setDate(1);case"week":case"day":c.setHours(0);case"hour":c.setMinutes(0);case"minute":c.setSeconds(0);case"second":c.setMilliseconds(0)}switch(a){case"week":c.setDate(c.getDate()-c.getDay())}return this.format(c,b)}}),a.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(a,b,c,d,e){return 4===arguments.length&&(e=d,d=undefined),3===arguments.length&&(e=c,c=undefined),a||(a=this.pick(this.ad_size)),b&&~b.indexOf("#")&&(b=b.slice(1)),c&&~c.indexOf("#")&&(c=c.slice(1)),"http://dummyimage.com/"+a+(b?"/"+b:"")+(c?"/"+c:"")+(d?"."+d:"")+(e?"&text="+e:"")},img:function(){return this.image.apply(this,arguments)}}),a.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},dataImage:function(a,b){var c="undefined"!=typeof document&&document.createElement("canvas"),d=c&&c.getContext&&c.getContext("2d");if(!c||!d)return"";a||(a=this.pick(this.ad_size)),b=b!==undefined?b:a,a=a.split("x");var e=parseInt(a[0],10),f=parseInt(a[1],10),g=this.brandColors[this.pick(this.brands())],h="#FFF",i=14,j="sans-serif";return c.width=e,c.height=f,d.textAlign="center",d.textBaseline="middle",d.fillStyle=g,d.fillRect(0,0,e,f),d.fillStyle=h,d.font="bold "+i+"px "+j,d.fillText(b,e/2,f/2,e),c.toDataURL("image/png")}}),a.extend({color:function(){var a=Math.floor(16777215*Math.random()).toString(16);return a="#"+("000000"+a).slice(-6)}}),a.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=a||[],a[this.natural(0,a.length-1)]},shuffle:function(a){a=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}}),a.extend({paragraph:function(b,c){var d;0===arguments.length&&(d=a.natural(3,7)),1===arguments.length&&(d=c=b),2===arguments.length&&(b=parseInt(b,10),c=parseInt(c,10),d=a.natural(b,c));for(var e=[],f=0;d>f;f++)e.push(a.sentence());return e.join(" ")},sentence:function(b,c){var d;0===arguments.length&&(d=a.natural(12,18)),1===arguments.length&&(d=c=b),2===arguments.length&&(b=parseInt(b,10),c=parseInt(c,10),d=a.natural(b,c));for(var e=[],f=0;d>f;f++)e.push(a.word());return a.capitalize(e.join(" "))+"."},word:function(b,c){var d;0===arguments.length&&(d=a.natural(3,10)),1===arguments.length&&(d=c=b),2===arguments.length&&(b=parseInt(b,10),c=parseInt(c,10),d=a.natural(b,c));for(var e="",f=0;d>f;f++)e+=a.character("lower");return e},title:function(b,c){var d,e=[];0===arguments.length&&(d=a.natural(3,7)),1===arguments.length&&(d=c=b),2===arguments.length&&(b=parseInt(b,10),c=parseInt(c,10),d=a.natural(b,c));for(var f=0;d>f;f++)e.push(this.capitalize(this.word()));return e.join(" ")}}),a.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()}}),a.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)}}),a.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}}),a.extend({todo:function(){return"todo"}}),a.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;e<a.length;e++)b+=a[e]*c[e];return a+=d[b%11]},autoIncrementInteger:0,increment:function(a){return this.autoIncrementInteger+=+a||1},inc:function(a){return this.increment(a)}}),a}(),rkey=/(.+)\|(?:\+(\d+)|(\d+-?\d*)?(?:\.(\d+-?\d*))?)/,rrange=/(\d+)-?(\d+)?/,rplaceholder=/\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g;Mock.extend=Util.extend,Mock.mock=function(a,b,c){return 1===arguments.length?Handle.gen(a):(2===arguments.length&&(c=b,b=undefined),Mock._mocked[a+(b||"")]={rurl:a,rtype:b,template:c},Mock)};var Handle={extend:Util.extend};Handle.rule=function(a){a=(a||"")+"";var b=(a||"").match(rkey),c=b&&b[3]&&b[3].match(rrange),d=c&&parseInt(c[1],10),e=c&&parseInt(c[2],10),f=c?!c[2]&&parseInt(c[1],10)||Random.integer(d,e):1,g=b&&b[4]&&b[4].match(rrange),h=g&&parseInt(g[1],10),i=g&&parseInt(g[2],10),j=g?!g[2]&&parseInt(g[1],10)||Random.integer(h,i):0,k=b&&b[4];return{parameters:b,range:c,min:d,max:e,count:f,decimal:g,dmin:h,dmax:i,dcount:j,point:k}},Handle.gen=function(a,b,c){b=b=(b||"")+"",c=c||{},c={path:c.path||[],templatePath:c.templatePath||[],currentContext:c.currentContext,templateCurrentContext:c.templateCurrentContext||a,root:c.root,templateRoot:c.templateRoot};var d=Handle.rule(b),e=Util.type(a);return Handle[e]?Handle[e]({type:e,template:a,name:b,parsedName:b?b.replace(rkey,"$1"):b,rule:d,context:c}):a},Handle.extend({array:function(a){var b,c,d=[];if(a.rule.parameters)if(1===a.rule.count&&a.template.length>1)a.context.path.push(a.name),d=Random.pick(Handle.gen(a.template,undefined,{currentContext:d,templateCurrentContext:a.template,path:a.context.path})),a.context.path.pop();else for(b=0;b<a.rule.count;b++){c=0;do d.push(Handle.gen(a.template[c++]));while(c<a.template.length)}else for(b=0;b<a.template.length;b++)a.context.path.push(b),d.push(Handle.gen(a.template[b],b,{currentContext:d,templateCurrentContext:a.template,path:a.context.path})),a.context.path.pop();return d},object:function(a){var b,c,d,e,f,g={};if(a.rule.min)for(b=Util.keys(a.template),b=Random.shuffle(b),b=b.slice(0,a.rule.count),f=0;f<b.length;f++)c=b[f],d=c.replace(rkey,"$1"),a.context.path.push(d),g[d]=Handle.gen(a.template[c],c,{currentContext:g,templateCurrentContext:a.template,path:a.context.path}),a.context.path.pop();else for(c in a.template)d=c.replace(rkey,"$1"),a.context.path.push(d),g[d]=Handle.gen(a.template[c],c,{currentContext:g,templateCurrentContext:a.template,path:a.context.path}),a.context.path.pop(),e=c.match(rkey),e&&e[2]&&"number"===Util.type(a.template[c])&&(a.template[c]+=parseInt(e[2],10));return g},number:function(a){var b,c,d;if(a.rule.point){for(a.template+="",c=a.template.split("."),c[0]=a.rule.range?a.rule.count:c[0],c[1]=(c[1]||"").slice(0,a.rule.dcount),d=0;c[1].length<a.rule.dcount;d++)c[1]+=Random.character("number");b=parseFloat(c.join("."),10)}else b=a.rule.range&&!a.rule.parameters[2]?a.rule.count:a.template;return b},"boolean":function(a){var b;return b=a.rule.parameters?Random.bool(a.rule.min,a.rule.max,a.template):a.template},string:function(a){var b,c,d,e,f="";if(a.template.length){for(b=0;b<a.rule.count;b++)f+=a.template;for(c=f.match(rplaceholder)||[],b=0;b<c.length;b++)if(d=c[b],/^\\/.test(d))c.splice(b--,1);else{if(e=Handle.placeholder(d,a.context.currentContext,a.context.templateCurrentContext),1===c.length&&d===f&&typeof e!=typeof f){f=e;break}f=f.replace(d,e)}}else f=a.rule.range?Random.string(a.rule.count):a.template;return f},"function":function(a){return a.template.call(a.context.currentContext)}}),Handle.extend({_all:function(){var a={};for(var b in Random)a[b.toLowerCase()]=b;return a},placeholder:function(placeholder,obj,templateContext){rplaceholder.exec("");var parts=rplaceholder.exec(placeholder),key=parts&&parts[1],lkey=key&&key.toLowerCase(),okey=this._all()[lkey],params=parts&&parts[2]||"";try{eval("!function(){ params = [].splice.call(arguments, 0 ) }("+params+")")}catch(e){params=parts[2].split(/,\s*/)}if(obj&&key in obj)return obj[key];if(templateContext&&"object"==typeof templateContext&&key in templateContext&&placeholder!==templateContext[key])return templateContext[key]=Handle.gen(templateContext[key],key,{currentContext:obj,templateCurrentContext:templateContext}),templateContext[key];if(!(key in Random||lkey in Random||okey in Random))return placeholder;for(var i=0;i<params.length;i++)rplaceholder.exec(""),rplaceholder.test(params[i])&&(params[i]=Handle.placeholder(params[i],obj));var handle=Random[key]||Random[lkey]||Random[okey];switch(Util.type(handle)){case"array":return Random.pick(handle);case"function":var re=handle.apply(Random,params);return re===undefined&&(re=""),re}}}),Mock.mockjax=function(a){function b(){return{open:a.noop,send:a.noop,getAllResponseHeaders:a.noop,readyState:4,status:200}}function c(b,c){return function(){return a.isFunction(b.template)?b.template(c):Mock.mock(b.template)}}function d(d){function e(b,c){return"string"===a.type(b)?b===c:"regexp"===a.type(b)?b.test(c):void 0}for(var f in Mock._mocked){var g=Mock._mocked[f];if(!(g.rurl&&!e(g.rurl,d.url)||g.rtype&&!e(g.rtype,d.type.toLowerCase()))){d.dataFilter=c(g,d),d.converters["text json"]=c(g,d),d.converters["text jsonp"]=c(g,d),d.xhr=b;break}}}return a.ajaxPrefilter("json",d),a.ajaxPrefilter("jsonp",d),Mock},"undefined"!=typeof jQuery&&Mock.mockjax(jQuery),"undefined"!=typeof Zepto&&(Mock.mockjax=function(a){var b=a.ajax,c={readyState:4,responseText:"",responseXML:null,state:2,status:200,statusText:"success",timeoutTimer:null};a.ajax=function(d){for(var e in Mock._mocked){var f=Mock._mocked[e];if(("string"!==a.type(f.rurl)||f.rurl===d.url)&&("regexp"!==a.type(f.rurl)||f.rurl.test(d.url))){console.log("[mock]",d.url,">",f.rurl);var g=Mock.mock(f.template);return console.log("[mock]",g),d.success&&d.success(g,c,d),d.complete&&d.complete(c.status,c,d),c}}return b.call(a,d)}},Mock.mockjax(Zepto)),"undefined"!=typeof KISSY&&KISSY.add&&(Mock.mockjax=function(a){var b=a.io,c={readyState:4,responseText:"",responseXML:null,state:2,status:200,statusText:"success",timeoutTimer:null};a.io=function(d){for(var e in Mock._mocked){var f=Mock._mocked[e];if(("string"!==a.type(f.rurl)||f.rurl===d.url)&&("regexp"!==a.type(f.rurl)||f.rurl.test(d.url))){console.log("[mock]",d.url,">",f.rurl);var g=Mock.mock(f.template);return console.log("[mock]",g),d.success&&d.success(g,"success",c),d.complete&&d.complete(g,"success",c),a}}return b.apply(this,arguments)};for(var d in b)a.io[d]=b[d]}),Mock.Util=Util,Mock.Random=Random,Mock.heredoc=Util.heredoc,"object"==typeof module&&module.exports?module.exports=Mock:"function"==typeof define&&define.amd?define(function(){return Mock}):"function"==typeof define&&define.cmd&&define(function(){return Mock}),this.Mock=Mock,this.Random=Random,"undefined"!=typeof KISSY&&Util.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 Mock.mockjax(a),Mock},{requires:["ajax"]})}),function(a){var b={version:"0.0.1"};this.Mock||(module.exports=b),Mock.tpl=function(a,c,d,e){return b.mock(a,c,d,e)},Mock.parse=function(a){return Handlebars.parse(a)},b.mock=function(a,b,d,e){return d=d?Util.extend({},d,Handlebars.helpers):Handlebars.helpers,e=e?Util.extend({},e,Handlebars.partials):Handlebars.partials,c.gen(a,null,b,d,e)};var c={debug:b.debug||!1,extend:Util.extend};c.gen=function(a,d,e,f,g){if(Util.isString(a)){var h=Handlebars.parse(a);e=c.parseOptions(a,e);var i=c.gen(h,d,e,f,g);return i}if(d=d||[{}],e=e||{},this[a.type]!==Util.noop){e.__path=e.__path||[],(b.debug||c.debug)&&(console.log(),console.group("["+a.type+"]",JSON.stringify(a)),console.log("[options]",e.__path.length,JSON.stringify(e)));var j=e.__path.length;return this[a.type](a,d,e,f,g),e.__path.splice(j),(b.debug||c.debug)&&console.groupEnd(),d[d.length-1]}},c.parseOptions=function(a,b){var c,d,e,f=/<!--\s*\n*Mock\s*\n*([\w\W]+?)\s*\n*-->/g,g=a.match(f),h={};for(c=0;g&&c<g.length;c++)f.lastIndex=0,d=f.exec(g[c]),d&&(e=new Function("return "+d[1]),e=e(),Util.extend(h,e));return Util.extend(h,b)},c.val=function(d,e,f,g){if(d!==e.__path[e.__path.length-1])throw new Error(d+"!=="+e.__path);if((b.debug||c.debug)&&console.log("[options]",d,e.__path),g!==a&&(g=Mock.mock(g)),e){var h=Mock.mock(e);if(Util.isString(h))return h;if(d in h)return h[d]}return Util.isArray(f[0])?{}:g!==a?g:d||Random.word()},c.program=function(a,b,c,d,e){for(var f=0;f<a.statements.length;f++)this.gen(a.statements[f],b,c,d,e)},c.mustache=function(a,b,c,d,e){var f,g=b[0],h=b.length;if("array"===Util.type(g)&&(g.push({}),g=g[g.length-1],b.unshift(g)),a.isHelper||d&&d[a.id.string]){if(0===a.params.length);else for(f=0;f<a.params.length;f++)this.gen(a.params[f],b,c,d,e);a.hash&&this.gen(a.hash,b,c,d,e)}else this.gen(a.id,b,c,d,e);b.length>h&&b.splice(0,b.length-h)},c.block=function(a,b,c,e,f){var g,h,i,j,k,l=a.mustache.id.parts,m=b[0],n=b.length;if(a.inverse,a.mustache.isHelper||e&&e[a.mustache.id.string])k=l[0],j=(d[k]||d.custom).apply(this,arguments),m=b[0];else for(g=0;g<l.length;g++)c.__path.push(l[g]),i=l[g],j=this.val(i,c,b,{}),m[i]=Util.isArray(j)&&[]||j,k=Util.type(m[i]),("object"===k||"array"===k)&&(m=m[i],b.unshift(m));if(a.program)if("array"===Util.type(m))for(h=j.length||Random.integer(3,7),g=0;h>g;g++)m.push("undefined"!=typeof j[g]?j[g]:{}),c.__path.push("[]"),b.unshift(m[m.length-1]),this.gen(a.program,b,c,e,f),c.__path.pop(),b.shift();else this.gen(a.program,b,c,e,f);b.length>n&&b.splice(0,b.length-n)},c.hash=function(a,b,c,d,e){var f,g,h,i=a.pairs;for(g=0;g<i.length;g++)for(f=i[g],h=1;h<f.length;h++)this.gen(f[h],b,c,d,e)},c.ID=function(a,b,c){var d,e,f,g,h,i,j,k,l,m=a.parts,n=b[a.depth],o=b.length;if(Util.isArray(n)&&(n=b[a.depth+1]),m.length)for(d=0,e=m.length;e>d;d++)c.__path.push(m[d]),f=m[d],g=m[d-1],l=c[g],h=d===e-1?n[f]:{},i=this.val(f,c,b,h),j=Util.type(n[f]),k=Util.type(i),"undefined"===j?n[f]=e-1>d&&"object"!==k&&"array"!==k?{}:Util.isArray(i)&&[]||i:e-1>d&&"object"!==j&&"array"!==j&&(n[f]=Util.isArray(i)&&[]||{}),j=Util.type(n[f]),("object"===j||"array"===j)&&(n=n[f],b.unshift(n));else;b.length>o&&b.splice(0,b.length-o)},c.partial=function(a,b,d,e,f){var g=a.partialName.name,h=f&&f[g],i=b.length;h&&c.gen(h,b,d,e,f),b.length>i&&b.splice(0,b.length-i)},c.content=Util.noop,c.PARTIAL_NAME=Util.noop,c.DATA=Util.noop,c.STRING=Util.noop,c.INTEGER=Util.noop,c.BOOLEAN=Util.noop,c.comment=Util.noop;var d={};d.each=function(a,b,c){var d,e,f,g,h,i,j,k=b[0];for(h=a.mustache.params[0].parts,d=0,e=h.length;e>d;d++)c.__path.push(h[d]),f=h[d],i=d===e-1?[]:{},g=this.val(f,c,b,i),k[f]=Util.isArray(g)&&[]||g,j=Util.type(k[f]),("object"===j||"array"===j)&&(k=k[f],b.unshift(k));return g},d["if"]=d.unless=function(a,b,c){var d,e,f,g,h,i,j,k=a.mustache.params,l=b[0];for(d=0;d<k.length;d++)for(h=k[d].parts,e=0;e<h.length;e++)0===d&&c.__path.push(h[e]),f=h[e],i=e===h.length-1?"@BOOL(2,1,true)":{},g=this.val(f,c,b,i),e===h.length-1&&(g="true"===g?!0:"false"===g?!1:g),l[f]=Util.isArray(g)?[]:g,j=Util.type(l[f]),("object"===j||"array"===j)&&(l=l[f],b.unshift(l));return g},d["with"]=function(a,b,c){var d,e,f,g,h,i=b[0];for(g=a.mustache.params[0].parts,d=0;d<g.length;d++)c.__path.push(g[d]),e=g[d],h={},f=this.val(e,c,b,h),i=i[e]=f,b.unshift(i);return f},d.log=function(){},d.custom=function(a,b,c){var d,e,f,g,h,i,j,k=b[0];if(0!==a.mustache.params.length){for(h=a.mustache.params[0].parts,d=0,e=h.length;e>d;d++)c.__path.push(h[d]),f=h[d],i=d===e-1?[]:{},g=this.val(f,c,b,i),k[f]=Util.isArray(g)&&[]||g,j=Util.type(k[f]),("object"===j||"array"===j)&&(k=k[f],b.unshift(k));return g}}}.call(this),function(a){if("undefined"!=typeof KISSY){var b,c={debug:!1};KISSY.use("xtemplate",function(a,c){b=c}),this.Mock||(module.exports=c),Mock.xtpl=function(a,b,d,e){return c.mock(a,b,d,e)},Mock.xparse=function(a){return b.compiler.parse(a)},c.mock=function(a,c,d,e){return d=d?Util.extend({},d,b.RunTime.commands):b.RunTime.commands,e=e?Util.extend({},e,b.RunTime.subTpls):b.RunTime.subTpls,this.gen(a,null,c,d,e,{})},c.parse=function(a){return b.compiler.parse(a)},c.gen=function(a,b,d,e,f,g){if("string"==typeof a){c.debug&&console.log("[tpl ]\n",a);var h=this.parse(a);d=this.parseOptions(a,d);var i=this.gen(h,b,d,e,f,g);return i}if(b=b||[{}],d=d||{},a.type=a.type,this[a.type]!==Util.noop){d.__path=d.__path||[],c.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(g)));var j=d.__path.length;return this[a.type](a,b,d,e,f,g),c.debug&&console.log("[__path ]","[after ]",d.__path),(!g.hold||"function"==typeof g.hold&&!g.hold(a,d,b))&&d.__path.splice(j),c.debug&&(console.log("[context]","[after ]",b.length,JSON.stringify(b)),console.groupEnd()),b[b.length-1]}},c.parseOptions=function(a,b){var c,d,e,f=/<!--\s*\n*Mock\s*\n*([\w\W]+?)\s*\n*-->/g,g=a.match(f),h={};for(c=0;g&&c<g.length;c++)f.lastIndex=0,d=f.exec(g[c]),d&&(e=new Function("return "+d[1]),e=e(),Util.extend(h,e));return Util.extend(h,b)},c.parseVal=function(a,b){function c(a,b){if("object"==typeof b&&a in b)return[b[a]];for(var c=[],d=0;d<b.length;d++)c.push.apply(c,e(a,[b[d]]));return c}function d(a,b){if("object"==typeof b&&a in b)return[b[a]];var c=[];for(var d in b)c.push.apply(c,e(a,[b[d]]));return c}function e(a,b){for(var e=[],f=0;f<b.length;f++)"object"==typeof b[f]&&(a in b[f]?e.push(b[f][a]):e.push.apply(e,Util.isArray(b[f])?c(a,b[f]):d(a,b[f])));return e}function f(a,b){for(var c="string"==typeof a?a.split("."):a.slice(0),d=[b];c.length;)d=e(c.shift(),d);return d}return f(a,b)},c.val=function(b,d,e,f){if(b!==d.__path[d.__path.length-1])throw new Error(b+"!=="+d.__path);if(f!==a&&(f=Mock.mock(f)),d){var g=Mock.mock(d);if(Util.isString(g))return g;var h=c.parseVal(d.__path,g);if(h.length>0)return h[0];if(b in g)return g[b]}return Util.isArray(e[0])?{}:f!==a?f:b},c.program=function(a,b,c,d,e,f){for(var g=0;g<a.statements.length;g++)this.gen(a.statements[g],b,c,d,e,f);for(var h=0;a.inverse&&h<a.inverse.length;h++)this.gen(a.inverse[h],b,c,d,e,f)},c.block=function(b,c,d,e,f,g){var h=c.length;this.gen(b.tpl,c,d,e,f,Util.extend({},g,{def:{},hold:!0}));var i,j,k,l=c[0];if("array"===Util.type(l))for(i=this.val(d.__path[d.__path.length-1],d,c),k=i&&i.length||Random.integer(3,7),j=0;k>j;j++)l.push(i&&i[j]!==a?i[j]:{}),d.__path.push(j),c.unshift(l[l.length-1]),this.gen(b.program,c,d,e,f,g),d.__path.pop(),c.shift();else this.gen(b.program,c,d,e,f,g);(!g.hold||"function"==typeof g.hold&&!g.hold(b,d,c))&&c.splice(0,c.length-h)},c.tpl=function(a,b,c,d,e,f){if(a.params&&a.params.length){f=Util.extend({},f,{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 g,h=0;h<a.params.length;h++)g="include"===a.path.string?e&&e[a.params[h].value]:a.params[h],g&&this.gen(g,b,c,d,e,f);a.hash&&this.gen(a.hash,b,c,d,e,f)}else this.gen(a.path,b,c,d,e,f)},c.tplExpression=function(a,b,c,d,e,f){this.gen(a.expression,b,c,d,e,f)},c.content=Util.noop,c.unaryExpression=Util.noop,c.multiplicativeExpression=c.additiveExpression=function(b,c,d,e,f,g){this.gen(b.op1,c,d,e,f,Util.extend({},g,{def:function(){return"number"===b.op2.type?b.op2.value.indexOf(".")>-1?Random.float(-Math.pow(10,10),Math.pow(10,10),1,Math.pow(10,6)):Random.integer():a}()})),this.gen(b.op2,c,d,e,f,Util.extend({},g,{def:function(){return"number"===b.op1.type?b.op1.value.indexOf(".")>-1?Random.float(-Math.pow(10,10),Math.pow(10,10),1,Math.pow(10,6)):Random.integer():a}()}))},c.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)},c.equalityExpression=Util.noop,c.conditionalAndExpression=Util.noop,c.conditionalOrExpression=Util.noop,c.string=Util.noop,c.number=Util.noop,c.boolean=Util.noop,c.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)},c.id=function(b,d,e,f,g,h){function i(a,b,c,d,e){var f=Util.type(a[d]),g=Util.type(e);return e="true"===e?!0:"false"===e?!1:e,"undefined"===f?a[d]=c-1>b&&!Util.isObjectOrArray(e)?{}:Util.isArray(e)&&[]||e:c-1>b&&"object"!==f&&"array"!==f?a[d]=Util.isArray(e)&&[]||{}:"object"!==f&&"array"!==f&&"object"!==g&&"array"!==g&&(a[d]=e),a[d]}var j,k,l,m,n,o=d.length,p=b.parts,q=d[b.depth];for(Util.isArray(q)&&(q=d[b.depth+1]),j=0,k=p.length;k>j;j++)(0!==j||"this"!==p[j])&&(/^(xindex|xcount|xkey)$/.test(p[j])||0===j&&1===k&&p[j]in f||(e.__path.push(p[j]),l=p[j],m=j===k-1?h.def!==a?h.def:d[0][l]:{},n=this.val(l,e,d,m),c.debug&&(console.log("[def ]",JSON.stringify(m)),console.log("[val ]",JSON.stringify(n))),n=i(q,j,k,l,n),Util.isObjectOrArray(q[l])&&d.unshift(q=q[l])));(!h.hold||"function"==typeof h.hold&&!h.hold(b,e,d,l,n))&&d.splice(0,d.length-o)}}}.call(this)}).call(this); | ||
/*! mockjs 18-06-2014 04:36:07 */ | ||
(function(undefined){function find(a){function b(a,b){return"string"===Util.type(a)?a===b:"regexp"===Util.type(a)?a.test(b):void 0}for(var c in Mock._mocked){var d=Mock._mocked[c];if(!(d.rurl&&!b(d.rurl,a.url)||d.rtype&&!b(d.rtype,a.type.toLowerCase())))return d}}function convert(a,b){return Util.isFunction(a.template)?a.template(b):Mock.mock(a.template)}var Mock={version:"0.1.2",_mocked:{}},Util=function(){var a={};return a.extend=function(){var b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length;for(1===i&&(g=this,h=0);i>h;h++)if(b=arguments[h])for(c in b)d=g[c],e=b[c],g!==e&&e!==undefined&&(a.isArray(e)||a.isObject(e)?(a.isArray(e)&&(f=d&&a.isArray(d)?d:[]),a.isObject(e)&&(f=d&&a.isObject(d)?d:{}),g[c]=a.extend(f,e)):g[c]=e);return g},a.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;d<a.length&&b.call(c,a[d],d,a)!==!1;d++);else for(e in a)if(b.call(c,a[e],e,a)===!1)break},a.type=function(a){return null===a||a===undefined?String(a):Object.prototype.toString.call(a).match(/\[object (\w+)\]/)[1].toLowerCase()},a.each("String Object Array RegExp Function".split(" "),function(b){a["is"+b]=function(c){return a.type(c)===b.toLowerCase()}}),a.isObjectOrArray=function(b){return a.isObject(b)||a.isArray(b)},a.isNumeric=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},a.keys=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b},a.values=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(a[c]);return b},a.heredoc=function(a){return a.toString().replace(/^[^\/]+\/\*!?/,"").replace(/\*\/[^\/]+$/,"").replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")},a.noop=function(){},a}(),Random=function(){var a={extend:Util.extend};return a.extend({"boolean":function(a,b,c){return c!==undefined?(a="undefined"==typeof a||isNaN(a)?1:parseInt(a,10),b="undefined"==typeof b||isNaN(b)?1:parseInt(b,10),Math.random()>1/(a+b)*a?!c:c):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(a,b,c,d){c=c===undefined?0:c,c=Math.max(Math.min(c,17),0),d=d===undefined?17:d,d=Math.max(Math.min(d,17),0);for(var e=this.integer(a,b)+".",f=0,g=this.natural(c,d);g>f;f++)e+=this.character("number");return parseFloat(e,10)},character:function(b){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,b=c[(""+b).toLowerCase()]||b,b.charAt(a.natural(0,b.length-1))},"char":function(a){return this.character(a)},string:function(b,c,d){var e;3===arguments.length&&(e=a.natural(c,d)),2===arguments.length&&("string"==typeof arguments[0]?e=c:(e=a.natural(b,c),b=undefined)),1===arguments.length&&(e=b,b=undefined),0===arguments.length&&(e=a.natural(3,7));for(var f="",g=0;e>g;g++)f+=a.character(b);return f},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,a=+a,b=+b,c=+c;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}}),a.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"},T:"getTime"}}),a.extend({rformat:new RegExp(function(){var b=[];for(var c in a.patternLetters)b.push(c);return"("+b.join("|")+")"}(),"g"),format:function(b,c){var d=a.patternLetters,e=a.rformat;return c.replace(e,function(a,c){return"function"==typeof d[c]?d[c](b):d[c]in d?arguments.callee(a,d[c]):b[d[c]]()})},randomDate:function(a,b){return a=a===undefined?new Date(0):a,b=b===undefined?new Date:b,new Date(Math.random()*(b.getTime()-a.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)},now:function(a,b){1===arguments.length&&(/year|month|week|day|hour|minute|second|week/.test(a)||(b=a,a="")),a=(a||"").toLowerCase(),b=b||"yyyy-MM-dd HH:mm:ss";var c=new Date;switch(a){case"year":c.setMonth(0);case"month":c.setDate(1);case"week":case"day":c.setHours(0);case"hour":c.setMinutes(0);case"minute":c.setSeconds(0);case"second":c.setMilliseconds(0)}switch(a){case"week":c.setDate(c.getDate()-c.getDay())}return this.format(c,b)}}),a.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(a,b,c,d,e){return 4===arguments.length&&(e=d,d=undefined),3===arguments.length&&(e=c,c=undefined),a||(a=this.pick(this.ad_size)),b&&~b.indexOf("#")&&(b=b.slice(1)),c&&~c.indexOf("#")&&(c=c.slice(1)),"http://dummyimage.com/"+a+(b?"/"+b:"")+(c?"/"+c:"")+(d?"."+d:"")+(e?"&text="+e:"")},img:function(){return this.image.apply(this,arguments)}}),a.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},dataImage:function(a,b){var c="undefined"!=typeof document&&document.createElement("canvas"),d=c&&c.getContext&&c.getContext("2d");if(!c||!d)return"";a||(a=this.pick(this.ad_size)),b=b!==undefined?b:a,a=a.split("x");var e=parseInt(a[0],10),f=parseInt(a[1],10),g=this.brandColors[this.pick(this.brands())],h="#FFF",i=14,j="sans-serif";return c.width=e,c.height=f,d.textAlign="center",d.textBaseline="middle",d.fillStyle=g,d.fillRect(0,0,e,f),d.fillStyle=h,d.font="bold "+i+"px "+j,d.fillText(b,e/2,f/2,e),c.toDataURL("image/png")}}),a.extend({color:function(){var a=Math.floor(16777215*Math.random()).toString(16);return a="#"+("000000"+a).slice(-6)}}),a.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=a||[],a[this.natural(0,a.length-1)]},shuffle:function(a){a=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}}),a.extend({paragraph:function(b,c){var d;0===arguments.length&&(d=a.natural(3,7)),1===arguments.length&&(d=c=b),2===arguments.length&&(b=parseInt(b,10),c=parseInt(c,10),d=a.natural(b,c));for(var e=[],f=0;d>f;f++)e.push(a.sentence());return e.join(" ")},sentence:function(b,c){var d;0===arguments.length&&(d=a.natural(12,18)),1===arguments.length&&(d=c=b),2===arguments.length&&(b=parseInt(b,10),c=parseInt(c,10),d=a.natural(b,c));for(var e=[],f=0;d>f;f++)e.push(a.word());return a.capitalize(e.join(" "))+"."},word:function(b,c){var d;0===arguments.length&&(d=a.natural(3,10)),1===arguments.length&&(d=c=b),2===arguments.length&&(b=parseInt(b,10),c=parseInt(c,10),d=a.natural(b,c));for(var e="",f=0;d>f;f++)e+=a.character("lower");return e},title:function(b,c){var d,e=[];0===arguments.length&&(d=a.natural(3,7)),1===arguments.length&&(d=c=b),2===arguments.length&&(b=parseInt(b,10),c=parseInt(c,10),d=a.natural(b,c));for(var f=0;d>f;f++)e.push(this.capitalize(this.word()));return e.join(" ")}}),a.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()}}),a.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)}}),a.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}}),a.extend({todo:function(){return"todo"}}),a.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;e<a.length;e++)b+=a[e]*c[e];return a+=d[b%11]},autoIncrementInteger:0,increment:function(a){return this.autoIncrementInteger+=+a||1},inc:function(a){return this.increment(a)}}),a}(),rkey=/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,rrange=/([\+\-]?\d+)-?([\+\-]?\d+)?/,rplaceholder=/\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g;Mock.extend=Util.extend,Mock.mock=function(a,b,c){return 1===arguments.length?Handle.gen(a):(2===arguments.length&&(c=b,b=undefined),Mock._mocked[a+(b||"")]={rurl:a,rtype:b,template:c},Mock)};var Handle={extend:Util.extend};Handle.rule=function(a){a=(a||"")+"";var b=(a||"").match(rkey),c=b&&b[3]&&b[3].match(rrange),d=c&&parseInt(c[1],10),e=c&&parseInt(c[2],10),f=c?!c[2]&&parseInt(c[1],10)||Random.integer(d,e):1,g=b&&b[4]&&b[4].match(rrange),h=g&&parseInt(g[1],10),i=g&&parseInt(g[2],10),j=g?!g[2]&&parseInt(g[1],10)||Random.integer(h,i):0,k=b&&b[4];return{parameters:b,range:c,min:d,max:e,count:f,decimal:g,dmin:h,dmax:i,dcount:j,point:k}},Handle.gen=function(a,b,c){b=b=(b||"")+"",c=c||{},c={path:c.path||[],templatePath:c.templatePath||[],currentContext:c.currentContext,templateCurrentContext:c.templateCurrentContext||a,root:c.root,templateRoot:c.templateRoot};var d=Handle.rule(b),e=Util.type(a);return Handle[e]?Handle[e]({type:e,template:a,name:b,parsedName:b?b.replace(rkey,"$1"):b,rule:d,context:c}):a},Handle.extend({array:function(a){var b,c,d=[];if(a.rule.parameters)if(1===a.rule.count&&a.template.length>1)a.context.path.push(a.name),d=Random.pick(Handle.gen(a.template,undefined,{currentContext:d,templateCurrentContext:a.template,path:a.context.path})),a.context.path.pop();else for(b=0;b<a.rule.count;b++){c=0;do d.push(Handle.gen(a.template[c++]));while(c<a.template.length)}else for(b=0;b<a.template.length;b++)a.context.path.push(b),d.push(Handle.gen(a.template[b],b,{currentContext:d,templateCurrentContext:a.template,path:a.context.path})),a.context.path.pop();return d},object:function(a){var b,c,d,e,f,g,h={};if(a.rule.min)for(b=Util.keys(a.template),b=Random.shuffle(b),b=b.slice(0,a.rule.count),g=0;g<b.length;g++)d=b[g],e=d.replace(rkey,"$1"),a.context.path.push(e),h[e]=Handle.gen(a.template[d],d,{currentContext:h,templateCurrentContext:a.template,path:a.context.path}),a.context.path.pop();else{b=[],c=[];for(d in a.template)("function"==typeof a.template[d]?c:b).push(d);for(b=b.concat(c),g=0;g<b.length;g++)d=b[g],e=d.replace(rkey,"$1"),a.context.path.push(e),h[e]=Handle.gen(a.template[d],d,{currentContext:h,templateCurrentContext:a.template,path:a.context.path}),a.context.path.pop(),f=d.match(rkey),f&&f[2]&&"number"===Util.type(a.template[d])&&(a.template[d]+=parseInt(f[2],10))}return h},number:function(a){var b,c,d;if(a.rule.point){for(a.template+="",c=a.template.split("."),c[0]=a.rule.range?a.rule.count:c[0],c[1]=(c[1]||"").slice(0,a.rule.dcount),d=0;c[1].length<a.rule.dcount;d++)c[1]+=Random.character("number");b=parseFloat(c.join("."),10)}else b=a.rule.range&&!a.rule.parameters[2]?a.rule.count:a.template;return b},"boolean":function(a){var b;return b=a.rule.parameters?Random.bool(a.rule.min,a.rule.max,a.template):a.template},string:function(a){var b,c,d,e,f="";if(a.template.length){for(b=0;b<a.rule.count;b++)f+=a.template;for(c=f.match(rplaceholder)||[],b=0;b<c.length;b++)if(d=c[b],/^\\/.test(d))c.splice(b--,1);else{if(e=Handle.placeholder(d,a.context.currentContext,a.context.templateCurrentContext),1===c.length&&d===f&&typeof e!=typeof f){f=e;break}f=f.replace(d,e)}}else f=a.rule.range?Random.string(a.rule.count):a.template;return f},"function":function(a){return a.template.call(a.context.currentContext)}}),Handle.extend({_all:function(){var a={};for(var b in Random)a[b.toLowerCase()]=b;return a},placeholder:function(placeholder,obj,templateContext){rplaceholder.exec("");var parts=rplaceholder.exec(placeholder),key=parts&&parts[1],lkey=key&&key.toLowerCase(),okey=this._all()[lkey],params=parts&&parts[2]||"";try{params=eval("(function(){ return [].splice.call(arguments, 0 ) })("+params+")")}catch(error){params=parts[2].split(/,\s*/)}if(obj&&key in obj)return obj[key];if(templateContext&&"object"==typeof templateContext&&key in templateContext&&placeholder!==templateContext[key])return templateContext[key]=Handle.gen(templateContext[key],key,{currentContext:obj,templateCurrentContext:templateContext}),templateContext[key];if(!(key in Random||lkey in Random||okey in Random))return placeholder;for(var i=0;i<params.length;i++)rplaceholder.exec(""),rplaceholder.test(params[i])&&(params[i]=Handle.placeholder(params[i],obj));var handle=Random[key]||Random[lkey]||Random[okey];switch(Util.type(handle)){case"array":return Random.pick(handle);case"function":var re=handle.apply(Random,params);return re===undefined&&(re=""),re}}}),Mock.mockjax=function(a){function b(){return{readyState:4,status:200,statusText:"",open:a.noop,send:function(){this.onload()},setRequestHeader:a.noop,getAllResponseHeaders:a.noop,getResponseHeader:a.noop,statusCode:a.noop,abort:a.noop}}function c(a,c){var d=find(a);return d&&(a.dataFilter=a.converters["text json"]=a.converters["text jsonp"]=a.converters["text script"]=a.converters["script json"]=function(){return convert(d,a)},a.xhr=b,"script"!==c.dataType)?"json":void 0}return a.ajaxPrefilter("json jsonp script",c),Mock},"undefined"!=typeof jQuery&&Mock.mockjax(jQuery),"undefined"!=typeof Zepto&&(Mock.mockjax=function(a){var b=a.ajax,c={readyState:4,responseText:"",responseXML:null,state:2,status:200,statusText:"success",timeoutTimer:null};a.ajax=function(d){var e=find(d);if(e){var f=Mock.mock(e.template);return d.success&&d.success(f,c,d),d.complete&&d.complete(c.status,c,d),c}return b.call(a,d)}},Mock.mockjax(Zepto)),"undefined"!=typeof KISSY&&KISSY.add&&(Mock.mockjax=function(a){var b=a.io,c={readyState:4,responseText:"",responseXML:null,state:2,status:200,statusText:"success",timeoutTimer:null};a.io=function(a){var d=find(a);if(d){var e=Mock.mock(d.template);return a.success&&a.success(e,c,a),a.complete&&a.complete(c.status,c,a),c}return b.apply(this,arguments)};for(var d in b)a.io[d]=b[d]}),Mock.Util=Util,Mock.Random=Random,Mock.heredoc=Util.heredoc,"object"==typeof module&&module.exports?module.exports=Mock:"function"==typeof define&&define.amd?define(function(){return Mock}):"function"==typeof define&&define.cmd&&define(function(){return Mock}),this.Mock=Mock,this.Random=Random,"undefined"!=typeof KISSY&&Util.each(["mock","components/mock/","mock/dist/mock","gallery/Mock/0.1.1/","gallery/Mock/0.1.2/","gallery/Mock/0.1.3/"],function(a){KISSY.add(a,function(a){return Mock.mockjax(a),Mock},{requires:["ajax"]})}),function(a){var b={version:"0.0.1"};this.Mock||(module.exports=b),Mock.tpl=function(a,c,d,e){return b.mock(a,c,d,e)},Mock.parse=function(a){return Handlebars.parse(a)},b.mock=function(a,b,d,e){return d=d?Util.extend({},d,Handlebars.helpers):Handlebars.helpers,e=e?Util.extend({},e,Handlebars.partials):Handlebars.partials,c.gen(a,null,b,d,e)};var c={debug:b.debug||!1,extend:Util.extend};c.gen=function(a,d,e,f,g){if(Util.isString(a)){var h=Handlebars.parse(a);e=c.parseOptions(a,e);var i=c.gen(h,d,e,f,g);return i}if(d=d||[{}],e=e||{},this[a.type]!==Util.noop){e.__path=e.__path||[],(b.debug||c.debug)&&(console.log(),console.group("["+a.type+"]",JSON.stringify(a)),console.log("[options]",e.__path.length,JSON.stringify(e)));var j=e.__path.length;return this[a.type](a,d,e,f,g),e.__path.splice(j),(b.debug||c.debug)&&console.groupEnd(),d[d.length-1]}},c.parseOptions=function(a,b){var c,d,e,f=/<!--\s*\n*Mock\s*\n*([\w\W]+?)\s*\n*-->/g,g=a.match(f),h={};for(c=0;g&&c<g.length;c++)f.lastIndex=0,d=f.exec(g[c]),d&&(e=new Function("return "+d[1]),e=e(),Util.extend(h,e));return Util.extend(h,b)},c.val=function(d,e,f,g){if(d!==e.__path[e.__path.length-1])throw new Error(d+"!=="+e.__path);if((b.debug||c.debug)&&console.log("[options]",d,e.__path),g!==a&&(g=Mock.mock(g)),e){var h=Mock.mock(e);if(Util.isString(h))return h;if(d in h)return h[d]}return Util.isArray(f[0])?{}:g!==a?g:d||Random.word()},c.program=function(a,b,c,d,e){for(var f=0;f<a.statements.length;f++)this.gen(a.statements[f],b,c,d,e)},c.mustache=function(a,b,c,d,e){var f,g=b[0],h=b.length;if("array"===Util.type(g)&&(g.push({}),g=g[g.length-1],b.unshift(g)),a.isHelper||d&&d[a.id.string]){if(0===a.params.length);else for(f=0;f<a.params.length;f++)this.gen(a.params[f],b,c,d,e);a.hash&&this.gen(a.hash,b,c,d,e)}else this.gen(a.id,b,c,d,e);b.length>h&&b.splice(0,b.length-h)},c.block=function(a,b,c,e,f){var g,h,i,j,k,l=a.mustache.id.parts,m=b[0],n=b.length;if(a.inverse,a.mustache.isHelper||e&&e[a.mustache.id.string])k=l[0],j=(d[k]||d.custom).apply(this,arguments),m=b[0];else for(g=0;g<l.length;g++)c.__path.push(l[g]),i=l[g],j=this.val(i,c,b,{}),m[i]=Util.isArray(j)&&[]||j,k=Util.type(m[i]),("object"===k||"array"===k)&&(m=m[i],b.unshift(m));if(a.program)if("array"===Util.type(m))for(h=j.length||Random.integer(3,7),g=0;h>g;g++)m.push("undefined"!=typeof j[g]?j[g]:{}),c.__path.push("[]"),b.unshift(m[m.length-1]),this.gen(a.program,b,c,e,f),c.__path.pop(),b.shift();else this.gen(a.program,b,c,e,f);b.length>n&&b.splice(0,b.length-n)},c.hash=function(a,b,c,d,e){var f,g,h,i=a.pairs;for(g=0;g<i.length;g++)for(f=i[g],h=1;h<f.length;h++)this.gen(f[h],b,c,d,e)},c.ID=function(a,b,c){var d,e,f,g,h,i,j,k,l,m=a.parts,n=b[a.depth],o=b.length;if(Util.isArray(n)&&(n=b[a.depth+1]),m.length)for(d=0,e=m.length;e>d;d++)c.__path.push(m[d]),f=m[d],g=m[d-1],l=c[g],h=d===e-1?n[f]:{},i=this.val(f,c,b,h),j=Util.type(n[f]),k=Util.type(i),"undefined"===j?n[f]=e-1>d&&"object"!==k&&"array"!==k?{}:Util.isArray(i)&&[]||i:e-1>d&&"object"!==j&&"array"!==j&&(n[f]=Util.isArray(i)&&[]||{}),j=Util.type(n[f]),("object"===j||"array"===j)&&(n=n[f],b.unshift(n));else;b.length>o&&b.splice(0,b.length-o)},c.partial=function(a,b,d,e,f){var g=a.partialName.name,h=f&&f[g],i=b.length;h&&c.gen(h,b,d,e,f),b.length>i&&b.splice(0,b.length-i)},c.content=Util.noop,c.PARTIAL_NAME=Util.noop,c.DATA=Util.noop,c.STRING=Util.noop,c.INTEGER=Util.noop,c.BOOLEAN=Util.noop,c.comment=Util.noop;var d={};d.each=function(a,b,c){var d,e,f,g,h,i,j,k=b[0];for(h=a.mustache.params[0].parts,d=0,e=h.length;e>d;d++)c.__path.push(h[d]),f=h[d],i=d===e-1?[]:{},g=this.val(f,c,b,i),k[f]=Util.isArray(g)&&[]||g,j=Util.type(k[f]),("object"===j||"array"===j)&&(k=k[f],b.unshift(k));return g},d["if"]=d.unless=function(a,b,c){var d,e,f,g,h,i,j,k=a.mustache.params,l=b[0];for(d=0;d<k.length;d++)for(h=k[d].parts,e=0;e<h.length;e++)0===d&&c.__path.push(h[e]),f=h[e],i=e===h.length-1?"@BOOL(2,1,true)":{},g=this.val(f,c,b,i),e===h.length-1&&(g="true"===g?!0:"false"===g?!1:g),l[f]=Util.isArray(g)?[]:g,j=Util.type(l[f]),("object"===j||"array"===j)&&(l=l[f],b.unshift(l));return g},d["with"]=function(a,b,c){var d,e,f,g,h,i=b[0];for(g=a.mustache.params[0].parts,d=0;d<g.length;d++)c.__path.push(g[d]),e=g[d],h={},f=this.val(e,c,b,h),i=i[e]=f,b.unshift(i);return f},d.log=function(){},d.custom=function(a,b,c){var d,e,f,g,h,i,j,k=b[0];if(0!==a.mustache.params.length){for(h=a.mustache.params[0].parts,d=0,e=h.length;e>d;d++)c.__path.push(h[d]),f=h[d],i=d===e-1?[]:{},g=this.val(f,c,b,i),k[f]=Util.isArray(g)&&[]||g,j=Util.type(k[f]),("object"===j||"array"===j)&&(k=k[f],b.unshift(k));return g}}}.call(this),function(a){if("undefined"!=typeof KISSY){var b,c={debug:!1};KISSY.use("xtemplate",function(a,c){b=c}),this.Mock||(module.exports=c),Mock.xtpl=function(a,b,d,e){return c.mock(a,b,d,e)},Mock.xparse=function(a){return b.compiler.parse(a)},c.mock=function(a,c,d,e){return d=d?Util.extend({},d,b.RunTime.commands):b.RunTime.commands,e=e?Util.extend({},e,b.RunTime.subTpls):b.RunTime.subTpls,this.gen(a,null,c,d,e,{})},c.parse=function(a){return b.compiler.parse(a)},c.gen=function(a,b,d,e,f,g){if("string"==typeof a){c.debug&&console.log("[tpl ]\n",a);var h=this.parse(a);d=this.parseOptions(a,d);var i=this.gen(h,b,d,e,f,g);return i}if(b=b||[{}],d=d||{},a.type=a.type,this[a.type]!==Util.noop){d.__path=d.__path||[],c.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(g)));var j=d.__path.length;return this[a.type](a,b,d,e,f,g),c.debug&&console.log("[__path ]","[after ]",d.__path),(!g.hold||"function"==typeof g.hold&&!g.hold(a,d,b))&&d.__path.splice(j),c.debug&&(console.log("[context]","[after ]",b.length,JSON.stringify(b)),console.groupEnd()),b[b.length-1]}},c.parseOptions=function(a,b){var c,d,e,f=/<!--\s*\n*Mock\s*\n*([\w\W]+?)\s*\n*-->/g,g=a.match(f),h={};for(c=0;g&&c<g.length;c++)f.lastIndex=0,d=f.exec(g[c]),d&&(e=new Function("return "+d[1]),e=e(),Util.extend(h,e));return Util.extend(h,b)},c.parseVal=function(a,b){function c(a,b){if("object"==typeof b&&a in b)return[b[a]];for(var c=[],d=0;d<b.length;d++)c.push.apply(c,e(a,[b[d]]));return c}function d(a,b){if("object"==typeof b&&a in b)return[b[a]];var c=[];for(var d in b)c.push.apply(c,e(a,[b[d]]));return c}function e(a,b){for(var e=[],f=0;f<b.length;f++)"object"==typeof b[f]&&(a in b[f]?e.push(b[f][a]):e.push.apply(e,Util.isArray(b[f])?c(a,b[f]):d(a,b[f])));return e}function f(a,b){for(var c="string"==typeof a?a.split("."):a.slice(0),d=[b];c.length;)d=e(c.shift(),d);return d}return f(a,b)},c.val=function(b,d,e,f){if(b!==d.__path[d.__path.length-1])throw new Error(b+"!=="+d.__path);if(f!==a&&(f=Mock.mock(f)),d){var g=Mock.mock(d);if(Util.isString(g))return g;var h=c.parseVal(d.__path,g);if(h.length>0)return h[0];if(b in g)return g[b]}return Util.isArray(e[0])?{}:f!==a?f:b},c.program=function(a,b,c,d,e,f){for(var g=0;g<a.statements.length;g++)this.gen(a.statements[g],b,c,d,e,f);for(var h=0;a.inverse&&h<a.inverse.length;h++)this.gen(a.inverse[h],b,c,d,e,f)},c.block=function(b,c,d,e,f,g){var h=c.length;this.gen(b.tpl,c,d,e,f,Util.extend({},g,{def:{},hold:!0}));var i,j,k,l=c[0];if("array"===Util.type(l))for(i=this.val(d.__path[d.__path.length-1],d,c),k=i&&i.length||Random.integer(3,7),j=0;k>j;j++)l.push(i&&i[j]!==a?i[j]:{}),d.__path.push(j),c.unshift(l[l.length-1]),this.gen(b.program,c,d,e,f,g),d.__path.pop(),c.shift();else this.gen(b.program,c,d,e,f,g);(!g.hold||"function"==typeof g.hold&&!g.hold(b,d,c))&&c.splice(0,c.length-h)},c.tpl=function(a,b,c,d,e,f){if(a.params&&a.params.length){f=Util.extend({},f,{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 g,h=0;h<a.params.length;h++)g="include"===a.path.string?e&&e[a.params[h].value]:a.params[h],g&&this.gen(g,b,c,d,e,f);a.hash&&this.gen(a.hash,b,c,d,e,f)}else this.gen(a.path,b,c,d,e,f)},c.tplExpression=function(a,b,c,d,e,f){this.gen(a.expression,b,c,d,e,f)},c.content=Util.noop,c.unaryExpression=Util.noop,c.multiplicativeExpression=c.additiveExpression=function(b,c,d,e,f,g){this.gen(b.op1,c,d,e,f,Util.extend({},g,{def:function(){return"number"===b.op2.type?b.op2.value.indexOf(".")>-1?Random.float(-Math.pow(10,10),Math.pow(10,10),1,Math.pow(10,6)):Random.integer():a}()})),this.gen(b.op2,c,d,e,f,Util.extend({},g,{def:function(){return"number"===b.op1.type?b.op1.value.indexOf(".")>-1?Random.float(-Math.pow(10,10),Math.pow(10,10),1,Math.pow(10,6)):Random.integer():a}()}))},c.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)},c.equalityExpression=Util.noop,c.conditionalAndExpression=Util.noop,c.conditionalOrExpression=Util.noop,c.string=Util.noop,c.number=Util.noop,c.boolean=Util.noop,c.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)},c.id=function(b,d,e,f,g,h){function i(a,b,c,d,e){var f=Util.type(a[d]),g=Util.type(e);return e="true"===e?!0:"false"===e?!1:e,"undefined"===f?a[d]=c-1>b&&!Util.isObjectOrArray(e)?{}:Util.isArray(e)&&[]||e:c-1>b&&"object"!==f&&"array"!==f?a[d]=Util.isArray(e)&&[]||{}:"object"!==f&&"array"!==f&&"object"!==g&&"array"!==g&&(a[d]=e),a[d]}var j,k,l,m,n,o=d.length,p=b.parts,q=d[b.depth];for(Util.isArray(q)&&(q=d[b.depth+1]),j=0,k=p.length;k>j;j++)(0!==j||"this"!==p[j])&&(/^(xindex|xcount|xkey)$/.test(p[j])||0===j&&1===k&&p[j]in f||(e.__path.push(p[j]),l=p[j],m=j===k-1?h.def!==a?h.def:d[0][l]:{},n=this.val(l,e,d,m),c.debug&&(console.log("[def ]",JSON.stringify(m)),console.log("[val ]",JSON.stringify(n))),n=i(q,j,k,l,n),Util.isObjectOrArray(q[l])&&d.unshift(q=q[l])));(!h.hold||"function"==typeof h.hold&&!h.hold(b,e,d,l,n))&&d.splice(0,d.length-o)}}}.call(this)}).call(this); | ||
//# sourceMappingURL=dist/mock-min.map |
@@ -34,3 +34,3 @@ <!-- ## Mock.js --> | ||
<a href="./dist/mock.js" class="btn btn-success w250"> | ||
Development Version (0.1.2) | ||
Development Version (0.1.4) | ||
</a> - <i>71kB, Uncompressed</i> | ||
@@ -40,3 +40,3 @@ </p> | ||
<a href="./dist/mock-min.js" class="btn btn-primary w250"> | ||
Production Version (0.1.2) | ||
Production Version (0.1.4) | ||
</a> - <i>31kB, Minified</i> | ||
@@ -59,2 +59,6 @@ </p> | ||
## 分享文档 | ||
* [懒懒交流会 2014.5.30](/doc/lanlan.html) | ||
## 用法 | ||
@@ -61,0 +65,0 @@ |
@@ -34,3 +34,3 @@ <!-- ## Mock.js --> | ||
<a href="./dist/mock.js" class="btn btn-success w250"> | ||
Development Version (0.1.2) | ||
Development Version (0.1.4) | ||
</a> - <i>71kB, Uncompressed</i> | ||
@@ -40,3 +40,3 @@ </p> | ||
<a href="./dist/mock-min.js" class="btn btn-primary w250"> | ||
Production Version (0.1.2) | ||
Production Version (0.1.4) | ||
</a> - <i>31kB, Minified</i> | ||
@@ -59,2 +59,6 @@ </p> | ||
## 分享文档 | ||
* [懒懒交流会 2014.5.30](/doc/lanlan.html) | ||
## 用法 | ||
@@ -61,0 +65,0 @@ |
@@ -90,7 +90,8 @@ // UI | ||
function stringify(tpl) { | ||
tpl = tpl.replace(/^([\r\n]*)/i, '') | ||
.replace(/([\r\n]*$)/i, '') | ||
tpl = new Function('return ' + tpl) | ||
tpl = tpl() || '' | ||
tpl = JSON.stringify(tpl, null, tabSize) | ||
tpl = js_beautify(tpl) | ||
// tpl = tpl.replace(/^([\r\n]*)/i, '') | ||
// .replace(/([\r\n]*$)/i, '') | ||
// tpl = new Function('return ' + tpl) | ||
// tpl = tpl() || '' | ||
// tpl = JSON.stringify(tpl, null, tabSize) | ||
tplEditor.setValue(tpl) | ||
@@ -109,4 +110,9 @@ } | ||
var data = Mock.mock(tpl) || '' | ||
data = JSON.stringify(data, null, tabSize) | ||
var data | ||
try { | ||
data = Mock.mock(tpl) || '' | ||
data = JSON.stringify(data, null, tabSize) | ||
} catch (error) { | ||
data = error.toString() | ||
} | ||
$('textarea[name=data]').val(data) | ||
@@ -124,4 +130,5 @@ dataEditor.setValue(data) | ||
// Editor | ||
var tplTextarea = $('textarea[name=tpl]') | ||
var tplEditor = CodeMirror | ||
.fromTextArea($('textarea[name=tpl]').get(0), { | ||
.fromTextArea(tplTextarea.get(0), { | ||
tabSize: tabSize, | ||
@@ -140,3 +147,12 @@ tabMode: 'spaces', // or 'shift' | ||
}) | ||
tplEditor.on('scroll', function(instance) { | ||
var scrollInfo = tplEditor.getScrollInfo() | ||
var percent = scrollInfo.top / (scrollInfo.height - scrollInfo.clientHeight) | ||
var dataEditorScrollInfo = dataEditor.getScrollInfo() | ||
var dataEditorTop = (dataEditorScrollInfo.height - dataEditorScrollInfo.clientHeight) * percent | ||
dataEditor.scrollTo(dataEditorScrollInfo.left, dataEditorTop) | ||
}) | ||
var dataEditor = CodeMirror | ||
@@ -198,8 +214,11 @@ .fromTextArea($('textarea[name=data]').get(0), { | ||
boolean2: '@BOOLEAN(1, 9, true)', | ||
natural1: '@NATURAL', | ||
natural2: '@NATURAL(10000)', | ||
natural3: '@NATURAL(60, 100)', | ||
integer1: '@INTEGER', | ||
integer2: '@INTEGER(10000)', | ||
integer3: '@INTEGER(60, 100)', | ||
float1: '@FLOAT', | ||
@@ -210,2 +229,3 @@ float2: '@FLOAT(0)', | ||
float5: '@FLOAT(60, 100, 3, 5)', | ||
character1: '@CHARACTER', | ||
@@ -217,2 +237,3 @@ character2: '@CHARACTER("lower")', | ||
character6: '@CHARACTER("aeiou")', | ||
string1: '@STRING', | ||
@@ -223,2 +244,3 @@ string2: '@STRING(5)', | ||
string5: '@STRING("aeiou", 1, 3)', | ||
range1: '@RANGE(10)', | ||
@@ -228,4 +250,6 @@ range2: '@RANGE(3, 7)', | ||
range4: '@RANGE(1, 10, 3)', | ||
date: '@DATE', | ||
time: '@TIME', | ||
datetime1: '@DATETIME', | ||
@@ -237,2 +261,3 @@ datetime2: '@DATETIME("yyyy-MM-dd A HH:mm:ss")', | ||
datetime6: '@DATETIME("y-M-d H:m:s")', | ||
now: '@NOW', | ||
@@ -254,2 +279,3 @@ nowYear: '@NOW("year")', | ||
image5: '@IMAGE("100x200", "#000", "#FFF", "png", "hello")', | ||
dataImage1: '@DATAIMAGE', | ||
@@ -269,8 +295,11 @@ dataImage2: '@DATAIMAGE("200x100")', | ||
title3: '@TITLE(3, 5)', | ||
word1: '@WORD', | ||
word2: '@WORD(5)', | ||
word3: '@WORD(3, 5)', | ||
sentence1: '@SENTENCE', | ||
sentence2: '@SENTENCE(5)', | ||
sentence3: '@SENTENCE(3, 5)', | ||
paragraph1: '@PARAGRAPH', | ||
@@ -310,9 +339,13 @@ paragraph2: '@PARAGRAPH(2)', | ||
capitalize2: '@CAPITALIZE("hello")', | ||
upper1: '@UPPER', | ||
upper2: '@UPPER("hello")', | ||
lower1: '@LOWER', | ||
lower2: '@LOWER("HELLO")', | ||
pick1: '@PICK', | ||
pick2: '@PICK("abc")', | ||
pick3: '@PICK(["a", "b", "c"])', | ||
shuffle1: '@SHUFFLE', | ||
@@ -319,0 +352,0 @@ shuffle2: '@SHUFFLE(["a", "b", "c"])' |
'use strict'; | ||
var Mock = require('./dist/mock.js') | ||
// http://www.network-science.de/ascii/ doom | ||
console.log(Mock.heredoc(function() { | ||
/* | ||
___ ___ _ _ | ||
| \/ | | | (_) | ||
| . . | ___ ___ | | __ _ ___ | ||
| |\/| | / _ \ / __|| |/ / | |/ __| | ||
| | | || (_) || (__ | < _ | |\__ \ | ||
\_| |_/ \___/ \___||_|\_\(_)| ||___/ | ||
_/ | | ||
|__/ | ||
*/ | ||
})) | ||
module.exports = function(grunt) { | ||
@@ -11,2 +28,3 @@ | ||
files: ['Gruntfile.js', 'package.json', 'src/**/*.js', 'test/**/*.js', | ||
'!src/xhr.js', | ||
'!**/*-prefix.js', '!**/*-suffix.js' | ||
@@ -20,11 +38,9 @@ ], | ||
files: [ | ||
'test/mock.html', 'test/mock-*.html', | ||
'test/mock4tpl.html', 'test/mock4tpl-*.html', | ||
'test/mock4xtpl.html', 'test/mock4xtpl-*.html', | ||
'test/**/*.html', | ||
'!test/mock4xtpl.html' | ||
'!test/mock4xtpl.html', | ||
'!test/**/noop.*' | ||
] | ||
}, | ||
nodeunit: { | ||
all: ['test/nodeuinit/*.js'] | ||
all: ['test/nodeunit/*.js' , '!test/**/noop.*'] | ||
}, | ||
@@ -38,3 +54,3 @@ watch: { | ||
files: ['Gruntfile.js', 'doc/**/*.md', 'doc/template.html', '!doc/index.md'], | ||
tasks: ['concat:doc', 'markdown:doc', 'copy:doc'] | ||
tasks: ['concat:doc', 'markdown:doc', 'cleaver', 'copy:doc'] | ||
}, | ||
@@ -135,2 +151,11 @@ build: {} | ||
}, | ||
cleaver: { | ||
lanlan: { | ||
expand: true, | ||
cwd: 'doc/', | ||
src: ['lanlan.md'], | ||
dest: 'doc/', | ||
ext: '.htm' | ||
} | ||
}, | ||
copy: { | ||
@@ -151,3 +176,3 @@ demo: { | ||
expand: true, | ||
src: ['dist/**', 'demo/**', | ||
src: ['dist/**', 'demo/**', 'doc/**', | ||
'node_modules/jquery/tmp/**', | ||
@@ -203,3 +228,4 @@ 'node_modules/codemirror/**', | ||
grunt.loadNpmTasks('grunt-exec') | ||
grunt.loadNpmTasks('grunt-markdown'); | ||
grunt.loadNpmTasks('grunt-markdown') | ||
grunt.loadNpmTasks('grunt-cleaver') | ||
@@ -213,3 +239,3 @@ grunt.registerTask('base', [ | ||
grunt.registerTask('default', ['base', 'connect', 'watch:dev']) | ||
grunt.registerTask('doc-base', ['concat:doc', 'markdown:doc', 'copy:doc', 'copy:kissy']) | ||
grunt.registerTask('doc-base', ['concat:doc', 'markdown:doc', 'cleaver', 'copy:doc', 'copy:kissy']) | ||
grunt.registerTask('doc', ['doc-base', 'connect', 'watch:doc']) | ||
@@ -216,0 +242,0 @@ |
@@ -5,3 +5,3 @@ { | ||
"description": "模拟请求 & 模拟数据", | ||
"version": "0.1.2", | ||
"version": "0.1.4", | ||
"homepage": "http://mockjs.com/", | ||
@@ -29,3 +29,3 @@ "keywords": [ | ||
"grunt-exec": "~0.4.2", | ||
"jquery": "~1.8.3", | ||
"jquery": "~2.1.1", | ||
"handlebars": "~1.0.12", | ||
@@ -41,3 +41,6 @@ "underscore": "~1.5.1", | ||
"zepto": "0.0.4", | ||
"time-grunt": "~0.3.1" | ||
"time-grunt": "~0.3.1", | ||
"grunt-cleaver": "~0.3.2", | ||
"jsdom": "~0.10.5", | ||
"xmlhttprequest": "~1.6.0" | ||
}, | ||
@@ -60,3 +63,6 @@ "repository": { | ||
} | ||
] | ||
], | ||
"spm": { | ||
"main": "dist/mock.js" | ||
} | ||
} |
@@ -6,2 +6,3 @@ # Mock.js | ||
[![NPM version](https://badge.fury.io/js/mockjs.png)](http://badge.fury.io/js/mockjs) | ||
[![spm package](http://spmjs.io/badge/mockjs)](http://spmjs.io/package/mockjs) | ||
[![Dependency Status](https://gemnasium.com/nuysoft/Mock.png)](https://gemnasium.com/nuysoft/Mock) | ||
@@ -8,0 +9,0 @@ [![Bower version](https://badge.fury.io/bo/mockjs.png)](http://badge.fury.io/bo/mockjs) |
@@ -38,3 +38,2 @@ /* | ||
if (typeof KISSY != 'undefined') { | ||
/* | ||
@@ -46,5 +45,6 @@ KISSY.use('components/mock/index', function(S, Mock) { | ||
Util.each([ | ||
'mock', 'components/mock/index', 'mock/dist/mock', | ||
'gallery/Mock/0.1.1/index', | ||
'gallery/Mock/0.1.2/index' | ||
'mock', 'components/mock/', 'mock/dist/mock', | ||
'gallery/Mock/0.1.1/', | ||
'gallery/Mock/0.1.2/', | ||
'gallery/Mock/0.1.3/', | ||
], function register(name) { | ||
@@ -51,0 +51,0 @@ KISSY.add(name, function(S) { |
@@ -27,5 +27,7 @@ var Random = require('./random'), | ||
[正则查看工具](http://www.regexper.com/) | ||
#26 生成规则 支持 负数,例如 number|-100-100 | ||
*/ | ||
var rkey = /(.+)\|(?:\+(\d+)|(\d+-?\d*)?(?:\.(\d+-?\d*))?)/, | ||
rrange = /(\d+)-?(\d+)?/, | ||
var rkey = /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, | ||
rrange = /([\+\-]?\d+)-?([\+\-]?\d+)?/, | ||
rplaceholder = /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g; // (^(?:.|\r|\n)*?) | ||
@@ -198,3 +200,4 @@ | ||
object: function(options) { | ||
var result = {}, keys, key, parsedKey, inc, i; | ||
var result = {}, | ||
keys, fnKeys, key, parsedKey, inc, i; | ||
@@ -220,3 +223,23 @@ // 'obj|min-max': {} | ||
// 'obj': {} | ||
keys = [] | ||
fnKeys = [] // #25 改变了非函数属性的顺序,查找起来不方便 | ||
for (key in options.template) { | ||
(typeof options.template[key] === 'function' ? fnKeys : keys).push(key) | ||
} | ||
keys = keys.concat(fnKeys) | ||
/* | ||
会改变非函数属性的顺序 | ||
keys = Util.keys(options.template) | ||
keys.sort(function(a, b) { | ||
var afn = typeof options.template[a] === 'function' | ||
var bfn = typeof options.template[b] === 'function' | ||
if (afn === bfn) return 0 | ||
if (afn && !bfn) return 1 | ||
if (!afn && bfn) return -1 | ||
}) | ||
*/ | ||
for (i = 0; i < keys.length; i++) { | ||
key = keys[i] | ||
parsedKey = key.replace(rkey, '$1') | ||
@@ -330,9 +353,21 @@ options.context.path.push(parsedKey) | ||
// 解析占位符的参数 | ||
try { | ||
// 1. 尝试保持参数的类型 | ||
/* | ||
#24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) | ||
[BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) | ||
应该属于 Window Firefox 30.0 的 BUG | ||
*/ | ||
/* jshint -W061 */ | ||
eval('!function(){ params = [].splice.call(arguments, 0 ) }(' + params + ')') | ||
} catch (e) { | ||
params = parts[2].split(/,\s*/); | ||
params = eval('(function(){ return [].splice.call(arguments, 0 ) })(' + params + ')') | ||
} catch (error) { | ||
// 2. 如果失败,只能解析为字符串 | ||
// console.error(error) | ||
// if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); | ||
// else throw error | ||
params = parts[2].split(/,\s*/) | ||
} | ||
// 占位符优先引用数据模板中的属性 | ||
if (obj && (key in obj)) return obj[key] | ||
@@ -339,0 +374,0 @@ |
@@ -6,4 +6,2 @@ var KISSY = require('kissy'), | ||
// KISSY.Config.debug = false | ||
// BEGIN(BROWSER) | ||
@@ -115,3 +113,4 @@ (function(undefined) { | ||
var comments = input.match(rComment), | ||
ret = {}, i, ma, option; | ||
ret = {}, | ||
i, ma, option; | ||
for (i = 0; comments && i < comments.length; i++) { | ||
@@ -155,8 +154,8 @@ rComment.lastIndex = 0 | ||
for (var i = 0; i < set.length; i++) { | ||
if (typeof set[i] !== 'object') continue | ||
if (prop in set[i]) ret.push(set[i][prop]) | ||
if (typeof set [i] !== 'object') continue | ||
if (prop in set [i]) ret.push(set [i][prop]) | ||
else { | ||
ret.push.apply(ret, Util.isArray(set[i]) ? | ||
queryArray(prop, set[i]) : | ||
queryObject(prop, set[i])) | ||
ret.push.apply(ret, Util.isArray(set [i]) ? | ||
queryArray(prop, set [i]) : | ||
queryObject(prop, set [i])) | ||
} | ||
@@ -381,3 +380,3 @@ } | ||
TODO 过滤掉 this、内置占位符(xindex、xcount、xkey)、helper, | ||
然而万全之策是先检查 options 中是否存在对应的配置,如果没有则忽略,如果有责生成。 | ||
然而万全之策是先检查 options 中是否存在对应的配置,如果没有则忽略,如果有则生成。 | ||
不过,在应用中不建议覆盖内置占位符。 | ||
@@ -384,0 +383,0 @@ TODO 遇到 xindex、xcount 要修正为数组 |
var Mock = require('./mock'); | ||
var Util = require('./util') | ||
// BEGIN(BROWSER) | ||
function find(options) { | ||
for (var sUrlType in Mock._mocked) { | ||
var item = Mock._mocked[sUrlType] | ||
if ( | ||
(!item.rurl || match(item.rurl, options.url)) && | ||
(!item.rtype || match(item.rtype, options.type.toLowerCase())) | ||
) { | ||
// console.log('[mock]', options.url, '>', item.rurl) | ||
return item | ||
} | ||
} | ||
function match(expected, actual) { | ||
if (Util.type(expected) === 'string') { | ||
return expected === actual | ||
} | ||
if (Util.type(expected) === 'regexp') { | ||
return expected.test(actual) | ||
} | ||
} | ||
} | ||
function convert(item, options) { | ||
return Util.isFunction(item.template) ? | ||
item.template(options) : Mock.mock(item.template) | ||
} | ||
/* | ||
@@ -15,45 +46,36 @@ ### Mock.mockjax(library) | ||
return { | ||
readyState: 4, | ||
status: 200, | ||
statusText: '', | ||
open: jQuery.noop, | ||
send: jQuery.noop, | ||
send: function() { | ||
this.onload() | ||
}, | ||
setRequestHeader: jQuery.noop, | ||
getAllResponseHeaders: jQuery.noop, | ||
readyState: 4, | ||
status: 200 | ||
getResponseHeader: jQuery.noop, | ||
statusCode: jQuery.noop, | ||
abort: jQuery.noop | ||
} | ||
} | ||
function convert(item, options) { | ||
return function() { | ||
return jQuery.isFunction(item.template) ? | ||
item.template(options) : Mock.mock(item.template) | ||
} | ||
} | ||
function prefilter(options, originalOptions, jqXHR) { | ||
function match(expected, actual) { | ||
if (jQuery.type(expected) === 'string') { | ||
return expected === actual | ||
var item = find(options) | ||
if (item) { | ||
options.dataFilter = | ||
options.converters['text json'] = | ||
options.converters['text jsonp'] = | ||
options.converters['text script'] = | ||
options.converters['script json'] = function() { | ||
return convert(item, options) | ||
} | ||
if (jQuery.type(expected) === 'regexp') { | ||
return expected.test(actual) | ||
} | ||
} | ||
options.xhr = mockxhr | ||
for (var sUrlType in Mock._mocked) { | ||
var item = Mock._mocked[sUrlType] | ||
if ( | ||
(!item.rurl || match(item.rurl, options.url)) && | ||
(!item.rtype || match(item.rtype, options.type.toLowerCase())) | ||
) { | ||
options.dataFilter = convert(item, options) | ||
options.converters['text json'] = convert(item, options) | ||
options.converters['text jsonp'] = convert(item, options) | ||
options.xhr = mockxhr | ||
break | ||
} | ||
if (originalOptions.dataType !== 'script') return 'json' | ||
} | ||
} | ||
jQuery.ajaxPrefilter("json", prefilter) | ||
jQuery.ajaxPrefilter("jsonp", prefilter) | ||
// #22 步加载js文件的时候发现问题 | ||
// #23 Mock.mockjax 导致 $.getScript 不执行回调 | ||
jQuery.ajaxPrefilter('json jsonp script', prefilter) | ||
@@ -78,24 +100,10 @@ return Mock | ||
status: 200, | ||
statusText: "success", | ||
statusText: 'success', | ||
timeoutTimer: null | ||
} | ||
/** | ||
* @param options | ||
* return xhr | ||
*/ | ||
Zepto.ajax = function(options) { | ||
for (var surl in Mock._mocked) { | ||
var mock = Mock._mocked[surl] | ||
if (Zepto.type(mock.rurl) === 'string') { | ||
if (mock.rurl !== options.url) continue | ||
} | ||
if (Zepto.type(mock.rurl) === 'regexp') { | ||
if (!mock.rurl.test(options.url)) continue | ||
} | ||
console.log('[mock]', options.url, '>', mock.rurl) | ||
var data = Mock.mock(mock.template) | ||
console.log('[mock]', data) | ||
var item = find(options) | ||
if (item) { | ||
var data = Mock.mock(item.template) | ||
if (options.success) options.success(data, xhr, options) | ||
@@ -105,3 +113,2 @@ if (options.complete) options.complete(xhr.status, xhr, options) | ||
} | ||
return __original_ajax.call(Zepto, options) | ||
@@ -119,3 +126,3 @@ } | ||
// @白汀 提交:次对象用于模拟kissy的io响应之后的传给success方法的xhr对象,只构造了部分属性,不包含实际KISSY中的完整对象。 | ||
// @白汀 提交:此对象用于模拟 KISSY.io 响应之后的传给 success 方法的 xhr 对象,只构造了部分属性,不包含实际 KISSY 中的完整对象。 | ||
var xhr = { | ||
@@ -127,25 +134,14 @@ readyState: 4, | ||
status: 200, | ||
statusText: "success", | ||
statusText: 'success', | ||
timeoutTimer: null | ||
}; | ||
KISSY.io = function(options) { | ||
// if (options.dataType === 'json') { | ||
for (var surl in Mock._mocked) { | ||
var mock = Mock._mocked[surl]; | ||
if (KISSY.type(mock.rurl) === 'string') { | ||
if (mock.rurl !== options.url) continue | ||
} | ||
if (KISSY.type(mock.rurl) === 'regexp') { | ||
if (!mock.rurl.test(options.url)) continue | ||
} | ||
console.log('[mock]', options.url, '>', mock.rurl) | ||
var data = Mock.mock(mock.template) | ||
console.log('[mock]', data) | ||
if (options.success) options.success(data, 'success', xhr) | ||
if (options.complete) options.complete(data, 'success', xhr) | ||
return KISSY | ||
var item = find(options) | ||
if (item) { | ||
var data = Mock.mock(item.template) | ||
if (options.success) options.success(data, xhr, options) | ||
if (options.complete) options.complete(xhr.status, xhr, options) | ||
return xhr | ||
} | ||
// } | ||
return _original_ajax.apply(this, arguments) | ||
@@ -158,4 +154,5 @@ } | ||
} | ||
} | ||
} | ||
// END(BROWSER) |
179
test/mock.js
module('mock') | ||
test('array', function() { | ||
function t(name, min, max) { | ||
var tpl = {} | ||
tpl[name] = [{}] | ||
function t(name, min, max) { | ||
var tpl = {} | ||
tpl[name] = [{}] | ||
var data = Mock.mock(tpl) | ||
ok(data.list.length >= min && data.list.length <= max, name) | ||
} | ||
t('list|1', 1, 1) | ||
t('list|10', 10, 10) | ||
t('list|5-10', 5, 10) | ||
var data = Mock.mock(tpl) | ||
ok(data.list.length >= min && data.list.length <= max, name) | ||
} | ||
t('list|1', 1, 1) | ||
t('list|10', 10, 10) | ||
t('list|5-10', 5, 10) | ||
}) | ||
test('float', function() { | ||
function t(name, value, min, max, dmin, dmax) { | ||
var tpl = {} | ||
tpl[name] = value | ||
function t(name, value, min, max, dmin, dmax) { | ||
var tpl = {} | ||
tpl[name] = value | ||
var data = Mock.mock(tpl) | ||
ok(data.float >= min && data.float < max, name) | ||
var data = Mock.mock(tpl) | ||
ok(data.float >= min && data.float < max, name + ' ' + data.float) | ||
var sfloat = data.float + '', | ||
decimal = sfloat.slice(sfloat.indexOf('.') + 1); | ||
ok(decimal.length >= dmin && decimal.length <= dmax, name) | ||
} | ||
var sfloat = data.float + '', | ||
decimal = sfloat.slice(sfloat.indexOf('.') + 1); | ||
ok(decimal.length >= dmin && decimal.length <= dmax, name) | ||
} | ||
t('float|.1-10', 10, 10, 11, 1, 10) | ||
t('float|.3-10', 123.123, 123, 124, 3, 10) | ||
t('float|20-100.1-10', 10, 20, 100, 1, 10) | ||
t('float|99.1-10', 10, 99, 100, 1, 10) | ||
t('float|.1-10', 10, 10, 11, 1, 10) | ||
t('float|.3-10', 123.123, 123, 124, 3, 10) | ||
t('float|20-100.1-10', 10, 20, 100, 1, 10) | ||
t('float|99.1-10', 10, 99, 100, 1, 10) | ||
}) | ||
test('integer', function() { | ||
function t(name, value, min, max) { | ||
var tpl = {} | ||
tpl[name] = value | ||
function t(name, value, min, max) { | ||
var tpl = {} | ||
tpl[name] = value | ||
var data = Mock.mock(tpl) | ||
ok(data.integer != value && data.integer >= min && data.integer <= max, name) | ||
} | ||
var data = Mock.mock(tpl) | ||
ok(data.integer != value && data.integer >= min && data.integer <= max, name) | ||
} | ||
t('integer|2-100', 1, 2, 100) | ||
t('integer|100-2', 1, 2, 100) | ||
t('integer|2-2', 1, 2, 2) | ||
t('integer|2-100', 1, 2, 100) | ||
t('integer|100-2', 1, 2, 100) | ||
t('integer|2-2', 1, 2, 2) | ||
}) | ||
test('string', function() { | ||
function t(name, value, min, max) { | ||
var tpl = {} | ||
tpl[name] = value | ||
function t(name, value, min, max) { | ||
var tpl = {} | ||
tpl[name] = value | ||
var data = Mock.mock(tpl) | ||
ok(data.string.length >= min && data.string.length <= max, name) | ||
} | ||
var data = Mock.mock(tpl) | ||
ok(data.string.length >= min && data.string.length <= max, name) | ||
} | ||
t('string|1-10', '★号', 2, 20) | ||
t('string|10', '★号', 20, 20) | ||
t('string|1-10', '★号', 2, 20) | ||
t('string|10', '★号', 20, 20) | ||
}) | ||
test('boolen', function() { | ||
var data = Mock.mock({ | ||
'bool|0-1': false | ||
}); | ||
ok(data.bool === true || data.bool === false); | ||
var data = Mock.mock({ | ||
'bool|0-1': false | ||
}); | ||
ok(data.bool === true || data.bool === false); | ||
}) | ||
test('holder', function() { | ||
function t(value) { | ||
var tpl = { | ||
holder: value | ||
function t(value) { | ||
var tpl = { | ||
holder: value | ||
} | ||
var data = Mock.mock(tpl) | ||
ok(data) | ||
// console.log(value, data.holder) | ||
} | ||
var data = Mock.mock(tpl) | ||
ok(data) | ||
// console.log(value, data.holder) | ||
} | ||
t('@EMAIL') | ||
t('@DATE') | ||
t('@TIME') | ||
t('@DATETIME') | ||
t('@EMAIL') | ||
t('@DATE') | ||
t('@TIME') | ||
t('@DATETIME') | ||
}) | ||
test('ajax', function() { | ||
Mock.mock(/\.json/, { | ||
'list|1-10': [{ | ||
'id|+1': 1 | ||
}] | ||
}) | ||
stop() | ||
$.ajax({ | ||
url: 'data.json', | ||
dataType: 'json', | ||
success: function(data) { | ||
// console.log(arguments) | ||
ok(data.list.length >= 1, 'data.json') | ||
}, | ||
fail: function() { | ||
ok(false, 'data.json') | ||
}, | ||
complete: function() { | ||
start() | ||
Mock.mock(/\.json/, { | ||
'list|1-10': [{ | ||
'id|+1': 1 | ||
}] | ||
}) | ||
stop() | ||
if (window.$) { | ||
$.ajax({ | ||
url: 'data.json', | ||
dataType: 'json', | ||
success: function(data) { | ||
// console.log(arguments) | ||
ok(data.list.length >= 1, 'data.json') | ||
}, | ||
fail: function() { | ||
ok(false, 'data.json') | ||
}, | ||
complete: function() { | ||
start() | ||
} | ||
}) | ||
} else { | ||
expect(0) | ||
start() | ||
} | ||
}) | ||
}) | ||
// @麦少 提供的 TC | ||
test('jsonp', function() { | ||
Mock.mock(/\.json/, { | ||
'list|1-10': [{ | ||
'id|+1': 1 | ||
}] | ||
}) | ||
stop() | ||
if (window.$) { | ||
$.ajax({ | ||
url: 'data.json', | ||
dataType: 'jsonp', | ||
success: function(data) { | ||
ok(data.list.length >= 1, 'data.json') | ||
}, | ||
fail: function() { | ||
ok(false, 'data.json') | ||
}, | ||
complete: function() { | ||
start() | ||
} | ||
}) | ||
} else { | ||
expect(0) | ||
start() | ||
} | ||
}) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1433232
84
18053
37
25