BaseSettings.js

From disqus.com, 8 Months ago, written in JavaScript, viewed 3 times. This paste is a reply to withLoginOverlay.js from disqus.com - go back
URL https://pastebin.freepbx.org/view/f19c8515/diff Embed
Viewing differences between withLoginOverlay.js and BaseSettings.js
define('home/mixins/withLoginOverlay',[
    'jquery',
define('home/models/common/BaseSettings',[
    'underscore',
    'backbone-marionette',

'backbone',

    'home/models/Session',
    'home/views/LoginOverlayView',\r\n    'home/templates/signUpAsideModule',\r\n    'home/utils/layoutUtils',\r\n], function (
    $,\r\n    _,
    Marionette,

    Session,
    LoginOverlayView,
    signUpAsideModuleTemplate,
    layoutUtils
Backbone,

    Session
) {
    'use strict';

    /**
     * Adds login overlay support to the view to which the mixin is applied.
     *
     * If View's template has defined a region for it, renders the log in module
     * in the region which has the ability to expand the login overlay.
     *
     * Adds a login footer which shows if the signUpAsideModule is not in
     * the viewport.
     *
     * Handles all the click events for the footer and signUpAsideModule
     * to show the overlay when appropriate.
     *
     * Overlay itself is a view which handles authentication.
     *
     *
     * Expects to be applied to a Marionette View using the withSubviews mixin,
     * or a Marionette Layout.
     * Can be passed a prompt, which is the message shown to the user above the
     * log in options. If not given, will use a default message.
     */
    
var LoginOverlayMixin BaseSettings {
        regions: 
Backbone.Model.extend({
        shouldFetch: function () 
{
            loginModuleRegion: '[data-role=sign-up-module]',
return !this.fetched && !this.fetching;
        },

        events: {
            'click [data-action~=show-login-overlay]': 'showLoginOverlay',
        },

        initialize: function (_initialize, options) {
            _initialize.call(this, options);
            this.boundEnsureLoginPromptInViewport = _.bind(this.ensureLoginPromptInViewport, this);
            $(window).scroll(this.boundEnsureLoginPromptInViewport);
        },

        onClose: 
ensureFetched: function () {
            this.unbindScrollHandler();
            
if (this.loginOverlayView)
                this.loginOverlayView.close();
        },

        onRender: function (_onRender) {
            if (_.isFunction(_onRender))
                _onRender.call(this);

            var createLoginModuleView = function () {
                return new Marionette.ItemView({
                    template: signUpAsideModuleTemplate,
                });
            };

            // Allow mixin to work with either Marionette Layouts or with a View
            // with the withSubviews mixin.
            if (this.activateRegion)
                this.activateRegion(this.loginModuleRegion, createLoginModuleView);
            else
                this.loginModuleRegion.show(createLoginModuleView());
        },

        /**
         * Ensures there is a login prompt in the viewport. Shows the footer
         * prompt iff the module is not in the viewport.
         */
        ensureLoginPromptInViewport: _.debounce(function () {
            var loginPromptModule = this.$('[data-role=login-prompt-module]');
            var showFooter = !loginPromptModule.length || !layoutUtils.isElementInViewport(loginPromptModule);
            this.showLoginFooter(showFooter);
        }, 200),

        unbindScrollHandler: function () {
            $(window).off('scroll', this.boundEnsureLoginPromptInViewport);
        },

        showLoginOverlay: function () {
            this.loginOverlayView.showAsOverlay();
        },

        showLoginFooter: function (shouldShow) {
            this.loginOverlayView.showAsFooter(shouldShow);
        },

        onDomRefresh: function (overlayViewOptions, _onDomRefresh) {
            if (_.isFunction(_onDomRefresh))
                _onDomRefresh.call(this);

            // Since the LoginOverlayView is inserted after this view's element,
            // don't need to readd/rerender it when this view is rerendered, as
            // it won't be removed. One initialization is enough.
            if (this.loginOverlayView)
(!this.shouldFetch())
                return;

            // Add the overlay view to the DOM. It'll be hidden by default
            // and shown later by scroll or click events.
            
var self = this;
            self.fetching = true;
            self.fetch({
                success: function () {
                    self.fetched = true;
                    self.fetching = false;
                },
                error: function () {
                    self.fetched = false;
                    self.fetching = false;
                },
            });
        },

        toFormData: function (attrs) {
            attrs = attrs || 
this.loginOverlayView = toJSON();
            return _.reduce(attrs, function (formData, value, key) {
                formData.append(key, _.isString(value) ? value.trim() : value);
                return formData;
            }, 
new LoginOverlayView(overlayViewOptions);
            
window.FormData());
        },

        // set to true if form has a file upload input field
        useMultiPartForm: false,

        save: function (attrs, options) {
            attrs = attrs || 
this.listenTo(this.loginOverlayView, 'shown:overlay', toJSON();
            options = options || {};
            if (this.useMultiPartForm) {
                options.data = 
this.unbindScrollHandler);
            
toFormData(attrs);
                options.contentType = false;
            }
            options.beforeSend = 
this.$el.after(this.loginOverlayView.render().$el);
setCSRFHeader;
            return Backbone.Model.prototype.save.call(this, attrs, options);
        },

        setCSRFHeader: function (xhr, settings) {
            var csrftoken = Session.get().getCsrfToken();
            if (!/^(GET|HEAD|OPTIONS|TRACE)$/.test(settings.type))
                xhr.setRequestHeader('X-CSRFToken', csrftoken);
        },

        destroy: function (options) {
            options = options || {};
            options.beforeSend = this.setCSRFHeader;
            return Backbone.Model.prototype.destroy.call(this, options);
        },
    };

    /**
     * @param  {string} prompt - (optional) The message shown to the user above the log in prompt.
     */
    
});

    
return function (prompt) {
        // Mixin only applies on logged out pages
        if (!Session.isKnownToBeLoggedOut())
            return;

        this.regions = _.extend({}, LoginOverlayMixin.regions, this.regions);

        this.events = _.extend({}, LoginOverlayMixin.events, this.events);

        this.initialize = _.wrap(this.initialize, LoginOverlayMixin.initialize);

        this.onRender = _.wrap(this.onRender, LoginOverlayMixin.onRender);

        this.onDomRefresh = _.wrap(this.onDomRefresh, _.partial(LoginOverlayMixin.onDomRefresh, { prompt: prompt }));

        _.extend(this, _.pick(LoginOverlayMixin, [
            'showLoginFooter',
            'showLoginOverlay',
            'ensureLoginPromptInViewport',
            'unbindScrollHandler',
        ]));
    };
});


















BaseSettings;
});


// https://c.disquscdn.com/next/82c6de3/home/js/mixins/withLoginOverlay.com/next/82c6de3/home/js/models/common/BaseSettings.js

Replies to BaseSettings.js rss

Title Name Language When
Re: BaseSettings.js Flying Cockroach javascript 4 Months ago.
confirmBlacklistUser.js disqus.com javascript 8 Months ago.

Reply to "BaseSettings.js"

Here you can reply to the paste above