~jonas-drange/online-services-common-js/navbar-autocomplete

« back to all changes in this revision

Viewing changes to build/photos-common/photos-common.js

  • Committer: Stephen Stewart
  • Date: 2014-02-22 23:57:25 UTC
  • mfrom: (18.1.2 trunk)
  • Revision ID: stephen.stewart@canonical.com-20140222235725-iw6f15t9umws19xd
mergeĀ lp:~stephen-stewart/online-services-common-js/remove-u1

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
YUI.add('photos-common', function (Y, NAME) {
2
 
 
3
 
"use strict";
4
 
var PhotosCommon = Y.Base.create("photos-common", Y.Base, [], {
5
 
 
6
 
 
7
 
    /**
8
 
    List of queries we want to keep
9
 
    @property queryParameters
10
 
    @type Array
11
 
    **/
12
 
 
13
 
    queryParameters: [
14
 
        'folder_order',
15
 
        'folder_filter',
16
 
        'path',
17
 
        'photo_order',
18
 
        'page',
19
 
        'pagesize',
20
 
        'slideshow',
21
 
        'pagesize'
22
 
    ],
23
 
 
24
 
    getQueryString: function () {
25
 
        var query;
26
 
 
27
 
        if(Y.HistoryBase.html5) {
28
 
            query = this.getHTML5QueryString();
29
 
        } else {
30
 
            query = this.getHashQueryString();
31
 
        }
32
 
        return query;
33
 
    },
34
 
 
35
 
    getHTML5QueryString: function () {
36
 
        return Y.config.win.location.search.replace(/\?/, '');
37
 
    },
38
 
 
39
 
    getHashQueryString: function () {
40
 
        return Y.HistoryHash.getHash().replace(/.*\?/, '');
41
 
    },
42
 
 
43
 
    getQueryStringAsObject: function (q) {
44
 
        var query;
45
 
 
46
 
        // if we get a string, use it event if it's empty
47
 
        if(typeof q === 'string') {
48
 
            query = q;
49
 
        } else {
50
 
            query = this.getQueryString();
51
 
        }
52
 
 
53
 
        return Y.QueryString.parse(query) || {};
54
 
    },
55
 
 
56
 
    getCleanedQueryObject: function () {
57
 
        var query = this.getQueryStringAsObject(),
58
 
            cleanQuery;
59
 
 
60
 
        cleanQuery = this.cleanQueryObjectParameters(query);
61
 
 
62
 
        return cleanQuery;
63
 
    },
64
 
 
65
 
    updateQueryObjectParameter: function (queryObject, parameter, value) {
66
 
        if(!parameter) {
67
 
            throw new Error('updateQueryObjectParameter: Cannot update queryObject with falsy parameter');
68
 
        }
69
 
        queryObject[parameter] = value;
70
 
        return queryObject;
71
 
    },
72
 
 
73
 
    updateQueryObjectParameters: function (queryObject, parameters) {
74
 
        return Y.merge(queryObject, parameters);
75
 
    },
76
 
 
77
 
    updateQueryParameterAndNavigate: function (queryObject, parameter, value) {
78
 
        var modifiedQueryObject,
79
 
            path;
80
 
 
81
 
        if(typeof parameter === 'string') {
82
 
            modifiedQueryObject = this.updateQueryObjectParameter(queryObject, parameter, value);
83
 
        } else {
84
 
            modifiedQueryObject = this.updateQueryObjectParameters(queryObject, parameter);
85
 
        }
86
 
 
87
 
        path = this.getPath() + '?' + Y.QueryString.stringify(modifiedQueryObject);
88
 
 
89
 
        this.navigate(path);
90
 
    },
91
 
 
92
 
 
93
 
    /**
94
 
    Poorly named method, but clean means to remove query paramaters that we do not want/need
95
 
    @param {Object} queryObject the object to be cleansed
96
 
    @return {Object} cleanQueryObject a object that has had keys removed by comparing queryObject with this.queryParameters
97
 
    */
98
 
    cleanQueryObjectParameters: function (queryObject) {
99
 
        var cleanQueryObject = {};
100
 
        Y.Object.each(queryObject, function (value, key) {
101
 
            if(Y.Array.indexOf(this.queryParameters, key) !== -1) {
102
 
                cleanQueryObject[key] = value;
103
 
            }
104
 
        }, this);
105
 
        return cleanQueryObject;
106
 
    },
107
 
 
108
 
    defaultQueryParameters: {
109
 
        'pagesize': 102,
110
 
        'page': 1,
111
 
        'folder_order': 'last_modified-desc',
112
 
        'photo_order': 'last_modified-desc',
113
 
        'folder_filter': 'my',
114
 
        'folder_cache': true,
115
 
        'photo_cache': true
116
 
    },
117
 
 
118
 
    /**
119
 
    Reflecting behaviour of photos/common.py
120
 
 
121
 
    If we find a defaultQueryParameter here, remove it
122
 
    We also cast the given value as number if its default equivalent is a number
123
 
 
124
 
    @param {Object} queryObject set of keys to sanitize
125
 
    @param {String|Array} keep string or array of keys to keep
126
 
    @return {Object} sanitizedQueryObject a object with keys that are default removed
127
 
    */
128
 
    sanitizeQueryParameters: function (queryObject, keep) {
129
 
        var sanitizedQueryObject = {};
130
 
 
131
 
        // convert string to arr
132
 
        if(keep && typeof keep === 'string') {
133
 
            keep = [keep];
134
 
        }
135
 
 
136
 
        Y.Object.each(queryObject, function (value, key) {
137
 
            var defaultValue;
138
 
 
139
 
            // if we're ignoring key, just add it and quit
140
 
            if(keep && Y.Array.indexOf(keep, key) !== -1) {
141
 
                sanitizedQueryObject[key] = value;
142
 
                return false;
143
 
            }
144
 
 
145
 
            // if the default key exist and is a Number, try parseInt
146
 
            if(this.defaultQueryParameters[key]) {
147
 
                defaultValue = this.defaultQueryParameters[key];
148
 
 
149
 
                // if defaultValue is a number
150
 
                if(!isNaN(parseFloat(defaultValue)) && isFinite(defaultValue) ) {
151
 
                    value = parseInt(value, 10);
152
 
                }
153
 
            }
154
 
 
155
 
            // if not key is in default and value is not equal to default key value
156
 
            if( !(this.defaultQueryParameters[key] && this.defaultQueryParameters[key] === value) ) {
157
 
                sanitizedQueryObject[key] = value;
158
 
            }
159
 
        }, this);
160
 
        return sanitizedQueryObject;
161
 
    }
162
 
 
163
 
 
164
 
});
165
 
 
166
 
Y.namespace('Photos');
167
 
Y.Photos.PhotosCommon = PhotosCommon;
168
 
 
169
 
 
170
 
}, '@VERSION@', {"requires": ["base", "history", "querystring"]});