[Notice] Announcing the End of Demo Server [Read me]
doortts doortts 2017-09-25
mention: Enhance mention feature
- Support 'Search name English name and Korean both'
- Reduce search request to server
@da0f6c3dcdfb695ed099edf9d1ade68800cb405f
app/controllers/ProjectApp.java
--- app/controllers/ProjectApp.java
+++ app/controllers/ProjectApp.java
@@ -841,7 +841,7 @@
             Map<String, String> projectUserMap = new HashMap<>();
             if (user != null && StringUtils.isNotEmpty(user.loginId) && !user.loginId.equals(Constants.ADMIN_LOGIN_ID)) {
                 projectUserMap.put("loginid", user.loginId);
-                projectUserMap.put("searchText", user.getDisplayName() + user.loginId);
+                projectUserMap.put("searchText", user.name + user.getDisplayName() + user.loginId);
                 projectUserMap.put("name", user.getDisplayName());
                 projectUserMap.put("image", user.avatarUrl());
                 users.add(projectUserMap);
app/models/User.java
--- app/models/User.java
+++ app/models/User.java
@@ -386,7 +386,10 @@
 
         if(StringUtils.isNotBlank(query)) {
             el = el.disjunction();
-            el = el.icontains("loginId", query).icontains("name", query).icontains("email", query);
+            el = el.icontains("loginId", query)
+                    .icontains("name", query)
+                    .icontains("englishName", query)
+                    .icontains("email", query);
             el.endJunction();
         }
 
public/javascripts/common/yobi.Mention.js
--- public/javascripts/common/yobi.Mention.js
+++ public/javascripts/common/yobi.Mention.js
@@ -117,6 +117,8 @@
     function _onLoadUserList(){
         htVar.doesNotDataLoaded = false;
 
+        var searchPending;
+
         htElement.welTarget
             .atwho({
                 at: "@",
@@ -128,10 +130,13 @@
                 callbacks: {
                     remoteFilter: function(query, callback) {
                         NProgress.start();
-                        $.getJSON(htVar.url, {query: query, mentionType: "user"}, function(data) {
-                            NProgress.done();
-                            callback(data.result)
-                        });
+                        clearTimeout(searchPending);
+                        searchPending = setTimeout(function () {
+                            $.getJSON(htVar.url, { query: query, mentionType: "user" }, function (data) {
+                                NProgress.done();
+                                callback(data.result)
+                            });
+                        }, 300);
                     }
                 }
             })
public/javascripts/yona-lib.js
--- public/javascripts/yona-lib.js
+++ public/javascripts/yona-lib.js
@@ -1,43 +1,43 @@
-yobi.Attachments=function(k){function q(g){r({vFile:g.oFile.files?g.oFile.files[0]:g.oFile,bTemporary:!0})}function r(g){if("undefined"===typeof g.vFile)return 0;var p,b=0,a=[];(g.vFile instanceof Array?g.vFile:[g.vFile]).forEach(function(d){var e=g.bTemporary,f=$.tmpl(n.sTplFileItem,{fileId:d.id,fileName:d.name,fileHref:d.url,fileSize:d.size,fileSizeReadable:humanize.filesize(d.size),mimeType:d.mimeType});t(f,d.mimeType);e&&f.addClass("temporary");p=f;"undefined"!==typeof d.id&&""!==d.id?(p.addClass("complete"),
-0<m.welTextarea.length&&p.click(c)):(p.attr("id",d.nSubmitId),p.css("opacity","0.2"),p.data("progressBar",p.find(".progress > .bar")));a.push(p);b+=parseInt(d.size,10)});0<a.length&&(0===m.welFileList.length&&(m.welFileList=$(n.sTplFileList),m.welContainer.append(m.welFileList)),m.welFileList.show(),m.welFileListHelp.show(),m.welFileList.append(a));return b}function u(g,p){var b;p=p||"#f36c22";b=g.css("background");g.css("background",p);setTimeout(function(){g.css("background",b)},500)}function l(g){var p=
-g.oRes,b=g.nSubmitId,a=g.oRes.id;-1===n.aTemporaryFileIds.indexOf(a)&&(n.aTemporaryFileIds.push(a),m.welTemporaryUploadFileList.val(n.aTemporaryFileIds.join(",")));if(!(p instanceof Object&&p.name&&p.url))return e(b,p);var a=$("#"+b),d=m.welFileList.find('[data-id="'+p.id+'"]');0<d.length?(a.remove(),u(d),p=!1):(a.attr({"data-id":p.id,"data-href":p.url,"data-name":p.name,"data-mime":p.mimeType}),a.find(".name").html(p.name),a.find(".size").html(humanize.filesize(p.size)),a.click(c),p=void 0);!1!==
-p&&h(b,100);b=$(["#"+g.nSubmitId,'.attached-file[data-id="'+g.oRes.id+'"]'].join(", "));p=x(g.nSubmitId);a=A(b);d=m.welTextarea;if(0!==d.length){var f=d.prop("selectionStart"),l=a.length-p.length-1;d.val(d.val().split(p).join(a));0<l&&z(d,f+l)}t(b,g.oRes.mimeType)}function f(g){h(g.nSubmitId,g.nPercentComplete)}function h(g,b){var a=$("#"+g);a.data("progressBar").css("width",b+"%");100===1*b&&(a.css("opacity","1"),setTimeout(function(){a.addClass("complete")},1E3))}function e(g){$("#"+g.nSubmitId).remove();
-0===m.welFileList.children().length&&(m.welFileList.hide(),m.welFileListHelp.hide());$yobi.notify(Messages("common.attach.error.upload",g.oRes.status,g.oRes.statusText));B(x(g.nSubmitId+".png"))}function c(g){var p=$(g.target);g=$(g.currentTarget);p.hasClass("btn-delete")?a(g):b(g)}function a(g){var b=g.attr("data-href");yobi.Files.deleteFile({sURL:b,fOnLoad:function(){var b=g.data("id"),b=n.aTemporaryFileIds.indexOf(b.toString());-1!==b&&(n.aTemporaryFileIds.splice(b,1),m.welTemporaryUploadFileList.val(n.aTemporaryFileIds.join(",")));
-B(g);g.remove();0===m.welFileList.children().length&&(m.welFileList.hide(),m.welFileListHelp.hide())},fOnError:function(g){$yobi.notify(Messages("common.attach.error.delete",g.status,g.statusText))}})}function b(g){var b=m.welTextarea;if(0===b.length)return!1;var a=b.prop("selectionStart"),c=b.val();g="string"===typeof g?g:A(g);b.val(c.substring(0,a)+g+c.substring(a));z(b,a+g.length)}function d(g){return 0<=["video/mp4","video/ogg","video/webm"].indexOf($.trim(g).toLowerCase())}function t(g,b){d(b)&&
-g.children("i.mimetype").addClass("yobicon-video2").show()}function A(g){var b=g.attr("data-mime"),a=g.attr("data-name");g=g.attr("data-href");a="["+a+"]("+g+") ";return"image"===b.substr(0,5)?"!"+a:d(b)?$("<div>").append($("<video>").attr("controls",!0).append($("<source>").attr("src",g)).append(a)).html():a}function x(g){return"\x3c!--_"+g+"_--\x3e"}function B(g){var b=m.welTextarea;if(0===b.length)return!1;g="string"===typeof g?g:A(g);var a=b.val().split(g).join(""),a=a.split(g.trim()).join("");
-b.val(a)}function z(b,a){var m=b.get(0);m.setSelectionRange?m.setSelectionRange(a,a):m.createTextRange&&(m=m.createTextRange(),m.collapse(!0),m.moveEnd("character",a),m.moveStart("character",a),m.select())}function y(g){b(x(g.nSubmitId))}function v(g){var a=g.oFiles,m=a.length;if("textarea"===g.weEvt.target.tagName.toLowerCase())for(g=0;g<m;g++)b(x(a[g].nSubmitId))}function w(b){r({vFile:b.attachments,bTemporary:!1});"undefined"===typeof n.sResourceId&&r({vFile:b.tempFiles,bTemporary:!0})}var n={},
-m={};(function(b){var a=b=b||{},c='<a href="${fileHref}?action=download" class="download ybtn ybtn-mini" title="'+Messages("button.download")+' ${fileName}"><i class="yobicon-download"></i></a>';n.sTplFileList=a.sTplFileList||'<ul class="attaches wm">';n.sTplFileItem=a.sTplFileItem||'<li class="attach"><a href="${fileHref}" class="vmiddle" target="_blank"><i class="yobicon-paperclip"></i><span class="filename">${fileName}</span><span class="filesize">(${fileSizeReadable})</span></a>'+c+"</li>";n.sResourceId=
-a.sResourceId;n.sResourceType=a.sResourceType;a=b;m.welToAttach=a.targetFormId||$(a.elContainer);m.welTemporaryUploadFileList=$('<input type="hidden" name="'+(a.sTagNameForTemporaryUploadFiles||"temporaryUploadFiles")+'">');m.welToAttach.prepend(m.welTemporaryUploadFileList);n.aTemporaryFileIds=[];m.welContainer=$(a.elContainer);m.welContainer.data("isYobiAttachment",!0);n.sResourceId=n.sResourceId||m.welContainer.data("resourceId");n.sResourceType=n.sResourceType||m.welContainer.data("resourceType");
-n.attachments||(n.attachments=m.welContainer.data("attachments"));m.welTextarea=$(a.elTextarea);m.welFileList=m.welContainer.find("ul.attached-files");m.welFileListHelp=m.welContainer.find("p.help");a=yobi.Files.getEnv();m.welHelpDroppable=m.welContainer.find(".help-droppable");m.welHelpPastable=m.welContainer.find(".help-pastable");m.welHelpDroppable[a.bDroppable?"show":"hide"]();m.welHelpPastable[a.bPastable?"show":"hide"]();n.attachments?w(n.attachments):(n.sResourceType&&n.sResourceId||n.attachments)&&
-yobi.Files.getList({fOnLoad:w,sResourceType:n.sResourceType,sResourceId:n.sResourceId});b.sUploaderId&&yobi.Files.attach({beforeUpload:q,uploadProgress:f,successUpload:l,errorUpload:e,pasteFile:y,dropFile:v},b.sUploaderId)})(k||{});return{destroy:function(){k.sUploaderId&&yobi.Files.detach({beforeUpload:q,uploadProgress:f,successUpload:l,errorUpload:e,pasteFile:y,dropFile:v},k.sUploaderId);for(var b in m)m[b]=null;m=null}}};yobi.Files=function(){function k(b,a){if(b&&b.length)for(var c=0;c<b.length;c++)q(b[c],z(),a);else q(b,z(),a)}function q(b,a,c){b&&(b.nSubmitId=a||z());return!1===y("beforeUpload",{oFile:b,nSubmitId:b?b.nSubmitId:a},c)?!1:v.bXHR2?r(a,b,c):u(a,b,c)}function r(b,a,c){if(a.size&&a.size>v.nMaxFileSize)return h(b,{status:humanize.filesize(a.size),statusText:Messages("error.toolargefile",humanize.filesize(v.nMaxFileSize))},c);var d=new FormData;d.append("filePath",a,"image.png"===a.name?b+".png":a.name);
-$.ajax({type:"post",url:v.sUploadURL,data:d,cache:!1,processData:!1,contentType:!1,success:function(a){f(b,a,c)},error:function(a){h(b,a,c)},xhr:function(){var a=$.ajaxSettings.xhr();a.upload&&a.upload.addEventListener("progress",function(a){a.lengthComputable&&l(b,Math.ceil(a.loaded/a.total*100),c)},!1);return a}})}function u(b,a,c){var d=w[c];if(!d.welInputFile&&!a)return!1;var e=d.welInputFile||$(a);a=e.clone();var t=$('<form method="post" enctype="multipart/form-data" style="display:none">');
-a.insertAfter(e);a.on("change",$.proxy(A,this,c));d.welInputFile=a;t.attr("action",v.sUploadURL);t.append(e).appendTo(document.body);var n=function(){e.remove();t.remove();t=e=null},d=v.htUploadOpts;d.success=function(a){f(b,a,c);n();n=null};d.uploadProgress=function(a,g,d,e){l(b,e,c);n();n=null};d.error=function(a){h(b,a,c);n();n=null};t.ajaxForm(d);t.submit()}function l(a,b,c){y("uploadProgress",{nSubmitId:a,nPercentComplete:b},c)}function f(a,b,c){if(!(b instanceof Object&&b.name&&b.url))return h(a,
-b);c&&w[c]&&w[c].welInputFile&&w[c].welInputFile.val("");y("successUpload",{nSubmitId:a,oRes:b},c)}function h(a,b,c){y("errorUpload",{nSubmitId:a,oRes:b},c)}function e(a){var c=w[a];c.welInputFile.on("change",$.proxy(A,this,a));if(v.bDroppable){c.welContainer.on({dragover:$.proxy(b,this,a),drop:$.proxy(x,this,a)});var e=$("#tplDropFilesHere").text().trim()||'<div class="upload-drop-here"><div class="msg-wrap"><div class="msg">'+Messages("common.attach.dropFilesHere")+"</div></div></div>";c.welDropper=
-$(e);c.welTextarea.before(c.welDropper);c.welTextarea.on({dragover:$.proxy(b,this,a),dragenter:$.proxy(d,this,a),dragleave:$.proxy(t,this,a),drop:$.proxy(x,this,a)})}if(v.bPastable&&c.welTextarea)c.welTextarea.on("paste",$.proxy(B,this,a));c.welContainer.data("isYobiUploader",!0);c.welTextarea.data("isYobiUploader",!0)}function c(){$(document.body).addClass("dragover")}function a(){$(document.body).removeClass("dragover")}function b(a,b){c();b.stopPropagation();b.preventDefault();return!1}function d(a,
-b){c();var d=b.originalEvent.dataTransfer,e;e=b.originalEvent.dataTransfer;e=e.types?-1<e.types.indexOf("text/uri-list")?"link":-1<e.types.indexOf("Files")||-1<e.types.indexOf("text/plain")?"copy":"none":"none";d.dropEffect=e;b.stopPropagation();b.preventDefault()}function t(b,c){a();c.originalEvent.dataTransfer.dropEffect="none";c.stopPropagation();c.preventDefault()}function A(a){var b=w[a],c;c=b.welInputFile.val();var d=c.indexOf("fakepath");(c=-1<d?c.substring(d+8+1):c)&&""!==c&&k(b.welInputFile[0].files||
-b.welInputFile[0],a)}function x(b,c){a();var d=c.originalEvent.dataTransfer.files;if(d&&0!==d.length)return k(d,b),y("dropFile",{weEvt:c,oFiles:d},b),c.stopPropagation(),c.preventDefault(),!1}function B(a,b){var c=b.originalEvent.clipboardData;if(c&&c.items)for(var d,e,f=0,t=c.items.length;f<t;f++)d=c.items[f],(e=d.getAsFile())&&0===e.type.indexOf("image/")&&(d=z(),e.name=d+".png",q(e,d,a),y("pasteFile",{nSubmitId:d,oFile:e},a),b.preventDefault())}function z(){var a=new Date;return a.getMilliseconds()+
-"-"+a.getFullYear()+""+(a.getMonth()+1)+"-"+a.getDate()+"-"+a.getHours()+""+a.getMinutes()+"-"+a.getSeconds()}function y(a,b,c){a=(n[a]||[]).concat(n[(c?c+".":"")+a]||[]);if(!1!==a instanceof Array){var d;a.forEach(function(a){d=d||a(b)});return d}}var v={},w={},n={};return{init:function(a){a=a||{};v.sListURL=a.sListURL;v.sUploadURL=a.sUploadURL;v.htUploadOpts=a.htUploadOpts||{dataType:"json"};v.bXHR2=!(!window.ProgressEvent||!window.FileReader)&&!!window.FormData;-1<navigator.userAgent.toLowerCase().indexOf("trident")&&
-(v.bXHR2=v.bXHR2&&-1<location.protocol.toLowerCase().indexOf("https"));v.bDroppable="undefined"!=typeof window.File&&v.bXHR2;v.bPastable="undefined"!=typeof document.onpaste&&v.bXHR2&&-1===navigator.userAgent.indexOf("FireFox");v.nMaxFileSize=a.maxFileSize||2147483454},getEnv:function(){return v},getUploader:function(a,b,c){c=c||z();if($(a).data("isYobiUploader")||$(b).data("isYobiUploader"))return!1;var d=c;w[d]={};w[d].welContainer=$(a);w[d].welTextarea=$(b);w[d].welInputFile=w[d].welContainer.find("input[type=file]");
-w[d].welContainer.attr("data-namespace",d);v.bXHR2||w[d].welInputFile.attr("multiple",null);e(c);return w[c].welContainer},destroyUploader:function(a){if(a&&w[a]){var b=w[a];b.welInputFile.off();b.welContainer.off();b.welTextarea.off();b.welContainer.data("isYobiUploader",!1);b.welTextarea.data("isYobiUploader",!1);delete w[a]}},attach:function(a,b,c){if("object"===typeof a){c=b?b+".":"";for(var d in a)n[c+d]=n[c+d]||[],n[c+d].push(a[d])}else c=c?c+".":"",n[c+a]=n[c+a]||[],n[c+a].push(b)},detach:function(a,
-b,c){c=c?c+".":"";if(b){var d=n[c+a];b=d?d.indexOf(b):-1;-1<b&&n[c+a].splice(b,1)}else n[c+a]=[]},getList:function(a){$.ajax({type:"get",url:v.sListURL,success:a.fOnLoad,error:a.fOnError,data:{containerType:a.sResourceType,containerId:a.sResourceId}})},uploadFile:k,deleteFile:function(a){$yobi.sendForm({sURL:a.sURL,fOnLoad:a.fOnLoad,fOnError:a.fOnError,htData:{_method:"delete"},htOptForm:{method:"post",enctype:"multipart/form-data"}})}}}();yobi.Markdown=function(k){var q,r;function u(e){q=e.sMarkdownRendererUrl;r={gfm:!0,tables:!0,pedantic:!1,sanitize:!1,smartLists:!0,langPrefix:"",highlight:function(c,a){if(a)try{return hljs.highlight(a.toLowerCase(),c).value}catch(b){console.log(b.message)}}}}function l(e,c){var a={body:c,breaks:e.hasClass("readme-body")?!1:!0};$.ajax(q,{type:"post",contentType:"application/json; charset=utf-8",data:JSON.stringify(a),success:function(a){e.html(a);$("pre code").each(function(a,b){hljs.highlightBlock(b)})}})}
-function f(e){var c=e.parents('[data-toggle="markdown-editor"]').get(0);if(!c)return!1;$(c).on("click",'a[data-mode="preview"]',function(a){a=$(a.delegateTarget).find("div.markdown-preview");var b=e.val();q&&l(a,b);a.css({"min-height":e.height()+"px"})});e.on("keydown.tabkey-event-handler",function(a){if(9===a.keyCode){a.preventDefault();a=this.selectionStart;var b=this.selectionEnd;this.value=this.value.substring(0,a)+"\t"+this.value.substring(b);this.selectionEnd=a+1}})}function h(e){$(e||"[markdown]").each(function(c,
-a){var b=a.tagName.toUpperCase();if("TEXTAREA"===b||"INPUT"===b||"true"==a.contentEditable)f($(a));else{var b=$(a),d=b.text(),d=d?$yobi.xssClean(marked(d,r)):b.html();$(".markdown-loader").remove();b.html(d).removeClass("markdown-before")}})}r=q=void 0;return{init:function(e){e=e||{};u(e);h(e.aTarget)},enableMarkdown:h,render:l}}();yobi.Mention=function(k){function q(e){e=e||window.event;e=e.which||e.keyCode;(64===e||35===e)&&f.doesNotDataLoaded&&l()}function r(){f.nKeyupEventGenerator&&clearInterval(f.nKeyupEventGenerator);f.nKeyupEventGenerator=setInterval(function(){f.sMentionText!=h.welTarget.val()&&(h.welTarget.trigger("keyup"),f.sMentionText=h.welTarget.val())},100)}function u(){f.nKeyupEventGenerator&&(clearInterval(f.nKeyupEventGenerator),f.nKeyupEventGenerator=null)}function l(){f.doesNotDataLoaded=!1;h.welTarget.atwho({at:"@",
-limit:10,displayTpl:"<li data-value='@${loginid}'><img style='width:20px;height:20px;' src='${image}'> ${name} <small>${loginid}</small></li>",suspendOnComposing:!1,searchKey:"searchText",insertTpl:"@${loginid}",callbacks:{remoteFilter:function(e,c){NProgress.start();$.getJSON(f.url,{query:e,mentionType:"user"},function(a){NProgress.done();c(a.result)})}}}).atwho({at:"#",limit:10,displayTpl:"<li data-value='#${issueNo}'><small>#${issueNo}</small> ${title}</li>",suspendOnComposing:!1,insertTpl:"#${issueNo}",
-callbacks:{remoteFilter:function(e,c){NProgress.start();$.getJSON(f.url,{query:e,mentionType:"issue"},function(a){NProgress.done();c(a.result)})},sorter:function(e,c,a){var b,d,f;if(!e)return c;f=[];b=0;for(d=c.length;b<d;b++){a=c[b];if(a.issueNo===e)a.atwhoOrder=0;else{var h=a.issueNo.toLowerCase().indexOf(e.toLowerCase());a.atwhoOrder=b+1+Math.pow(10,h)+(-1<h?0:Math.pow(100,a.title.toLowerCase().indexOf(e.toLowerCase())))}f.push(a)}return f.sort(function(a,b){return a.atwhoOrder-b.atwhoOrder})}}}).atwho("run")}
-var f={},h={};(function(e){f=e||{};f.doesNotDataLoaded=!0;f.nKeyupEventGenerator=null;f.sMentionText=null;f.target?h.welTarget=$(f.target):window.console&&console.error("mention form element targeting doesn't exist!");h.welTarget.on("keypress",q);jQuery.browser.mozilla&&(h.welTarget.on("focus",r),h.welTarget.on("blur",u))})(k||{})};yobi.OriginalMessage=function(k){function q(k,q,l){var f,h;f=function(){q();k.click(h)};h=function(){l();k.click(f)};k.click(f)}return{hide:function(k){$.each(k,function(k,l){var f,h,e,c=$(l);c.find(":contains('---')").each(function(){var a=$(this).html();return a&&!$(this).is(c.children(":first"))&&a.match(/(^|^<[^>]+>)---+[^-]*---+/)?(f=$(this),!1):!0});f&&(h=f.add(f.nextAll()).add(f.parents().filter(function(a,b){return 0<c.has(b).length}).nextAll()).hide(),e=$("<button>").css("border",0).css("padding-left",
-"5px").css("padding-right","5px").attr("type","button").text("..."),q(e,function(){h.show()},function(){h.hide()}),f.before(e))})}}}();yobi.Pagination=function(k,q){function r(c){var a=q.createElement("a");a.href=c.replace("&amp;","&");return a.search}function u(c,a,b){var d=r(c),e=new RegExp("(^|&|\\?)"+b+"=[^&]+"),f=e.exec(d);a=d=f?d.replace(e,f[1]+b+"="+a):d+"&"+b+"="+a;b=q.createElement("a");b.href=c;b.search="?"==a[0]?a:"?"+a;return b.href}function l(c){var a=$('<input type="number" pattern="[0-9]*" class="input-mini nospinner">');a.prop({name:c.paramNameForPage,max:c.totalPages,min:1});a.val(c.current);a.on("keydown",function(b){var d;
-d=c.current;if(!1===e.test(a.val()))a.val(d),d=!1;else{d=parseInt(a.val(),10);var f=parseInt(a.attr("min"),10),h=parseInt(a.attr("max"),10);d<f?a.val(f):d>h&&a.val(h);d=!0}d&&(d=a.val(),"function"===typeof c.submit?c.submit(d):13===b.which&&(q.location.href=u(c.url,d,c.paramNameForPage)))});return a}function f(c){var a=$('<li class="page-num ikon">');if(c.bActive){var b=$("<a pjax-page>");b.html(c.sLinkHTMLOn);"function"===typeof c.submit?(b.attr("href","javascript: void(0);"),b.on("click",function(){c.submit(c.nSubmitPageNum)})):
-b.attr("href",c.sLinkHref);a.append(b)}else a.html(c.sLinkHTMLOff);yobi.ShortcutKey&&(b={},b[c.sShortcutKey]=c.sLinkHref,yobi.ShortcutKey.setKeymapLink(b));return a}var h={},e=/^.[0-9]*$/;return{update:function(c,a,b){if(!(0>=a)){c=$(c);b=b||{};b.url=b.url||q.URL;b.firstPage=b.firstPage||1;b.totalPages=a;b.paramNameForPage=b.paramNameForPage||"pageNum";var d;if(e.test(b.current))d=b.current;else{var t=r(b.url);d=parseInt;var k=b.paramNameForPage;h[k]=h[k]||new RegExp("(^|&|\\?)"+k+"=([^&]+)");t=h[k].exec(t);
-d=d(t?t[2]:null,10)||b.firstPage}b.current=d;b.hasPrev="undefined"===typeof b.hasPrev?b.current>b.firstPage:b.hasPrev;b.hasNext="undefined"===typeof b.hasNext?b.current<b.totalPages:b.hasNext;if(!$.isNumeric(b.current))throw Error("options.current is not valid: "+b.current);c.html("");c.addClass("page-navigation-wrap");t=Messages("button.prevPage")||"PREV";d='<i class="ico btn-pg-prev"></i><span>'+t+"</span>";t='<i class="ico btn-pg-prev off"></i><span class="off">'+t+"</span>";d=$.extend(b,{bActive:b.hasPrev,
-sLinkHref:b.hasPrev?u(b.url,b.current-1,b.paramNameForPage):"",sLinkHTMLOn:d,sLinkHTMLOff:t,sShortcutKey:"LEFT",nSubmitPageNum:b.current-1});d=f(d);k=Messages("button.nextPage")||"NEXT";t="<span>"+k+'</span><i class="ico btn-pg-next"></i>';k='<span class="off">'+k+'</span><i class="ico btn-pg-next off"></i>';t=$.extend(b,{bActive:b.hasNext,sLinkHref:b.hasNext?u(b.url,b.current+1,b.paramNameForPage):"",sLinkHTMLOn:t,sLinkHTMLOff:k,sShortcutKey:"RIGHT",nSubmitPageNum:b.current+1});t=f(t);b=l(b);b=$('<li class="page-num">').append(b);
-k=$('<li class="page-num delimiter">').text("/");a=$('<li class="page-num">').text(a);var x=$('<ul class="page-nums">');x.append([d,b,k,a,t]);c.append(x)}}}}(window,document);$(document).on("click.pagination.number-api",'input[name="pageNum"][type="number"]',function(){$(this).select()});yobi.ShortcutKey=function(k){function q(c){var a;var b=h.htKeycodeMap[c.keyCode];if("undefined"===typeof b)a=void 0;else{a=[];var d="";c.altKey&&a.push("ALT");(c.ctrlKey||c.metaKey)&&a.push("CTRL");c.shiftKey&&a.push("SHIFT");a.push(b);a=d=a.join("+").toUpperCase()}b=e[a];if("function"===typeof b){d=c.target.tagName.toUpperCase();c={weEvt:c,welTarget:$(c.target),sTagName:d,sKeyInput:a,bFormInput:-1<h.aFormTags.indexOf(d)};try{b(c)}catch(f){}finally{}}}function r(c,a){if("string"===typeof c){var b,
-d=a;b=l(c);e[b]=d}else for(b in c){a=c[b];var d=b,f=a,d=l(d);e[d]=f}}function u(c){c=l(c);delete e[c]}function l(c){c=c.toUpperCase()||"";c=c.replace(h.rxTrim,"");return c=c.split("+").sort(function(a){return-1*h.aCombinationKeys.indexOf(a)}).join("+")}function f(){$(window).off({keydown:q,beforeunload:f});e=h=null}var h={},e={};h.rxTrim=/\s+/g;h.aFormTags=["INPUT","TEXTAREA"];h.aCombinationKeys=["CTRL","ALT","SHIFT"];h.htKeycodeMap={13:"ENTER",38:"UP",40:"DOWN",37:"LEFT",39:"RIGHT",13:"ENTER",27:"ESC",
+yobi.Attachments=function(g){function p(n){q({vFile:n.oFile.files?n.oFile.files[0]:n.oFile,bTemporary:!0})}function q(n){if("undefined"===typeof n.vFile)return 0;var y,a=0,b=[];(n.vFile instanceof Array?n.vFile:[n.vFile]).forEach(function(d){var e=n.bTemporary,f=$.tmpl(m.sTplFileItem,{fileId:d.id,fileName:d.name,fileHref:d.url,fileSize:d.size,fileSizeReadable:humanize.filesize(d.size),mimeType:d.mimeType});r(f,d.mimeType);e&&f.addClass("temporary");y=f;"undefined"!==typeof d.id&&""!==d.id?(y.addClass("complete"),
+0<h.welTextarea.length&&y.click(c)):(y.attr("id",d.nSubmitId),y.css("opacity","0.2"),y.data("progressBar",y.find(".progress > .bar")));b.push(y);a+=parseInt(d.size,10)});0<b.length&&(0===h.welFileList.length&&(h.welFileList=$(m.sTplFileList),h.welContainer.append(h.welFileList)),h.welFileList.show(),h.welFileListHelp.show(),h.welFileList.append(b));return a}function t(n,a){var h;a=a||"#f36c22";h=n.css("background");n.css("background",a);setTimeout(function(){n.css("background",h)},500)}function l(n){var a=
+n.oRes,b=n.nSubmitId,d=n.oRes.id;-1===m.aTemporaryFileIds.indexOf(d)&&(m.aTemporaryFileIds.push(d),h.welTemporaryUploadFileList.val(m.aTemporaryFileIds.join(",")));if(!(a instanceof Object&&a.name&&a.url))return e(b,a);var d=$("#"+b),f=h.welFileList.find('[data-id="'+a.id+'"]');0<f.length?(d.remove(),t(f),a=!1):(d.attr({"data-id":a.id,"data-href":a.url,"data-name":a.name,"data-mime":a.mimeType}),d.find(".name").html(a.name),d.find(".size").html(humanize.filesize(a.size)),d.click(c),a=void 0);!1!==
+a&&k(b,100);b=$(["#"+n.nSubmitId,'.attached-file[data-id="'+n.oRes.id+'"]'].join(", "));a=w(n.nSubmitId);d=A(b);f=h.welTextarea;if(0!==f.length){var l=f.prop("selectionStart"),g=d.length-a.length-1;f.val(f.val().split(a).join(d));0<g&&z(f,l+g)}r(b,n.oRes.mimeType)}function f(n){k(n.nSubmitId,n.nPercentComplete)}function k(n,a){var h=$("#"+n);h.data("progressBar").css("width",a+"%");100===1*a&&(h.css("opacity","1"),setTimeout(function(){h.addClass("complete")},1E3))}function e(n){$("#"+n.nSubmitId).remove();
+0===h.welFileList.children().length&&(h.welFileList.hide(),h.welFileListHelp.hide());$yobi.notify(Messages("common.attach.error.upload",n.oRes.status,n.oRes.statusText));B(w(n.nSubmitId+".png"))}function c(n){var h=$(n.target);n=$(n.currentTarget);h.hasClass("btn-delete")?b(n):a(n)}function b(n){var a=n.attr("data-href");yobi.Files.deleteFile({sURL:a,fOnLoad:function(){var a=n.data("id"),a=m.aTemporaryFileIds.indexOf(a.toString());-1!==a&&(m.aTemporaryFileIds.splice(a,1),h.welTemporaryUploadFileList.val(m.aTemporaryFileIds.join(",")));
+B(n);n.remove();0===h.welFileList.children().length&&(h.welFileList.hide(),h.welFileListHelp.hide())},fOnError:function(a){$yobi.notify(Messages("common.attach.error.delete",a.status,a.statusText))}})}function a(a){var b=h.welTextarea;if(0===b.length)return!1;var c=b.prop("selectionStart"),d=b.val();a="string"===typeof a?a:A(a);b.val(d.substring(0,c)+a+d.substring(c));z(b,c+a.length)}function d(a){return 0<=["video/mp4","video/ogg","video/webm"].indexOf($.trim(a).toLowerCase())}function r(a,h){d(h)&&
+a.children("i.mimetype").addClass("yobicon-video2").show()}function A(a){var h=a.attr("data-mime"),b=a.attr("data-name");a=a.attr("data-href");b="["+b+"]("+a+") ";return"image"===h.substr(0,5)?"!"+b:d(h)?$("<div>").append($("<video>").attr("controls",!0).append($("<source>").attr("src",a)).append(b)).html():b}function w(a){return"\x3c!--_"+a+"_--\x3e"}function B(a){var b=h.welTextarea;if(0===b.length)return!1;a="string"===typeof a?a:A(a);var c=b.val().split(a).join(""),c=c.split(a.trim()).join("");
+b.val(c)}function z(a,h){var b=a.get(0);b.setSelectionRange?b.setSelectionRange(h,h):b.createTextRange&&(b=b.createTextRange(),b.collapse(!0),b.moveEnd("character",h),b.moveStart("character",h),b.select())}function x(h){a(w(h.nSubmitId))}function u(h){var b=h.oFiles,c=b.length;if("textarea"===h.weEvt.target.tagName.toLowerCase())for(h=0;h<c;h++)a(w(b[h].nSubmitId))}function v(a){q({vFile:a.attachments,bTemporary:!1});"undefined"===typeof m.sResourceId&&q({vFile:a.tempFiles,bTemporary:!0})}var m={},
+h={};(function(a){var b=a=a||{},c='<a href="${fileHref}?action=download" class="download ybtn ybtn-mini" title="'+Messages("button.download")+' ${fileName}"><i class="yobicon-download"></i></a>';m.sTplFileList=b.sTplFileList||'<ul class="attaches wm">';m.sTplFileItem=b.sTplFileItem||'<li class="attach"><a href="${fileHref}" class="vmiddle" target="_blank"><i class="yobicon-paperclip"></i><span class="filename">${fileName}</span><span class="filesize">(${fileSizeReadable})</span></a>'+c+"</li>";m.sResourceId=
+b.sResourceId;m.sResourceType=b.sResourceType;b=a;h.welToAttach=b.targetFormId||$(b.elContainer);h.welTemporaryUploadFileList=$('<input type="hidden" name="'+(b.sTagNameForTemporaryUploadFiles||"temporaryUploadFiles")+'">');h.welToAttach.prepend(h.welTemporaryUploadFileList);m.aTemporaryFileIds=[];h.welContainer=$(b.elContainer);h.welContainer.data("isYobiAttachment",!0);m.sResourceId=m.sResourceId||h.welContainer.data("resourceId");m.sResourceType=m.sResourceType||h.welContainer.data("resourceType");
+m.attachments||(m.attachments=h.welContainer.data("attachments"));h.welTextarea=$(b.elTextarea);h.welFileList=h.welContainer.find("ul.attached-files");h.welFileListHelp=h.welContainer.find("p.help");b=yobi.Files.getEnv();h.welHelpDroppable=h.welContainer.find(".help-droppable");h.welHelpPastable=h.welContainer.find(".help-pastable");h.welHelpDroppable[b.bDroppable?"show":"hide"]();h.welHelpPastable[b.bPastable?"show":"hide"]();m.attachments?v(m.attachments):(m.sResourceType&&m.sResourceId||m.attachments)&&
+yobi.Files.getList({fOnLoad:v,sResourceType:m.sResourceType,sResourceId:m.sResourceId});a.sUploaderId&&yobi.Files.attach({beforeUpload:p,uploadProgress:f,successUpload:l,errorUpload:e,pasteFile:x,dropFile:u},a.sUploaderId)})(g||{});return{destroy:function(){g.sUploaderId&&yobi.Files.detach({beforeUpload:p,uploadProgress:f,successUpload:l,errorUpload:e,pasteFile:x,dropFile:u},g.sUploaderId);for(var a in h)h[a]=null;h=null}}};yobi.Files=function(){function g(a,b){if(a&&a.length)for(var c=0;c<a.length;c++)p(a[c],z(),b);else p(a,z(),b)}function p(a,b,c){a&&(a.nSubmitId=b||z());return!1===x("beforeUpload",{oFile:a,nSubmitId:a?a.nSubmitId:b},c)?!1:u.bXHR2?q(b,a,c):t(b,a,c)}function q(a,b,c){if(b.size&&b.size>u.nMaxFileSize)return k(a,{status:humanize.filesize(b.size),statusText:Messages("error.toolargefile",humanize.filesize(u.nMaxFileSize))},c);var d=new FormData;d.append("filePath",b,"image.png"===b.name?a+".png":b.name);
+$.ajax({type:"post",url:u.sUploadURL,data:d,cache:!1,processData:!1,contentType:!1,success:function(b){f(a,b,c)},error:function(b){k(a,b,c)},xhr:function(){var b=$.ajaxSettings.xhr();b.upload&&b.upload.addEventListener("progress",function(b){b.lengthComputable&&l(a,Math.ceil(b.loaded/b.total*100),c)},!1);return b}})}function t(a,b,c){var d=v[c];if(!d.welInputFile&&!b)return!1;var e=d.welInputFile||$(b);b=e.clone();var r=$('<form method="post" enctype="multipart/form-data" style="display:none">');
+b.insertAfter(e);b.on("change",$.proxy(A,this,c));d.welInputFile=b;r.attr("action",u.sUploadURL);r.append(e).appendTo(document.body);var m=function(){e.remove();r.remove();r=e=null},d=u.htUploadOpts;d.success=function(b){f(a,b,c);m();m=null};d.uploadProgress=function(b,d,n,e){l(a,e,c);m();m=null};d.error=function(b){k(a,b,c);m();m=null};r.ajaxForm(d);r.submit()}function l(a,b,c){x("uploadProgress",{nSubmitId:a,nPercentComplete:b},c)}function f(a,b,c){if(!(b instanceof Object&&b.name&&b.url))return k(a,
+b);c&&v[c]&&v[c].welInputFile&&v[c].welInputFile.val("");x("successUpload",{nSubmitId:a,oRes:b},c)}function k(a,b,c){x("errorUpload",{nSubmitId:a,oRes:b},c)}function e(b){var c=v[b];c.welInputFile.on("change",$.proxy(A,this,b));if(u.bDroppable){c.welContainer.on({dragover:$.proxy(a,this,b),drop:$.proxy(w,this,b)});var e=$("#tplDropFilesHere").text().trim()||'<div class="upload-drop-here"><div class="msg-wrap"><div class="msg">'+Messages("common.attach.dropFilesHere")+"</div></div></div>";c.welDropper=
+$(e);c.welTextarea.before(c.welDropper);c.welTextarea.on({dragover:$.proxy(a,this,b),dragenter:$.proxy(d,this,b),dragleave:$.proxy(r,this,b),drop:$.proxy(w,this,b)})}if(u.bPastable&&c.welTextarea)c.welTextarea.on("paste",$.proxy(B,this,b));c.welContainer.data("isYobiUploader",!0);c.welTextarea.data("isYobiUploader",!0)}function c(){$(document.body).addClass("dragover")}function b(){$(document.body).removeClass("dragover")}function a(a,b){c();b.stopPropagation();b.preventDefault();return!1}function d(a,
+b){c();var d=b.originalEvent.dataTransfer,e;e=b.originalEvent.dataTransfer;e=e.types?-1<e.types.indexOf("text/uri-list")?"link":-1<e.types.indexOf("Files")||-1<e.types.indexOf("text/plain")?"copy":"none":"none";d.dropEffect=e;b.stopPropagation();b.preventDefault()}function r(a,c){b();c.originalEvent.dataTransfer.dropEffect="none";c.stopPropagation();c.preventDefault()}function A(a){var b=v[a],c;c=b.welInputFile.val();var d=c.indexOf("fakepath");(c=-1<d?c.substring(d+8+1):c)&&""!==c&&g(b.welInputFile[0].files||
+b.welInputFile[0],a)}function w(a,c){b();var d=c.originalEvent.dataTransfer.files;if(d&&0!==d.length)return g(d,a),x("dropFile",{weEvt:c,oFiles:d},a),c.stopPropagation(),c.preventDefault(),!1}function B(a,b){var c=b.originalEvent.clipboardData;if(c&&c.items)for(var d,e,f=0,r=c.items.length;f<r;f++)d=c.items[f],(e=d.getAsFile())&&0===e.type.indexOf("image/")&&(d=z(),e.name=d+".png",p(e,d,a),x("pasteFile",{nSubmitId:d,oFile:e},a),b.preventDefault())}function z(){var a=new Date;return a.getMilliseconds()+
+"-"+a.getFullYear()+""+(a.getMonth()+1)+"-"+a.getDate()+"-"+a.getHours()+""+a.getMinutes()+"-"+a.getSeconds()}function x(a,b,c){a=(m[a]||[]).concat(m[(c?c+".":"")+a]||[]);if(!1!==a instanceof Array){var d;a.forEach(function(a){d=d||a(b)});return d}}var u={},v={},m={};return{init:function(a){a=a||{};u.sListURL=a.sListURL;u.sUploadURL=a.sUploadURL;u.htUploadOpts=a.htUploadOpts||{dataType:"json"};u.bXHR2=!(!window.ProgressEvent||!window.FileReader)&&!!window.FormData;-1<navigator.userAgent.toLowerCase().indexOf("trident")&&
+(u.bXHR2=u.bXHR2&&-1<location.protocol.toLowerCase().indexOf("https"));u.bDroppable="undefined"!=typeof window.File&&u.bXHR2;u.bPastable="undefined"!=typeof document.onpaste&&u.bXHR2&&-1===navigator.userAgent.indexOf("FireFox");u.nMaxFileSize=a.maxFileSize||2147483454},getEnv:function(){return u},getUploader:function(a,b,c){c=c||z();if($(a).data("isYobiUploader")||$(b).data("isYobiUploader"))return!1;var d=c;v[d]={};v[d].welContainer=$(a);v[d].welTextarea=$(b);v[d].welInputFile=v[d].welContainer.find("input[type=file]");
+v[d].welContainer.attr("data-namespace",d);u.bXHR2||v[d].welInputFile.attr("multiple",null);e(c);return v[c].welContainer},destroyUploader:function(a){if(a&&v[a]){var b=v[a];b.welInputFile.off();b.welContainer.off();b.welTextarea.off();b.welContainer.data("isYobiUploader",!1);b.welTextarea.data("isYobiUploader",!1);delete v[a]}},attach:function(a,b,c){if("object"===typeof a){c=b?b+".":"";for(var d in a)m[c+d]=m[c+d]||[],m[c+d].push(a[d])}else c=c?c+".":"",m[c+a]=m[c+a]||[],m[c+a].push(b)},detach:function(a,
+b,c){c=c?c+".":"";if(b){var d=m[c+a];b=d?d.indexOf(b):-1;-1<b&&m[c+a].splice(b,1)}else m[c+a]=[]},getList:function(a){$.ajax({type:"get",url:u.sListURL,success:a.fOnLoad,error:a.fOnError,data:{containerType:a.sResourceType,containerId:a.sResourceId}})},uploadFile:g,deleteFile:function(a){$yobi.sendForm({sURL:a.sURL,fOnLoad:a.fOnLoad,fOnError:a.fOnError,htData:{_method:"delete"},htOptForm:{method:"post",enctype:"multipart/form-data"}})}}}();yobi.Markdown=function(g){var p,q;function t(e){p=e.sMarkdownRendererUrl;q={gfm:!0,tables:!0,pedantic:!1,sanitize:!1,smartLists:!0,langPrefix:"",highlight:function(c,b){if(b)try{return hljs.highlight(b.toLowerCase(),c).value}catch(a){console.log(a.message)}}}}function l(e,c){var b={body:c,breaks:e.hasClass("readme-body")?!1:!0};$.ajax(p,{type:"post",contentType:"application/json; charset=utf-8",data:JSON.stringify(b),success:function(a){e.html(a);$("pre code").each(function(a,b){hljs.highlightBlock(b)})}})}
+function f(e){var c=e.parents('[data-toggle="markdown-editor"]').get(0);if(!c)return!1;$(c).on("click",'a[data-mode="preview"]',function(b){b=$(b.delegateTarget).find("div.markdown-preview");var a=e.val();p&&l(b,a);b.css({"min-height":e.height()+"px"})});e.on("keydown.tabkey-event-handler",function(b){if(9===b.keyCode){b.preventDefault();b=this.selectionStart;var a=this.selectionEnd;this.value=this.value.substring(0,b)+"\t"+this.value.substring(a);this.selectionEnd=b+1}})}function k(e){$(e||"[markdown]").each(function(c,
+b){var a=b.tagName.toUpperCase();if("TEXTAREA"===a||"INPUT"===a||"true"==b.contentEditable)f($(b));else{var a=$(b),d=a.text(),d=d?$yobi.xssClean(marked(d,q)):a.html();$(".markdown-loader").remove();a.html(d).removeClass("markdown-before")}})}q=p=void 0;return{init:function(e){e=e||{};t(e);k(e.aTarget)},enableMarkdown:k,render:l}}();yobi.Mention=function(g){function p(e){e=e||window.event;e=e.which||e.keyCode;(64===e||35===e)&&f.doesNotDataLoaded&&l()}function q(){f.nKeyupEventGenerator&&clearInterval(f.nKeyupEventGenerator);f.nKeyupEventGenerator=setInterval(function(){f.sMentionText!=k.welTarget.val()&&(k.welTarget.trigger("keyup"),f.sMentionText=k.welTarget.val())},100)}function t(){f.nKeyupEventGenerator&&(clearInterval(f.nKeyupEventGenerator),f.nKeyupEventGenerator=null)}function l(){f.doesNotDataLoaded=!1;var e;k.welTarget.atwho({at:"@",
+limit:10,displayTpl:"<li data-value='@${loginid}'><img style='width:20px;height:20px;' src='${image}'> ${name} <small>${loginid}</small></li>",suspendOnComposing:!1,searchKey:"searchText",insertTpl:"@${loginid}",callbacks:{remoteFilter:function(c,b){NProgress.start();clearTimeout(e);e=setTimeout(function(){$.getJSON(f.url,{query:c,mentionType:"user"},function(a){NProgress.done();b(a.result)})},300)}}}).atwho({at:"#",limit:10,displayTpl:"<li data-value='#${issueNo}'><small>#${issueNo}</small> ${title}</li>",
+suspendOnComposing:!1,insertTpl:"#${issueNo}",callbacks:{remoteFilter:function(c,b){NProgress.start();$.getJSON(f.url,{query:c,mentionType:"issue"},function(a){NProgress.done();b(a.result)})},sorter:function(c,b,a){var d,e,f;if(!c)return b;f=[];d=0;for(e=b.length;d<e;d++){a=b[d];if(a.issueNo===c)a.atwhoOrder=0;else{var k=a.issueNo.toLowerCase().indexOf(c.toLowerCase());a.atwhoOrder=d+1+Math.pow(10,k)+(-1<k?0:Math.pow(100,a.title.toLowerCase().indexOf(c.toLowerCase())))}f.push(a)}return f.sort(function(a,
+b){return a.atwhoOrder-b.atwhoOrder})}}}).atwho("run")}var f={},k={};(function(e){f=e||{};f.doesNotDataLoaded=!0;f.nKeyupEventGenerator=null;f.sMentionText=null;f.target?k.welTarget=$(f.target):window.console&&console.error("mention form element targeting doesn't exist!");k.welTarget.on("keypress",p);jQuery.browser.mozilla&&(k.welTarget.on("focus",q),k.welTarget.on("blur",t))})(g||{})};yobi.OriginalMessage=function(g){function p(g,p,l){var f,k;f=function(){p();g.click(k)};k=function(){l();g.click(f)};g.click(f)}return{hide:function(g){$.each(g,function(g,l){var f,k,e,c=$(l);c.find(":contains('---')").each(function(){var b=$(this).html();return b&&!$(this).is(c.children(":first"))&&b.match(/(^|^<[^>]+>)---+[^-]*---+/)?(f=$(this),!1):!0});f&&(k=f.add(f.nextAll()).add(f.parents().filter(function(b,a){return 0<c.has(a).length}).nextAll()).hide(),e=$("<button>").css("border",0).css("padding-left",
+"5px").css("padding-right","5px").attr("type","button").text("..."),p(e,function(){k.show()},function(){k.hide()}),f.before(e))})}}}();yobi.Pagination=function(g,p){function q(c){var b=p.createElement("a");b.href=c.replace("&amp;","&");return b.search}function t(c,b,a){var d=q(c),e=new RegExp("(^|&|\\?)"+a+"=[^&]+"),f=e.exec(d);b=d=f?d.replace(e,f[1]+a+"="+b):d+"&"+a+"="+b;a=p.createElement("a");a.href=c;a.search="?"==b[0]?b:"?"+b;return a.href}function l(c){var b=$('<input type="number" pattern="[0-9]*" class="input-mini nospinner">');b.prop({name:c.paramNameForPage,max:c.totalPages,min:1});b.val(c.current);b.on("keydown",function(a){var d;
+d=c.current;if(!1===e.test(b.val()))b.val(d),d=!1;else{d=parseInt(b.val(),10);var f=parseInt(b.attr("min"),10),k=parseInt(b.attr("max"),10);d<f?b.val(f):d>k&&b.val(k);d=!0}d&&(d=b.val(),"function"===typeof c.submit?c.submit(d):13===a.which&&(p.location.href=t(c.url,d,c.paramNameForPage)))});return b}function f(c){var b=$('<li class="page-num ikon">');if(c.bActive){var a=$("<a pjax-page>");a.html(c.sLinkHTMLOn);"function"===typeof c.submit?(a.attr("href","javascript: void(0);"),a.on("click",function(){c.submit(c.nSubmitPageNum)})):
+a.attr("href",c.sLinkHref);b.append(a)}else b.html(c.sLinkHTMLOff);yobi.ShortcutKey&&(a={},a[c.sShortcutKey]=c.sLinkHref,yobi.ShortcutKey.setKeymapLink(a));return b}var k={},e=/^.[0-9]*$/;return{update:function(c,b,a){if(!(0>=b)){c=$(c);a=a||{};a.url=a.url||p.URL;a.firstPage=a.firstPage||1;a.totalPages=b;a.paramNameForPage=a.paramNameForPage||"pageNum";var d;if(e.test(a.current))d=a.current;else{var r=q(a.url);d=parseInt;var g=a.paramNameForPage;k[g]=k[g]||new RegExp("(^|&|\\?)"+g+"=([^&]+)");r=k[g].exec(r);
+d=d(r?r[2]:null,10)||a.firstPage}a.current=d;a.hasPrev="undefined"===typeof a.hasPrev?a.current>a.firstPage:a.hasPrev;a.hasNext="undefined"===typeof a.hasNext?a.current<a.totalPages:a.hasNext;if(!$.isNumeric(a.current))throw Error("options.current is not valid: "+a.current);c.html("");c.addClass("page-navigation-wrap");r=Messages("button.prevPage")||"PREV";d='<i class="ico btn-pg-prev"></i><span>'+r+"</span>";r='<i class="ico btn-pg-prev off"></i><span class="off">'+r+"</span>";d=$.extend(a,{bActive:a.hasPrev,
+sLinkHref:a.hasPrev?t(a.url,a.current-1,a.paramNameForPage):"",sLinkHTMLOn:d,sLinkHTMLOff:r,sShortcutKey:"LEFT",nSubmitPageNum:a.current-1});d=f(d);g=Messages("button.nextPage")||"NEXT";r="<span>"+g+'</span><i class="ico btn-pg-next"></i>';g='<span class="off">'+g+'</span><i class="ico btn-pg-next off"></i>';r=$.extend(a,{bActive:a.hasNext,sLinkHref:a.hasNext?t(a.url,a.current+1,a.paramNameForPage):"",sLinkHTMLOn:r,sLinkHTMLOff:g,sShortcutKey:"RIGHT",nSubmitPageNum:a.current+1});r=f(r);a=l(a);a=$('<li class="page-num">').append(a);
+g=$('<li class="page-num delimiter">').text("/");b=$('<li class="page-num">').text(b);var w=$('<ul class="page-nums">');w.append([d,a,g,b,r]);c.append(w)}}}}(window,document);$(document).on("click.pagination.number-api",'input[name="pageNum"][type="number"]',function(){$(this).select()});yobi.ShortcutKey=function(g){function p(c){var b;var a=k.htKeycodeMap[c.keyCode];if("undefined"===typeof a)b=void 0;else{b=[];var d="";c.altKey&&b.push("ALT");(c.ctrlKey||c.metaKey)&&b.push("CTRL");c.shiftKey&&b.push("SHIFT");b.push(a);b=d=b.join("+").toUpperCase()}a=e[b];if("function"===typeof a){d=c.target.tagName.toUpperCase();c={weEvt:c,welTarget:$(c.target),sTagName:d,sKeyInput:b,bFormInput:-1<k.aFormTags.indexOf(d)};try{a(c)}catch(f){}finally{}}}function q(c,b){if("string"===typeof c){var a,
+d=b;a=l(c);e[a]=d}else for(a in c){b=c[a];var d=a,f=b,d=l(d);e[d]=f}}function t(c){c=l(c);delete e[c]}function l(c){c=c.toUpperCase()||"";c=c.replace(k.rxTrim,"");return c=c.split("+").sort(function(b){return-1*k.aCombinationKeys.indexOf(b)}).join("+")}function f(){$(window).off({keydown:p,beforeunload:f});e=k=null}var k={},e={};k.rxTrim=/\s+/g;k.aFormTags=["INPUT","TEXTAREA"];k.aCombinationKeys=["CTRL","ALT","SHIFT"];k.htKeycodeMap={13:"ENTER",38:"UP",40:"DOWN",37:"LEFT",39:"RIGHT",13:"ENTER",27:"ESC",
 32:"SPACE",8:"BACKSPACE",9:"TAB",46:"DELETE",33:"PAGEUP",34:"PAGEDOWN",36:"HOME",35:"END",65:"A",66:"B",67:"C",68:"D",69:"E",70:"F",71:"G",72:"H",73:"I",74:"J",75:"K",76:"L",77:"M",78:"N",79:"O",80:"P",81:"Q",82:"R",83:"S",84:"T",85:"U",86:"V",87:"W",88:"X",89:"Y",90:"Z",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",219:"[",221:"]",186:";",222:"'",188:",",190:".",191:"/",189:"-",187:"=",220:"\\",192:"`",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",
-120:"F9",121:"F10",122:"F11",123:"F12"};$(window).on({keydown:q,beforeunload:f});return{attach:r,detach:u,getHandlers:function(){return e},setKeymapLink:function(c){var a,b=function(a){a.bFormInput||(document.location.href=c[a.sKeyInput])};for(a in c)c[a]?r(a,b):u(a)}}}();(function(k){k=$yobi.createNamespace(k);k.container[k.name]=function(k,r){function u(a){if("function"===typeof e.fOnClickButton&&!1===e.fOnClickButton({weEvt:a,nButtonIndex:$(this).index()}))return!1;l()}function l(){c.welContainer.modal("hide")}function f(){"function"==typeof e.fOnAfterShow&&e.fOnAfterShow();e.bAutoFocusOnLastButton&&c.welButtons.find(".ybtn-primary:last,button:last").focus()}function h(){c.welMessage.html("");"function"==typeof e.fOnAfterHide&&e.fOnAfterHide()}var e={},c={};(function(a,
-b){e.sDefaultButton='<button type="button" class="ybtn ybtn-info" data-dismiss="modal">'+Messages("button.confirm")+"</button>";e.sTplCustomButton='<button type="button" class="ybtn ${class}">${text}</button>';e.bAutoFocusOnLastButton="undefined"!==typeof b.bAutoFocusOnLastButton?b.bAutoFocusOnLastButton:!0;c.welContainer=$(a).clone();c.welMessage=c.welContainer.find(".msg");c.welDescription=c.welContainer.find(".desc");c.welButtons=c.welContainer.find(".buttons");c.welContainer.modal({show:!1});
-c.welContainer.on("shown",f);c.welContainer.on("hidden",h);c.welContainer.on("click","button.ybtn",u)})(k,r||{});return{show:function(a,b,d){e.fOnAfterShow=d.fOnAfterShow;e.fOnAfterHide=d.fOnAfterHide;e.fOnClickButton=d.fOnClickButton;var f;if(d.aButtonLabels){f=[];var h=d.aButtonLabels;d=d.aButtonStyles||[];for(var l=0,k=h.length;l<k;l++)f.push($yobi.tmpl(e.sTplCustomButton,{text:h[l],"class":d[l]||(0===d.length&&l===k-1?"ybtn-primary":"ybtn-default")}));f=f.join("")}else f=e.sDefaultButton;c.welButtons.html(f);
-c.welMessage.html($yobi.nl2br(a));c.welDescription.html($yobi.nl2br(b||""));c.welContainer.modal("show")},hide:l}}})("yobi.ui.Dialog");(function(k){k=$yobi.createNamespace(k);k.container[k.name]=function(k){function r(a){if(0<a.originalEvent.deltaY&&b.welList.scrollTop()+b.welList.height()===b.welList.get(0).scrollHeight||0>a.originalEvent.deltaY&&0===b.welList.scrollTop())return a.preventDefault(),a.stopPropagation(),!1}function u(a){var b=$(a.target),b="LI"===a.target.tagName?b:$(b.parents("li")[0]);if(0===b.length||"undefined"===typeof b.attr("data-value"))return a.stopPropagation(),a.preventDefault(),!1;l(b);f(b);h()}function l(a){b.welSelectedLabel.html(a.html());
-b.waItems.removeClass("active");a.addClass("active")}function f(c){c=c.attr("data-value");var e=b.welContainer.attr("data-name");a.sName=e;a.sValue=c;if("undefined"!==typeof e){var f=b.welContainer.find("input[name='"+e+"']");0===f.length&&(f=$('<input type="hidden" name="'+e+'">'),b.welContainer.append(f));f.val(c)}}function h(){"function"==typeof a.fOnChange&&setTimeout(function(){a.fOnChange(e())},0)}function e(){return a.sValue}function c(a){a=b.welContainer.find(a);if(0>=a.length)return!1;a=
-$(a[0]);l(a);f(a);return!0}var a={sValue:""},b={};(function(d){b.welContainer=$(d.elContainer);b.welSelectedLabel=b.welContainer.find(".d-label");b.welList=b.welContainer.find(".dropdown-menu");b.waItems=b.welList.find("li");b.welList.on("click","li",u);b.welList.on("mousewheel",r);a.fOnChange=d.fOnChange;c("li[data-selected=true]")})(k);return{getValue:e,onChange:function(b){a.fOnChange=b;return!0},selectByValue:function(a){return c("li[data-value='"+a+"']")},selectItem:c}}})("yobi.ui.Dropdown");$(document).ready(function(){function k(l,f){var h;f=$("#"+l).find("li > a");(h=localStorage.getItem("yobitab-"+l))&&f[h]&&(h=$(f[h]))&&h.data(!1)&&h.tab("show")}var q,r,u;$(".nav-tabs[id]").each(function(l,f){r=$(f);u=r.attr("id");"undefined"!=typeof u&&(q=r.find("li"),q.click(function(){localStorage.setItem("yobitab-"+u,$(this).index())}),k(u,q))})});(function(k){k=$yobi.createNamespace(k);k.container[k.name]=function(k,r){function u(c){$(this).remove()}function l(c,a){c.bind("webkitTransitionEnd",function(){c.remove()});setTimeout(function(){c.css("opacity",0)},a)}var f,h,e;(function(c,a){a.sTplToast=a.sTplToast.replace("\n","");f=a.sTplToast||'<div class="toast" tabindex="-1">            <div class="btn-dismiss"><button type="button" class="btn-transparent">&times;</button></div>            <div class="center-text msg"></div></div>';h=$(c);
-e=$(f)})(k,r||{});return{push:function(c,a){var b=e.clone(),d=b.find(".msg");b.css("opacity","0");b.click(u);d.html($yobi.nl2br(c));h.prepend(b);b.css("opacity","1");a&&0<a&&l(b,a)},clear:function(){h.empty()}}}})("yobi.ui.Toast");(function(k){k=$yobi.createNamespace(k);k.container[k.name]=function(k,r){function u(f,e){f.match(l.sLastQuery)&&l.bIsLastRangeEntire?e(l.htCachedUsers):(l.htData.query=f,$yobi.sendForm({sURL:l.sActionURL,htOptForm:{method:"get"},htData:l.htData,sDataType:"json",fOnLoad:function(c,a,b){a=b.getResponseHeader("Content-Range");console.log(c);a=(a=l.rxContentRange.exec(a||""))?!(parseInt(a[1],10)<parseInt(a[2],10)):!0;l.bIsLastRangeEntire=a;l.sLastQuery=f;l.htCachedUsers=c;e(c)}}))}var l={},f;(function(h,
-e){l.sActionURL=e.sActionURL||"/users";l.rxContentRange=/items\s+([0-9]+)\/([0-9]+)/;l.htData=e.htData||{};try{f=$(h);f.typeahead({minLength:l.htData.minLength||0,items:10});var c=f.data("typeahead")||{};c.items=l.htData.limit||10;c.source=l.htData.source||u;"function"===typeof l.htData.updater&&(c.updater=l.htData.updater);"function"===typeof l.htData.render&&(c.render=l.htData.render);c.minLength=l.htData.minLength||0;f.typeahead(c)}catch(a){"object"==typeof console&&console.log(a)}})(k,r||{})}})("yobi.ui.Typeahead");
+120:"F9",121:"F10",122:"F11",123:"F12"};$(window).on({keydown:p,beforeunload:f});return{attach:q,detach:t,getHandlers:function(){return e},setKeymapLink:function(c){var b,a=function(a){a.bFormInput||(document.location.href=c[a.sKeyInput])};for(b in c)c[b]?q(b,a):t(b)}}}();(function(g){g=$yobi.createNamespace(g);g.container[g.name]=function(g,q){function t(b){if("function"===typeof e.fOnClickButton&&!1===e.fOnClickButton({weEvt:b,nButtonIndex:$(this).index()}))return!1;l()}function l(){c.welContainer.modal("hide")}function f(){"function"==typeof e.fOnAfterShow&&e.fOnAfterShow();e.bAutoFocusOnLastButton&&c.welButtons.find(".ybtn-primary:last,button:last").focus()}function k(){c.welMessage.html("");"function"==typeof e.fOnAfterHide&&e.fOnAfterHide()}var e={},c={};(function(b,
+a){e.sDefaultButton='<button type="button" class="ybtn ybtn-info" data-dismiss="modal">'+Messages("button.confirm")+"</button>";e.sTplCustomButton='<button type="button" class="ybtn ${class}">${text}</button>';e.bAutoFocusOnLastButton="undefined"!==typeof a.bAutoFocusOnLastButton?a.bAutoFocusOnLastButton:!0;c.welContainer=$(b).clone();c.welMessage=c.welContainer.find(".msg");c.welDescription=c.welContainer.find(".desc");c.welButtons=c.welContainer.find(".buttons");c.welContainer.modal({show:!1});
+c.welContainer.on("shown",f);c.welContainer.on("hidden",k);c.welContainer.on("click","button.ybtn",t)})(g,q||{});return{show:function(b,a,d){e.fOnAfterShow=d.fOnAfterShow;e.fOnAfterHide=d.fOnAfterHide;e.fOnClickButton=d.fOnClickButton;var f;if(d.aButtonLabels){f=[];var k=d.aButtonLabels;d=d.aButtonStyles||[];for(var g=0,l=k.length;g<l;g++)f.push($yobi.tmpl(e.sTplCustomButton,{text:k[g],"class":d[g]||(0===d.length&&g===l-1?"ybtn-primary":"ybtn-default")}));f=f.join("")}else f=e.sDefaultButton;c.welButtons.html(f);
+c.welMessage.html($yobi.nl2br(b));c.welDescription.html($yobi.nl2br(a||""));c.welContainer.modal("show")},hide:l}}})("yobi.ui.Dialog");(function(g){g=$yobi.createNamespace(g);g.container[g.name]=function(g){function q(b){if(0<b.originalEvent.deltaY&&a.welList.scrollTop()+a.welList.height()===a.welList.get(0).scrollHeight||0>b.originalEvent.deltaY&&0===a.welList.scrollTop())return b.preventDefault(),b.stopPropagation(),!1}function t(a){var b=$(a.target),b="LI"===a.target.tagName?b:$(b.parents("li")[0]);if(0===b.length||"undefined"===typeof b.attr("data-value"))return a.stopPropagation(),a.preventDefault(),!1;l(b);f(b);k()}function l(b){a.welSelectedLabel.html(b.html());
+a.waItems.removeClass("active");b.addClass("active")}function f(c){c=c.attr("data-value");var e=a.welContainer.attr("data-name");b.sName=e;b.sValue=c;if("undefined"!==typeof e){var f=a.welContainer.find("input[name='"+e+"']");0===f.length&&(f=$('<input type="hidden" name="'+e+'">'),a.welContainer.append(f));f.val(c)}}function k(){"function"==typeof b.fOnChange&&setTimeout(function(){b.fOnChange(e())},0)}function e(){return b.sValue}function c(b){b=a.welContainer.find(b);if(0>=b.length)return!1;b=
+$(b[0]);l(b);f(b);return!0}var b={sValue:""},a={};(function(d){a.welContainer=$(d.elContainer);a.welSelectedLabel=a.welContainer.find(".d-label");a.welList=a.welContainer.find(".dropdown-menu");a.waItems=a.welList.find("li");a.welList.on("click","li",t);a.welList.on("mousewheel",q);b.fOnChange=d.fOnChange;c("li[data-selected=true]")})(g);return{getValue:e,onChange:function(a){b.fOnChange=a;return!0},selectByValue:function(a){return c("li[data-value='"+a+"']")},selectItem:c}}})("yobi.ui.Dropdown");$(document).ready(function(){function g(g,f){var k;f=$("#"+g).find("li > a");(k=localStorage.getItem("yobitab-"+g))&&f[k]&&(k=$(f[k]))&&k.data(!1)&&k.tab("show")}var p,q,t;$(".nav-tabs[id]").each(function(l,f){q=$(f);t=q.attr("id");"undefined"!=typeof t&&(p=q.find("li"),p.click(function(){localStorage.setItem("yobitab-"+t,$(this).index())}),g(t,p))})});(function(g){g=$yobi.createNamespace(g);g.container[g.name]=function(g,q){function t(c){$(this).remove()}function l(c,b){c.bind("webkitTransitionEnd",function(){c.remove()});setTimeout(function(){c.css("opacity",0)},b)}var f,k,e;(function(c,b){b.sTplToast=b.sTplToast.replace("\n","");f=b.sTplToast||'<div class="toast" tabindex="-1">            <div class="btn-dismiss"><button type="button" class="btn-transparent">&times;</button></div>            <div class="center-text msg"></div></div>';k=$(c);
+e=$(f)})(g,q||{});return{push:function(c,b){var a=e.clone(),d=a.find(".msg");a.css("opacity","0");a.click(t);d.html($yobi.nl2br(c));k.prepend(a);a.css("opacity","1");b&&0<b&&l(a,b)},clear:function(){k.empty()}}}})("yobi.ui.Toast");(function(g){g=$yobi.createNamespace(g);g.container[g.name]=function(g,q){function t(f,e){f.match(l.sLastQuery)&&l.bIsLastRangeEntire?e(l.htCachedUsers):(l.htData.query=f,$yobi.sendForm({sURL:l.sActionURL,htOptForm:{method:"get"},htData:l.htData,sDataType:"json",fOnLoad:function(c,b,a){b=a.getResponseHeader("Content-Range");console.log(c);b=(b=l.rxContentRange.exec(b||""))?!(parseInt(b[1],10)<parseInt(b[2],10)):!0;l.bIsLastRangeEntire=b;l.sLastQuery=f;l.htCachedUsers=c;e(c)}}))}var l={},f;(function(g,
+e){l.sActionURL=e.sActionURL||"/users";l.rxContentRange=/items\s+([0-9]+)\/([0-9]+)/;l.htData=e.htData||{};try{f=$(g);f.typeahead({minLength:l.htData.minLength||0,items:10});var c=f.data("typeahead")||{};c.items=l.htData.limit||10;c.source=l.htData.source||t;"function"===typeof l.htData.updater&&(c.updater=l.htData.updater);"function"===typeof l.htData.render&&(c.render=l.htData.render);c.minLength=l.htData.minLength||0;f.typeahead(c)}catch(b){"object"==typeof console&&console.log(b)}})(g,q||{})}})("yobi.ui.Typeahead");
Add a comment
List