ihave.to
Version:
Catch ideas. As they come and let them grow with your team in real time
209 lines (170 loc) • 8.69 kB
JavaScript
/*global $*/
/*global CONF*/
/*global isMobile*/
/*global CryptoJS*/
/*global Template*/
/*global Connection*/
/*global showMessage*/
(function () {
"use strict";
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// The ui interactions
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// General interactions
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Close ui view
$(document)
// Handle input focuses
.on('focusin', 'input', function () {
$(this).data('val', $(this).val());
$(this).val('');
})
// handle input blurs (focusout)
.on('focusout', 'input', function () {
if ($(this).val().trim().length === 0) {
$(this).val($(this).data('val'));
}
})
// Handle view aborts
.on(CONF.EVENTS.CLICK, '.buttons > .button.cancel a', function () {
CONF.DOM.CMD.find('.active').trigger(CONF.EVENTS.CLICK);
})
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Login view
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Login form
.on('keyup', '#boardname, #boardpw', function (event) {
event.preventDefault();
var oInput = $(this);
if (event.keyCode === 13) {
$(this).blur();
if ($(this).val().length > 0 && oInput.attr('id') === 'boardname') {
$('#boardpw').focus();
}
if ($(this).attr('id') === 'boardpw') {
$('#do-login').trigger(CONF.EVENTS.CLICK);
}
}
})
// Open board / create board
.on(CONF.EVENTS.CLICK, '#do-login', function () {
var oBoardPw = $('#boardpw');
var oBoardName = $('#boardname');
var oLoginContent = $('#login-content');
var sBoardName = oBoardName.val();
var sPassword = oBoardPw.val();
if (sPassword.length > 3 && sPassword !== 'PASSWORD'.translate() && sPassword !== sBoardName && sBoardName.length > 0 && sBoardName !== 'YOUR_PREFERED_BOARDNAME'.translate()) {
var sHash = CryptoJS.SHA3(sBoardName + CONF.PROPS.STRING.SALT + sPassword);
if (CONF.PROPS.OBJECT.STORAGE !== null) {
var sAllBoards = CONF.PROPS.OBJECT.STORAGE.getItem("boards");
if (sAllBoards === null || sAllBoards.search(sBoardName + '-') === -1) {
CONF.PROPS.OBJECT.STORAGE.setItem("boards", (sAllBoards + sBoardName + '-'));
}
CONF.PROPS.OBJECT.STORAGE.setItem("lastboard", sBoardName);
}
$('#login-loader, #login-message').remove();
oLoginContent.children('h1, p, #login-form').hide();
oLoginContent.prepend(new Template({
IMG: {
ID: 'login-loader',
SRC: 'img/loaders/login.gif'
},
DIV: {
ID: 'login-message',
CONTENT: 'CONNECTING'.translate()
}
}).toHtml());
CONF.COM.SOCKET = new Connection();
CONF.COM.SOCKET.setEncryptionPhrase(sPassword);
CONF.COM.SOCKET.connect(sHash.toString());
} else {
if (sBoardName === 'YOUR_PREFERED_BOARDNAME'.translate() || sBoardName.length === 0) {
showMessage('PLEASE_ENTER_A_VALID_BOARDNAME', 'error');
if (!isMobile()) {
oBoardName.focus();
}
} else if (sPassword === 'PASSWORD'.translate() || sPassword.length < 4) {
showMessage('PLEASE_ENTER_VALID_PASSWORD', 'error');
if (!isMobile()) {
oBoardPw.focus();
}
}
}
}
)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// New post view
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Select prio color for new post
.on(CONF.EVENTS.CLICK, '#post-window > .color_select li > a', function () {
if (!$(this).hasClass('selected')) {
var oSelected = $(this).closest('ul').find('.selected');
var oPostWin = $('#post-window');
var sPostWinId = oPostWin.children('textarea').attr('id');
var bListenChange = (sPostWinId !== undefined && sPostWinId.indexOf('origin-') !== -1);
var oTextarea = oPostWin.children('textarea');
var sAddClassFinal = $(this).closest('li').attr('class');
var oColorSelect = oPostWin.children('.color_select');
if (bListenChange && oColorSelect.data('beforechange') === undefined) {
oColorSelect.data('beforechange', oSelected.parent().attr('class'));
}
oTextarea.removeAttr('class').addClass(sAddClassFinal);
oSelected.removeClass('selected');
$(this).addClass('selected');
if (bListenChange) {
if ($(this).parent().attr('class') !== oColorSelect.data('beforechange')) {
CONF.DOM.CMD.find('#store_post').removeClass('hidden');
}
else {
CONF.DOM.CMD.find('#store_post').addClass('hidden');
oTextarea.trigger('keyup');
}
}
}
})
// Store the initial content of textarea in edit mode
.on('focusin', '#post-window > textarea', function () {
if ($(this).attr('id') !== undefined) {
if ($(this).attr('id').indexOf('origin-') !== -1) {
// Add Whitespace
$(this).val($(this).val() + ' ');
if ($(this).data('beforechange') === undefined) {
$(this).data('beforechange', $(this).val());
// Set cursor at the end
$(this).setCursorPosition($(this).val().length);
}
}
}
})
// Custom change detection for prevent store same taxt as on post
.on('keyup', '#post-window > textarea', function () {
var sId = $(this).attr('id');
if (sId !== undefined) {
if (sId.indexOf('origin-') !== -1) {
if ($(this).val().trim() !== $(this).data('beforechange').trim()) {
CONF.DOM.CMD.find('#store_post').removeClass('hidden');
} else {
CONF.DOM.CMD.find('#store_post').addClass('hidden');
}
}
}
})
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Settings view
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// change priority name
.on('keyup focusout', '.legend-item > input', function (event) {
var sUpdatePrio = $(this).closest('.legend-item').attr('id').replace('legend-', '').toUpperCase();
var oDiff = JSON.parse('{"SETTINGS":{"COLORS":{"' + sUpdatePrio + '":{}}}}');
if (event.type === 'focusout' && CONF.BOARD.SETTINGS.COLORS[sUpdatePrio] !== undefined) {
oDiff.SETTINGS.COLORS[sUpdatePrio] = $(this).val().trim();
CONF.BOARD.SETTINGS.COLORS[sUpdatePrio] = $(this).val().trim();
CONF.COM.SOCKET.saveChanges(oDiff);
showMessage('CHANGED_PRIO_NAME');
}
if (event.type === 'keyup' && event.keyCode === 13) {
$(this).blur();
}
});
})();