jquery-toad
Version:
jQuery TOAD - O velho e querido jQuery
137 lines (105 loc) • 4.69 kB
JavaScript
E5R.namespace('app/controllers', function (exports) {
"use strict";
var $ = E5R.$jq,
utils = E5R.require('utils'),
register = E5R.require('@registerController'),
BY_ID = E5R.require('@constants').VIEW_BY_ID;
function HomeController(el, options) {
this.$model({
title: 'E5R Development Team',
description: 'O E5R Development Team, é um projeto de construção de um time de desenvolvimento de softwares',
f1: function () { /* functions are discarded */ },
imageUrl: 'https://images.pexels.com/photos/531880/pexels-photo-531880.jpeg',
nativeList: [],
websites: [
'https://github.com/e5r',
'https://erlimar.wordpress.com/category/e5r-development-team/',
'https://www.youtube.com/channel/UC6zPtVBfcAdkzq7-dpSlhdw'
],
f2: function () { /* functions are discarded */ }
});
this.$onUpdateModel(_onUpdateModel);
this.$onUpdateModel('websites', _onUpdateItems);
};
HomeController.prototype.onAddItemClick = function (event) {
var self = $(this).controller();
self.$view(BY_ID, 'button-show-form').addClass('d-none');
self.$view(BY_ID, 'form').removeClass('d-none');
self.$view('form input[type="text"]')
.val('')
.focus();
}
HomeController.prototype.onAddItemCancelClick = function (event) {
event.preventDefault();
var self = $(this).controller();
self.$view(BY_ID, 'button-show-form').removeClass('d-none');
self.$view(BY_ID, 'form').addClass('d-none');
}
HomeController.prototype.onAddItemSaveClick = function (event) {
event.preventDefault();
var self = $(this).controller(),
items = self.$model('websites'),
addItemText = self.$view('form input[type="text"]').val();
if (items.indexOf(addItemText) >= 0) {
_showFeedback('O item já está na lista. Informe outro valor!');
return;
}
if ($.trim(addItemText || '').length < 1) {
_showFeedback('Preencha o campo com algum valor!');
return;
}
self.$model('websites', items.concat([addItemText]))
self.$view(BY_ID, 'button-show-form').removeClass('d-none');
self.$view(BY_ID, 'form').addClass('d-none');
function _showFeedback(feedback) {
self.$view('form span.invalid-feedback').text(feedback);
self.$view('form input[type="text"]').addClass('is-invalid');
setTimeout(function () {
self.$view('form input[type="text"]').removeClass('is-invalid');
}, 2 * 1000)
}
}
HomeController.prototype.onDiscardClick = function (event) {
var self = $(this).controller(),
model = self.$model();
console.log('onDiscardClick->model.before:', model);
model.websites = [];
console.log('onDiscardClick->model.middle:', model);
console.log('onDiscardClick->model.after:', self.$model());
// not update model
}
function _onUpdateModel(oldState, newState, modelPath, controller) {
controller.$view(BY_ID, 'info-title').text(newState.title);
controller.$view(BY_ID, 'info-description').text(newState.description);
var pathItems = 'websites',
cbItems = (modelPath
? function () { }
: _onUpdateItems);
cbItems.call(
null,
utils.getObjectItemByPath(oldState, pathItems),
utils.getObjectItemByPath(newState, pathItems),
pathItems,
controller
);
}
function _onUpdateItems(oldState, newState, modelPath, controller) {
var list = controller.$view(BY_ID, 'info-list');
list.empty();
$.each(newState || [], function (_, itemText) {
itemText = (itemText || '');
var item = $('<li>')
.addClass('list-group-item');
if (itemText.indexOf('http://') >= 0 || itemText.indexOf('https://') >= 0) {
var link = $('<a>')
.attr('href', itemText)
.attr('target', '_blank')
.text(itemText);
item.append(link);
} else
item.text(itemText);
list.append(item);
});
}
exports.HomeController = register('home', HomeController);
});