|
|
- 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='<?xml version="1.0" encoding="UTF-8" standalone="no"?>\
- <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.0" >\
- <g transform="translate(37.943468,-309.4636)">\
- <g transform="matrix(0.05011994,0,0,0.05012004,-41.76673,299.66011)" style="fill:&fill_color;;fill-opacity:1;stroke:&stroke_color;;stroke-opacity:1">\
- <circle transform="matrix(0.969697,0,0,0.969697,-90.879133,125.06999)" style="fill:&fill_color;;fill-opacity:1;stroke:&stroke_color;;stroke-width:20.62502098;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" cx="331.38321" cy="134.2677" r="51.220825" />\
- <path d="m 290.55846,302.47333 -58.81513,59.20058 -59.39461,-59.40024 c -25.19828,-24.48771 -62.7038,13.33148 -38.1941,37.98719 l 60.04451,58.9817 -59.73639,59.42563 c -24.83976,24.97559 12.91592,63.26505 37.66786,37.75282 l 59.95799,-59.28294 58.75912,59.21065 c 24.50656,25.09065 62.43116,-13.00322 37.87956,-37.85772 l -59.24184,-59.02842 58.87574,-59.14782 c 25.1689,-25.18348 -13.0489,-62.75154 -37.80271,-37.84143 z" style="fill:&fill_color;;fill-opacity:1;stroke:&stroke_color;;stroke-width:20.00002098;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />\
- </g></g></svg>';
- 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;
- });
|