github form integration

stable
Juanfran 2014-11-06 10:55:47 +01:00 committed by David Barragán Merino
parent b8bf8902d1
commit 1129469cce
5 changed files with 109 additions and 9 deletions

View File

@ -57,6 +57,10 @@ class GithubController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
promise.then null, @.onInitialDataError.bind(@)
loadModules: ->
return @rs.modules.list(@scope.projectId, "github").then (github) =>
@scope.github = github
loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) =>
@scope.project = project
@ -71,11 +75,11 @@ class GithubController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
return data
return promise.then(=> @.loadProject())
.then(=> @.loadModules())
module.controller("GithubController", GithubController)
SelectInputText = ->
link = ($scope, $el, $attrs) ->
$el.on "click", ".select-input-content", () ->
@ -85,3 +89,40 @@ SelectInputText = ->
return {link:link}
module.directive("tgSelectInputText", SelectInputText)
#############################################################################
## GithubWebhooks Directive
#############################################################################
GithubWebhooksDirective = ($repo, $confirm, $loading, $navurls, $location) ->
link = ($scope, $el, $attrs) ->
form = $el.find("form").checksley({"onlyOneErrorElement": true})
submit = (target) =>
return if not form.validate()
$loading.start(target)
promise = $repo.saveAttribute($scope.github, "github")
promise.then ->
$loading.finish(target)
$confirm.notify("success")
promise.then null, (data) ->
$loading.finish(target)
form.setErrors(data)
if data._error_message
$confirm.notify("error", data._error_message)
$el.on "click", "a.button-green", (event) ->
event.preventDefault()
target = angular.element(event.currentTarget)
submit(target)
$el.on "submit", "form", (event) ->
event.preventDefault()
submit()
return {link:link}
module.directive("tgGithubWebhooks", ["$tgRepo", "$tgConfirm", "$tgLoading", "$tgNavUrls", "$tgLocation", GithubWebhooksDirective])

View File

@ -28,8 +28,11 @@ class RepositoryService extends taiga.Service
super()
resolveUrlForModel: (model) ->
idAttrName = model.getIdAttrName()
return "#{@urls.resolve(model.getName())}/#{model[idAttrName]}"
if model.parent
return @urls.resolve(model.getName(), model.parent)
else
idAttrName = model.getIdAttrName()
return "#{@urls.resolve(model.getName())}/#{model[idAttrName]}"
create: (name, data, dataTypes={}, extraParams={}) ->
defered = @q.defer()
@ -89,6 +92,37 @@ class RepositoryService extends taiga.Service
return defered.promise
saveAttribute: (model, attribute, patch=true) ->
defered = @q.defer()
if not model.isModified() and patch
defered.resolve(model)
return defered.promise
url = @.resolveUrlForModel(model)
data = {}
data[attribute] = model.getAttrs()
if patch
promise = @http.patch(url, data)
else
promise = @http.put(url, data)
promise.success (data, status) =>
model._isModified = false
model._attrs = _.extend(model.getAttrs(), data)
model._modifiedAttrs = {}
model.applyCasts()
defered.resolve(model)
promise.error (data, status) ->
defered.reject(data)
return defered.promise
refresh: (model) ->
defered = @q.defer()
@ -115,6 +149,19 @@ class RepositoryService extends taiga.Service
return @http.get(url, params, httpOptions).then (data) =>
return _.map(data.data, (x) => @model.make_model(name, x))
queryOneAttribute: (name, id, attribute, params, options={}) ->
url = @urls.resolve(name, id)
httpOptions = {headers: {}}
if not options.enablePagination
httpOptions.headers["x-disable-pagination"] = "1"
return @http.get(url, params, httpOptions).then (data) =>
model = @model.make_model(name, data.data[attribute])
model.parent = id
return model
queryOne: (name, id, params, options={}) ->
url = @urls.resolve(name)
url = "#{url}/#{id}" if id

View File

@ -83,6 +83,7 @@ urls = {
"issue-types": "/issue-types"
"priorities": "/priorities"
"severities": "/severities"
"project-modules": "/projects/%s/modules"
# History
"history/us": "/history/userstory"
@ -138,5 +139,6 @@ module.run([
"$tgMdRenderResourcesProvider",
"$tgHistoryResourcesProvider",
"$tgKanbanResourcesProvider",
"$tgModulesResourcesProvider",
initResources
])

View File

@ -0,0 +1,12 @@
resourceProvider = ($repo) ->
service = {}
service.list = (projectId, module) ->
return $repo.queryOneAttribute("project-modules", projectId, module)
return (instance) ->
instance.modules = service
module = angular.module("taigaResources")
module.factory("$tgModulesResourcesProvider", ["$tgRepo", resourceProvider])

View File

@ -2,7 +2,7 @@ block head
title Taiga Your agile, free, and open source project management tool
block content
div.wrapper.roles(ng-controller="GithubController as ctrl",
div.wrapper.roles(tg-github-webhooks, ng-controller="GithubController as ctrl",
ng-init="section='admin'")
sidebar.menu-secondary.sidebar(tg-admin-navigation="third-parties")
include views/modules/admin-menu
@ -15,14 +15,14 @@ block content
form
fieldset
label(for="secret-key") Secret key
input(type="text", name="secret-key", placeholder="Secret key", id="secret-key")
input(type="text", name="secret-key", ng-model="github.secret", placeholder="Secret key", id="secret-key")
fieldset
.select-input-text(tg-select-input-text)
div
label(for="payload-url") Payload URL
.field-with-option
input(type="text", name="payload-url", readonly="readonly", placeholder="Payload URL", id="payload-url")
input(type="text", ng-model="github.webhooks_url", name="payload-url", readonly="readonly", placeholder="Payload URL", id="payload-url")
.option-wrapper.select-input-content
.icon.icon-copy
.help-copy Copy to clipboard: Ctrl+C
@ -49,9 +49,7 @@ block content
li Click on
span Settings
| >
span Webhooks
| >
span Services
span Webhooks & Services
| >
span Add webhook