blob: 0ee768bdd45bfc479e053a8eb1073cd06f3db12f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
$(function() {
// Input field that contains gadget urls added by the user manually
var newGadgetUrl = $('#gadgetUrl');
// Input fields for container event testing
var newEventTopic = $('#eventTopic');
var newEventPayload = $('#eventPayload');
// Base html template that is used for the gadget wrapper and site
var gadgetTemplate = '<div class="portlet">' +
'<div class="portlet-header">sample to replace</div>' +
'<div id="gadget-site" class="portlet-content"></div>' +
'</div>';
//variable to keep track of gadget current view for collapse and expand gadget actions.
var currentView = 'default';
// ID used to associate gadget site
var curId = 0;
// Load the default collections stored and update the options with the collection name
$.ajax({
url: './gadgetCollections.json',
dataType: 'json',
success: function(data) {
$.each(data.collections, function(i,data) {
var optionVal = [];
$.each(data.apps, function(i,data) {
if (data.url.indexOf('http') < 0 && data.url.indexOf('/') == 0) {
optionVal.push(urlBase + data.url);
}else {
optionVal.push(data.url);
}
});
$('#gadgetCollection').append('<option value="' + optionVal.toString() + '">' + data.name + '</option>');
});
}
});
$.ajax({
url: './viewsMenu.json',
dataType: 'json',
success: function(data) {
$.each(data.views, function(i,selection) {
$('#viewOptions').append('<option value="' + selection.value + '">' + selection.name + '</option>');
});
}
});
//navigate to the new view and save it as current view
navigateView = function(gadgetSite, gadgetURL, toView) {
//save the current view for collapse, expand gadget
currentView = toView;
CommonContainer.navigateView(gadgetSite, gadgetURL, toView);
};
//handle gadget collapse, expand, and remove gadget actions
handleNavigateAction = function(portlet,gadgetSite,gadgetURL,actionId) {
//remove button was click, remove the portlet/gadget
if (actionId === 'remove') {
if (confirm('This gadget will be removed, ok?')) {
portlet.remove();
delete siteToTitleMap[gadgetSite.getId()];
}
}else if (actionId === 'expand') {
//navigate to currentView prior to colapse gadget
CommonContainer.navigateView(gadgetSite, gadgetURL, currentView);
}else if (actionId === 'collapse') {
CommonContainer.colapseGadget(gadgetSite);
}
};
//RPC handler for the set-title feature
setTitleHandler = function(rpcArgs, title) {
var titleId = siteToTitleMap[rpcArgs.gs.id_];
$('#' + titleId).text(title);
};
//create a gadget with navigation tool bar header enabling gadget collapse, expand, remove, navigate to view actions.
buildGadget = function(result,gadgetURL) {
var gadgetSiteString = "$(this).closest(\'.portlet\').find(\'.portlet-content\').data(\'gadgetSite\')";
var viewItems = '';
var gadgetViews = result[gadgetURL].views;
for (var aView in gadgetViews) {
viewItems = viewItems + '<li><a href="#" onclick="navigateView(' + gadgetSiteString + ',' + '\'' + gadgetURL + '\'' + ',' + '\'' + aView + '\'' + '); return false;">' + aView + '</a></li>';
}
var newGadgetSite = gadgetTemplate;
newGadgetSite = newGadgetSite.replace(/(gadget-site)/g, '$1-' + curId);
siteToTitleMap['gadget-site-' + curId] = 'gadget-title-' + curId;
$(newGadgetSite).appendTo($('#gadgetArea')).addClass('ui-widget ui-widget-content ui-helper-clearfix ui-corner-all')
.find('.portlet-header')
.addClass('ui-widget-header ui-corner-all')
.text('')
.append('<span id="gadget-title-' + curId + '">' + result[gadgetURL]['modulePrefs'].title + '</span>' +
'<ul id="viewsDropdown">' +
'<li class="li-header">' +
'<a href="#" class="hidden"><span id="dropdownIcon" class="ui-icon ui-icon-triangle-1-s"></span></a>' +
'<ul>' +
viewItems +
'</ul>' +
'</li>' +
'</ul>')
.append('<span id="remove" class="ui-icon ui-icon-closethick"></span>')
.append('<span id="expand" class="ui-icon ui-icon-plusthick"></span>')
.append('<span id="collapse" class="ui-icon ui-icon-minusthick"></span>')
.end()
.find('.portlet-content')
.data('gadgetSite', CommonContainer.renderGadget(gadgetURL, curId));
//determine which button was click and handle the appropriate event.
$('.portlet-header .ui-icon').click(function() {
handleNavigateAction($(this).closest('.portlet'), $(this).closest('.portlet').find('.portlet-content').data('gadgetSite'), gadgetURL, this.id);
});
};
// Publish the container event
$('#pubEvent').click(function() {
CommonContainer.inlineClient.publish(newEventTopic.val(), newEventPayload.val());
//TODO: Need to add in some additional logic in the Container to enable point to point for things like Embedded Experience...
//var ppcont = CommonContainer.managedHub.getContainer("__gadget_1");
//CommonContainer.managedHub.publishForClient(ppcont, newEventTopic.val(), newEventPayload.val());
//ppcont.sendToClient('org.apache.shindig.random-number', '1111', ppcont.getClientID());
//clear values
newEventTopic.val('');
newEventPayload.val('');
return true;
});
// Load single gadgets entered by user
$('#addGadget').click(function() {
CommonContainer.preloadGadget(newGadgetUrl.val(), function(result) {
for (var gadgetURL in result) {
if(!result[gadgetURL].error) {
buildGadget(result, gadgetURL);
curId++;
}
}
//Clear Values
newGadgetUrl.val('');
});
return true;
});
// Load the select collection of gadgets and render them the gadget test area
$('#addGadgets').click(function() {
//TODO: This just provides and example to load configurations
//var testGadgets=["http://localhost:8080/container/sample-pubsub-2-publisher.xml","http://localhost:8080/container/sample-pubsub-2-subscriber.xml"];
var testGadgets = $('#gadgetCollection').val().split(',');
CommonContainer.preloadGadgets(testGadgets, function(result) {
for (var gadgetURL in result) {
if(!result[gadgetURL].error) {
buildGadget(result, gadgetURL);
curId++;
}
}
});
return true;
});
});