diff options
Diffstat (limited to 'web/src/js/utils.js')
| -rw-r--r-- | web/src/js/utils.js | 107 | 
1 files changed, 27 insertions, 80 deletions
diff --git a/web/src/js/utils.js b/web/src/js/utils.js index 082f7272..a8565243 100644 --- a/web/src/js/utils.js +++ b/web/src/js/utils.js @@ -1,81 +1,3 @@ -// http://blog.vjeux.com/2013/javascript/scroll-position-with-react.html (also contains inverse example) -var AutoScrollMixin = { -    componentWillUpdate: function () { -        var node = this.getDOMNode(); -        this._shouldScrollBottom = ( -            node.scrollTop !== 0 && -            node.scrollTop + node.clientHeight === node.scrollHeight -        ); -    }, -    componentDidUpdate: function () { -        if (this._shouldScrollBottom) { -            var node = this.getDOMNode(); -            node.scrollTop = node.scrollHeight; -        } -    }, -}; - - -var StickyHeadMixin = { -    adjustHead: function () { -        // Abusing CSS transforms to set the element -        // referenced as head into some kind of position:sticky. -        var head = this.refs.head.getDOMNode(); -        head.style.transform = "translate(0," + this.getDOMNode().scrollTop + "px)"; -    } -}; - - -var Navigation = _.extend({}, ReactRouter.Navigation, { -    setQuery: function (dict) { -        var q = this.context.getCurrentQuery(); -        for(var i in dict){ -            if(dict.hasOwnProperty(i)){ -                q[i] = dict[i] || undefined; //falsey values shall be removed. -            } -        } -        q._ = "_"; // workaround for https://github.com/rackt/react-router/pull/599 -        this.replaceWith(this.context.getCurrentPath(), this.context.getCurrentParams(), q); -    }, -    replaceWith: function(routeNameOrPath, params, query) { -        if(routeNameOrPath === undefined){ -            routeNameOrPath = this.context.getCurrentPath(); -        } -        if(params === undefined){ -            params = this.context.getCurrentParams(); -        } -        if(query === undefined){ -            query = this.context.getCurrentQuery(); -        } -        ReactRouter.Navigation.replaceWith.call(this, routeNameOrPath, params, query); -    } -}); -_.extend(Navigation.contextTypes, ReactRouter.State.contextTypes); - -var State = _.extend({}, ReactRouter.State, { -    getInitialState: function () { -        this._query = this.context.getCurrentQuery(); -        this._queryWatches = []; -        return null; -    }, -    onQueryChange: function (key, callback) { -        this._queryWatches.push({ -            key: key, -            callback: callback -        }); -    }, -    componentWillReceiveProps: function (nextProps, nextState) { -        var q = this.context.getCurrentQuery(); -        for (var i = 0; i < this._queryWatches.length; i++) { -            var watch = this._queryWatches[i]; -            if (this._query[watch.key] !== q[watch.key]) { -                watch.callback(this._query[watch.key], q[watch.key], watch.key); -            } -        } -        this._query = q; -    } -}); -  var Key = {      UP: 38,      DOWN: 40, @@ -92,7 +14,7 @@ var Key = {      BACKSPACE: 8,  };  // Add A-Z -for(var i=65; i <= 90; i++){ +for (var i = 65; i <= 90; i++) {      Key[String.fromCharCode(i)] = i;  } @@ -156,4 +78,29 @@ EventEmitter.prototype.removeListener = function (events, f) {              this.listeners[event].splice(index, 1);          }      }.bind(this)); -};
\ No newline at end of file +}; + + +function getCookie(name) { +    var r = document.cookie.match("\\b" + name + "=([^;]*)\\b"); +    return r ? r[1] : undefined; +} +var xsrf = $.param({_xsrf: getCookie("_xsrf")}); + +//Tornado XSRF Protection. +jQuery.ajaxPrefilter(function (options) { +    if (["post", "put", "delete"].indexOf(options.type.toLowerCase()) >= 0 && options.url[0] === "/") { +        if (options.data) { +            options.data += ("&" + xsrf); +        } else { +            options.data = xsrf; +        } +    } +}); +// Log AJAX Errors +$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) { +    var message = jqXHR.responseText; +    console.error(message, arguments); +    EventLogActions.add_event(thrownError + ": " + message); +    window.alert(message); +});
\ No newline at end of file  | 
