1
/* Copyright 2010 Canonical Ltd. This software is licensed under the
2
* GNU Affero General Public License version 3 (see the file LICENSE).
4
* A bugtracker form overlay that can create a bugtracker within any page.
6
* @namespace Y.lp.bugs.bugtracker_overlay
7
* @requires dom, node, io-base, lazr.anim, lazr.formoverlay
9
YUI.add('lp.bugs.bugtracker_overlay', function(Y) {
10
Y.log('loading lp.bugs.bugtracker_overlay');
11
var namespace = Y.namespace('lp.bugs.bugtracker_overlay');
16
var save_new_bugtracker = function(data) {
19
bug_tracker_type: data['field.bugtrackertype'][0],
20
name: data['field.name'][0].toLowerCase(),
21
title: data['field.title'][0],
22
base_url: data['field.baseurl'][0],
23
summary: data['field.summary'][0],
24
contact_details: data['field.contactdetails'][0]
27
var finish_new_bugtracker = function(entry) {
28
bugtracker_form.clearError();
29
bugtracker_form.hide();
30
// Reset the HTML form inside the widget.
31
bugtracker_form.get('contentBox').one('form').reset();
35
var client = new LP.client.Launchpad();
36
client.named_post('/bugs/bugtrackers', 'ensureBugTracker', {
37
parameters: parameters,
39
success: finish_new_bugtracker,
40
failure: function (ignore, response, args) {
41
var error_box = Y.one('#bugtracker-error');
42
var error_message = response.statusText + '\n\n' +
43
response.responseText;
44
bugtracker_form.showError(error_message);
45
// XXX EdwinGrubbs 2007-06-18 bug=596025
46
// This should be done by FormOverlay.showError().
47
bugtracker_form.error_node.scrollIntoView();
54
var setup_bugtracker_form = function () {
55
var form_submit_button = Y.Node.create(
56
'<input type="submit" name="field.actions.register" ' +
57
'id="formoverlay-add-bugtracker" value="Create bug tracker"/>');
58
bugtracker_form = new Y.lazr.FormOverlay({
59
headerContent: '<h2>Create Bug Tracker</h2>',
60
form_submit_button: form_submit_button,
62
form_submit_callback: save_new_bugtracker,
65
bugtracker_form.loadFormContentAndRender(
66
'/bugs/bugtrackers/+newbugtracker/++form++');
67
// XXX EdwinGrubbs 2010-06-18 bug=596130
68
// render() and show() will actually be called before the
69
// asynchronous io call finishes, so the widget appears first
70
// without any content. However, this is better than loading the
71
// form every time the page loads despite the form overlay being
73
bugtracker_form.render();
74
bugtracker_form.show();
77
var show_bugtracker_form = function(e) {
79
if (bugtracker_form) {
80
bugtracker_form.show();
82
// This function call is asynchronous, so we can move
83
// bugtracker_form.show() below it.
84
setup_bugtracker_form();
87
// XXX EdwinGrubbs 2010-06-18 bug=596113
88
// FormOverlay calls centered(), which can cause this tall form
89
// to be position where the top of the form is no longer
91
var bounding_box = bugtracker_form.get('boundingBox');
93
if (bounding_box.get('offsetTop') < min_top) {
94
bounding_box.setStyle('top', min_top + 'px');
99
* Attaches a bugtracker form overlay widget to an element.
101
* @method attach_widget
102
* @param {Object} config Object literal of config name/value pairs.
103
* activate_node is the node that shows the form
104
* when it is clicked.
105
* next_step is the function to be called after
106
* the bugtracker is created.
108
namespace.attach_widget = function(config) {
109
Y.log('lp.bugs.bugtracker_overlay.attach_widget()');
113
if (config === undefined) {
115
"Missing attach_widget config for bugtracker_overlay.");
117
if (config.activate_node === undefined ||
118
config.next_step === undefined) {
120
"attach_widget config for bugtracker_overlay has " +
121
"undefined properties.");
123
next_step = config.next_step;
124
Y.log('lp.bugs.bugtracker_overlay.attach_widget() setup onclick');
125
config.activate_node.addClass('js-action');
126
config.activate_node.on('click', show_bugtracker_form);
129
}, "0.1", {"requires": [
130
"dom", "node", "io-base", "lazr.anim", "lazr.formoverlay", "lp.calendar"