spacedeck-open/public/javascripts/spacedeck_vue.js

168 lines
4.2 KiB
JavaScript

function boot_spacedeck() {
console.log("booting...");
// custom directives
setup_directives();
setup_whiteboard_directives();
setup_exclusive_audio_video_playback();
var data = {
active_view: null,
online: true,
was_offline: false,
account: "profile",
logged_in: false,
guest_nickname: null,
user: {},
active_profile: null,
active_profile_spaces: [],
active_dropdown: "none",
creating_user: false,
signup_error: null,
login_error: null,
password_reset_send: false,
password_reset_error: null,
password_reset_email: null,
password_reset_confirm_error: null,
reset_token: null,
global_spinner: false
};
var methods = {
activate_dropdown: function(id, evt) {
if (this.active_dropdown == id) {
this.active_dropdown = "none";
return;
}
this.active_dropdown = id;
},
close_dropdown: function(evt) {
if (evt) {
if ($(evt.target).parents(".dropdown").length) {
return;
}
}
this.active_dropdown = "none";
},
translate: function() {
return i18n.t(arguments)
},
};
// mix in functions from all Spacedeck modules
methods = _.extend(methods, SpacedeckUsers.methods);
methods = _.extend(methods, SpacedeckWebsockets.methods);
methods = _.extend(methods, SpacedeckSpaces.methods);
methods = _.extend(methods, SpacedeckTeams.methods);
methods = _.extend(methods, SpacedeckBoardArtifacts);
methods = _.extend(methods, SpacedeckFormatting);
methods = _.extend(methods, SpacedeckSections.methods);
methods = _.extend(methods, SpacedeckAvatars.methods);
methods = _.extend(methods, SpacedeckModals.methods);
methods = _.extend(methods, SpacedeckAccount.methods);
methods = _.extend(methods, SpacedeckRoutes);
data = _.extend(data, SpacedeckUsers.data);
data = _.extend(data, SpacedeckAccount.data);
data = _.extend(data, SpacedeckWebsockets.data);
data = _.extend(data, SpacedeckSpaces.data);
data = _.extend(data, SpacedeckTeams.data);
data = _.extend(data, SpacedeckSections.data);
data = _.extend(data, SpacedeckAvatars.data);
data = _.extend(data, SpacedeckModals.data);
Vue.filter('select', function (array, key, operant, value) {
var res = _.filter(array, function(e){
var test = eval(e[key] + " " + operant + " " + value);
return test;
});
return res;
});
Vue.filter('date', function (value, format) {
var day = moment(value);
return day.format(format).replace("\'", "").replace("\'", "");
});
Vue.filter('exceptFilter', function (array, key) {
var filtered = _.filter(array, function(i){
return i[key]==undefined;
});
return filtered;
});
Vue.filter('size', function (array) {
return array.length;
});
Vue.filter('empty?', function (array) {
return array.length==0;
});
Vue.filter('urls_to_links', function (text) {
return urls_to_links(text);
});
window.spacedeck = new Vue({
el: "body",
data: data,
methods: methods
});
var lang = "en";
window.refreshLocale = function() {
if (spacedeck && spacedeck.user && spacedeck.user.preferences) {
lang = spacedeck.user.preferences.language || "en";
} else if (window.browser_lang) {
lang = window.browser_lang;
}
}
window.refreshLocale();
i18n.init({ lng: lang, resStore: window.locales }, function(err, t) {
console.log("i18n initialized: "+lang);
});
window.__ = function() {
var params = Array.prototype.slice.call(arguments);
params.shift();
window.refreshLocale();
return i18n.t(arguments[0], { postProcess: "sprintf", sprintf: params });
};
spacedeck.setup_section_module();
spacedeck.load_user(function() {
spacedeck.route();
},function() {
spacedeck.route();
});
window.addEventListener("paste", function(evt) {
if (evt.target.nodeName=="INPUT" || (evt.target.nodeName=="TEXTAREA" && evt.target.id!="clipboard-ta") || evt.target.contenteditable) {
// cancel
return;
}
if (spacedeck.active_space) {
spacedeck.handle_section_paste(evt);
}
});
}
document.addEventListener("DOMContentLoaded",function() {
window.smoke = smoke;
window.alert = smoke.alert;
FastClick.attach(document.body);
boot_spacedeck();
});