diff --git a/static/scripts/app/views/dir.js b/static/scripts/app/views/dir.js index e8b023f905..05ecf588cd 100644 --- a/static/scripts/app/views/dir.js +++ b/static/scripts/app/views/dir.js @@ -7,13 +7,14 @@ define([ 'backbone', 'common', 'file-tree', + 'js.cookie', 'app/collections/dirents', 'app/views/dirent', 'app/views/dirent-grid', 'app/views/fileupload', 'app/views/share' ], function($, progressbar, magnificPopup, simplemodal, _, Backbone, Common, - FileTree, DirentCollection, DirentView, DirentGridView, FileUploadView, ShareView) { + FileTree, Cookies, DirentCollection, DirentView, DirentGridView, FileUploadView, ShareView) { 'use strict'; var DirView = Backbone.View.extend({ @@ -37,7 +38,11 @@ define([ // For compatible with css, we use .repo-op instead of .dir-op this.$dir_op_bar = this.$('.repo-op'); - this.view_mode = 'list'; + var view_mode = Cookies.get('view_mode'); + if (view_mode == 'grid') { + this.view_mode = 'grid'; + } else + this.view_mode = 'list'; this.contextOptions = {}; this.dir = new DirentCollection(); @@ -525,6 +530,7 @@ define([ return false; } else { this.view_mode = 'grid'; + Cookies.set('view_mode', 'grid'); this.renderDir(); return false; } @@ -535,6 +541,7 @@ define([ return false; } else { this.view_mode = 'list'; + Cookies.set('view_mode', 'list'); this.renderDir(); return false; } diff --git a/static/scripts/common.js b/static/scripts/common.js index e06b64ba62..68a314db9e 100644 --- a/static/scripts/common.js +++ b/static/scripts/common.js @@ -36,6 +36,8 @@ require.config({ 'jquery.magnific-popup': 'lib/jquery.magnific-popup', + 'js.cookie': 'lib/js.cookie', + simplemodal: 'lib/jquery.simplemodal', jstree: 'lib/jstree.1.0', select2: 'lib/select2-3.5.2', diff --git a/static/scripts/lib/js.cookie.js b/static/scripts/lib/js.cookie.js new file mode 100644 index 0000000000..9c7626735d --- /dev/null +++ b/static/scripts/lib/js.cookie.js @@ -0,0 +1,145 @@ +/*! + * JavaScript Cookie v2.1.0 + * https://github.com/js-cookie/js-cookie + * + * Copyright 2006, 2015 Klaus Hartl & Fagner Brack + * Released under the MIT license + */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + var _OldCookies = window.Cookies; + var api = window.Cookies = factory(); + api.noConflict = function () { + window.Cookies = _OldCookies; + return api; + }; + } +}(function () { + function extend () { + var i = 0; + var result = {}; + for (; i < arguments.length; i++) { + var attributes = arguments[ i ]; + for (var key in attributes) { + result[key] = attributes[key]; + } + } + return result; + } + + function init (converter) { + function api (key, value, attributes) { + var result; + + // Write + + if (arguments.length > 1) { + attributes = extend({ + path: '/' + }, api.defaults, attributes); + + if (typeof attributes.expires === 'number') { + var expires = new Date(); + expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5); + attributes.expires = expires; + } + + try { + result = JSON.stringify(value); + if (/^[\{\[]/.test(result)) { + value = result; + } + } catch (e) {} + + if (!converter.write) { + value = encodeURIComponent(String(value)) + .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); + } else { + value = converter.write(value, key); + } + + key = encodeURIComponent(String(key)); + key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent); + key = key.replace(/[\(\)]/g, escape); + + return (document.cookie = [ + key, '=', value, + attributes.expires && '; expires=' + attributes.expires.toUTCString(), // use expires attribute, max-age is not supported by IE + attributes.path && '; path=' + attributes.path, + attributes.domain && '; domain=' + attributes.domain, + attributes.secure ? '; secure' : '' + ].join('')); + } + + // Read + + if (!key) { + result = {}; + } + + // To prevent the for loop in the first place assign an empty array + // in case there are no cookies at all. Also prevents odd result when + // calling "get()" + var cookies = document.cookie ? document.cookie.split('; ') : []; + var rdecode = /(%[0-9A-Z]{2})+/g; + var i = 0; + + for (; i < cookies.length; i++) { + var parts = cookies[i].split('='); + var name = parts[0].replace(rdecode, decodeURIComponent); + var cookie = parts.slice(1).join('='); + + if (cookie.charAt(0) === '"') { + cookie = cookie.slice(1, -1); + } + + try { + cookie = converter.read ? + converter.read(cookie, name) : converter(cookie, name) || + cookie.replace(rdecode, decodeURIComponent); + + if (this.json) { + try { + cookie = JSON.parse(cookie); + } catch (e) {} + } + + if (key === name) { + result = cookie; + break; + } + + if (!key) { + result[name] = cookie; + } + } catch (e) {} + } + + return result; + } + + api.get = api.set = api; + api.getJSON = function () { + return api.apply({ + json: true + }, [].slice.call(arguments)); + }; + api.defaults = {}; + + api.remove = function (key, attributes) { + api(key, '', extend(attributes, { + expires: -1 + })); + }; + + api.withConverter = init; + + return api; + } + + return init(function () {}); +}));