Advertisement
Guest User

Untitled

a guest
Jan 28th, 2015
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.08 KB | None | 0 0
  1. 'use strict';
  2. /* global define */
  3. define([
  4. 'corejs/app',
  5. 'jquery',
  6. 'moment',
  7. 'numeral',
  8. 'i18next',
  9. 'underscore',
  10. 'q',
  11. 'entities/project'
  12. ], function(app, $, moment, numeral, q) {
  13.  
  14. var current;
  15.  
  16. if (!app.bitbloq) {
  17. app.bitbloq = {};
  18. }
  19.  
  20. // Prevent JQuery to parse XML responses
  21. $.ajaxSetup({
  22. converters: {
  23. 'text xml': window.String
  24. }
  25. });
  26.  
  27. /**
  28. * This module defines custom initialization tasks
  29. * like defining app regions
  30. */
  31.  
  32. app.addRegions({
  33. main: '[data-region="main"]'
  34. });
  35.  
  36. app.addInitializer(function() {
  37.  
  38. app.commands.execute('page:loader');
  39.  
  40. current = app.bitbloq.services.current.get();
  41.  
  42. // Process data-i18n for all dynamic modals
  43. $('body').on('modal:show', function() {
  44. $('.modal').i18n();
  45. });
  46.  
  47. // Login success
  48. app.vent.on('login:success', function() {
  49. app.router.navigate('#/workspace/browser');
  50. });
  51.  
  52. // Check current
  53. if (!current) {
  54. current = app.bitbloq.services.current.new();
  55. }
  56.  
  57. // Add data-saved to body
  58. if (current.hasOwnProperty('id')) {
  59. $('body').attr('data-saved', 'true');
  60. } else {
  61. $('body').attr('data-saved', 'false');
  62. }
  63.  
  64. // Change project saved global state
  65. app.vent.on('project:saved', function() {
  66. $('body').attr('data-saved', 'true');
  67. });
  68.  
  69. app.vent.on('project:new', function() {
  70. $('body').attr('data-saved', 'false');
  71. });
  72.  
  73. //-- Initialize entities
  74. //Boards
  75. var boardsCollection = app.reqres.request('entities:board');
  76. // Projects
  77. var projectsCollection = app.reqres.request('entities:project');
  78. // Releases
  79. var releaseCollection = app.reqres.request('entities:release');
  80. var user, lang;
  81.  
  82. //initialize the user and manage the user language
  83. if (app.session.gatekeeper()) {
  84. //Logged User
  85. user = app.reqres.request('entity:user', app.session.get('user'));
  86.  
  87. // check user lang
  88. lang = user.get('properties').language;
  89. if (lang === undefined) {
  90. lang = navigator.language || navigator.userLanguage;
  91. user.setProperty('language', lang);
  92. }
  93.  
  94. /*
  95. {
  96. "avatar":"https://lh3.googleusercontent.com/-bkNm6MSHlIg/AAAAAAAAAAI/AAAAAAAAAW4/raXrCR2YyUE/photo.jpg?sz=50",
  97. "newsletter":false,
  98. "language":"es-ES",
  99. "connected":false,
  100. "newAvatar":"https://lh3.googleusercontent.com/-bkNm6MSHlIg/AAAAAAAAAAI/AAAAAAAAAW4/raXrCR2YyUE/photo.jpg?sz=100"
  101. }
  102. */
  103. // check avatar
  104. var avatar = user.get('properties').avatar;
  105. if(avatar === undefined){
  106. getAvatarImage(user).then(function(url) {
  107. // do something with url
  108. });
  109. }
  110.  
  111. // check newsletter
  112. var newsletter = user.get('properties').newsletter;
  113. if (newsletter !== true) {
  114. user.setProperty('newsletter', false);
  115. }
  116. localStorage.setItem('lang', lang);
  117. app.session.add('user', JSON.stringify(user));
  118. } else {
  119. var userLang = localStorage.getItem('lang') || navigator.language || navigator.userLanguage;
  120.  
  121. if (userLang.indexOf('ca') !== -1) { // true @todo
  122. localStorage.setItem('lang', 'ca-ES');
  123. } else if (userLang.indexOf('es') !== -1) {
  124. localStorage.setItem('lang', 'es-ES');
  125. } else if (userLang.indexOf('it') !== -1) {
  126. localStorage.setItem('lang', 'it-IT');
  127. } else if (userLang.indexOf('pt') !== -1) {
  128. localStorage.setItem('lang', 'pt-PT');
  129. } else {
  130. localStorage.setItem('lang', 'en-GB');
  131. }
  132. }
  133.  
  134. var setBoards = function() {
  135. app.bitbloq.services.board.list().then(function(data) {
  136. boardsCollection.reset(data);
  137. setDefaultBoard(data);
  138. }).fail(function(error){
  139. app.log.error(error);
  140. setDefaultBoard();
  141. });
  142. };
  143.  
  144. var setProjects = function() {
  145. app.bitbloq.services.project.list().then(function(data) {
  146. projectsCollection.reset(data);
  147. });
  148. };
  149.  
  150. var setReleases = function() {
  151. app.bitbloq.services.release.list({
  152. query: [{
  153. '$like': {
  154. userId: app.session.get('user').id
  155. }
  156. }]
  157. }).then(function(data) {
  158. releaseCollection.reset(data);
  159. });
  160. };
  161.  
  162. var setDefaultPort = function(){
  163. var chromeApp = app.lib.chromeapp.connect();
  164.  
  165. chromeApp.getPorts().then(function(data){
  166.  
  167. if(data.path[0]){
  168. if(!app.session.get('defaultPort') || $.isEmptyObject(app.session.get('defaultPort'))){
  169. app.session.add('defaultPort', data.path[0]);
  170. }
  171. }else{
  172. //A FALTA DE DETERMINAR CUAL ES LA MEJOR ESTRATEGIA EN ESTE CASO, DEJO LA SEGUNDA COMENTADA POR SI SE DECIDE QUE ES LA MAS CORRECTA
  173. //siempre que no se devuelvan puertos se pone el default a {} porque de nada sirve dejar el puerto que había antes
  174. app.session.add('defaultPort', {});
  175.  
  176. //Esa estrategia pone el puerto a {} si no había uno por defecto, pero lo respeta si habia uno
  177. /*if(!app.session.get('defaultPort')){
  178. app.session.add('defaultPort', {});
  179. }*/
  180. }
  181. }).fail(function(error){
  182. app.log.error(error);
  183. if(!app.session.get('defaultPort')){
  184. app.session.add('defaultPort', {});
  185. }
  186. });
  187. };
  188.  
  189. var setDefaultBoard = function(data){
  190. if(data){
  191. if($.isEmptyObject(app.session.get('defaultBoard')) || !app.session.get('defaultBoard')){
  192. app.session.add('defaultBoard', data[0]);
  193. }
  194. }else{
  195. if(!app.session.get('defaultBoard')){
  196. app.session.add('defaultBoard', {});
  197. }
  198. }
  199. };
  200.  
  201.  
  202. var setLang = function() {
  203. var user = app.reqres.request('entity:user');
  204. var lang = String(user.get('properties').language);
  205. var storedLang = String(localStorage.getItem('lang'));
  206. var i18nLang = $.i18n.lng();
  207.  
  208. if (i18nLang !== lang) {
  209. $.i18n.setLng(lang);
  210. }
  211.  
  212. if (storedLang !== lang) {
  213. localStorage.setItem('lang', lang);
  214. moment.lang(lang);
  215. try {
  216. numeral.language(lang);
  217. } catch (e) {
  218. app.log.warn('locale:numeral:undefined:' + lang);
  219. }
  220. }
  221. };
  222.  
  223. var setInfo = function() {
  224. setProjects();
  225. setReleases();
  226. };
  227.  
  228. if (app.session.gatekeeper()) {
  229. setInfo();
  230. }
  231.  
  232. setBoards();
  233.  
  234. setDefaultPort();
  235.  
  236. app.vent.on('user:login', setInfo);
  237.  
  238. // Set Lang App
  239. app.vent.on('app:setLang', setLang);
  240. });
  241.  
  242. var getAvatarImage = function(user) {
  243. var def = q.defer(),
  244. mimeType = user.properties.imageType || 'image/png';
  245.  
  246. if (!userId) { //poner imagen por defecto
  247. def.resolve(controller.getDefaultUrl());
  248. } else {
  249.  
  250. var resourceProject = app.silkroad.resources.resource('bitbloq:Avatar', user.get('id'));
  251.  
  252. resourceProject.get(mimeType, {
  253. binaryType: 'blob'
  254. }).then(function(image) {
  255. libImage.createImageUrl(image).then(function(url) {
  256. def.resolve(url);
  257. }).fail(function(error) {
  258. app.log.error(error);
  259. });
  260. }).fail(function() {
  261. var alternativeUrl = user.properties.avatar ? user.properties.avatar : controller.getDefaultUrl();
  262. def.resolve(alternativeUrl);
  263. });
  264. }
  265.  
  266. return def.promise;
  267. }
  268.  
  269. app.vent.on('workspace-bloq:inject', function() {
  270.  
  271. current = app.bitbloq.services.current.get();
  272.  
  273. app.lib.workspace.setXml(current.xml);
  274. app.lib.workspace.undoredo.reset();
  275. app.lib.workspace.displayProjectName();
  276. if (current.id) {
  277. app.vent.trigger('project:saved');
  278. } else {
  279. app.vent.trigger('project:new');
  280. }
  281. });
  282.  
  283.  
  284. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement