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;
+ })