'),
normalizedName = normalizeClassName(name);
classes = classes ? classes + ' ' : '';
classes += settings.classes.globalPrefix + '-' + normalizedName;
classes += ' ' + settings.classes.prefix + '-' + normalizedName;
$newElement.addClass(classes);
return $newElement;
};
this.destroy = function() {
unbindEvents();
elements.widget.remove();
self.trigger('destroy');
return self;
};
this.getElements = function(item) {
return item ? elements[item] : elements;
};
this.getSettings = function(setting) {
var copy = Object.create(settings);
if (setting) {
return copy[setting];
}
return copy;
};
this.hide = function() {
if (! self.isVisible()) {
return;
}
clearTimeout(hideTimeOut);
callEffect('hide', arguments);
unbindEvents();
if (settings.preventScroll) {
self.getElements('body').removeClass(settings.classes.preventScroll);
}
self.trigger('hide');
return self;
};
this.init = function(parent, properties) {
if (!(parent instanceof DialogsManager.Instance)) {
throw 'The ' + self.widgetName + ' must to be initialized from an instance of DialogsManager.Instance';
}
ensureClosureMethods();
self.trigger('init', properties);
initSettings(parent, properties);
initElements();
self.buildWidget();
self.attachEvents();
self.trigger('ready');
return self;
};
this.isVisible = function() {
return elements.widget.is(':visible');
};
this.on = function(eventName, callback) {
if ('object' === typeof eventName) {
$.each(eventName, function(singleEventName) {
self.on(singleEventName, this);
});
return self;
}
var eventNames = eventName.split(' ');
eventNames.forEach(function(singleEventName) {
if (!events[singleEventName]) {
events[singleEventName] = [];
}
events[singleEventName].push(callback);
});
return self;
};
this.off = function(eventName, callback) {
if (! events[ eventName ]) {
return self;
}
if (! callback) {
delete events[eventName];
return self;
}
var callbackIndex = events[eventName].indexOf(callback);
if (-1 !== callbackIndex) {
events[eventName].splice(callbackIndex, 1);
}
return self;
};
this.refreshPosition = function() {
if (! settings.position.enable) {
return;
}
var position = $.extend({}, settings.position);
if (elements[position.of]) {
position.of = elements[position.of];
}
if (! position.of) {
position.of = window;
}
if (settings.iframe) {
fixIframePosition(position);
}
elements[position.element].position(position);
};
this.setID = function(id) {
elements.widget.attr('id', id);
return self;
};
this.setHeaderMessage = function(message) {
self.getElements('header').html(message);
return self;
};
this.setMessage = function(message) {
elements.message.html(message);
return self;
};
this.setSettings = function(key, value) {
if (jQuery.isPlainObject(value)) {
$.extend(true, settings[key], value);
} else {
settings[key] = value;
}
return self;
};
this.show = function() {
clearTimeout(hideTimeOut);
elements.widget.appendTo(elements.container).hide();
callEffect('show', arguments);
self.refreshPosition();
if (settings.hide.auto) {
hideTimeOut = setTimeout(self.hide, settings.hide.autoDelay);
}
bindEvents();
if (settings.preventScroll) {
self.getElements('body').addClass(settings.classes.preventScroll);
}
self.trigger('show');
return self;
};
this.trigger = function(eventName, params) {
var methodName = 'on' + eventName[0].toUpperCase() + eventName.slice(1);
if (self[methodName]) {
self[methodName](params);
}
var callbacks = events[eventName];
if (!callbacks) {
return;
}
$.each(callbacks, function(index, callback) {
callback.call(self, params);
});
return self;
};
};
DialogsManager.Widget.prototype.types = [];
// Inheritable widget methods
DialogsManager.Widget.prototype.buildWidget = function() {
var elements = this.getElements(),
settings = this.getSettings();
elements.widget.append(elements.header, elements.message);
this.setHeaderMessage(settings.headerMessage);
this.setMessage(settings.message);
if (this.getSettings('closeButton')) {
elements.widget.prepend(elements.closeButton);
}
};
DialogsManager.Widget.prototype.attachEvents = function() {
var self = this;
if (self.getSettings('closeButton')) {
self.getElements('closeButton').on('click', function() {
self.hide();
});
}
};
DialogsManager.Widget.prototype.getDefaultSettings = function() {
return {};
};
DialogsManager.Widget.prototype.getClosureMethods = function() {
return [];
};
DialogsManager.Widget.prototype.onHide = function() {
};
DialogsManager.Widget.prototype.onShow = function() {
};
DialogsManager.Widget.prototype.onInit = function() {
};
DialogsManager.Widget.prototype.onReady = function() {
};
DialogsManager.widgetsTypes.simple = DialogsManager.Widget;
DialogsManager.addWidgetType('buttons', {
activeKeyUp: function(event) {
var TAB_KEY = 9;
if (event.which === TAB_KEY) {
event.preventDefault();
}
if (this.hotKeys[event.which]) {
this.hotKeys[event.which](this);
}
},
activeKeyDown: function(event) {
if (!this.focusedButton) {
return;
}
var TAB_KEY = 9;
if (event.which === TAB_KEY) {
event.preventDefault();
var currentButtonIndex = this.focusedButton.index(),
nextButtonIndex;
if (event.shiftKey) {
nextButtonIndex = currentButtonIndex - 1;
if (nextButtonIndex < 0) {
nextButtonIndex = this.buttons.length - 1;
}
} else {
nextButtonIndex = currentButtonIndex + 1;
if (nextButtonIndex >= this.buttons.length) {
nextButtonIndex = 0;
}
}
this.focusedButton = this.buttons[nextButtonIndex].focus();
}
},
addButton: function(options) {
var self = this,
settings = self.getSettings(),
buttonSettings = jQuery.extend(settings.button, options);
var classes = options.classes ? options.classes + ' ' : '';
classes += settings.classes.globalPrefix + '-button';
var $button = self.addElement(options.name, $('<' + buttonSettings.tag + '>').html(options.text), classes);
self.buttons.push($button);
var buttonFn = function() {
if (settings.hide.onButtonClick) {
self.hide();
}
if ($.isFunction(options.callback)) {
options.callback.call(this, self);
}
};
$button.on('click', buttonFn);
if (options.hotKey) {
this.hotKeys[options.hotKey] = buttonFn;
}
this.getElements('buttonsWrapper').append($button);
if (options.focus) {
this.focusedButton = $button;
}
return self;
},
bindHotKeys: function() {
this.getElements('window').on({
keyup: this.activeKeyUp,
keydown: this.activeKeyDown
});
},
buildWidget: function() {
DialogsManager.Widget.prototype.buildWidget.apply(this, arguments);
var $buttonsWrapper = this.addElement('buttonsWrapper');
this.getElements('widget').append($buttonsWrapper);
},
getClosureMethods: function() {
return [
'activeKeyUp',
'activeKeyDown'
];
},
getDefaultSettings: function() {
return {
hide: {
onButtonClick: true
},
button: {
tag: 'button'
}
};
},
onHide: function() {
this.unbindHotKeys();
},
onInit: function() {
this.buttons = [];
this.hotKeys = {};
this.focusedButton = null;
},
onShow: function() {
this.bindHotKeys();
if (!this.focusedButton) {
this.focusedButton = this.buttons[0];
}
if (this.focusedButton) {
this.focusedButton.focus();
}
},
unbindHotKeys: function() {
this.getElements('window').off({
keyup: this.activeKeyUp,
keydown: this.activeKeyDown
});
}
});
DialogsManager.addWidgetType('lightbox', DialogsManager.getWidgetType('buttons').extend('lightbox', {
getDefaultSettings: function() {
var settings = DialogsManager.getWidgetType('buttons').prototype.getDefaultSettings.apply(this, arguments);
return $.extend(true, settings, {
contentWidth: 'auto',
contentHeight: 'auto',
position: {
element: 'widgetContent',
of: 'widget',
autoRefresh: true
}
});
},
buildWidget: function() {
DialogsManager.getWidgetType('buttons').prototype.buildWidget.apply(this, arguments);
var $widgetContent = this.addElement('widgetContent'),
elements = this.getElements();
$widgetContent.append(elements.header, elements.message, elements.buttonsWrapper);
elements.widget.html($widgetContent);
if (elements.closeButton) {
$widgetContent.prepend(elements.closeButton);
}
},
onReady: function() {
var elements = this.getElements(),
settings = this.getSettings();
if ('auto' !== settings.contentWidth) {
elements.message.width(settings.contentWidth);
}
if ('auto' !== settings.contentHeight) {
elements.message.height(settings.contentHeight);
}
}
}));
DialogsManager.addWidgetType('confirm', DialogsManager.getWidgetType('lightbox').extend('confirm', {
onReady: function() {
DialogsManager.getWidgetType('lightbox').prototype.onReady.apply(this, arguments);
var strings = this.getSettings('strings'),
isDefaultCancel = this.getSettings('defaultOption') === 'cancel';
this.addButton({
name: 'cancel',
text: strings.cancel,
callback: function(widget) {
widget.trigger('cancel');
},
focus: isDefaultCancel
});
this.addButton({
name: 'ok',
text: strings.confirm,
callback: function(widget) {
widget.trigger('confirm');
},
focus: !isDefaultCancel
});
},
getDefaultSettings: function() {
var settings = DialogsManager.getWidgetType('lightbox').prototype.getDefaultSettings.apply(this, arguments);
settings.strings = {
confirm: 'OK',
cancel: 'Cancel'
};
settings.defaultOption = 'cancel';
return settings;
}
}));
DialogsManager.addWidgetType('alert', DialogsManager.getWidgetType('lightbox').extend('alert', {
onReady: function() {
DialogsManager.getWidgetType('lightbox').prototype.onReady.apply(this, arguments);
var strings = this.getSettings('strings');
this.addButton({
name: 'ok',
text: strings.confirm,
callback: function(widget) {
widget.trigger('confirm');
}
});
},
getDefaultSettings: function() {
var settings = DialogsManager.getWidgetType('lightbox').prototype.getDefaultSettings.apply(this, arguments);
settings.strings = {
confirm: 'OK'
};
return settings;
}
}));
// Exporting the DialogsManager variable to global
global.DialogsManager = DialogsManager;
})(
typeof jQuery !== 'undefined' ? jQuery : typeof require === 'function' && require('jquery'),
(typeof module !== 'undefined' && typeof module.exports !== 'undefined') ? module.exports : window
);
Charms of Boston Archives - FundFlippers
Skip to content
Boston, Massachusetts, prestigious for its verifiable importance and hearty finance sector, is a city throbbing with social dynamic quality and sporting charm. While its finance ability is evident, Boston’s actual embodiment lies in the heap encounters it offers beyond the domain of finance. From its different areas and culinary scene to its rich history and … Read more