src/cm/media/js/lib/yui/yui3.0.0/examples/dd/assets/photos.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
YUI(yuiConfig).use('node', 'anim', 'dd', 'yql', 'slider', 'stylesheet', 'event-delegate', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
    //Get a reference to the wrapper to use later and add a loading class to it.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
    var wrapper = Y.get('#yui-main .yui-g ul').addClass('loading');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
    //Set it's height to the height of the viewport so we can scroll it.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
    wrapper.setStyle('height', (wrapper.get('winHeight') - 50 )+ 'px');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
    Y.on('windowresize', function() { wrapper.setStyle('height', (wrapper.get('winHeight') - 50 )+ 'px'); });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
    //Make the YQL query.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
    new Y.yql('select * from flickr.photos.search(100) where text="openhacklondon" and safe_search = 1 and media = "photos" and extras = "o_dims" and ((o_width = "1600" and o_height = "1200") or (o_width = "1200" and o_height = "1600") or (o_width = "800" and o_height = "600") or (o_width = "600" and o_height = "800"))', function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
        if (e.query) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
            var photos = e.query.results.photo;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
            //Walk the returned photos array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
            Y.each(photos, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
                //Create our URL
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
                var url = 'http:/'+'/static.flickr.com/' + v.server + '/' + v.id + '_' + v.secret + '_m.jpg',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
                    //Create the image and the LI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
                    li = Y.Node.create('<li class="loading"><img src="' + url + '" title="' + v.title + '"></li>'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
                    //Get the image from the LI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
                    img = li.get('firstChild');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
                //Append the li to the wrapper
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
                wrapper.appendChild(li);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
                //This little hack moves the tall images to the bottom of the list
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
                //So they float better ;)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
                img.on('load', function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
                    //Is the height longer than the width?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
                    var c = ((this.get('height') > this.get('width')) ? 'tall' : 'wide');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
                    this.addClass(c);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
                    if (c === 'tall') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
                        //Move it to the end of the list.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
                        this.get('parentNode.parentNode').removeChild(this.get('parentNode'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
                        wrapper.appendChild(this.get('parentNode'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
                    this.get('parentNode').removeClass('loading');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
            //Get all the newly added li's
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
            wrapper.queryAll('li').each(function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
                //Plugin the Drag plugin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
                this.plug(Y.Plugin.Drag, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
                    offsetNode: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
                //Plug the Proxy into the DD object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
                this.dd.plug(Y.Plugin.DDProxy, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
                    resizeFrame: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
                    moveOnEnd: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
                    borderStyle: 'none'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
            //Create and render the slider
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
            var sl = new Y.Slider({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
                railSize: '200px', value: 40, max: 70, min: 5,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
                thumbImage: assetsDir + 'css/thumb-classic-x.png'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
            }).render('.horiz_slider');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
            //Listen for the change
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
            sl.after('valueChange',function (e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
                //Insert a dynamic stylesheet rule:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
                var sheet = new Y.StyleSheet('image_slider');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
                sheet.set('#yui-main .yui-g ul li', {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
                    width: (e.newVal / 2) + '%'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
            //Remove the DDM as a bubble target..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
            sl._dd.removeTarget(Y.DD.DDM);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
            //Remove the wrappers loading class
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
            wrapper.removeClass('loading');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
            Y.get('#ft').removeClass('loading');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
    //Listen for all mouseup's on the document (selecting/deselecting images)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
    Y.on('delegate', function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
        if (!e.shiftKey) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
            //No shift key - remove all selected images
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
            wrapper.queryAll('img.selected').removeClass('selected');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
        //Check if the target is an image and select it.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
        if (e.target.test('#yui-main .yui-g ul li img')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
            e.target.addClass('selected');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
    }, document, 'mouseup', '*');    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
    //Listen for all clicks on the '#photoList li' selector
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
    Y.on('delegate', function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
        //Prevent the click
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
        e.halt();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
        //Remove all the selected items
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
        e.currentTarget.get('parentNode').queryAll('li.selected').removeClass('selected');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
        //Add the selected class to the one that one clicked
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
        e.currentTarget.addClass('selected');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
        //The "All Photos" link was clicked
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
        if (e.currentTarget.hasClass('all')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
            //Remove all the hidden classes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
            wrapper.queryAll('li').removeClass('hidden');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
            //Another "album" was clicked, get it's id
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
            var c = e.currentTarget.get('id');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
            //Hide all items by adding the hidden class
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
            wrapper.queryAll('li').addClass('hidden');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
            //Now, find all the items with the class name the same as the album id
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
            //and remove the hidden class
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
            wrapper.queryAll('li.' + c).removeClass('hidden');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
    }, document, 'click', '#photoList li');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
    //Stop the drag with the escape key
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
    Y.get(document).on('keypress', function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
        //The escape key was pressed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
        if ((e.keyCode === 27) || (e.charCode === 27)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
            //We have an active Drag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
            if (Y.DD.DDM.activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
                //Stop the drag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
                Y.DD.DDM.activeDrag.stopDrag();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
    //On the drag:mouseDown add the selected class
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
    Y.DD.DDM.on('drag:mouseDown', function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
        e.target.get('node').queryAll('img').addClass('selected');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
    //On drag start, get all the selected elements
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
    //Add the count to the proxy element and offset it to the cursor.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
    Y.DD.DDM.on('drag:start', function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
        //How many items are selected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
        var count = wrapper.queryAll('img.selected').size();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
        //Set the style on the proxy node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
        e.target.get('dragNode').setStyles({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
            height: '25px', width: '25px'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
        }).set('innerHTML', '<span>' + count + '</span>');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
        //Offset the dragNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
        e.target.deltaXY = [25, 5];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
    //We dropped on a drop target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
    Y.DD.DDM.on('drag:drophit', function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
        //get the images that are selected.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
        var imgs = wrapper.queryAll('img.selected'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
            //The xy position of the item we dropped on
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
            toXY = e.drop.get('node').getXY();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
        imgs.each(function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
            //Clone the image, position it on top of the original and animate it to the drop target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
            node.get('parentNode').addClass(e.drop.get('node').get('id'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
            var n = node.cloneNode().set('id', '').setStyle('position', 'absolute');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
            Y.get('body').appendChild(n);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
            n.setXY(node.getXY());
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
            new Y.Anim({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
                node: n,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
                to: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
                    height: 20, width: 20, opacity: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
                    top: toXY[1], left: toXY[0]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
                from: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
                    width: node.get('offsetWidth'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
                    height: node.get('offsetHeight')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
                duration: .5
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
            }).run();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
        //Update the count
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
        var count = wrapper.queryAll('li.' + e.drop.get('node').get('id')).size();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
        e.drop.get('node').query('span').set('innerHTML', '(' + count + ')');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
    //Add drop support to the albums
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
    Y.all('#photoList li').each(function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
        if (!node.hasClass('all')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
            //make all albums Drop Targets except the all photos.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
            node.plug(Y.Plugin.Drop);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
});