123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
- define(["util", "ui", "jquery", "windowing", "templates", "templating", "session", "peers"], function (util, ui, $, windowing, templates, templating, session, peers) {
- var assert = util.assert;
- var walkthrough = util.Module("walkthrough");
- var onHideAll = null;
- var container = null;
- var slides = null;
- walkthrough.start = function (firstTime, doneCallback) {
- if (! container) {
- container = $(templates("walkthrough"));
- container.hide();
- ui.container.append(container);
- slides = container.find(".togetherjs-walkthrough-slide");
- slides.hide();
- var progress = $("#togetherjs-walkthrough-progress");
- slides.each(function (index) {
- var bullet = templating.sub("walkthrough-slide-progress");
- progress.append(bullet);
- bullet.click(function () {
- show(index);
- });
- });
- container.find("#togetherjs-walkthrough-previous").click(previous);
- container.find("#togetherjs-walkthrough-next").click(next);
- ui.prepareShareLink(container);
- container.find(".togetherjs-self-name").bind("keyup", function (event) {
- var val = $(event.target).val();
- peers.Self.update({name: val});
- });
- container.find(".togetherjs-swatch").click(function () {
- var picker = $("#togetherjs-pick-color");
- if (picker.is(":visible")) {
- picker.hide();
- return;
- }
- picker.show();
- picker.find(".togetherjs-swatch-active").removeClass("togetherjs-swatch-active");
- picker.find(".togetherjs-swatch[data-color=\"" + peers.Self.color + "\"]").addClass("togetherjs-swatch-active");
- var location = container.find(".togetherjs-swatch").offset();
- picker.css({
- top: location.top,
- // The -7 comes out of thin air, but puts it in the right place:
- left: location.left-7
- });
- });
- if (session.isClient) {
- container.find(".togetherjs-if-creator").remove();
- container.find(".togetherjs-ifnot-creator").show();
- } else {
- container.find(".togetherjs-if-creator").show();
- container.find(".togetherjs-ifnot-creator").remove();
- }
- TogetherJS.config.track("siteName", function (value) {
- value = value || document.title;
- container.find(".togetherjs-site-name").text(value);
- });
- ui.activateAvatarEdit(container, {
- onSave: function () {
- container.find("#togetherjs-avatar-when-saved").show();
- container.find("#togetherjs-avatar-when-unsaved").hide();
- },
- onPending: function () {
- container.find("#togetherjs-avatar-when-saved").hide();
- container.find("#togetherjs-avatar-when-unsaved").show();
- }
- });
- // This triggers substititions in the walkthrough:
- peers.Self.update({});
- session.emit("new-element", container);
- }
- assert(typeof firstTime == "boolean", "You must provide a firstTime boolean parameter");
- if (firstTime) {
- container.find(".togetherjs-walkthrough-firsttime").show();
- container.find(".togetherjs-walkthrough-not-firsttime").hide();
- } else {
- container.find(".togetherjs-walkthrough-firsttime").hide();
- container.find(".togetherjs-walkthrough-not-firsttime").show();
- }
- onHideAll = doneCallback;
- show(0);
- windowing.show(container);
- };
- function show(index) {
- slides.hide();
- $(slides[index]).show();
- var bullets = container.find("#togetherjs-walkthrough-progress .togetherjs-walkthrough-slide-progress");
- bullets.removeClass("togetherjs-active");
- $(bullets[index]).addClass("togetherjs-active");
- var $next = $("#togetherjs-walkthrough-next").removeClass("togetherjs-disabled");
- var $previous = $("#togetherjs-walkthrough-previous").removeClass("togetherjs-disabled");
- if (index == slides.length - 1) {
- $next.addClass("togetherjs-disabled");
- } else if (index === 0) {
- $previous.addClass("togetherjs-disabled");
- }
- }
- function previous() {
- var index = getIndex();
- index--;
- if (index < 0) {
- index = 0;
- }
- show(index);
- }
- function next() {
- var index = getIndex();
- index++;
- if (index >= slides.length) {
- index = slides.length-1;
- }
- show(index);
- }
- function getIndex() {
- var active = slides.filter(":visible");
- if (! active.length) {
- return 0;
- }
- for (var i=0; i<slides.length; i++) {
- if (slides[i] == active[0]) {
- return i;
- }
- }
- return 0;
- }
- walkthrough.stop = function () {
- windowing.hide(container);
- if (onHideAll) {
- onHideAll();
- onHideAll = null;
- }
- };
- session.on("hide-window", function () {
- if (onHideAll) {
- onHideAll();
- onHideAll = null;
- }
- });
- return walkthrough;
- });
|