define(["webL10n", "sugar-web/activity/shortcut", "sugar-web/bus", "sugar-web/env", "sugar-web/datastore", "sugar-web/presence", "sugar-web/graphics/icon", "sugar-web/graphics/activitypalette"], function ( l10n, shortcut, bus, env, datastore, presence, icon, activitypalette) { 'use strict'; var datastoreObject = null; var presenceCallback = null; var presenceResponse = null; var activity = {}; activity.setup = function () { bus.listen(); l10n.start(); function sendPauseEvent() { var pauseEvent = document.createEvent("CustomEvent"); pauseEvent.initCustomEvent('activityPause', false, false, { 'cancelable': true }); window.dispatchEvent(pauseEvent); } bus.onNotification("activity.pause", sendPauseEvent); // An activity that handles 'activityStop' can also call // event.preventDefault() to prevent the close, and explicitly // call activity.close() after storing. function sendStopEvent() { var stopEvent = document.createEvent("CustomEvent"); stopEvent.initCustomEvent('activityStop', false, false, { 'cancelable': true }); var result = window.dispatchEvent(stopEvent); if (result) { datastoreObject.save(function() { datastore.waitPendingSave(function() { activity.close(); }); }); } } bus.onNotification("activity.stop", sendStopEvent); datastoreObject = new datastore.DatastoreObject(); var activityButton = document.getElementById("activity-button"); var activityPalette = new activitypalette.ActivityPalette( activityButton, datastoreObject); // Colorize the activity icon. activity.getXOColor(function (error, colors) { icon.colorize(activityButton, colors); var invokerElem = document.querySelector("#activity-palette .palette-invoker"); icon.colorize(invokerElem, colors); var buddyIcon='\ \ \ \ \ \ '; document.title = document.title+" - Sugarizer"; var newicon = buddyIcon.replace(new RegExp("&fill_color;","g"),colors.fill).replace(new RegExp("&stroke_color;","g"),colors.stroke); var svg_xml = (new XMLSerializer()).serializeToString((new DOMParser()).parseFromString(newicon, "text/xml")); var canvas = document.createElement('canvas'); canvas.width = canvas.height = 16; var ctx = canvas.getContext('2d'); var img = new Image(); img.src = "data:image/svg+xml;base64," + btoa(svg_xml); img.onload = function() { ctx.drawImage(img, 0, 0); var link = document.querySelector("link[rel*='icon']") || document.createElement('link'); link.type = 'image/x-icon'; link.rel = 'shortcut icon'; link.href = canvas.toDataURL("image/x-icon"); document.getElementsByTagName('head')[0].appendChild(link); } }); // Make the activity stop with the stop button. var stopButton = document.getElementById("stop-button"); stopButton.addEventListener('click', function (e) { sendStopEvent(); }); shortcut.add("Ctrl", "Q", this.close); env.getEnvironment(function (error, environment) { var l10n ={"en":"{{name}} Activity","fr":"Activité {{name}}","es":"Actividad {{name}}","pt":"{{name}} Atividade","de":"Aktivität {{name}}"}; if (!environment.objectId) { datastoreObject.setMetadata({ "title": (l10n[environment.user.language]||l10n["en"]).replace("{{name}}", environment.activityName), "title_set_by_user": "0", "activity": environment.bundleId, "activity_id": environment.activityId }); } if (env.isSugarizer()) { presence.joinNetwork(function(error, presence) { if (environment.sharedId) { presence.joinSharedActivity(environment.sharedId, function() { var group_color = presence.getSharedInfo().colorvalue; icon.colorize(activityButton, group_color); datastoreObject.setMetadata({"buddy_color":group_color}); datastoreObject.save(function() {}); }); } if (presenceCallback) { presenceCallback(error, presence); } else { presenceResponse = {error: error, presence: presence}; } }); } datastoreObject.save(function () { datastoreObject.getMetadata(function (error, metadata) { activityPalette.setTitleDescription(metadata); }); }); if (environment.standAlone) { document.getElementById("stop-button").style.visibility = "hidden"; }; }); }; activity.getDatastoreObject = function () { return datastoreObject; }; activity.getPresenceObject = function(connectionCallback) { if (presenceResponse == null) { presenceCallback = connectionCallback; } else { connectionCallback(presenceResponse.error, presenceResponse.presence); presenceResponse = null; } return presence; }; activity.getXOColor = function (callback) { function onResponseReceived(error, result) { if (error === null) { callback(null, { stroke: result[0][0], fill: result[0][1] }); } else { callback(null, { stroke: "#00A0FF", fill: "#8BFF7A" }); } } bus.sendMessage("activity.get_xo_color", [], onResponseReceived); }; activity.close = function (callback) { function onResponseReceived(error, result) { if (error === null) { callback(null); } else { callback(error, null); } } bus.sendMessage("activity.close", [], onResponseReceived); }; activity.showObjectChooser = function (callback) { function onResponseReceived(error, result) { if (error === null) { callback(null, result[0]); } else { callback(error, null); } } bus.sendMessage("activity.show_object_chooser", [], onResponseReceived); }; return activity; });