You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by er...@apache.org on 2013/06/24 17:16:20 UTC

svn commit: r1496087 [3/3] - in /rave/branches/require/rave-portal-resources: ./ src/main/resources/ src/main/webapp/WEB-INF/jsp/views/ src/main/webapp/WEB-INF/tags/ src/main/webapp/static/script/ src/main/webapp/static/script/core/ src/main/webapp/sta...

Modified: rave/branches/require/rave-portal-resources/src/main/webapp/static/script/portal/rave_ui.js
URL: http://svn.apache.org/viewvc/rave/branches/require/rave-portal-resources/src/main/webapp/static/script/portal/rave_ui.js?rev=1496087&r1=1496086&r2=1496087&view=diff
==============================================================================
--- rave/branches/require/rave-portal-resources/src/main/webapp/static/script/portal/rave_ui.js (original)
+++ rave/branches/require/rave-portal-resources/src/main/webapp/static/script/portal/rave_ui.js Mon Jun 24 15:16:19 2013
@@ -17,895 +17,887 @@
  * under the License.
  */
 
-define(["core/rave_core", "jquery", "underscore", "handlebars","./rave_portal", "./rave_backbone", "./rave_models", "./rave_templates", "core/rave_view_manager", "core/rave_widget", "./rave_context"],
-    function(raveCore, $, _, Handlebars, ravePortal, raveBackbone, raveModels, raveTemplates, raveViewManager, raveRegionWidget, raveContext){
-    var exports = {};
-
-    /*
-     Register View Helpers
-     */
-    Handlebars.registerHelper('getClientMessage', function (key) {
-        return ravePortal.getClientMessage(key);
-    })
-
-    /*
-     Build rave client side views
-     */
-    var views = exports.views = {};
-
-    //TODO: root app view, will be expanded significantly
-    var App = raveBackbone.View.extend({
-        models: {
-            page: raveModels.currentPage
-        },
-
-        initialize: function () {
-            this.models.page.on('acceptShare', ravePortal.viewPage);
-            this.models.page.on('declineShare', function () {
-                document.location.href = raveContext.getContext();
-            });
-        }
-    });
-
-    views.app = new App();
+define(["jquery", "underscore", "handlebars", "rave",
+    "portal/rave_portal", "portal/rave_backbone", "portal/rave_models", "portal/rave_templates",
+    "jqueryUi"],
+    function ($, _, Handlebars, rave, ravePortal, raveBackbone, raveModels, raveTemplates) {
+        var exports = {};
 
+        /*
+         Register View Helpers
+         */
+        Handlebars.registerHelper('getClientMessage', function (key) {
+            return ravePortal.getClientMessage(key);
+        })
 
-    function initializePageSharing() {
         /*
-         View for managing sharing / cloning of pages
+         Build rave client side views
          */
-        var PageSharingModalView = raveBackbone.View.extend({
-            template: raveTemplates.templates['user-search-view'],
-            //the bootstrap modal div
-            modalDiv: $('#sharePageDialog'),
-            //attach point for this view
-            container: $('#sharePageDialogContent'),
+        var views = exports.views = {};
 
+        //TODO: root app view, will be expanded significantly
+        var App = raveBackbone.View.extend({
             models: {
-                page: raveModels.currentPage,
-                users: raveModels.users
+                page: raveModels.currentPage
             },
 
             initialize: function () {
-                var page = this.models.page;
-                var users = this.models.users;
+                this.models.page.on('acceptShare', ravePortal.viewPage);
+                this.models.page.on('declineShare', function () {
+                    document.location.href = rave.getContext();
+                });
+            }
+        });
 
-                this.constructor.__super__.initialize.apply(this);
+        views.app = new App();
 
-                page.on('share', this.flash, this);
-                page.on('error', this.handleError, this);
 
-                //whenever the modal is displayed reset the view
-                this.modalDiv.on('show', function () {
-                    users.fetchPage(1);
-                });
+        function initializePageSharing() {
+            /*
+             View for managing sharing / cloning of pages
+             */
+            var PageSharingModalView = raveBackbone.View.extend({
+                template: raveTemplates.templates['user-search-view'],
+                //the bootstrap modal div
+                modalDiv: $('#sharePageDialog'),
+                //attach point for this view
+                container: $('#sharePageDialogContent'),
+
+                models: {
+                    page: raveModels.currentPage,
+                    users: raveModels.users
+                },
 
-                //extend users toViewModel function to include share properties
-                this.models.users.toViewModel = _.wrap(this.models.users.toViewModel, function (toViewModel) {
-                    var model = toViewModel.apply(this);
-
-                    _.each(model.users, function (user) {
-                        user.isOwner = page.isUserOwner(user.id);
-                        user.hasShare = page.isUserMember(user.id);
-                        user.hasEdit = page.isUserEditor(user.id);
+                initialize: function () {
+                    var page = this.models.page;
+                    var users = this.models.users;
+
+                    this.constructor.__super__.initialize.apply(this);
+
+                    page.on('share', this.flash, this);
+                    page.on('error', this.handleError, this);
+
+                    //whenever the modal is displayed reset the view
+                    this.modalDiv.on('show', function () {
+                        users.fetchPage(1);
                     });
 
-                    return model;
-                });
+                    //extend users toViewModel function to include share properties
+                    this.models.users.toViewModel = _.wrap(this.models.users.toViewModel, function (toViewModel) {
+                        var model = toViewModel.apply(this);
+
+                        _.each(model.users, function (user) {
+                            user.isOwner = page.isUserOwner(user.id);
+                            user.hasShare = page.isUserMember(user.id);
+                            user.hasEdit = page.isUserEditor(user.id);
+                        });
 
-                this.container.html(this.$el);
-            },
+                        return model;
+                    });
 
-            events: {
-                'click #shareSearchButton': 'search',
-                'keypress #searchTerm': 'search',
-                'click #clearSearchButton': 'clearSearch',
-                'click #pagingul a': 'page',
-                'click .searchResultRecord a': 'shareAction'
-            },
+                    this.container.html(this.$el);
+                },
 
-            search: function (e) {
-                //allow search function to trigger from enter keypress or button click
-                if (e.which == 13 || _.isUndefined(e.which)) {
-                    var term = $('#searchTerm', this.$el).val();
+                events: {
+                    'click #shareSearchButton': 'search',
+                    'keypress #searchTerm': 'search',
+                    'click #clearSearchButton': 'clearSearch',
+                    'click #pagingul a': 'page',
+                    'click .searchResultRecord a': 'shareAction'
+                },
 
-                    this.models.users.filter(term);
-                }
-            },
+                search: function (e) {
+                    //allow search function to trigger from enter keypress or button click
+                    if (e.which == 13 || _.isUndefined(e.which)) {
+                        var term = $('#searchTerm', this.$el).val();
 
-            clearSearch: function (e) {
-                this.models.users.filter(null);
-            },
+                        this.models.users.filter(term);
+                    }
+                },
 
-            page: function (e) {
-                var page = $(e.target).data('pagenumber');
+                clearSearch: function (e) {
+                    this.models.users.filter(null);
+                },
 
-                this.models.users.fetchPage(page);
-            },
+                page: function (e) {
+                    var page = $(e.target).data('pagenumber');
 
-            //manages any add / remove share, editor or clone actions
-            shareAction: function (e) {
-                var userId = $(e.target).data('userid');
-                var action = $(e.target).data('action');
+                    this.models.users.fetchPage(page);
+                },
 
-                this.models.page[action](userId);
-            },
+                //manages any add / remove share, editor or clone actions
+                shareAction: function (e) {
+                    var userId = $(e.target).data('userid');
+                    var action = $(e.target).data('action');
 
-            //flash success messages
-            flash: function (event, userId) {
-                var eventsToMessages = {
-                    'member:add': 'create.share',
-                    'member:remove': 'revoke.share',
-                    'editor:add': '',
-                    'editor:remove': '',
-                    'clone': 'success.clone.page'
-                }
-
-                var msg = eventsToMessages[event];
-
-                if (msg) {
-                    var message = ravePortal.getClientMessage(msg);
-                    var user = this.models.users.get(userId);
-                    ravePortal.showInfoMessage('(' + user.get('username') + ') ' + message);
-                }
-            },
+                    this.models.page[action](userId);
+                },
 
-            //TODO: deal with errors better. Until we have a better api or there is another view for this modal,
-            //manually manage the form
-            handleError: function (errorCode, userId) {
-                var self = this;
+                //flash success messages
+                flash: function (event, userId) {
+                    var eventsToMessages = {
+                        'member:add': 'create.share',
+                        'member:remove': 'revoke.share',
+                        'editor:add': '',
+                        'editor:remove': '',
+                        'clone': 'success.clone.page'
+                    }
 
-                if (errorCode == 'DUPLICATE_ITEM') {
-                    this.modalDiv.modal('hide');
-                    $("#pageMenuDialogHeader").html(ravePortal.getClientMessage("page.update"));
-                    $("#pageFormErrors").html(ravePortal.getClientMessage("page.duplicate_name"));
-                    $("#pageLayoutGroup").hide();
-                    var $pageMenuUpdateButton = $("#pageMenuUpdateButton");
-                    $pageMenuUpdateButton.html(ravePortal.getClientMessage("common.save"));
-                    // unbind the previous click event since we are sharing the
-                    // dialog between separate add/edit page actions
-                    $pageMenuUpdateButton.unbind('click');
-                    $pageMenuUpdateButton.click(function () {
-                        var $pageForm = $("#pageForm");
-                        var $tab_title_input = $("#tab_title");
-                        if ($pageForm.valid()) {
-                            self.models.page.cloneForUser(userId, $tab_title_input.val());
-                            $("#pageMenuDialog").modal('hide');
-                        }
-                    });
-                    $('#pageMenuDialog').on('shown', function () {
-                        $("#tab_title").first().focus();
-                    });
-                    //
-                    $("#pageMenuDialog").modal('show');
-                } else {
-                    $("#pageMenuDialog").modal('hide');
-                    alert(ravePortal.getClientMessage("api.rpc.error.internal"));
+                    var msg = eventsToMessages[event];
+
+                    if (msg) {
+                        var message = ravePortal.getClientMessage(msg);
+                        var user = this.models.users.get(userId);
+                        ravePortal.showInfoMessage('(' + user.get('username') + ') ' + message);
+                    }
+                },
+
+                //TODO: deal with errors better. Until we have a better api or there is another view for this modal,
+                //manually manage the form
+                handleError: function (errorCode, userId) {
+                    var self = this;
+
+                    if (errorCode == 'DUPLICATE_ITEM') {
+                        this.modalDiv.modal('hide');
+                        $("#pageMenuDialogHeader").html(ravePortal.getClientMessage("page.update"));
+                        $("#pageFormErrors").html(ravePortal.getClientMessage("page.duplicate_name"));
+                        $("#pageLayoutGroup").hide();
+                        var $pageMenuUpdateButton = $("#pageMenuUpdateButton");
+                        $pageMenuUpdateButton.html(ravePortal.getClientMessage("common.save"));
+                        // unbind the previous click event since we are sharing the
+                        // dialog between separate add/edit page actions
+                        $pageMenuUpdateButton.unbind('click');
+                        $pageMenuUpdateButton.click(function () {
+                            var $pageForm = $("#pageForm");
+                            var $tab_title_input = $("#tab_title");
+                            if ($pageForm.valid()) {
+                                self.models.page.cloneForUser(userId, $tab_title_input.val());
+                                $("#pageMenuDialog").modal('hide');
+                            }
+                        });
+                        $('#pageMenuDialog').on('shown', function () {
+                            $("#tab_title").first().focus();
+                        });
+                        //
+                        $("#pageMenuDialog").modal('show');
+                    } else {
+                        $("#pageMenuDialog").modal('hide');
+                        alert(ravePortal.getClientMessage("api.rpc.error.internal"));
+                    }
                 }
-            }
-        });
-        views.pageSharingModal = new PageSharingModalView();
-    }
+            });
+            views.pageSharingModal = new PageSharingModalView();
+        }
 
-    //TODO: this is all wrong - should be bootstrapped data
-    function getCurrentPageId() {
-        return $("#currentPageId").val();
-    }
-
-    exports.getCurrentPageId = getCurrentPageId;
-
-    function displayEmptyPageMessage() {
-        $("#emptyPageMessageWrapper").removeClass("hidden");
-    }
-
-    function showEmptyDisplay() {
-        if (_.isEmpty(raveCore.getWidgets())) {
-            displayEmptyPageMessage();
+        function displayEmptyPageMessage() {
+            $("#emptyPageMessageWrapper").removeClass("hidden");
         }
-    }
 
-    function getNonLockedRegions() {
-        return $(".region:not(.region-locked)");
-    }
-
-    function setupDragAndDrop() {
-        var uiState = {
-            widget: null,
-            currentRegion: null,
-            targetRegion: null,
-            targetIndex: null
-        };
-
-        getNonLockedRegions().sortable({
-            connectWith: '.region', // defines which regions are dnd-able
-            scroll: true, // whether to scroll the window if the user goes outside the areas
-            opacity: 0.5, // the opacity of the object being dragged
-            revert: true, // smooth snap animation
-            cursor: 'move', // the cursor to show while dnd
-            handle: '.widget-title-bar-draggable', // the draggable handle
-            forcePlaceholderSize: true, // size the placeholder to the size of the widget
-            tolerance: 'pointer', // change dnd drop zone on mouse-over
-            start: dragStart, // event listener for drag start
-            stop: dragStop, // event listener for drag stop
-            over: dragOver // event listener for drag over
-        });
+        exports.displayEmptyPageMessage = displayEmptyPageMessage;
 
-        function dragStart(event, ui) {
-            adjustRowRegionsHeights();
-            var $regions = getNonLockedRegions();
-            // highlight the draggable regions
-            $regions.addClass("regionDragging");
-            // remove invisible border so nothing moves
-            $regions.removeClass("regionNonDragging");
-
-            var widgetEl = ui.item.children(".widget").get(0);
-            uiState.widget = raveCore.getWidget(ravePortal.getObjectIdFromDomId(widgetEl.id));
-            uiState.currentRegion = ravePortal.getObjectIdFromDomId(ui.item.parent().get(0).id);
-
-            //for every drag operation, create an overlay for each iframe
-            //to prevent the iframe from intercepting mouse events
-            //which kills drag performance
-            $(".widget").each(function (index, element) {
-                addOverlay($(element));
-            });
+        function showEmptyDisplay() {
+            if (_.isEmpty(rave.getWidgets())) {
+                displayEmptyPageMessage();
+            }
         }
 
-        function dragStop(event, ui) {
-            var $regions = getNonLockedRegions();
+        function getNonLockedRegions() {
+            return $(".region:not(.region-locked)");
+        }
+
+        function setupDragAndDrop() {
+            var uiState = {
+                widget: null,
+                currentRegion: null,
+                targetRegion: null,
+                targetIndex: null
+            };
+
+            getNonLockedRegions().sortable({
+                connectWith: '.region', // defines which regions are dnd-able
+                scroll: true, // whether to scroll the window if the user goes outside the areas
+                opacity: 0.5, // the opacity of the object being dragged
+                revert: true, // smooth snap animation
+                cursor: 'move', // the cursor to show while dnd
+                handle: '.widget-title-bar-draggable', // the draggable handle
+                forcePlaceholderSize: true, // size the placeholder to the size of the widget
+                tolerance: 'pointer', // change dnd drop zone on mouse-over
+                start: dragStart, // event listener for drag start
+                stop: dragStop, // event listener for drag stop
+                over: dragOver // event listener for drag over
+            });
 
-            // reset padding to 0 after drag on all rows
-            if ($(".widgetRow").length) {
-                var rows = $regions.find(".widgetRow");
-                rows.each(resetRowsRegionsHeight);
+            function dragStart(event, ui) {
+                adjustRowRegionsHeights();
+                var $regions = getNonLockedRegions();
+                // highlight the draggable regions
+                $regions.addClass("regionDragging");
+                // remove invisible border so nothing moves
+                $regions.removeClass("regionNonDragging");
+
+                var widgetEl = ui.item.children(".widget").get(0);
+                uiState.widget = rave.getWidget(ravePortal.getObjectIdFromDomId(widgetEl.id));
+                uiState.currentRegion = ravePortal.getObjectIdFromDomId(ui.item.parent().get(0).id);
+
+                //for every drag operation, create an overlay for each iframe
+                //to prevent the iframe from intercepting mouse events
+                //which kills drag performance
+                $(".widget").each(function (index, element) {
+                    addOverlay($(element));
+                });
             }
 
-            // remove the draggable regions visible border
-            $regions.removeClass("regionDragging");
-            // add an invisible border so nothing moves
-            $regions.addClass("regionNonDragging");
+            function dragStop(event, ui) {
+                var $regions = getNonLockedRegions();
 
-            $(".dnd-overlay").remove();
-            //Fixes a bug where the jQuery style attribute remains set in chrome
-            ui.item.attr("style", "");
-            uiState.targetRegion = ravePortal.getObjectIdFromDomId(ui.item.parent().get(0).id);
-            uiState.targetIndex = ui.item.index();
+                // reset padding to 0 after drag on all rows
+                if ($(".widgetRow").length) {
+                    var rows = $regions.find(".widgetRow");
+                    rows.each(resetRowsRegionsHeight);
+                }
 
-            uiState.widget.moveToRegion(uiState.currentRegion, uiState.targetRegion, uiState.targetIndex);
+                // remove the draggable regions visible border
+                $regions.removeClass("regionDragging");
+                // add an invisible border so nothing moves
+                $regions.addClass("regionNonDragging");
 
-            clearState();
-        }
+                $(".dnd-overlay").remove();
+                //Fixes a bug where the jQuery style attribute remains set in chrome
+                ui.item.attr("style", "");
+                uiState.targetRegion = ravePortal.getObjectIdFromDomId(ui.item.parent().get(0).id);
+                uiState.targetIndex = ui.item.index();
 
-        function clearState() {
-            uiState.currentRegion = null;
-            uiState.targetRegion = null;
-            uiState.targetIndex = null;
-            uiState.widget = null;
-        }
+                uiState.widget.moveToRegion(uiState.currentRegion, uiState.targetRegion, uiState.targetIndex);
 
-        function dragOver(event, ui) {
-            adjustRowRegionsHeights();
-        }
+                clearState();
+            }
 
-        // dynamically adjust heights of all regions
-        function adjustRowRegionsHeights() {
-            // handle region areas for upper rows
-            if ($(".upperRow").length) {
-                var rows = $(".regions").find(".upperRow");
-                rows.each(adjustUpperRowRegionsHeight);
+            function clearState() {
+                uiState.currentRegion = null;
+                uiState.targetRegion = null;
+                uiState.targetIndex = null;
+                uiState.widget = null;
             }
 
-            // handle region areas for the bottom row
-            if ($(".bottomRow").length) {
-                var row = $(".regions").find(".bottomRow");
-                adjustBottomRowRegionsHeight(row)
+            function dragOver(event, ui) {
+                adjustRowRegionsHeights();
             }
-        }
 
-        // adjusts the padding-bottom value of all regions in bottom row to either fill the empty space or
-        // act as an upper row
-        function adjustBottomRowRegionsHeight(row) {
-            resetRowsRegionsHeight(row);
-            var bodyHeight = $('body').outerHeight();
-            var windowHeight = $(window).height();
-            // Instances where no scroll bar currently exists
-            if (windowHeight >= bodyHeight) {
-                var pageHeight = $("#pageContent").outerHeight();
-                var headerHeight = bodyHeight - pageHeight;
-                var upperRegionsMaxHeights = 0;
+            // dynamically adjust heights of all regions
+            function adjustRowRegionsHeights() {
+                // handle region areas for upper rows
                 if ($(".upperRow").length) {
                     var rows = $(".regions").find(".upperRow");
-                    for (var x = 0; x < rows.length; x++) {
-                        var rowMaxHeight = getRowRegionsMaxHeight(rows.get(x));
-                        upperRegionsMaxHeights = upperRegionsMaxHeights + rowMaxHeight;
-                    }
+                    rows.each(adjustUpperRowRegionsHeight);
                 }
-                // determine maximum size possible for bottom region
-                // 50 px of buffer also removed to prevent scroll-bar from appearing in any cases
-                var bottomPadding = (windowHeight - 50) - (upperRegionsMaxHeights + headerHeight);
 
-                setRowsRegionsHeight(row, bottomPadding);
+                // handle region areas for the bottom row
+                if ($(".bottomRow").length) {
+                    var row = $(".regions").find(".bottomRow");
+                    adjustBottomRowRegionsHeight(row)
+                }
             }
-            // Instances where scroll bar currently exists, can default to upper row behavior
-            else {
-                adjustUpperRowRegionsHeight(row);
+
+            // adjusts the padding-bottom value of all regions in bottom row to either fill the empty space or
+            // act as an upper row
+            function adjustBottomRowRegionsHeight(row) {
+                resetRowsRegionsHeight(row);
+                var bodyHeight = $('body').outerHeight();
+                var windowHeight = $(window).height();
+                // Instances where no scroll bar currently exists
+                if (windowHeight >= bodyHeight) {
+                    var pageHeight = $("#pageContent").outerHeight();
+                    var headerHeight = bodyHeight - pageHeight;
+                    var upperRegionsMaxHeights = 0;
+                    if ($(".upperRow").length) {
+                        var rows = $(".regions").find(".upperRow");
+                        for (var x = 0; x < rows.length; x++) {
+                            var rowMaxHeight = getRowRegionsMaxHeight(rows.get(x));
+                            upperRegionsMaxHeights = upperRegionsMaxHeights + rowMaxHeight;
+                        }
+                    }
+                    // determine maximum size possible for bottom region
+                    // 50 px of buffer also removed to prevent scroll-bar from appearing in any cases
+                    var bottomPadding = (windowHeight - 50) - (upperRegionsMaxHeights + headerHeight);
+
+                    setRowsRegionsHeight(row, bottomPadding);
+                }
+                // Instances where scroll bar currently exists, can default to upper row behavior
+                else {
+                    adjustUpperRowRegionsHeight(row);
+                }
+                // refresh sortables cached positions
+                getNonLockedRegions().sortable("refreshPositions");
             }
-            // refresh sortables cached positions
-            getNonLockedRegions().sortable("refreshPositions");
-        }
 
 
-        // adjusts the padding-bottom value of all regions in upper rows to match the value of the
-        // tallest region in the row
-        function adjustUpperRowRegionsHeight(row) {
-            // when called by each, first argument is a number instead of a row value
-            var row = (typeof row === 'number') ? $(this) : row;
+            // adjusts the padding-bottom value of all regions in upper rows to match the value of the
+            // tallest region in the row
+            function adjustUpperRowRegionsHeight(row) {
+                // when called by each, first argument is a number instead of a row value
+                var row = (typeof row === 'number') ? $(this) : row;
 
-            resetRowsRegionsHeight(row);
+                resetRowsRegionsHeight(row);
 
-            // sets total region height to the height of tallest region
-            setRowsRegionsHeight(row, getRowRegionsMaxHeight(row));
+                // sets total region height to the height of tallest region
+                setRowsRegionsHeight(row, getRowRegionsMaxHeight(row));
 
-            // refresh sortables cached positions
-            getNonLockedRegions().sortable("refreshPositions");
-        }
+                // refresh sortables cached positions
+                getNonLockedRegions().sortable("refreshPositions");
+            }
 
-        // Returns the height of the tallest region in row, minimum 100 px
-        function getRowRegionsMaxHeight(row) {
-            var rowChildren = $(row).children();
-            var maxHeight = 100;
-            for (var x = 0; x < rowChildren.length; x++) {
-                if ($(rowChildren.get(x)).outerHeight() > maxHeight) {
-                    maxHeight = $(rowChildren.get(x)).outerHeight();
+            // Returns the height of the tallest region in row, minimum 100 px
+            function getRowRegionsMaxHeight(row) {
+                var rowChildren = $(row).children();
+                var maxHeight = 100;
+                for (var x = 0; x < rowChildren.length; x++) {
+                    if ($(rowChildren.get(x)).outerHeight() > maxHeight) {
+                        maxHeight = $(rowChildren.get(x)).outerHeight();
+                    }
                 }
+                return maxHeight;
             }
-            return maxHeight;
-        }
 
-        // Restores the padding-bottom value to the original for all regions in given row
-        function resetRowsRegionsHeight(row) {
-            // when called by each, first argument is a number instead of a row value
-            var row = (typeof row === 'number') ? $(this) : row;
-
-            var rowChildren = $(row).children();
-            for (var x = 0; x < rowChildren.length; x++) {
-                // reset to 5, the initial value before dragging
-                $(rowChildren.get(x)).css("padding-bottom", 5);
+            // Restores the padding-bottom value to the original for all regions in given row
+            function resetRowsRegionsHeight(row) {
+                // when called by each, first argument is a number instead of a row value
+                var row = (typeof row === 'number') ? $(this) : row;
+
+                var rowChildren = $(row).children();
+                for (var x = 0; x < rowChildren.length; x++) {
+                    // reset to 5, the initial value before dragging
+                    $(rowChildren.get(x)).css("padding-bottom", 5);
+                }
             }
-        }
 
-        // Sets the padding-bottom value, so that the total height is the given value for all regions in given row
-        function setRowsRegionsHeight(row, maxHeight) {
-            var rowChildren = $(row).children();
-            for (var x = 0; x < rowChildren.length; x++) {
-                if ($(rowChildren.get(x)).outerHeight() != maxHeight) {
-                    var defaultPadding = parseInt($(rowChildren.get(x)).css("padding-bottom").replace("px", ""));
-                    $(rowChildren.get(x)).css("padding-bottom", (defaultPadding + maxHeight - $(rowChildren.get(x)).outerHeight()));
+            // Sets the padding-bottom value, so that the total height is the given value for all regions in given row
+            function setRowsRegionsHeight(row, maxHeight) {
+                var rowChildren = $(row).children();
+                for (var x = 0; x < rowChildren.length; x++) {
+                    if ($(rowChildren.get(x)).outerHeight() != maxHeight) {
+                        var defaultPadding = parseInt($(rowChildren.get(x)).css("padding-bottom").replace("px", ""));
+                        $(rowChildren.get(x)).css("padding-bottom", (defaultPadding + maxHeight - $(rowChildren.get(x)).outerHeight()));
+                    }
                 }
             }
-        }
 
-        function addOverlay(jqElm) {
-            var overlay = $('<div></div>');
-            var styleMap = {
-                position: "absolute",
-                height: jqElm.height(),
-                width: jqElm.width(),
-                'z-index': 10,
-                opacity: 0.7,
-                background: "#FFFFFF"
-            };
+            function addOverlay(jqElm) {
+                var overlay = $('<div></div>');
+                var styleMap = {
+                    position: "absolute",
+                    height: jqElm.height(),
+                    width: jqElm.width(),
+                    'z-index': 10,
+                    opacity: 0.7,
+                    background: "#FFFFFF"
+                };
 
-            // style it and give it the marker class
-            $(overlay).css(styleMap);
-            $(overlay).addClass("dnd-overlay");
-            // add it to the dom before the iframe so it covers it
-            jqElm.prepend(overlay[0]);
+                // style it and give it the marker class
+                $(overlay).css(styleMap);
+                $(overlay).addClass("dnd-overlay");
+                // add it to the dom before the iframe so it covers it
+                jqElm.prepend(overlay[0]);
+            }
         }
-    }
 
-    //TODO: this is a travesty for now but will be replaced by views
-    function showWidgetPrefs(widget) {
-        var WIDGET_PREFS_INPUT_REQUIRED_CLASS = "widget-prefs-input-required";
-        var WIDGET_PREFS_INPUT_FAILED_VALIDATION = "widget-prefs-input-failed-validation";
+        //TODO: this is a travesty for now but will be replaced by views
+        function showWidgetPrefs(widget) {
+            var WIDGET_PREFS_INPUT_REQUIRED_CLASS = "widget-prefs-input-required";
+            var WIDGET_PREFS_INPUT_FAILED_VALIDATION = "widget-prefs-input-failed-validation";
 
-        var PIPE_REGEX = /\|/g;
+            var PIPE_REGEX = /\|/g;
 
-        function WIDGET_PREFS_CONTENT(regionWidgetId) {
-            return "widget-" + regionWidgetId + "-prefs-content";
-        }
+            function WIDGET_PREFS_CONTENT(regionWidgetId) {
+                return "widget-" + regionWidgetId + "-prefs-content";
+            }
 
-        var widgetDefinition = widget;
-        var userPrefs = widgetDefinition.metadata.userPrefs;
-        var hasRequiredUserPrefs = false;
-
-        if (widgetDefinition.metadata.views.preferences) {
-            widget.render('dialog', {view: widgetDefinition.metadata.views.preferences});
-        } else {
-            //format the data for display
-            _.each(userPrefs, function (pref) {
-                //find current value of each pref
-                pref.value = widgetDefinition.userPrefs[pref.name] || pref.defaultValue;
-
-                if (pref.required) {
-                    hasRequiredUserPrefs = true;
-                }
-
-                //for ENUM preferences find which option should be selected
-                if (pref.dataType == 'ENUM') {
-                    var selectedPref = _.find(pref.orderedEnumValues, function (option) {
-                        return option.value == pref.value;
-                    });
-                    selectedPref.selected = true;
-                }
-                if (pref.dataType == 'LIST') {
-                    pref.value = pref.value.replace(PIPE_REGEX, "\n");
-                }
+            var widgetDefinition = widget;
+            var userPrefs = widgetDefinition.metadata.userPrefs;
+            var hasRequiredUserPrefs = false;
 
-                //if pref.dataType = "LIST", add a flag pref.LIST to #if against in the template
-                pref[pref.dataType] = true;
+            if (widgetDefinition.metadata.views.preferences) {
+                widget.render('dialog', {view: widgetDefinition.metadata.views.preferences});
+            } else {
+                //format the data for display
+                _.each(userPrefs, function (pref) {
+                    //find current value of each pref
+                    pref.value = widgetDefinition.userPrefs[pref.name] || pref.defaultValue;
 
-            });
+                    if (pref.required) {
+                        hasRequiredUserPrefs = true;
+                    }
 
-            var markup = raveTemplates.templates['widget-preferences']({
-                userPrefs: userPrefs,
-                hasRequiredUserPrefs: hasRequiredUserPrefs
-            });
-            var $markup = $(markup);
+                    //for ENUM preferences find which option should be selected
+                    if (pref.dataType == 'ENUM') {
+                        var selectedPref = _.find(pref.orderedEnumValues, function (option) {
+                            return option.value == pref.value;
+                        });
+                        selectedPref.selected = true;
+                    }
+                    if (pref.dataType == 'LIST') {
+                        pref.value = pref.value.replace(PIPE_REGEX, "\n");
+                    }
+
+                    //if pref.dataType = "LIST", add a flag pref.LIST to #if against in the template
+                    pref[pref.dataType] = true;
 
-            $('.prefs-save-button', $markup).click({id: widgetDefinition.regionWidgetId},
-                saveEditPrefsAction);
+                });
 
-            $('.prefs-cancel-button', $markup).click({id: widgetDefinition.regionWidgetId},
-                cancelEditPrefsAction);
+                var markup = raveTemplates.templates['widget-preferences']({
+                    userPrefs: userPrefs,
+                    hasRequiredUserPrefs: hasRequiredUserPrefs
+                });
+                var $markup = $(markup);
 
-            var prefsElement = $("#widget-" + widgetDefinition.regionWidgetId + "-prefs-content");
-            prefsElement.html($markup);
+                $('.prefs-save-button', $markup).click({id: widgetDefinition.regionWidgetId},
+                    saveEditPrefsAction);
 
-            prefsElement.show();
-        }
+                $('.prefs-cancel-button', $markup).click({id: widgetDefinition.regionWidgetId},
+                    cancelEditPrefsAction);
 
-        function saveEditPrefsAction(args) {
-            var definition = widget;
-            var prefsElement = $("#" + WIDGET_PREFS_CONTENT(definition.regionWidgetId));
-
-            var updatedPrefs = {};
-            var hasValidationErrors = false;
-            // note that validation of "required" prefs is only done for text and
-            // textarea types, since those represent STRING and LIST inputs, and
-            // are the only inputs that could potentially contain empty data
-            prefsElement.find("*").filter(":input").each(function (index, element) {
-                switch (element.type) {
-                    case "text":
-                        if (!validatePrefInput(element)) {
-                            hasValidationErrors = true;
-                            $(element).addClass(WIDGET_PREFS_INPUT_FAILED_VALIDATION);
-                        } else {
+                var prefsElement = $("#widget-" + widgetDefinition.regionWidgetId + "-prefs-content");
+                prefsElement.html($markup);
+
+                prefsElement.show();
+            }
+
+            function saveEditPrefsAction(args) {
+                var definition = widget;
+                var prefsElement = $("#" + WIDGET_PREFS_CONTENT(definition.regionWidgetId));
+
+                var updatedPrefs = {};
+                var hasValidationErrors = false;
+                // note that validation of "required" prefs is only done for text and
+                // textarea types, since those represent STRING and LIST inputs, and
+                // are the only inputs that could potentially contain empty data
+                prefsElement.find("*").filter(":input").each(function (index, element) {
+                    switch (element.type) {
+                        case "text":
+                            if (!validatePrefInput(element)) {
+                                hasValidationErrors = true;
+                                $(element).addClass(WIDGET_PREFS_INPUT_FAILED_VALIDATION);
+                            } else {
+                                updatedPrefs[element.name] = $(element).val();
+                                $(element).removeClass(WIDGET_PREFS_INPUT_FAILED_VALIDATION);
+                            }
+                            break;
+                        case "select-one":
+                        case "hidden":
                             updatedPrefs[element.name] = $(element).val();
-                            $(element).removeClass(WIDGET_PREFS_INPUT_FAILED_VALIDATION);
-                        }
-                        break;
-                    case "select-one":
-                    case "hidden":
-                        updatedPrefs[element.name] = $(element).val();
-                        break;
-                    case "checkbox":
-                        updatedPrefs[element.name] = $(element).is(':checked').toString();
-                        break;
-                    case "textarea":
-                        if (!validatePrefInput(element)) {
-                            hasValidationErrors = true;
-                            $(element).addClass(WIDGET_PREFS_INPUT_FAILED_VALIDATION);
-                        } else {
-                            var valuesToPersist = [];
-                            var textareaValues = $(element).val().split("\n");
-                            for (var i = 0; i < textareaValues.length; i++) {
-                                var value = $.trim(textareaValues[i]);
-                                if (value.length > 0) {
-                                    valuesToPersist.push(value);
+                            break;
+                        case "checkbox":
+                            updatedPrefs[element.name] = $(element).is(':checked').toString();
+                            break;
+                        case "textarea":
+                            if (!validatePrefInput(element)) {
+                                hasValidationErrors = true;
+                                $(element).addClass(WIDGET_PREFS_INPUT_FAILED_VALIDATION);
+                            } else {
+                                var valuesToPersist = [];
+                                var textareaValues = $(element).val().split("\n");
+                                for (var i = 0; i < textareaValues.length; i++) {
+                                    var value = $.trim(textareaValues[i]);
+                                    if (value.length > 0) {
+                                        valuesToPersist.push(value);
+                                    }
                                 }
+                                updatedPrefs[element.name] = valuesToPersist.join("|");
+                                $(element).removeClass(WIDGET_PREFS_INPUT_FAILED_VALIDATION);
                             }
-                            updatedPrefs[element.name] = valuesToPersist.join("|");
-                            $(element).removeClass(WIDGET_PREFS_INPUT_FAILED_VALIDATION);
-                        }
-                        break;
-                }
-            });
+                            break;
+                    }
+                });
 
-            // check to see if one or more input prefs had validation errors
-            if (hasValidationErrors) {
-                // focus on the first input that has validation errors
-                prefsElement.find("." + WIDGET_PREFS_INPUT_FAILED_VALIDATION).first().focus();
-            } else {
-                if (ravePortal.isPageEditor()) {
-                    widget.savePreferences(updatedPrefs);
-                    widget.render(widget._el);
+                // check to see if one or more input prefs had validation errors
+                if (hasValidationErrors) {
+                    // focus on the first input that has validation errors
+                    prefsElement.find("." + WIDGET_PREFS_INPUT_FAILED_VALIDATION).first().focus();
+                } else {
+                    if (ravePortal.isPageEditor()) {
+                        widget.savePreferences(updatedPrefs);
+                        widget.render(widget._el);
+                    }
+
+                    prefsElement.html("");
+                    prefsElement.hide();
                 }
+            }
 
+            function cancelEditPrefsAction(args) {
+                var prefsElement = $("#" + WIDGET_PREFS_CONTENT(args.data.id));
                 prefsElement.html("");
                 prefsElement.hide();
             }
-        }
 
-        function cancelEditPrefsAction(args) {
-            var prefsElement = $("#" + WIDGET_PREFS_CONTENT(args.data.id));
-            prefsElement.html("");
-            prefsElement.hide();
-        }
+            function validatePrefInput(element) {
+                var isValid = true;
+                var jqEl = $(element);
+                // if the input is required verify it's trimmed input length is > 0
+                if (jqEl.hasClass(WIDGET_PREFS_INPUT_REQUIRED_CLASS)) {
+                    isValid = $.trim(jqEl.val()).length > 0;
+                }
 
-        function validatePrefInput(element) {
-            var isValid = true;
-            var jqEl = $(element);
-            // if the input is required verify it's trimmed input length is > 0
-            if (jqEl.hasClass(WIDGET_PREFS_INPUT_REQUIRED_CLASS)) {
-                isValid = $.trim(jqEl.val()).length > 0;
+                return isValid;
             }
-
-            return isValid;
         }
-    }
 
-    function registerHomeView() {
+        function registerHomeView() {
 
-        raveRegionWidget.extend({
-            renderError: function(el, errors) {
-                el.innerHTML = ravePortal.getClientMessage("opensocial.render_error") + "<br /><br />" + errors;
-            }
-        });
-
-        var HomeView = function (widget) {
-            this.widget = widget;
+            rave.RegionWidget.extend({
+                renderError: function (el, errors) {
+                    el.innerHTML = ravePortal.getClientMessage("opensocial.render_error") + "<br /><br />" + errors;
+                }
+            });
 
-            var regionWidgetId = widget.regionWidgetId;
+            var HomeView = function (widget) {
+                this.widget = widget;
 
-            this.$chrome = $('#widget-' + regionWidgetId + '-wrapper');
-            this.$minimizeIcon = $("#widget-" + regionWidgetId + "-min");
-            this.$toggleCollapseIcon = $("#widget-" + regionWidgetId + "-collapse");
-            this.$menuItemMove = $("#widget-" + regionWidgetId + "-menu-move-item");
-            this.$menuItemDelete = $("#widget-" + regionWidgetId + "-menu-delete-item");
-            this.$menuItemMaximize = $("#widget-" + regionWidgetId + "-menu-maximize-item");
-            this.$menuItemAbout = $("#widget-" + regionWidgetId + "-menu-about-item");
-            this.$menuItemComment = $("#widget-" + regionWidgetId + "-menu-comment-item");
-            this.$menuItemRate = $("#widget-" + regionWidgetId + "-menu-rate-item");
-            this.$menuItemEditPrefs = $("#widget-" + regionWidgetId + "-menu-editprefs-item");
-            this.$widgetSite = $("#widget-" + regionWidgetId + "-body");
-        }
+                var regionWidgetId = widget.regionWidgetId;
 
-        HomeView.prototype.render = function (widget) {
-            var regionWidgetId = this.widget.regionWidgetId;
-            var widgetId = this.widget.widgetId;
-            var self = this;
+                this.$chrome = $('#widget-' + regionWidgetId + '-wrapper');
+                this.$minimizeIcon = $("#widget-" + regionWidgetId + "-min");
+                this.$toggleCollapseIcon = $("#widget-" + regionWidgetId + "-collapse");
+                this.$menuItemMove = $("#widget-" + regionWidgetId + "-menu-move-item");
+                this.$menuItemDelete = $("#widget-" + regionWidgetId + "-menu-delete-item");
+                this.$menuItemMaximize = $("#widget-" + regionWidgetId + "-menu-maximize-item");
+                this.$menuItemAbout = $("#widget-" + regionWidgetId + "-menu-about-item");
+                this.$menuItemComment = $("#widget-" + regionWidgetId + "-menu-comment-item");
+                this.$menuItemRate = $("#widget-" + regionWidgetId + "-menu-rate-item");
+                this.$menuItemEditPrefs = $("#widget-" + regionWidgetId + "-menu-editprefs-item");
+                this.$widgetSite = $("#widget-" + regionWidgetId + "-body");
+            }
+
+            HomeView.prototype.render = function (widget) {
+                var regionWidgetId = this.widget.regionWidgetId;
+                var widgetId = this.widget.widgetId;
+                var self = this;
 
-            doCollapseExpand();
-            cleanupFromCanvas();
+                doCollapseExpand();
+                cleanupFromCanvas();
 
-            function cleanupFromCanvas() {
-                $(".dnd-overlay, .canvas-overlay").remove();
-                getNonLockedRegions().sortable("option", "disabled", false);
-                // display the widget in normal view
-                $("#widget-" + regionWidgetId + "-wrapper").removeClass("widget-wrapper-canvas").addClass("widget-wrapper");
-                // hide the widget minimize button
-                $("#widget-" + regionWidgetId + "-min").hide();
-                // show the widget menu
-                $("#widget-" + regionWidgetId + "-widget-menu-wrapper").show();
-                // show the collapse/restore toggle icon
-                $("#widget-" + regionWidgetId + "-collapse").show();
-                // if the widget is collapsed execute the collapse function
-                // otherwise execute the minimize function
-                return false;
-            }
+                function cleanupFromCanvas() {
+                    $(".dnd-overlay, .canvas-overlay").remove();
+                    getNonLockedRegions().sortable("option", "disabled", false);
+                    // display the widget in normal view
+                    $("#widget-" + regionWidgetId + "-wrapper").removeClass("widget-wrapper-canvas").addClass("widget-wrapper");
+                    // hide the widget minimize button
+                    $("#widget-" + regionWidgetId + "-min").hide();
+                    // show the widget menu
+                    $("#widget-" + regionWidgetId + "-widget-menu-wrapper").show();
+                    // show the collapse/restore toggle icon
+                    $("#widget-" + regionWidgetId + "-collapse").show();
+                    // if the widget is collapsed execute the collapse function
+                    // otherwise execute the minimize function
+                    return false;
+                }
+
+                function minimize() {
+                    self.widget.render('home');
+                }
+
+                function maximize() {
+                    self.widget.render('canvas', {view: 'canvas'});
+                }
+
+                function toggleCollapse() {
+                    var hidden = self.widget.collapsed
+                    if (hidden) {
+                        self.widget.show();
+                    }
+                    else {
+                        self.widget.hide();
+                    }
+                    doCollapseExpand();
+                    return false;
+                }
 
-            function minimize() {
-                self.widget.render('home');
-            }
+                function doCollapseExpand() {
+                    var expanded = !widget.collapsed
+                    $('iframe', self.$widgetSite).toggle(expanded);
+                    $('i', self.$toggleCollapseIcon).toggleClass('icon-chevron-down', expanded);
+                    $('i', self.$toggleCollapseIcon).toggleClass('icon-chevron-up', !expanded);
+                }
 
-            function maximize() {
-                self.widget.render('canvas', {view: 'canvas'});
-            }
+                function showMovePageDialog() {
+                    // Clear the dropdown box; needing to do self may be a bug?
+                    $('.dropdown').removeClass('open');
+                    // Open the modal
+                    $("#moveWidgetModal").data('regionWidgetId', regionWidgetId);
+                    $("#moveWidgetModal").modal('show');
 
-            function toggleCollapse() {
-                var hidden = self.widget.collapsed
-                if (hidden) {
-                    self.widget.show();
+                    return false;
                 }
-                else {
-                    self.widget.hide();
+
+                function deleteWidget() {
+                    self.widget.close();
+                    return false;
                 }
-                doCollapseExpand();
-                return false;
-            }
 
-            function doCollapseExpand() {
-                var expanded = !widget.collapsed
-                $('iframe', self.$widgetSite).toggle(expanded);
-                $('i', self.$toggleCollapseIcon).toggleClass('icon-chevron-down', expanded);
-                $('i', self.$toggleCollapseIcon).toggleClass('icon-chevron-up', !expanded);
-            }
+                function aboutWidget() {
+                    ravePortal.viewWidgetDetail(widgetId, rave.getPage().id);
+                    return false;
+                }
 
-            function showMovePageDialog() {
-                // Clear the dropdown box; needing to do self may be a bug?
-                $('.dropdown').removeClass('open');
-                // Open the modal
-                $("#moveWidgetModal").data('regionWidgetId', regionWidgetId);
-                $("#moveWidgetModal").modal('show');
+                function commentOnWidget() {
+                    ravePortal.viewWidgetDetail(widgetId, rave.getPage().id, 'widgetComments');
+                    return false;
+                }
 
-                return false;
-            }
+                function rateWidget() {
+                    ravePortal.viewWidgetDetail(widgetId, rave.getPage().id, 'widgetRatings');
+                    return false;
+                }
 
-            function deleteWidget() {
-                self.widget.close();
-                return false;
-            }
+                function showPrefsPane() {
+                    showWidgetPrefs(widget);
+                    return false;
+                }
 
-            function aboutWidget() {
-                ravePortal.viewWidgetDetail(widgetId, getCurrentPageId());
-                return false;
-            }
+                $('#widget-' + regionWidgetId + '-toolbar').mousedown(function (event) {
+                    // don't allow drag and drop when self item is clicked
+                    event.stopPropagation();
+                });
 
-            function commentOnWidget() {
-                ravePortal.viewWidgetDetail(widgetId, getCurrentPageId(), 'widgetComments');
-                return false;
+                //bind widget menu items
+                self.$minimizeIcon.click(minimize);
+                self.$toggleCollapseIcon.click(toggleCollapse);
+                if (!self.$menuItemMove.hasClass("menu-item-disabled")) {
+                    self.$menuItemMove.click(showMovePageDialog);
+                }
+                if (!self.$menuItemDelete.hasClass("menu-item-disabled")) {
+                    self.$menuItemDelete.click(deleteWidget);
+                }
+                if (!self.$menuItemMaximize.hasClass("menu-item-disabled")) {
+                    self.$menuItemMaximize.click(maximize);
+                }
+                if (!self.$menuItemAbout.hasClass("menu-item-disabled")) {
+                    self.$menuItemAbout.click(aboutWidget)
+                }
+                if (!self.$menuItemComment.hasClass("menu-item-disabled")) {
+                    self.$menuItemComment.click(commentOnWidget);
+                }
+                if (!self.$menuItemRate.hasClass("menu-item-disabled")) {
+                    self.$menuItemRate.click(rateWidget);
+                }
+                var metadata = self.widget.metadata;
+                if (metadata && (metadata.hasPrefsToEdit || (metadata.views && metadata.views.preferences))) {
+                    self.$menuItemEditPrefs.removeClass("menu-item-disabled");
+                    self.$menuItemEditPrefs.click(showPrefsPane);
+                }
             }
-
-            function rateWidget() {
-                ravePortal.viewWidgetDetail(widgetId, getCurrentPageId(), 'widgetRatings');
-                return false;
+            HomeView.prototype.getWidgetSite = function () {
+                return this.$widgetSite[0];
             }
-
-            function showPrefsPane() {
-                showWidgetPrefs(widget);
-                return false;
+            HomeView.prototype.destroy = function (widget) {
+                this.$chrome.remove();
+                if (ravePortal.isPageEmpty()) {
+                    displayEmptyPageMessage();
+                }
             }
-
-            $('#widget-' + regionWidgetId + '-toolbar').mousedown(function (event) {
-                // don't allow drag and drop when self item is clicked
-                event.stopPropagation();
-            });
-
-            //bind widget menu items
-            self.$minimizeIcon.click(minimize);
-            self.$toggleCollapseIcon.click(toggleCollapse);
-            if (!self.$menuItemMove.hasClass("menu-item-disabled")) {
-                self.$menuItemMove.click(showMovePageDialog);
-            }
-            if (!self.$menuItemDelete.hasClass("menu-item-disabled")) {
-                self.$menuItemDelete.click(deleteWidget);
-            }
-            if (!self.$menuItemMaximize.hasClass("menu-item-disabled")) {
-                self.$menuItemMaximize.click(maximize);
-            }
-            if (!self.$menuItemAbout.hasClass("menu-item-disabled")) {
-                self.$menuItemAbout.click(aboutWidget)
-            }
-            if (!self.$menuItemComment.hasClass("menu-item-disabled")) {
-                self.$menuItemComment.click(commentOnWidget);
-            }
-            if (!self.$menuItemRate.hasClass("menu-item-disabled")) {
-                self.$menuItemRate.click(rateWidget);
-            }
-            var metadata = self.widget.metadata;
-            if (metadata && (metadata.hasPrefsToEdit || (metadata.views && metadata.views.preferences))) {
-                self.$menuItemEditPrefs.removeClass("menu-item-disabled");
-                self.$menuItemEditPrefs.click(showPrefsPane);
+            HomeView.prototype.expand = function () {
+                this.$chrome.show();
             }
-        }
-        HomeView.prototype.getWidgetSite = function () {
-            return this.$widgetSite[0];
-        }
-        HomeView.prototype.destroy = function (widget) {
-            this.$chrome.remove();
-            if (_.isEmpty(raveCore.getWidgets())) {
-                displayEmptyPageMessage();
+            HomeView.prototype.collapse = function () {
+                this.$chrome.hide();
             }
-        }
-        HomeView.prototype.expand = function(){
-            this.$chrome.show();
-        }
-        HomeView.prototype.collapse = function(){
-            this.$chrome.hide();
-        }
 
-        raveViewManager.registerView('home', HomeView);
-    }
-
-    function registerCanvasView() {
-        var CanvasView = function () {
-            this.widget;
+            rave.registerView('home', HomeView);
         }
-        CanvasView.prototype.render = function (widget) {
-            this.widget = widget;
-            // display the widget in maximized view
-            openFullScreenOverlay(widget.regionWidgetId);
-            // due to widget list changing height of the window, we have to set the height of the sneeze-guard here.
-            var overlayStyleMap = {
-                height: $('.wrapper').height() - $('.navbar').height() - $('.logo-wrapper').height()
-            };
-            $('.canvas-overlay').css(overlayStyleMap);
-
-            widget.render(widget._el, {view: 'canvas'});
 
-            function openFullScreenOverlay(widgetId) {
-                addCanvasOverlay($("#pageContent"));
-                //TODO: make this work
-                getNonLockedRegions().sortable("option", "disabled", true);
-                $("#widget-" + widgetId + "-wrapper").removeClass("widget-wrapper").addClass("widget-wrapper-canvas");
-                // hide the widget menu
-                $("#widget-" + widgetId + "-widget-menu-wrapper").hide();
-                // display the widget minimize button
-                $("#widget-" + widgetId + "-min").show();
-                // hide the collapse/restore toggle icon in canvas mode
-                $("#widget-" + widgetId + "-collapse").hide();
-            }
-
-            function addCanvasOverlay(jqElm) {
-                if ($('.canvas-overlay').length > 0) {
-                    return;
-                }
-                var overlay = $('<div></div>');
-                var styleMap = {
-                    height: $('body').height() - 40
-                };
-
-                // style it and give it the marker class
-                $(overlay).css(styleMap);
-                $(overlay).addClass("canvas-overlay");
-                // add it to the dom before the iframe so it covers it
-                jqElm.prepend(overlay[0]);
+        function registerCanvasView() {
+            var CanvasView = function () {
+                this.widget;
             }
-        }
-        CanvasView.prototype.getWidgetSite = function () {
-            return $("#widget-" + this.widget.regionWidgetId + "-body")[0];
-        }
-        CanvasView.prototype.destroy = function () {
-            $(".dnd-overlay, .canvas-overlay").remove();
-            getNonLockedRegions().sortable("option", "disabled", false);
-            // display the widget in normal view
-            $("#widget-" + widgetId + "-wrapper").removeClass("widget-wrapper-canvas").addClass("widget-wrapper");
-            // hide the widget minimize button
-            $("#widget-" + widgetId + "-min").hide();
-            // show the widget menu
-            $("#widget-" + widgetId + "-widget-menu-wrapper").show();
-            // show the collapse/restore toggle icon
-            $("#widget-" + widgetId + "-collapse").show();
-            // if the widget is collapsed execute the collapse function
-            // otherwise execute the minimize function
-            return false;
-        }
+            CanvasView.prototype.render = function (widget) {
+                this.widget = widget;
+                // display the widget in maximized view
+                openFullScreenOverlay(widget.regionWidgetId);
+                // due to widget list changing height of the window, we have to set the height of the sneeze-guard here.
+                var overlayStyleMap = {
+                    height: $('.wrapper').height() - $('.navbar').height() - $('.logo-wrapper').height()
+                };
+                $('.canvas-overlay').css(overlayStyleMap);
 
-        raveViewManager.registerView('canvas', CanvasView);
-    }
+                widget.render(widget._el, {view: 'canvas'});
 
-    function registerPopups() {
-        var POPUPS = {
-            sidebar: {
-                name: "sidebar",
-                containerSelector: '.popup.slideout',
-                contentSelector: '.slideout-content',
-                template: 'popup-slideout',
-                initialize: function (container) {
-                    var self = this;
-                    var content = container.find(this.contentSelector);
-                    content.data('popupType', this.name);
-                    container.find('.close').click(function () {
-                        self.cleanup(content);
-                    });
-                    container.show("slide", { direction: "right" }, 'fast');
-                    $('body').addClass('modal-open');
-                    $('body').append('<div class="modal-backdrop fade in"></div>');
-                    // hide the main browser window's scrollbar to prevent possible "double scrollbar" rendering
-                    // between it and an iframe vertical scrollbar
-                    $('body').addClass('no-scroll');
-                },
-                cleanup: function (content) {
-                    var container = content.parents(this.containerSelector);
-                    container.hide("slide", { direction: "right" }, 'fast', function () {
-                        container.remove();
-                        $('body').removeClass('modal-open');
-                        $('.modal-backdrop').remove();
-                        // restore the main browser window's scrollbar
-                        $('body').removeClass('no-scroll');
-                    });
-                },
-                singleton: true
-            },
-            dialog: {
-                name: "dialog",
-                containerSelector: '.popup.dialog',
-                contentSelector: '.modal-body',
-                template: 'popup-dialog',
-                initialize: function (container) {
-                    container.find(this.contentSelector).data('popupType', this.name);
-                    var cfg = {
+                function openFullScreenOverlay(widgetId) {
+                    addCanvasOverlay($("#pageContent"));
+                    //TODO: make this work
+                    getNonLockedRegions().sortable("option", "disabled", true);
+                    $("#widget-" + widgetId + "-wrapper").removeClass("widget-wrapper").addClass("widget-wrapper-canvas");
+                    // hide the widget menu
+                    $("#widget-" + widgetId + "-widget-menu-wrapper").hide();
+                    // display the widget minimize button
+                    $("#widget-" + widgetId + "-min").show();
+                    // hide the collapse/restore toggle icon in canvas mode
+                    $("#widget-" + widgetId + "-collapse").hide();
+                }
+
+                function addCanvasOverlay(jqElm) {
+                    if ($('.canvas-overlay').length > 0) {
+                        return;
+                    }
+                    var overlay = $('<div></div>');
+                    var styleMap = {
+                        height: $('body').height() - 40
                     };
-                    container.modal(cfg);
 
-                    container.on('hidden', function () {
-                        container.remove();
-                    })
-                },
-                cleanup: function (content) {
-                    var container = content.parents(this.containerSelector);
+                    // style it and give it the marker class
+                    $(overlay).css(styleMap);
+                    $(overlay).addClass("canvas-overlay");
+                    // add it to the dom before the iframe so it covers it
+                    jqElm.prepend(overlay[0]);
+                }
+            }
+            CanvasView.prototype.getWidgetSite = function () {
+                return $("#widget-" + this.widget.regionWidgetId + "-body")[0];
+            }
+            CanvasView.prototype.destroy = function () {
+                $(".dnd-overlay, .canvas-overlay").remove();
+                getNonLockedRegions().sortable("option", "disabled", false);
+                // display the widget in normal view
+                $("#widget-" + widgetId + "-wrapper").removeClass("widget-wrapper-canvas").addClass("widget-wrapper");
+                // hide the widget minimize button
+                $("#widget-" + widgetId + "-min").hide();
+                // show the widget menu
+                $("#widget-" + widgetId + "-widget-menu-wrapper").show();
+                // show the collapse/restore toggle icon
+                $("#widget-" + widgetId + "-collapse").show();
+                // if the widget is collapsed execute the collapse function
+                // otherwise execute the minimize function
+                return false;
+            }
 
-                    container.modal('hide');
-                },
-                singleton: false
-            },
-            modal_dialog: {
-                name: "modal_dialog",
-                containerSelector: '.popup.modal_dialog',
-                contentSelector: '.modal-body',
-                template: 'popup-modal',
-                initialize: function (container) {
-                    container.find(this.contentSelector).data('popupType', this.name);
-                    var cfg = {
-                        keyboard: false,
-                        backdrop: 'static',
-                        show: true
-                    };
-                    container.modal(cfg);
+            rave.registerView('canvas', CanvasView);
+        }
 
-                    container.on('hidden', function () {
-                        container.remove();
-                    })
+        function registerPopups() {
+            var POPUPS = {
+                sidebar: {
+                    name: "sidebar",
+                    containerSelector: '.popup.slideout',
+                    contentSelector: '.slideout-content',
+                    template: 'popup-slideout',
+                    initialize: function (container) {
+                        var self = this;
+                        var content = container.find(this.contentSelector);
+                        content.data('popupType', this.name);
+                        container.find('.close').click(function () {
+                            self.cleanup(content);
+                        });
+                        container.show("slide", { direction: "right" }, 'fast');
+                        $('body').addClass('modal-open');
+                        $('body').append('<div class="modal-backdrop fade in"></div>');
+                        // hide the main browser window's scrollbar to prevent possible "double scrollbar" rendering
+                        // between it and an iframe vertical scrollbar
+                        $('body').addClass('no-scroll');
+                    },
+                    cleanup: function (content) {
+                        var container = content.parents(this.containerSelector);
+                        container.hide("slide", { direction: "right" }, 'fast', function () {
+                            container.remove();
+                            $('body').removeClass('modal-open');
+                            $('.modal-backdrop').remove();
+                            // restore the main browser window's scrollbar
+                            $('body').removeClass('no-scroll');
+                        });
+                    },
+                    singleton: true
                 },
-                cleanup: function (content) {
-                    var container = content.parents(this.containerSelector);
-
-                    container.modal('hide');
+                dialog: {
+                    name: "dialog",
+                    containerSelector: '.popup.dialog',
+                    contentSelector: '.modal-body',
+                    template: 'popup-dialog',
+                    initialize: function (container) {
+                        container.find(this.contentSelector).data('popupType', this.name);
+                        var cfg = {
+                        };
+                        container.modal(cfg);
+
+                        container.on('hidden', function () {
+                            container.remove();
+                        })
+                    },
+                    cleanup: function (content) {
+                        var container = content.parents(this.containerSelector);
+
+                        container.modal('hide');
+                    },
+                    singleton: false
                 },
-                singleton: true
-            }
-        };
-
-        _.each(POPUPS, function (target) {
-            var $container,
-                $site;
-
-            raveViewManager.registerView(target.name, {
-                render: function (prefs) {
-                    $container = $(raveTemplates.templates[target.template]());
-                    $site = $(target.contentSelector, $container);
+                modal_dialog: {
+                    name: "modal_dialog",
+                    containerSelector: '.popup.modal_dialog',
+                    contentSelector: '.modal-body',
+                    template: 'popup-modal',
+                    initialize: function (container) {
+                        container.find(this.contentSelector).data('popupType', this.name);
+                        var cfg = {
+                            keyboard: false,
+                            backdrop: 'static',
+                            show: true
+                        };
+                        container.modal(cfg);
+
+                        container.on('hidden', function () {
+                            container.remove();
+                        })
+                    },
+                    cleanup: function (content) {
+                        var container = content.parents(this.containerSelector);
+
+                        container.modal('hide');
+                    },
+                    singleton: true
+                }
+            };
 
-                    var height = (prefs && prefs.preferredHeight);
-                    var width = (prefs && prefs.preferredWidth);
-                    if (height) {
-                        $container.height(height);
-                    }
-                    if (width) {
-                        $container.width(width);
-                    }
-                    $("#pageContent").prepend($container);
+            _.each(POPUPS, function (target) {
+                var $container,
+                    $site;
+
+                rave.registerView(target.name, {
+                    render: function (prefs) {
+                        $container = $(raveTemplates.templates[target.template]());
+                        $site = $(target.contentSelector, $container);
+
+                        var height = (prefs && prefs.preferredHeight);
+                        var width = (prefs && prefs.preferredWidth);
+                        if (height) {
+                            $container.height(height);
+                        }
+                        if (width) {
+                            $container.width(width);
+                        }
+                        $("#pageContent").prepend($container);
 
-                    if (_.isFunction(target.initialize)) {
-                        target.initialize($container)
-                    }
-                    return this;
-                },
-                getWidgetSite: function () {
-                    return $site[0];
-                },
-                destroy: function () {
-                    if (_.isFunction(target.cleanup)) {
-                        target.cleanup($site);
-                    }
-                    else {
-                        $container.remove();
+                        if (_.isFunction(target.initialize)) {
+                            target.initialize($container)
+                        }
+                        return this;
+                    },
+                    getWidgetSite: function () {
+                        return $site[0];
+                    },
+                    destroy: function () {
+                        if (_.isFunction(target.cleanup)) {
+                            target.cleanup($site);
+                        }
+                        else {
+                            $container.remove();
+                        }
                     }
-                }
+                });
             });
-        });
-    }
+        }
 
-    function init() {
         initializePageSharing();
         registerHomeView();
         registerCanvasView();
         registerPopups();
         showEmptyDisplay();
         setupDragAndDrop();
-    }
 
-
-    raveCore.registerOnInitHandler(init);
-
-    return exports;
-})
+        return exports;
+    })