~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/app/javascript/picker.js

[r=benji][bug=795573,
 796233] On DistroSeries:+localpackagediffs ensure that the comment
 form is hidden after adding a new comment to a DistroSeriesDifference,
 prevent empty comments from being submitted,
 and add some animations and effects to make the UI less jarring and easier to
 follow.

Show diffs side-by-side

added added

removed removed

Lines of Context:
328
328
    Y.on('change', copy_selected_value, select_menu);
329
329
    };
330
330
 
331
 
 
332
 
/**
333
 
 * Extend the lazr-js Picker.
334
 
 */
335
 
var Picker = function() {
336
 
    Picker.superclass.constructor.apply(this, arguments);
337
 
};
338
 
 
339
 
Y.extend(Picker, Y.lazr.Picker, {
340
 
    // We want to render alt title slightly differently.
341
 
    _renderTitleUI: function(data) {
342
 
        var li_title = Y.Node.create(
343
 
            '<span></span>').addClass(Y.lazr.Picker.C_RESULT_TITLE);
344
 
        var title = this._text_or_link(
345
 
            data.title, data.title_link, data.link_css);
346
 
        li_title.appendChild(title);
347
 
        if (data.alt_title) {
348
 
            var alt_link = null;
349
 
            if (data.alt_title_link) {
350
 
                alt_link =Y.Node.create('<a></a>')
351
 
                    .addClass(data.link_css)
352
 
                    .addClass('discreet');
353
 
                alt_link.set('text', " Details...")
354
 
                    .set('href', data.alt_title_link);
355
 
                Y.on('click', function(e) {
356
 
                    e.halt();
357
 
                    window.open(data.alt_title_link);
358
 
                }, alt_link);
359
 
            }
360
 
            li_title.appendChild('&nbsp;(');
361
 
            li_title.appendChild(document.createTextNode(data.alt_title));
362
 
            if (alt_link !== null)
363
 
                li_title.appendChild(alt_link);
364
 
            li_title.appendChild(')');
365
 
        }
366
 
        return li_title;
367
 
    }
368
 
});
369
 
Picker.NAME = 'picker';
370
 
namespace.Picker = Picker;
371
 
 
372
331
/**
373
332
  * Creates a picker widget that has already been rendered and hidden.
374
333
  *
381
340
  *                        config.step_title overrides the subtitle.
382
341
  *                        config.save is a Function (optional) which takes
383
342
  *                        a single string argument.
 
343
  *                        config.show_search_box: Should the search box be
 
344
  *                        shown.
384
345
  */
385
346
namespace.create = function (vocabulary, config, activator) {
386
347
    if (Y.UA.ie) {
389
350
 
390
351
    var header = 'Choose an item.';
391
352
    var step_title = "Enter search terms";
 
353
    var show_search_box = true;
 
354
    var picker_type = "default";
392
355
    if (config !== undefined) {
393
356
        if (config.header !== undefined) {
394
357
            header = config.header;
397
360
        if (config.step_title !== undefined) {
398
361
            step_title = config.step_title;
399
362
        }
 
363
 
 
364
        if (config.show_search_box !== undefined) {
 
365
            show_search_box = config.show_search_box;
 
366
        }
 
367
 
 
368
        if (config.picker_type !== undefined) {
 
369
            picker_type = config.picker_type;
 
370
        }
400
371
    }
401
372
 
402
373
    if (typeof vocabulary !== 'string' && typeof vocabulary !== 'object') {
417
388
        zIndex: 1000,
418
389
        visible: false
419
390
        });
420
 
    var picker = new Picker(new_config);
 
391
 
 
392
    var picker = null;
 
393
    if (picker_type === 'person') {
 
394
        picker = new Y.lp.app.widgets.PersonPicker(new_config);
 
395
    } else {
 
396
        picker = new Y.lp.app.widgets.Picker(new_config);
 
397
    }
421
398
 
422
399
    // We don't want the Y.lazr.Picker default save to fire since this hides
423
400
    // the form. We want to do this ourselves after any validation has had a
457
434
        var batch = 0;
458
435
        var display_vocabulary = function(results, total_size, start) {
459
436
            var max_size = MAX_BATCHES * BATCH_SIZE;
460
 
            if (config.show_search_box && total_size > max_size)  {
 
437
            if (show_search_box && total_size > max_size)  {
461
438
                picker.set('error',
462
439
                    'Too many matches. Please try to narrow your search.');
463
440
                // Display a single empty result item so that the picker
540
517
 
541
518
}, "0.1", {"requires": [
542
519
    "io", "dom", "dump", "event", "lazr.picker", "lazr.activator",
543
 
    "json-parse", "lp.client"
 
520
    "json-parse", "lp.client", "lp.app.widgets"
544
521
    ]});