Вход Регистрация
Файл: module-assets/admin/validation-engine/js/releasenotes.js
Строк: 386
<?php
/*
*    Copyright, Cedric Dugas,
*    Do not sell or redistribute
*/


(function($)
{
    
// mardown parser options, do not touch
    
marked.setOptions({
         
gfmtrue,
         
pedanticfalse,
         
sanitizetrue
    
});

    
// Default setting
     
var defaultSettings = {
        
milestonesShown            10,
        
// If you want to show private repo
        // You need to add repo credentials in api.php
        
phpApi                 false,
            
phpApiPath        '/',
        
showDescription             true,
        
showComments             true,
        
// Used if phpApi is set to false
             
repo                            'rails',
             
username                   'rails'
     
};

        $.
fn.releaseNotes = function(settings){
         
settings = $.extend({}, defaultSettingssettings || {});
         var 
apiPath settings.phpApiPath+"api.php";
         var 
respType = (settings.phpApi) ? "json" "jsonp";

        var 
releases = {
            
load: function(el){
                var 
_this this;
                
this.$el = $(el);
                
this.loadEvents();

                var 
options = $.extend(settings, {
                    
state"closed",
                    
action"milestones",
                    
sort:"due_date"
                
});

                 
this.callApi(options).success(function(resp){
                     if(
resp.datarespresp.data;
                     
_this.showMilestones(resp);
                 }).
error(function(resp){
                     
console.log(resp)
                 });
            },
            
loadEvents : function(){
                var 
_this this;
                if(
settings.showDescriptionthis.$el.delegate(".issue""click", function(){ _this.loadIssueDesc(this); return false;});
                if(
settings.showCommentsthis.$el.delegate(".btnComments""click", function(){ _this.loadComments(this); return false;});
            },
            
loadIssueDesc : function(el){
                var 
$issue = $(el);
                var 
data $issue.data("issue");
                
$bigIssue $issue.find(".issueBig");

                if(!
$bigIssue.is(":visible")){
                    $(
".issueBig").not($bigIssue).slideUp();
                    
$bigIssue.find(".container").html(components.bigIssue(datasettings.showComments));
                    
$bigIssue.slideDown();
                }else{
                    
$bigIssue.slideUp();
                }
            },
            
showMilestones : function(milestones){
                var 
_this this;
                
milestones.sort(this.sortDate);
                $.
each(milestones, function(imilestone){
                    if(
== settings.milestonesShown) return false;
                    
milestone.prettyDate = (milestone.due_on) ? _this.getPrettyDate(milestone.due_on) :  _this.getPrettyDate(milestone.created_at);
                    
_this.$el.append(components.milestone(milestone));
                    var 
options = $.extend(settings, {
                        
milestonemilestone.number,
                        
sort:"created",
                        
action:"issues",
                        
state:"closed"
                    
});
                    
_this.callApi(options).success(function(resptextStatusjqXHR){
                        if(
resp.datarespresp.data;
                         
_this.showIssues(resp);
                     });
                     
                });
            },
            
loadComments : function(el){

                var 
_this =this;
                var 
issueid =$(el).attr("data-issue-id");
                $(
el).fadeOut().slideUp();

                var 
options = $.extend(settings, {
                    
id:issueid,
                    
action:"comments"
                
});
                
                
this.callApi(options).success(function(resptextStatusjqXHR){
                    if(
resp.datarespresp.data;
                     
_this.showComments(respissueid);
                 });
            },
            
showComments : function(comments,issueid){
                var 
_this this;

                var 
$commentContainer _this.$el.find("#issue"+issueid).find(".comments").empty();
                $.
each(comments, function(icomment){
                    
comment.prettyDate _this.getPrettyDate(comment.created_at);
                    
$commentContainer.append(components.comment(commentissueid));
                });
                
$commentContainer.slideDown();
            },
            
showIssues : function(issues){
                var 
_this  this;
                var 
jqMilestone _this.$el.find("[data-id-milestone="+issues[0].milestone.number+"]");
                var 
jqMilestoneIssues jqMilestone.find(".issues");
                
issues.sort(this.sortLabel);
                $.
each(issues, function(iissue){
                    
issue.prettyDate _this.getPrettyDate(issue.closed_at);
                    
jqMilestoneIssues.append(components.issue(issue));
                });
                
jqMilestone.addClass("separator");
                if(
settings.showDescriptionjqMilestone.find(".issue").addClass("cursor");
            },
            
getPrettyDate : function(date){
                var 
dateFormat "";
                if(!
date) return "";
                var 
date date.split("T");
                var 
dateArray date[0].split("-");
                var 
dateObj = new Date(dateArray[0],(dateArray[1]-1),dateArray[2]);

                var 
weekday=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday""Friday","Saturday");
                    var 
monthname=new Array("January","February","March","April","May","June","July","August""September","October","November","December");
                    
dateFormat += weekday[dateObj.getDay()] + ", ";
                     
dateFormat += monthname[dateObj.getMonth()] + " ";
                     
dateFormat += dateObj.getDate()  + ", ";
                    
dateFormat += dateObj.getFullYear();
                    return 
dateFormat;
            },
            
sortDate : function (milestone1milestone2) {

                
milestone1.dateTest = (milestone1.due_on) ? milestone1.due_on :  milestone1.created_at;
                
milestone2.dateTest = (milestone2.due_on) ? milestone2.due_on :  milestone2.created_at;

                var 
date1 = new Date(milestone1.dateTest );
                var 
date2 = new Date(milestone2.dateTest );

                  if (
date1 date2) return 1;
                  if (
date1 date2) return -1;
                  return 
0;
            },
            
sortLabel :function(thisObject,thatObject) {
                if(!
thisObject.labels.length) return 1;
                if(!
thatObject.labels.length) return -1;
                if (
thisObject.labels[0].name thatObject.labels[0].name){
                    return 
1;
                }
                else if (
thisObject.labels[0].name thatObject.labels[0].name){
                    return -
1;
                }
                return 
0;
              },
            
callApi: function(options){
                var 
myoption = $.extend({}, options);
                var 
url this.urls[options.action](options);

                if(
myoption.repodelete myoption.repo;
                if(
myoption.usernamedelete myoption.username;
                if(
myoption.iddelete myoption.id;
                if(
myoption.actiondelete myoption.action;

                return $.
ajax({
                    
url:this.urls[options.action](options),
                    
dataType:respType,
                    
data:myoption
                
});
            }, 
            
urls : {
                
domainName "https://api.github.com",
                
milestones : function(){
                    if(!
settings.phpApi){
                        return 
$url this.domainName"/repos/"+settings.username +"/"settings.repo +"/milestones";
                    }else{
                        return 
apiPath;
                    };
                },
                
issues : function(){
                    if(!
settings.phpApi){
                        return 
$url this.domainName+"/repos/"settings.username +"/"settings.repo +"/issues";
                    }else{
                        return 
apiPath;
                    };
                },
                
comments : function(options){
                    if(!
settings.phpApi){
                        return 
$url this.domainName+"/repos/"settings.username +"/"settings.repo+"/issues/"options.id +"/comments";
                    }else{
                        return 
apiPath;
                    }
                }
            }
        };

        return 
this.each(function(){
            
releases.load(thissettings);
        });
    };
    var 
components = {
    
milestone : function(data){
        return $(
'<div data-id-milestone="'+data.number+'" class="milestoneContainer">    
                    <h3 class="release">'
+data.title+'</h3>
                    <p class="dateRelease">Release Date: '
+data.prettyDate+'</p>
                    <div class="issues"></div>
              </div>'
).data("milestone"data);
    },
    
issue : function(data){
        var     
labels "",
            
_this     this;

        $.
each(data.labels, function(ilabel){   labels += _this.label(label);    });
        return $(
'<div id="issue'+data.number+'" class="issue" >
                <div class="issueSmall">
                    <div class="issueTitle">'
+labels+' '+$("<span>").html(data.title).text()+' </div>
                </div>
                <div style="display:none;" class="issueBig">
                    <div class="container"></div>
                    <div style="display:none;" class="comments"></div>
                </div>'
).data("issue"data);
    },
    
label : function(data){
        return 
'<span style="background-color:#'+data.color+';" class="label">'+data.name+'</span>';
    },
    
bigIssue : function(datashowComment){
        var 
commentLink = (data.comments != && showComment) ? '<a data-issue-id="'+data.number+'" href="#" class="btnComments btn">See Comments</a>' "";

        return $(
'<div class="avatar-bubble js-comment-container">
                <span class="avatar"><img height="48" src="'
+data.user.avatar_url+'" width="48"></span>
                <div class="bubble">
                  <div class="comment starting-comment adminable" id="issue-3542089">
                    <div class="body">
                      <p class="author">Opened by <a href="'
+data.user.url+'">'+data.user.login+'</a>, issue closed on '+data.prettyDate+'</p>
                      <h2 class="content-title"> '
+$("<span>").html(data.title).text()+'</h2>
                      <div class="formatted-content"> 
                        <div class="content-body markdown-body markdown-format">
                            '
+marked(data.body)+'
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>'
+commentLink).data("issue"data);
    },
    
comment : function(data){
        return 
'<div class="avatar-bubble js-comment-container">
                    <span class="avatar"><img height="48" src="'
+data.user.avatar_url+'" width="48"></span>
                    <div class="bubble">
                <div id="issuecomment-4369977" class="comment normal-comment adminable">
                  <div class="cmeta">
                    <p class="author">
                        <span class="icon"></span>
                      <strong class="author"><a href="'
+data.user.url+'">'+data.user.login+'</a></strong>
                      <em class="action-text">
                        commented
                      </em>
                    </p>
                    <p class="info">
                      <em class="date"><time class="js-relative-date">'
+data.prettyDate+'</time></em>
                    </p>
                  </div>
                  <div class="body">
                    <div class="formatted-content">
                      <div class="content-body markdown-body markdown-format">'
+marked(data.body)+'</div>
                    </div>
                  </div>
                </div>
                    </div>
                  </div>'
;
        }
    }
})(
jQuery);
?>
Онлайн: 1
Реклама