UNPKG

ihave.to

Version:

Catch ideas. As they come and let them grow with your team in real time

219 lines (198 loc) 7.6 kB
/*global _*/ /*global CONF*/ var Screens; (function () { "use strict"; /** * The screen class corpus * No constructor code required actually * @module Client * @submodule Classes * @class Screens * @constructor */ Screens = function () { }; /** * Counts the visibe posts inside a screen which aren't deleted or moved * @method getStats * @param {Object} oScreen * @return {Object} The number of visible posts and posts color steepening on given screen */ Screens.prototype.getStats = function (oScreen) { var id; var oTs; var color; var sPreCount = ''; var oColorUsage = {}; var oColorSteepening = {}; for (oTs in oScreen.POSTS) { if (oScreen.POSTS.hasOwnProperty(oTs)) { if (oScreen.POSTS[oTs] instanceof Array) { if (sPreCount.search(oScreen.POSTS[oTs][0].TGT === -1)) { sPreCount += oScreen.POSTS[oTs][0].TGT + '|'; if (oScreen.POSTS[oTs][0].ACN === 'color') { oColorUsage[oScreen.POSTS[oTs][0].TGT] = oScreen.POSTS[oTs][0].TO; } } } else { if (sPreCount.search(oScreen.POSTS[oTs].TGT) === -1) { sPreCount += oScreen.POSTS[oTs].TGT + '|'; if (oScreen.POSTS[oTs].ACN === 'color') { oColorUsage[oScreen.POSTS[oTs].TGT ] = oScreen.POSTS[oTs].TO; } } else { if (oScreen.POSTS[oTs].ACN === 'move' || oScreen.POSTS[oTs].ACN === 'deleted') { sPreCount = sPreCount.replace(oScreen.POSTS[oTs].TGT + '|', ''); } if (oScreen.POSTS[oTs].ACN === 'color') { oColorUsage[oScreen.POSTS[oTs].TGT ] = oScreen.POSTS[oTs].TO; } if (oScreen.POSTS[oTs].ACN === 'deleted' && oColorUsage[oScreen.POSTS[oTs].TGT] !== undefined) { delete oColorUsage[oScreen.POSTS[oTs].TGT]; } } } } } // Prepare color usage stat data for (id in oColorUsage) { if (oColorUsage.hasOwnProperty(id)) { if (oColorSteepening[oColorUsage[id]] === undefined) { oColorSteepening[oColorUsage[id]] = 1; } else { oColorSteepening[oColorUsage[id]] += 1; } } } for (color in oColorSteepening) { if (oColorSteepening.hasOwnProperty(color)) { oColorSteepening[color] = Math.floor(oColorSteepening[color] * 100 / Object.keys(oColorUsage).length); } } return { items: sPreCount.split('|').length - 1, steepening: oColorSteepening }; }; /** * Sort the color stats * * @method sortStats * @param {Array} aStats */ Screens.prototype.sortStats = function (aStats) { return _.sortBy(aStats, function (arrayElement) { return arrayElement.PART; }); }; /** * Creates the Object required to create the Overview via template Engine * @method getOverview * @return {Object} The HTML Template object of the overview view */ Screens.prototype.getOverview = function () { var sColor; var oScreen; var sScreenName; var aScreens = []; var oScreenStats; var aColorStats; for (sScreenName in CONF.BOARD.PRIVATE.SCREENS) { if (CONF.BOARD.PRIVATE.SCREENS.hasOwnProperty(sScreenName)) { oScreen = CONF.BOARD.PRIVATE.SCREENS[sScreenName]; oScreenStats = this.getStats(oScreen); aColorStats = []; for (sColor in oScreenStats.steepening) { if (oScreenStats.steepening.hasOwnProperty(sColor)) { aColorStats.push({PART: oScreenStats.steepening[sColor], CLASSES: sColor, STYLE: "width:" + oScreenStats.steepening[sColor] + "%;"}); } } aColorStats = this.sortStats(aColorStats); aScreens[aScreens.length] = { ID: sScreenName, CLASSES: 'screen ' + ((CONF.DOM.BOARDPOSTS.data('activescreen') === sScreenName) ? 'curent' : ''), CONTENT: { IMG: { SRC: 'img/textures/onboard.png', CLASSES: 'screen-icon', STYLE: 'background-image:url(' + oScreen.META.BG.replace(/(.[A-Za-z]*)$/, '.thumb$1').replace('thumb.svg', 'svg') + ');' }, H: { NO: 4, CLASSES: 'screen-name', CONTENT: sScreenName }, SPAN: { CLASS: 'screen-posts', INSERT: oScreenStats.items + " " + ((oScreenStats.items === 0 || oScreenStats.items > 1) ? "POSTS".translate() : "POST".translate()) }, DIV: { CLASSES: "screenStats", CONTENT: { DIV: aColorStats.reverse() } } } }; } } return { DIV: aScreens }; } ; /** * Creates the JSON represeantation of the new Screen form * @method newScreen * @return {Object} the HTML Object of the Screen form view */ Screens.prototype.newScreen = function () { return { DIV: { ID: 'new_screen-ui', CONTENT: { INPUT: [ { TYPE: 'text', NAME: 'screen-name', ID: 'screen-name', VALUE: 'NEW_SCREEN_NAME'.translate() }, { TYPE: 'hidden', NAME: 'screen-bg-url', ID: 'screen-bg-url' } ], FORM: { ID: "dropImage", CLASS: "dropzone", CONTENT: "DROP_IMAGEFILE_HERE".translate() }, DIV: { ID: "uploadProgress", CONTENT: { DIV: { CLASSES: "bar" } } }, LINK: [ { ID: 'create-screen', URL: '#', CLASSES: 'button' }, { ID: 'abort-create-screen', URL: '#', CLASSES: 'button' } ] } } }; }; })();