not really known
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

195 lines
8.0 KiB

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