// Load GitHub UI\r
$(document).ready(function() {\r
//FIXME base should be choosen by user\r
- var base = $("body").attr("data-github-base");\r
- var head = $("body").attr("data-github-head");\r
- if(base && head) {\r
- Nitdoc.GitHub.UI.init(base, head);\r
+ var origin = $("body").attr("data-github-origin");\r
+ if(origin) {\r
+ Nitdoc.GitHub.UI.init(origin);\r
}\r
});\r
\r
/*\r
* Nitdoc.Github.UI for comment edition module\r
*/\r
-Nitdoc.GitHub.UI = function(base, head) {\r
- var base;\r
- var head;\r
-\r
+Nitdoc.GitHub.UI = function() {\r
var openedComments = 0; // currently edited comments count\r
var user = false; // logged user\r
+ var origin;\r
+\r
+ var init = function(originStr) {\r
+ console.log("init GitHub module (origin: "+ originStr +")");\r
\r
- var init = function(baseStr, headStr) {\r
- base = baseStr;\r
- head = headStr;\r
- console.log("init GitHub module (base: "+ base +", head: "+ head +")");\r
+ // parse origin\r
+ var parts = originStr.split(":");\r
+ origin = {\r
+ user: parts[0],\r
+ repo: parts[1],\r
+ branch: parts[2]\r
+ };\r
\r
// check local session\r
if(localStorage.user) {\r
var session = JSON.parse(localStorage.user);\r
- var user = tryLogin(session.login, Base64.decode(session.password), session.repo);\r
+ var user = tryLogin(session.login, Base64.decode(session.password), session.repo, session.branch);\r
if(!user) {\r
console.log("Session found but authentification failed");\r
localStorage.clear();\r
// activate ui\r
Nitdoc.GitHub.LoginBox.init("nav.main ul");\r
if(user) {\r
- Nitdoc.GitHub.LoginBox.displayLogout(base, head, user);\r
+ Nitdoc.GitHub.LoginBox.displayLogout(origin, user);\r
activate(user);\r
} else {\r
Nitdoc.GitHub.LoginBox.displayLogin();\r
user = loggedUser;\r
saveSession(user);\r
\r
- // get lastest commit\r
- var latest = Nitdoc.GitHub.API.getLastCommit(user, head);\r
- if(!latest || !latest.sha) {\r
- Nitdoc.GitHub.ModalBox.open("Head branch not found!", latest.status + ": " + latest.statusText, true);\r
- return;\r
- }\r
- if(localStorage.latestCommit != latest.sha) {\r
+ // check local storage synchro with branch\r
+ if(localStorage.latestCommit != user.latest.sha) {\r
console.log("Latest commit changed: cleaned cache");\r
localStorage.requests = "[]";\r
- localStorage.latestCommit = latest.sha;\r
+ localStorage.latestCommit = user.latest.sha;\r
}\r
console.log("Latest commit sha: " + localStorage.latestCommit);\r
\r
}\r
\r
// Attempt login through GitHub API\r
- var tryLogin = function(login, password, repo) {\r
- var user = new Nitdoc.GitHub.User(login, password, repo);\r
+ var tryLogin = function(login, password, repo, branch) {\r
+ var user = new Nitdoc.GitHub.User(login, password, repo, branch);\r
if(!Nitdoc.GitHub.API.login(user)) {\r
return false;\r
}\r
+ // get lastest commit\r
+ var latest = Nitdoc.GitHub.API.getLastCommit(user);\r
+ if(!latest || !latest.sha) {\r
+ return false;\r
+ }\r
+ user.latest = latest;\r
return user;\r
}\r
\r
return false;\r
}\r
console.log("New commit: " + newCommit.url);\r
- var pullRequest = Nitdoc.GitHub.API.createPullRequest(user, infos.message.split("\n\n")[0], infos.message, base, newCommit.sha);\r
+ var pullRequest = Nitdoc.GitHub.API.createPullRequest(user, infos.message.split("\n\n")[0], infos.message, origin, newCommit.sha);\r
if(!pullRequest.number) {\r
Nitdoc.GitHub.ModalBox.open("Unable to create pull request!", pullRequest.status + ": " + pullRequest.statusText, true);\r
return false;\r
\r
// close previously opened pull request\r
var closePullRequest = function(number) {\r
+ var requests = JSON.parse(localStorage.requests);\r
+ if(!requests[number]) {\r
+ Nitdoc.GitHub.ModalBox.open("Unable to close pull request!", "Pull request " + number + "not found", true);\r
+ return false;\r
+ }\r
// close pull request\r
- var res = Nitdoc.GitHub.API.updatePullRequest(user, "Canceled from Wikidoc", "", "closed", number);\r
+ var res = Nitdoc.GitHub.API.updatePullRequest(user, "Canceled from Nitdoc", "", "closed", requests[number].request);\r
if(!res.id) {\r
Nitdoc.GitHub.ModalBox.open("Unable to close pull request!", res.status + ": " + res.statusText, true);\r
return false;\r
}\r
// update in localstorage\r
- var requests = JSON.parse(localStorage.requests);\r
- if(!!requests[number]) {\r
- requests[number].isClosed = true;\r
- }\r
+ requests[number].isClosed = true;\r
localStorage.requests = JSON.stringify(requests);\r
}\r
\r
// Get file content from github\r
var getFileContent = function(githubUrl) {\r
- var origFile = Nitdoc.GitHub.API.getFile(user, githubUrl, head);\r
+ var origFile = Nitdoc.GitHub.API.getFile(user, githubUrl);\r
if(!origFile.content) {\r
Nitdoc.GitHub.ModalBox.open("Unable to locate source file!", origFile.status + ": " + origFile.statusText, true);\r
return;\r
var session = {\r
login: user.login,\r
password: Base64.encode(user.password),\r
- repo: user.repo\r
+ repo: user.repo,\r
+ branch: user.branch,\r
};\r
localStorage.user = JSON.stringify(session);\r
}\r
// accessors\r
\r
var getUser = function() { return user; }\r
- var getBase = function() { return base; }\r
- var getHead = function() { return head; }\r
+ var getOrigin = function() { return origin; }\r
var getOpenedComments = function() { return openedComments; }\r
var addOpenedComments = function() { openedComments += 1; }\r
var remOpenedComments = function() { openedComments -= 1; }\r
activate: activate,\r
disactivate: disactivate,\r
getUser: getUser,\r
- getBase: getBase,\r
- getHead: getHead,\r
+ getOrigin: getOrigin,\r
getOpenedComments: getOpenedComments,\r
addOpenedComments: addOpenedComments,\r
remOpenedComments: remOpenedComments,\r
/*\r
* GitHub API user object\r
*/\r
-Nitdoc.GitHub.User = function(login, password, repo) {\r
+Nitdoc.GitHub.User = function(login, password, repo, branch) {\r
this.login = login;\r
this.password = password;\r
this.repo = repo;\r
this.auth = "Basic " + Base64.encode(login + ':' + password);\r
+ this.branch = branch;\r
};\r
\r
/* \r
return user.infos.name + " <" + user.infos.email + ">";\r
}\r
\r
+ // get the branches list from a repo\r
+ var getBranches = function(user) {\r
+ var res = false;\r
+ $.ajax({\r
+ beforeSend: function (xhr) {\r
+ xhr.setRequestHeader ("Authorization", user.auth);\r
+ },\r
+ type: "GET",\r
+ url: "https://api.github.com/repos/" + user.login + "/" + user.repo + "/branches",\r
+ async: false,\r
+ dataType: 'json',\r
+ success: function(response) {\r
+ res = response;\r
+ },\r
+ error: function(response) {\r
+ res = response;\r
+ }\r
+ });\r
+ return res;\r
+ }\r
+\r
/* GitHub commits */\r
\r
// get the latest commit on `branchName`\r
- var getLastCommit = function(user, branchName) {\r
+ var getLastCommit = function(user) {\r
var res = false;\r
$.ajax({\r
beforeSend: function (xhr) {\r
xhr.setRequestHeader ("Authorization", user.auth);\r
},\r
type: "GET",\r
- url: "https://api.github.com/repos/" + user.login + "/" + user.repo + "/git/refs/heads/" + branchName,\r
+ url: "https://api.github.com/repos/" + user.login + "/" + user.repo + "/git/refs/heads/" + user.branch,\r
async: false,\r
dataType: 'json',\r
success: function(response) {\r
}\r
\r
// create a pull request\r
- var createPullRequest = function(user, title, body, base, head) {\r
+ var createPullRequest = function(user, title, body, origin, head) {\r
var res = false;\r
$.ajax({\r
beforeSend: function (xhr) {\r
xhr.setRequestHeader ("Authorization", user.auth);\r
},\r
type: "POST",\r
- url: "https://api.github.com/repos/" + user.login + "/" + user.repo + "/pulls",\r
+ url: "https://api.github.com/repos/" + origin.user + "/" + origin.repo + "/pulls",\r
data: JSON.stringify({\r
title: title,\r
body: body,\r
- base: base,\r
- head: head\r
+ base: origin.branch,\r
+ head: user.login + ":" + head\r
}),\r
async: false,\r
dataType: 'json',\r
}\r
\r
// update a pull request\r
- var updatePullRequest = function(user, title, body, state, number) {\r
+ var updatePullRequest = function(user, title, body, state, request) {\r
var res = false;\r
$.ajax({\r
beforeSend: function (xhr) {\r
xhr.setRequestHeader ("Authorization", user.auth);\r
},\r
type: "PATCH",\r
- url: "https://api.github.com/repos/" + user.login + "/" + user.repo + "/pulls/" + number,\r
+ url: request.url,\r
data: JSON.stringify({\r
title: title,\r
body: body,\r
var api = {\r
login: login,\r
getLastCommit: getLastCommit,\r
+ getBranches: getBranches,\r
getTree: getTree,\r
createBlob: createBlob,\r
createTree: createTree,\r
}\r
\r
// Panel of login box to display when the user is logged in\r
- var displayLogout = function(base, head, user) {\r
+ var displayLogout = function(origin, user) {\r
var panel = $(document.createElement("div"))\r
.append(\r
$(document.createElement("h4"))\r
)\r
.append(\r
$(document.createElement("label"))\r
- .attr("for", "github-repo")\r
- .append("Repo")\r
- )\r
- .append(\r
- $(document.createElement("input"))\r
- .attr({\r
- id: "github-repo",\r
- type: "text",\r
- disabled: "disabled",\r
- value: user.repo\r
- })\r
- )\r
- .append(\r
- $(document.createElement("label"))\r
- .attr("for", "github-head")\r
- .append("Head")\r
+ .attr("for", "github-origin")\r
+ .append("Origin")\r
)\r
.append(\r
$(document.createElement("input"))\r
.attr({\r
- id: "github-head",\r
+ id: "github-origin",\r
type: "text",\r
disabled: "disabled",\r
- value: head\r
+ value: origin.user + ":" + origin.repo + ":" + origin.branch\r
})\r
)\r
.append(\r
id: "github-base",\r
type: "text",\r
disabled: "disabled",\r
- value: base\r
+ value: user.login + ":" + user.repo + ":" + user.branch\r
})\r
)\r
.append(\r
})\r
)\r
.append(\r
+ $(document.createElement("label"))\r
+ .attr("for", "nitdoc-github-branch-field")\r
+ .append("Branch")\r
+ )\r
+ .append(\r
+ $(document.createElement("input"))\r
+ .attr({\r
+ id: "nitdoc-github-branch-field",\r
+ type: "text"\r
+ })\r
+ )\r
+ .append(\r
$(document.createElement("button"))\r
.addClass("nitdoc-github-button")\r
.append(\r
var login = $('#nitdoc-github-login-field').val();\r
var password = $('#nitdoc-github-password-field').val();\r
var repo = $('#nitdoc-github-repo-field').val();\r
- if(!login || !password || !repo) {\r
- Nitdoc.GitHub.ModalBox.open("Sign in error", "Please enter your GitHub username, password and repository.", true);\r
+ var branch = $('#nitdoc-github-branch-field').val();\r
+ if(!login || !password || !repo || !branch) {\r
+ Nitdoc.GitHub.ModalBox.open("Sign in error", "Please enter your GitHub username, password, repository and branch.", true);\r
} else {\r
- var user = Nitdoc.GitHub.UI.tryLogin(login, password, repo);\r
+ var user = Nitdoc.GitHub.UI.tryLogin(login, password, repo, branch);\r
if(!user) {\r
- Nitdoc.GitHub.ModalBox.open("Sign in error", "The username, password or repo you entered is incorrect.", true);\r
+ Nitdoc.GitHub.ModalBox.open("Sign in error", "The username, password, repo or branch you entered is incorrect.", true);\r
} else {\r
Nitdoc.GitHub.UI.activate(user);\r
- var base = Nitdoc.GitHub.UI.getBase();\r
- var head = Nitdoc.GitHub.UI.getHead();\r
- Nitdoc.GitHub.LoginBox.displayLogout(base, head, user);\r
+ var origin = Nitdoc.GitHub.UI.getOrigin();\r
+ Nitdoc.GitHub.LoginBox.displayLogout(origin, user);\r
}\r
}\r
return false;\r