| Current Path : /home/azimutno/www/administrator/components/com_uniform/assets/js/visualdesign/ |
| Current File : /home/azimutno/www/administrator/components/com_uniform/assets/js/visualdesign/visualdesign.js |
/**
* @category Libraries
* @package Unifom
* @author JoomlaShine.com
* @copyright JoomlaShine.com
* @license GNU/GPL v2 http://www.gnu.org/licenses/gpl-2.0.html
* @version $Id: visualdesign.js 19013 2012-11-28 04:48:47Z thailv $
* @link JoomlaShine.com
*/
define([
'jquery',
'uniform/visualdesign/controls',
'uniform/dialogedition',
'jsn/libs/modal',
'uniform/visualdesign/itemlist',
'uniform/libs/jquery.tmpl',
'uniform/libs/jquery.placeholder',
'uniform/libs/jquery-ui-timepicker-addon',
'jquery.jwysiwyg09',
'jquery.wysiwyg.colorpicker',
'jquery.wysiwyg.table',
'jquery.wysiwyg.cssWrap',
'jquery.wysiwyg.image',
'jquery.wysiwyg.link',
'jquery.json',
'jquery.ui',
'jquery.tipsy',
'uniform/libs/googlemaps/jquery.ui.map',
'uniform/libs/googlemaps/jquery.ui.map.services',
'uniform/libs/googlemaps/jquery.ui.map.extensions'
],
function ($, JSNVisualControls, JSNUniformDialogEdition, JSNModal) {
/**
* Constructor of JSNVisualDesign class
* @param container
* @param container
*/
var listLabel = [];
var checkChangeEmail = false;
var dataEmailSubmitter = [];
var edition = "";
var lang = [];
var limitSize = '';
var limitEx = '';
var pathRoot = '';
var token = '';
function JSNVisualDesign(container, params) {
this.params = params;
lang = params.language;
token = params.token;
edition = params.edition;
limitEx = params.limitEx;
pathRoot = params.pathRoot;
limitSize = params.limitSize;
dataEmailSubmitter = params.dataEmailSubmitter;
// added jce
jce_etag = params.jce_etag;
jce_toolbar = params.jce_toolbar;
jce_language = params.jce_language;
jce_component_id = params.jce_component_id;
jce_directionality = params.jce_directionality;
jce_document_base_url = params.jce_base_url;
this.newElement = $('<a href="javascript:void(0);" class="jsn-add-more"><i class="icon-plus"></i>' + lang['JSN_UNIFORM_ADD_FIELD'] + '</a>');
this.container;
this.init(container);
}
/**
* This variable will contains all registered control
* @var object
*/
JSNVisualDesign.controls = {};
JSNVisualDesign.controlGroups = {};
JSNVisualDesign.toolboxTarget = null;
JSNVisualDesign.optionsBox = null;
JSNVisualDesign.optionsBoxContent = null;
JSNVisualDesign.toolbox = null;
JSNVisualDesign.wrapper = null;
JSNVisualDesign.initialize = function (language) {
JSNVisualDesign.wrapper = $('<div class="jsn-element ui-state-default jsn-iconbar-trigger">'
+ '<div class="jsn-element-content"></div>'
+ '<div class="jsn-element-overlay"></div>'
+ '<div class="jsn-iconbar">'
+ '<a href="#" onclick="return false;" title="' + lang['JSN_UNIFORM_MOVE_ELEMENT'] + '" class="element-move' + ($("#jform_form_type").val() == 1 ? ' hidden' : '') + '">'
+ '<i class="icon-out-2"></i></a>'
+ '<a href="#" onclick="return false;" title="' + lang['JSN_UNIFORM_EDIT_ELEMENT'] + '" class="element-edit">'
+ '<i class="icon-pencil"></i></a>'
+ '<a href="#" onclick="return false;" title="' + lang['JSN_UNIFORM_DUPLICATE_ELEMENT'] + '" class="element-duplicate">'
+ '<i class="icon-copy"></i></a>'
+ '<a href="#" onclick="return false;" title="' + lang['JSN_UNIFORM_DELETE_ELEMENT'] + '" class="element-delete">'
+ '<i class="icon-trash"></i></a>'
+ '</div></div>'
);
JSNVisualDesign.toolbox = $('<div class="box jsn-bootstrap"></div>');
JSNVisualDesign.toolboxContent = $('<div class="popover top" />');
JSNVisualDesign.toolboxContent.css('display', 'block');
JSNVisualDesign.toolboxContent.append($('<div class="arrow" />'));
JSNVisualDesign.toolboxContent.append($('<h3 class="popover-title">' + lang['JSN_UNIFORM_SELECT_FIELD'] + '</h3>'));
JSNVisualDesign.toolboxContent.append(
$('<div/>', {
"class": "popover-content"
}).append(
$("<form/>")
)
);
JSNVisualDesign.toolbox.append(JSNVisualDesign.toolboxContent);
JSNVisualDesign.toolbox.attr('id', 'visualdesign-toolbox');
JSNVisualDesign.optionsBox = $('<div class="box jsn-bootstrap" id="visualdesign-options"></div>');
JSNVisualDesign.optionsBoxContent = $('<div class="popover bottom"></div>');
JSNVisualDesign.optionsBoxContent.css('display', 'block');
JSNVisualDesign.optionsBoxContent.append($('<div class="arrow" />'));
JSNVisualDesign.optionsBoxContent.append($('<h3 class="popover-title">' + lang['JSN_UNIFORM_PROPERTIES'] + '</h3>'));
JSNVisualDesign.optionsBoxContent.append($('<div class="popover-content"><form><div class="tabs"><ul><li class="active"><a data-toggle="tab" href="#visualdesign-options-general">' + lang['JSN_UNIFORM_GENERAL'] + '</a></li><li><a data-toggle="tab" href="#visualdesign-options-values">' + lang['JSN_UNIFORM_VALUES'] + '</a></li></ul><div id="visualdesign-options-general" class="tab-pane active"></div><div id="visualdesign-options-values" class="tab-pane"></div></div></form></div>'));
JSNVisualDesign.optionsBox.append(JSNVisualDesign.optionsBoxContent);
JSNVisualDesign.optionsBoxContent.find('form').on('change', function (event) {
var activeElement = JSNVisualDesign.optionsBox.data('visualdesign-active-element');
if (activeElement) {
var options = activeElement.data('visualdesign-element-data');
if (options) {
var eventId = $(event.target).attr("id");
var optionsNew = $(this).toJSON();
var windowForm = document.forms[0];
var defaultEditor = $(windowForm).find('input#default-editor');
if (options.type == 'static-content' && $(defaultEditor).attr('data-editor') == 'tinymce') {
var tinyContent = tinyMCE.get($('.textarea').attr('id')).getContent();
optionsNew.value = tinyContent;
}
optionsNew.identify = options.options.identify;
var newElement = JSNVisualDesign.createElement(options.type, optionsNew, options.id);
activeElement.replaceWith(newElement);
JSNVisualDesign.optionsBox.data('visualdesign-active-element', newElement);
checkChangeEmail = true;
if (options.type == "date") {
JSNVisualDesign.dateTime();
}
newElement.addClass("ui-state-edit");
}
}
$('input, textarea').placeholder();
$(".control-group.jsn-hidden-field").parents(".jsn-element").addClass("jsn-disabled");
}).submit(function (e) {
$(this).trigger('change');
e.preventDefault();
});
$("input#option-limitMax-number").on("change", function () {
checkChangeEmail = true;
})
$(function () {
$(document).mousedown(function (event) {
if (event.target != JSNVisualDesign.toolbox.get(0) && !$.contains(JSNVisualDesign.toolbox.get(0), event.target)) {
JSNVisualDesign.closeToolbox();
}
if (typeof $(event.target).parent().attr("class") !== 'undefined' && event.target != JSNVisualDesign.optionsBox.get(0) && !$.contains(JSNVisualDesign.optionsBox.get(0), event.target) && $(event.target).parent().attr("class") != "jsn-element ui-state-edit" && $(event.target).parent().attr("class") != "ui-state-edit" && !$(event.target).parents("#ui-datepicker-div").size() && $(event.target).attr("id") != "ui-datepicker-div" && $(event.target).attr("class") != "ui-widget-overlay" && $(event.target).attr("class") != "wysiwyg-dialog-modal-div" && !$(event.target).parents(".ui-dialog").size() && !$(event.target).parents(".wysiwyg-dialog-modal-div").size() && !$(event.target).parents(".control-list-action").size() && !$(event.target).parents(".ui-autocomplete").size() && !$(event.target).parents(".pac-container").size() && !$(event.target).parents(".dialog-google-maps").size() && $(event.target).attr("class") != "jsn-lock-screen" && !$(event.target).hasClass("mce-container-body") && !$(event.target).hasClass("mce-textbox") && !$(event.target).hasClass("mce-dragh") && !$(event.target).hasClass("mce-active") && !$(event.target).hasClass("mce-widget") && !$(event.target).hasClass("mce-menu-item") && !$(event.target).hasClass("mce-text") && !$(event.target).hasClass("mce-label") && $(event.target).attr('type') != 'button') {
if ($(JSNVisualDesign.optionsBox.get(0)).find("#option-googleMaps-hidden").val() && $("#form-design .ui-state-edit").size()) {
setTimeout(function () {
JSNVisualDesign.contentGoogleMaps(true);
$("#form-design .ui-state-edit").removeClass("ui-state-edit");
JSNVisualDesign.closeOptionsBox();
}, 200);
} else {
$("#form-design .ui-state-edit").removeClass("ui-state-edit");
if ($(event.target).parent().attr("role") !== 'listbox') {
JSNVisualDesign.closeOptionsBox();
}
}
}
});
});
JSNVisualControls(JSNVisualDesign, language);
// Listen click event on document to handle click action on the icon to move element.
if (!document._jsn_uniform_initialized_move_icon) {
$(document).on('click', '.jsn-iconbar-trigger > .jsn-iconbar > .element-move', function(event) {
// Prepare page list.
var formHead = document.getElementById('form-design-header');
var pageList = document.querySelector('.jsn-page-list').cloneNode(true);
for (var i = 0; i < pageList.children.length; i++) {
// Set page name if missing.
if (!pageList.children[i].querySelector('a')) {
var a = document.createElement('a');
var f = pageList.children[i].querySelector('input');
a.href = '#';
a.textContent = f.value;
pageList.children[i].insertBefore(a, f);
}
// Do not show current page.
var page = pageList.children[i].id.replace(/^new_/, '');
if (page == formHead.getAttribute('data-value')) {
pageList.children[i].classList.add('hidden');
} else {
pageList.children[i].classList.remove('hidden');
}
}
// Convert page list to dropdown menu.
pageList.classList.add('dropdown-menu');
pageList.classList.remove('hide');
// Append dropdown menu to the move icon.
var target = event.target;
while (target.nodeName != 'A' && target.nodeName != 'BODY') {
target = target.parentNode;
}
target.appendChild(pageList);
// Show page list for selecting.
pageList.style.display = 'block';
pageList.style.position = 'absolute';
// Listen to click event on page list items.
$('.page-items', pageList).on('click', function(event) {
// Find element wrapper and target page.
var new_page;
var wrapper = event.target;
while (wrapper.nodeName != 'BODY') {
if (wrapper.classList && wrapper.classList.contains('jsn-element')) {
break;
}
else if (wrapper.classList && wrapper.classList.contains('page-items')) {
new_page = wrapper.querySelector('input').getAttribute('data-id');
}
wrapper = wrapper.parentNode;
}
if (!new_page || wrapper.nodeName == 'BODY') {
return;
}
// Get element data.
var data = $(wrapper).data('visualdesignElementData');
// Remove the element from the current page.
wrapper.parentNode.removeChild(wrapper);
JSNVisualDesign.savePage('delete');
// Switch to the target page.
$('#form-design-header .jsn-page-list .page-items[data-value="' + new_page + '"]')
.trigger('click');
// Automatically append the element to target page.
setTimeout(function moveElement() {
// Check page is finished loading.
var loading = document.querySelector('#form-design-content #page-loading');
if (loading.style.display == 'none') {
var element = JSNVisualDesign.createElement(data.type, data.options, data.id)[0];
var addButton = document.querySelectorAll('#form-container .jsn-column-content');
addButton = addButton[addButton.length - 1].querySelector('.jsn-add-more');
if (element && addButton) {
addButton.parentNode.querySelector('.jsn-element-container').appendChild(element);
JSNVisualDesign.savePage('add');
}
} else {
setTimeout(moveElement, 100);
}
}, 100);
});
});
$(document).on('mouseover', function(event) {
document.checkJsnUfPageSelectorTimer && clearTimeout(document.checkJsnUfPageSelectorTimer);
document.checkJsnUfPageSelectorTimer = setTimeout(function() {
document.hideJsnUfPageSelectorTimer && clearTimeout(document.hideJsnUfPageSelectorTimer);
// Check if the move icon is hovered?
var target = event.target;
while (target && target.nodeName != 'BODY') {
if (target.classList && target.classList.contains('element-move')) {
break;
}
target = target.parentNode;
}
if (!target || target.nodeName == 'BODY') {
var pageList = document.querySelector('.element-move > .jsn-page-list');
if (pageList) {
document.hideJsnUfPageSelectorTimer = setTimeout(function () {
// Remove page list.
pageList.parentNode.removeChild(pageList);
}, 400);
}
}
}, 100);
});
document._jsn_uniform_initialized_move_icon = true;
}
};
JSNVisualDesign.setLayout = function (selector, name) {
var container = $(selector);
var instance = container.data('visualdesign-instance');
var elements = instance.serialize(true);
$.get('index.php?option=com_uniform&task=layout.load&name=' + name + '&format=raw', function (response) {
container.html(response);
instance.init(container);
instance.setElements(elements);
});
};
/**
* Register control item that can use for page design
* @param string identify
* @param object options
*/
JSNVisualDesign.register = function (identify, options) {
if (JSNVisualDesign.controls[identify] !== undefined || identify === undefined || identify == '' || options.caption === undefined || options.caption == '' || options.defaults === undefined || !$.isPlainObject(options.defaults) || options.params === undefined || !$.isPlainObject(options.params) || options.tmpl === undefined || options.tmpl == '') {
return false;
}
if (JSNVisualDesign.controlGroups[options.group] === undefined) {
JSNVisualDesign.controlGroups[options.group] = [];
}
// Save control to list
//options.identify;
JSNVisualDesign.controls[identify] = options;
JSNVisualDesign.controlGroups[options.group].push(identify);
};
/**
* Draw registered buttons to toolbox
* @return void
*/
JSNVisualDesign.drawToolboxButtons = function () {
this.buttons = {};
var self = this;
$.map(JSNVisualDesign.controlGroups, function (buttons, group) {
var buttonList = [];
$(buttons).each(function (index, identify) {
if (identify != "form-actions" && identify != "form-payments" && identify != "mailchimp-subcriber") {
var options = JSNVisualDesign.controls[identify];
var button = $('<li/>', {
'class': 'jsn-item',
'data-value': options.caption
}).append($('<button/>', {
'name': identify,
'class': 'btn button-tipsy',
'original-title': options.elmtitle
}).click(function (e) {
if (JSNVisualDesign.getField()) {
if (JSNVisualDesign.toolboxTarget == null)
JSNVisualDesign.closeToolbox();
var control = JSNVisualDesign.controls[this.name];
var d = new Date();
var time = d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
var getLabel = this.name + "_" + Math.floor(Math.random() * 999999999) + time;
var label = getLabel.toLowerCase();
while (/[^a-zA-Z0-9_]+/.test(label)) {
label = label.replace(/[^a-zA-Z0-9_]+/, '_');
}
control.defaults.identify = label;
var element = JSNVisualDesign.createElement(this.name, control.defaults);
element.appendTo(JSNVisualDesign.toolboxTarget);
element.find("a.element-edit").click();
if (this.name == "dropdown") {
$("#option-firstItemAsPlaceholder-checkbox").prop("checked", true);
}
if (this.name == "date") {
$("#option-dateFormat-checkbox").prop("checked", true);
JSNVisualDesign.eventChangeDate();
}
if (this.name == "address") {
$("#jsn-field-address .jsn-item input[type=checkbox]").each(function () {
$(this).prop("checked", true);
});
JSNVisualDesign.eventChangeAddress();
}
if (this.name == "name") {
$("#jsn-field-name .jsn-items-list input[type=checkbox]").each(function () {
$(this).prop("checked", true);
});
JSNVisualDesign.eventChangeName();
}
JSNVisualDesign.savePage();
JSNVisualDesign.closeToolbox();
JSNVisualDesign.optionsBox.find('form').trigger("change");
}
e.preventDefault();
}).append($('<i/>', {
'class': 'jsn-icon16 icon-formfields jsn-icon-' + identify
})).append(options.caption))
buttonList.push(button);
}
});
self.buttons[group] = buttonList;
});
return self.buttons;
};
JSNVisualDesign.filterResults = function (value, resultsFilter) {
$(resultsFilter).find("li").hide();
if (value != "") {
$(resultsFilter).find("li").each(function () {
var textField = $(this).attr("data-value").toLowerCase();
if (textField.search(value.toLowerCase()) == -1) {
$(this).hide();
} else {
$(this).fadeIn(800);
}
});
} else {
$(resultsFilter).find("li").each(function () {
$(this).fadeIn(800);
});
}
};
JSNVisualDesign.getTmplFieldAddress = function (data) {
if (data.sortableField) {
var listField = $.evalJSON(data.sortableField);
var sortableField = [];
var field = {};
$.each(listField, function (i, val) {
if (data[val]) {
sortableField.push(val);
}
switch (val) {
case "vstreetAddress":
field[val] = '<input type="text" placeholder="' + lang['STREET_ADDRESS'] + '" class="jsn-input-xxlarge-fluid" />';
break;
case "vstreetAddress2":
field[val] = '<input type="text" placeholder="' + lang['ADDRESS_LINE_2'] + '" class="jsn-input-xxlarge-fluid" />';
break;
case "vcity":
field[val] = '<input type="text" placeholder="' + lang['CITY'] + '" class="jsn-input-xxlarge-fluid" />';
break;
case "vstate":
field[val] = '<input type="text" placeholder="' + lang['STATE_PROVINCE_REGION'] + '" class="jsn-input-xxlarge-fluid" />';
break;
case "vcode":
field[val] = '<input type="text" placeholder="' + lang['POSTAL_ZIP_CODE'] + '" class="jsn-input-xxlarge-fluid" />';
break;
case "vcountry":
field[val] = '<select class="jsn-input-xlarge-fluid">{{each(i, val) country}}<option value="${val.text}" {{if val.checked == true || val.checked=="true"}}selected{{/if}}>${val.text}</option>{{/each}}</select>';
break;
}
});
var position1 = $.inArray('vstreetAddress', sortableField);
var position2 = $.inArray('vstreetAddress2', sortableField);
if (position1 > position2) {
position2 = $.inArray('vstreetAddress', sortableField);
position1 = $.inArray('vstreetAddress2', sortableField);
}
var html = '<div class="control-group {{if hideField}}jsn-hidden-field{{/if}} jsn-group-field">' +
'<label class="control-label">${label}{{if required==1||required=="1"}}<span class="required">*</span>{{/if}}{{if instruction}}<i class="icon-question-sign"></i>{{/if}}</label>' +
'<div class="controls">';
if (position1 > 0) {
var check = 0;
for (var i = 0; i < position1; i++) {
if (check % 2 == 0) {
html += '<div class="row-fluid">';
}
if (data[sortableField[i]]) {
html += '<div class="span6">' + field[sortableField[i]] + '</div>';
}
if (check % 2 != 0 || i == position1 - 1) {
html += '</div>';
}
check++;
}
}
if (data[sortableField[position1]]) {
html += '<div class="row-fluid"><div class="span12">' + field[sortableField[position1]] + '</div></div>';
}
check = 0;
for (var i = position1 + 1; i < position2; i++) {
if (check % 2 == 0) {
html += '<div class="row-fluid">';
}
if (data[sortableField[i]]) {
html += '<div class="span6">' + field[sortableField[i]] + '</div>';
}
if (check % 2 != 0 || i == position2 - 1) {
html += '</div>';
}
check++;
}
if (data[sortableField[position2]]) {
html += '<div class="row-fluid"><div class="span12">' + field[sortableField[position2]] + '</div></div>';
}
check = 0;
if (position2 < sortableField.length) {
for (var i = position2 + 1; i < sortableField.length; i++) {
if (check % 2 == 0) {
html += '<div class="row-fluid">';
}
html += '<div class="span6">' + field[sortableField[i]] + '</div>';
if (check % 2 != 0 || i == sortableField.length - 1) {
html += '</div>';
}
check++;
}
}
html += "</div></div>";
return html;
}
};
JSNVisualDesign.getTmplFieldName = function (data) {
if (data.sortableField) {
var listField = $.evalJSON(data.sortableField);
var sortableField = [];
var field = {};
$.each(listField, function (i, val) {
if (data[val]) {
sortableField.push(val);
}
switch (val) {
case "vtitle":
field[val] = ' <select class="input-small" >{{each(i, val) items}}<option value="${val.text}" {{if val.checked == true || val.checked=="true"}}selected{{/if}}>${val.text}</option>{{/each}}</select> ';
break;
case "vfirst":
field[val] = ' <input type="text" class="${size}" placeholder="' + lang['FIRST'] + '" /> ';
break;
case "vmiddle":
field[val] = ' <input type="text" class="${size}" placeholder="' + lang['MIDDLE'] + '" /> ';
break;
case "vlast":
field[val] = ' <input type="text" class="${size}" placeholder="' + lang['LAST'] + '" /> ';
break;
}
});
var html = '<div class="control-group ${customClass} {{if hideField}}jsn-hidden-field{{/if}}">' +
'<label class="control-label">${label}{{if required==1||required=="1"}}<span class="required">*</span>{{/if}}{{if instruction}}<i class="icon-question-sign"></i>{{/if}}</label>' +
'<div class="controls">';
$.each(sortableField, function (i, val) {
html += field[val];
});
html += '</div></div>';
return html;
}
};
/**
* Create element for add to design page
* @param type
* @param data
*/
JSNVisualDesign.createElement = function (type, opts, id) {
var control = JSNVisualDesign.controls[type];
if (control) {
var data = (opts === undefined) ? control.defaults : $.extend({}, control.defaults, opts);
var wrapper = JSNVisualDesign.wrapper.clone();
wrapper.data('visualdesign-element-data', {
id: id,
type: type,
options: data
});
if (type == "address") {
if (!data.sortableField) {
data.sortableField = '["vstreetAddress", "vstreetAddress2", "vcity", "vstate", "vcode", "vcountry"]';
}
if (data.sortableField) {
control.tmpl = JSNVisualDesign.getTmplFieldAddress(data);
}
}
if (type == "name") {
if (!data.sortableField) {
data.sortableField = '["vtitle", "vfirst", "vmiddle", "vlast"]';
}
if (data.sortableField) {
control.tmpl = JSNVisualDesign.getTmplFieldName(data);
}
}
wrapper.find('.jsn-element-content').append($.tmpl(control.tmpl, data));
wrapper.find(".element-duplicate").click(function () {
if (!JSNVisualDesign.getField()) {
JSNUniformDialogEdition.createDialogLimitation($("#form-container"), lang["JSN_UNIFORM_YOU_HAVE_REACHED_THE_LIMITATION_OF_10_FIELD_IN_FREE_EDITION"]);
return false;
}
var newOtions = {};
var d = new Date();
var time = d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
var getLabel = opts.label != "" ? opts.label : type + "_" + Math.floor(Math.random() * 999999999) + time;
var label = getLabel.toLowerCase();
while (/[^a-zA-Z0-9_]+/.test(label)) {
label = label.replace(/[^a-zA-Z0-9_]+/, '_');
}
newOtions = opts;
newOtions.identify = label;
var element = JSNVisualDesign.createElement(type, newOtions);
$(wrapper).after(element);
JSNVisualDesign.savePage();
JSNVisualDesign.contentGoogleMaps();
});
wrapper.find('.element-delete').click(function () {
//$("#form-design-header .jsn-iconbar").css("display", "none");
$(".jsn-page-actions").css("display", "none");
var eventClick = this;
if (id) {
$(".jsn-modal-overlay,.jsn-modal-indicator").remove();
$("body").append($("<div/>", {
"class": "jsn-modal-overlay",
"style": "z-index: 1000; display: inline;"
})).append($("<div/>", {
"class": "jsn-modal-indicator",
"style": "display:block"
}));
$.ajax({
type: "POST",
dataType: 'json',
url: "index.php?option=com_uniform&view=form&task=form.getcountfield&tmpl=component&" + token + "=1",
data: {
field_id: id,
form_id: $("#jform_form_id").val()
},
success: function (response) {
$(".jsn-modal-overlay,.jsn-modal-indicator").remove();
if (response > 0) {
$("#confirmRemoveField").remove();
$(eventClick).after(
$("<div/>", {
"id": "confirmRemoveField"
}).append(
$("<div/>", {
"class": "ui-dialog-content-inner jsn-bootstrap"
}).append($("<p/>").append(lang['JSN_UNIFORM_CONFIRM_DELETING_A_FIELD_DES']))
.append(
$("<div/>", {
"class": "form-actions"
}).append(
$("<button/>", {
"class": "btn",
text: lang["JSN_UNIFORM_BTN_BACKUP"]
}).click(function () {
window.open("index.php?option=com_uniform&view=configuration&s=maintenance&g=data#data-back-restore", 'backupdata');
})))));
$("#confirmRemoveField").dialog({
height: 300,
width: 500,
title: lang["JSN_UNIFORM_CONFIRM_DELETING_A_FIELD"],
draggable: false,
resizable: false,
autoOpen: true,
modal: true,
buttons: {
Yes: function () {
wrapper.remove();
JSNVisualDesign.savePage();
$("#confirmRemoveField").dialog('close');
$("#confirmRemoveField").remove();
//$("#form-design-header .jsn-iconbar").css("display", "block");
$(".jsn-page-actions").css("display", "block");
},
No: function () {
$("#confirmRemoveField").dialog('close');
$("#confirmRemoveField").remove();
//$("#form-design-header .jsn-iconbar").css("display", "block");
$(".jsn-page-actions").css("display", "block");
}
}
});
} else {
wrapper.remove();
JSNVisualDesign.savePage('delete');
}
}
});
} else {
wrapper.remove();
JSNVisualDesign.savePage('delete');
}
});
wrapper.find("a.element-edit").click(function (event) {
$("#form-design .ui-state-edit").removeClass("ui-state-edit");
wrapper.addClass("ui-state-edit");
JSNVisualDesign.openOptionsBox(wrapper, type, wrapper.data('visualdesign-element-data').options, $(this));
$('.jsn-master').find('#option-requiredConfirm-checkbox').each(function () {
$(this).parent().css('width', '145px');
})
});
/*wrapper.click(function(event){
JSNVisualDesign.optionsBox.find('form').change();
event.stopPropagation();
event.preventDefault();
})*/
return wrapper;
}
};
/**
* Open toolbox to insert new element
* @param target The target to insert element
*/
JSNVisualDesign.openToolbox = function (sender, target) {
if (!JSNVisualDesign.getField()) {
JSNUniformDialogEdition.createDialogLimitation($("#form-container"), lang["JSN_UNIFORM_YOU_HAVE_REACHED_THE_LIMITATION_OF_10_FIELD_IN_FREE_EDITION"]);
return false;
}
if (JSNVisualDesign.toolbox.find('button.btn').size() == 0) {
var resultsFilter = $("<ul/>", {
"class": "jsn-items-list"
});
var oldIconFilter = "";
var listFilter = $("<select/>", {
"class": "jsn-filter-button input-large"
}).append(
$("<option/>", {
"value": "all",
"text": "" + lang['JSN_UNIFORM_ALL_FIELD'] + ""
})
).append(
$("<option/>", {
"value": "standard",
"text": "" + lang['JSN_UNIFORM_STANDARD_FIELD'] + ""
})
).append($("<option/>", {
"value": "extra",
"text": "" + lang['JSN_UNIFORM_EXTRA_FIELD'] + ""
}));
$(listFilter).on('change', function () {
JSNVisualDesign.toolbox.find("input#jsn-quicksearch-field").val("");
JSNVisualDesign.toolbox.find(".jsn-reset-search").hide();
switch ($(this).val()) {
case 'standard':
$(resultsFilter).empty();
var buttons = JSNVisualDesign.drawToolboxButtons();
$.each(buttons.standard, function (i, val) {
$(resultsFilter).append(val)
})
break;
case 'all':
$(resultsFilter).empty();
var buttons = JSNVisualDesign.drawToolboxButtons();
$.each(buttons.standard, function (i, val) {
$(resultsFilter).append(val)
})
$.each(buttons.extra, function (i, val) {
$(resultsFilter).append(val)
})
break;
case 'extra':
$(resultsFilter).empty();
var buttons = JSNVisualDesign.drawToolboxButtons();
$.each(buttons.extra, function (i, val) {
$(resultsFilter).append(val)
})
break;
}
});
$.fn.delayKeyup = function (callback, ms) {
var timer = 0;
var el = $(this);
$(this).keyup(function () {
clearTimeout(timer);
timer = setTimeout(function () {
callback(el)
}, ms);
});
return $(this);
};
JSNVisualDesign.toolbox.find("form").find(".jsn-elementselector").remove();
JSNVisualDesign.toolbox.find("form").append(
$("<div/>", {
"class": "jsn-elementselector"
}).append(
$("<div/>", {
"class": "jsn-fieldset-filter"
}).append(
$("<fieldset/>").append(
$("<div/>", {
"class": "pull-left"
}).append(listFilter)
).append(
$("<div/>", {
"class": "pull-right"
}).append(
$("<input/>", {
"class": "input search-query",
"type": "text",
"id": "jsn-quicksearch-field",
"placeholder": "" + lang['JSN_UNIFORM_SEARCH_LABEL'] + "..."
}).delayKeyup(function (el) {
if ($(el).val() != oldIconFilter) {
oldIconFilter = $(el).val();
JSNVisualDesign.filterResults($(el).val(), resultsFilter);
}
if ($(el).val() == "") {
JSNVisualDesign.toolbox.find(".jsn-reset-search").hide();
} else {
JSNVisualDesign.toolbox.find(".jsn-reset-search").show();
}
}, 500)
).append(
$("<a/>", {
"href": "javascript:void(0);",
"title": "" + lang['JSN_UNIFORM_BTN_CLEAR'] + "",
"class": "jsn-reset-search"
}).append($("<i/>", {"class": "icon-remove"})).click(function () {
JSNVisualDesign.toolbox.find("#jsn-quicksearch-field").val("");
oldIconFilter = "";
JSNVisualDesign.filterResults("", resultsFilter);
$(this).hide();
})
)
)
)
).append(resultsFilter)
)
JSNVisualDesign.toolbox.find("select.jsn-filter-button").trigger("change");
JSNVisualDesign.toolbox.find("select.jsn-filter-button").select2({
minimumResultsForSearch: 99
})
JSNVisualDesign.toolbox.find("input#jsn-quicksearch-field").attr("placeholder", "" + lang['JSN_UNIFORM_SEARCH_LABEL'] + "...");
$('input, textarea').placeholder();
} else {
JSNVisualDesign.toolbox.find("input#jsn-quicksearch-field").val("");
JSNVisualDesign.toolbox.find("select.jsn-filter-button").trigger("change");
}
JSNVisualDesign.closeOptionsBox();
JSNVisualDesign.toolbox.hide().appendTo($('body')).show();
JSNVisualDesign.position(JSNVisualDesign.toolbox, sender, 'top', {
top: -5
});
JSNVisualDesign.toolboxTarget = target;
if ($(sender).offset().top - $(window).scrollTop() < JSNVisualDesign.toolbox.find(".popover").height() + 30) {
$(window).scrollTop($(sender).offset().top - JSNVisualDesign.toolbox.find(".popover").height() - 60);
}
$('#visualdesign-toolbox button.button-tipsy').tipsy({
gravity: 'n',
fade: true
})
};
JSNVisualDesign.closeToolbox = function () {
JSNVisualDesign.toolbox.hide();
};
JSNVisualDesign.savePage = function (action) {
var container = $("#form-container");
var listOptionPage = [];
var listContainer = [];
var instance = container.data('visualdesign-instance');
var content = "";
var serialize = instance.serialize(true);
if (serialize != "" && serialize != "[]") {
content = $.toJSON(serialize);
}
$(" ul.jsn-page-list li.page-items").each(function () {
listOptionPage.push([$(this).find("input").attr('data-id'), $(this).find("input").attr('value')]);
});
$("#form-container .jsn-row-container").each(function () {
var listColumn = [];
$(this).find(".jsn-column-content").each(function () {
var dataContainer = {};
var columnName = $(this).attr("data-column-name");
var columnClass = $(this).attr("data-column-class");
dataContainer.columnName = columnName;
dataContainer.columnClass = columnClass;
listColumn.push(dataContainer);
});
listContainer.push(listColumn);
});
$.ajax({
type: "POST",
dataType: 'json',
url: "index.php?option=com_uniform&view=form&task=form.savepage&tmpl=component&" + token + "=1",
data: {
form_id: $("#jform_form_id").val(),
form_content: content,
form_page_name: $("#form-design-header").attr('data-value'),
form_list_page: listOptionPage,
form_list_container: $.toJSON(listContainer)
},
success: function () {
$('#jform_form_content').val(content);
JSNVisualDesign.emailNotification();
JSNVisualDesign.getField();
if (action == 'delete') {
$("#form-design-header .jsn-iconbar").css("display", "");
$(".jsn-page-actions").css("display", "");
}
}
});
}
JSNVisualDesign.getField = function () {
if (edition.toLowerCase() == "free") {
var container = $("#form-container");
if ($("#form-container").size()) {
var instance = container.data('visualdesign-instance');
var formContent = instance.serialize(true);
if (formContent.length > 9) {
return false;
} else {
return true;
}
}
} else {
return true;
}
}
JSNVisualDesign.emailNotification = function () {
var container = $("#form-container");
var instance = container.data('visualdesign-instance');
var formContent = instance.serialize(true);
var content = "";
if (formContent != "" && formContent != "[]") {
content = $.toJSON(formContent);
}
var check = 0;
var listOptionPage = [];
$(" ul.jsn-page-list li.page-items").each(function () {
listOptionPage.push([$(this).find("input").attr('data-id'), $(this).find("input").attr('value')]);
});
$.ajax({
type: "POST",
dataType: 'json',
url: "index.php?option=com_uniform&view=form&task=form.loadsessionfield&tmpl=component&" + token + "=1",
data: {
form_id: $("#jform_form_id").val(),
form_page_name: $("#form-design-header").attr('data-value'),
form_content: content,
form_list_page: listOptionPage
},
success: function (response) {
$("#email .email-submitters .jsn-items-list").html("");
if (response) {
$('#responseFieldDesign').val($.toJSON(response));
var replyToSelect = "";
var liFields = "";
var fileAttach = "", fileAttachSubmiter = "";
// var typeClear = ["file-upload"];
var defaultAttach = $("#attach-file ul").attr("data-value");
var defaultAttachSubmiter = $("#attach-file-submiter ul").attr("data-value");
var dataAttach = "", dataAttachSubmiter = "";
if (defaultAttach) {
dataAttach = $.evalJSON(defaultAttach);
}
if(defaultAttachSubmiter)
{
dataAttachSubmiter = $.evalJSON(defaultAttachSubmiter);
}
$.each(response, function (i, item) {
if (item.type == 'email') {
check++;
var checkedEmail = false;
if ($.inArray(item.identify, dataEmailSubmitter) != -1) {
checkedEmail = true;
}
$("#email .email-submitters .jsn-items-list").append(
$("<li/>", {
"class": "jsn-item ui-state-default"
}).append(
$("<label/>", {
"class": "checkbox",
text: item.options.label != '' ? item.options.label : item.identify
}).append(
$("<input/>", {
"type": "checkbox",
"name": "form_submitter[]",
"checked": checkedEmail,
"class": "jsn-check-submitter",
"value": item.identify
})
)
)
)
}
item.options.label = item.options.label != '' ? item.options.label : item.identify;
if (item.type != "google-maps") {
if (item.type == 'email') {
replyToSelect += "<li class=\"jsn-item\" id='" + item.identify + "'>" + item.options.label + "</li>";
}
if (item.type == 'file-upload') {
if ($.inArray(item.identify, dataAttach) >= 0) {
fileAttach += '<li class="jsn-item ui-state-default"><label class="checkbox">' + item.options.label + '<input type="checkbox" checked="checked" name="file_attach[]" value="' + item.identify + '"></label></li>';
} else {
fileAttach += '<li class="jsn-item ui-state-default"><label class="checkbox">' + item.options.label + '<input type="checkbox" name="file_attach[]" value="' + item.identify + '"></label></li>';
}
if ($.inArray(item.identify, dataAttachSubmiter) >= 0) {
fileAttachSubmiter += '<li class="jsn-item ui-state-default"><label class="checkbox">' + item.options.label + '<input type="checkbox" checked="checked" name="file_attach_submiter[]" value="' + item.identify + '"></label></li>';
} else {
fileAttachSubmiter += '<li class="jsn-item ui-state-default"><label class="checkbox">' + item.options.label + '<input type="checkbox" name="file_attach_submiter[]" value="' + item.identify + '"></label></li>';
}
}
if (item.options.showInNotificationEmail != 'No') {
liFields += "<li class=\"jsn-item\" id='" + item.identify + "'>" + item.options.label + "</li>";
}
// wordlist.push(item.options.label);
}
});
if (fileAttach) {
$("#attach-file ul").html(fileAttach);
}
if (fileAttachSubmiter) {
$("#attach-file-submiter ul").html(fileAttachSubmiter);
}
}
else
{
$('#responseFieldDesign').val('');
}
if (check == 0 || !check) {
$("#email .email-submitters .jsn-items-list").append(
$("<div/>", {
"class": "ui-state-default ui-state-disabled",
"text": lang["JSN_UNIFORM_NO_EMAIL"],
"title": lang["JSN_UNIFORM_NO_EMAIL_DES"]
}))
}
$("#email .email-submitters .jsn-items-list").parent().parent().show();
}
});
};
JSNVisualDesign.checklimitFileSize = function () {
if ($("#visualdesign-options #visualdesign-options-general #option-limitFileSize-checkbox").is(':checked')) {
$("#visualdesign-options #visualdesign-options-general #option-maxSize-number").removeAttr("disabled");
$("#visualdesign-options #visualdesign-options-general #option-maxSizeUnit-select").removeAttr("disabled");
$("#visualdesign-options #visualdesign-options-general #limit-size-upload").hide();
} else {
$("#visualdesign-options #visualdesign-options-general #option-maxSize-number").attr("disabled", "disabled");
$("#visualdesign-options #visualdesign-options-general #option-maxSizeUnit-select").attr("disabled", "disabled");
$("#visualdesign-options #visualdesign-options-general #limit-size-upload").show();
}
};
JSNVisualDesign.checklimitFileExtensions = function () {
if ($("#visualdesign-options #visualdesign-options-general #option-limitFileExtensions-checkbox").is(':checked')) {
$("#visualdesign-options #visualdesign-options-general #option-allowedExtensions-text").removeAttr("disabled");
$("#visualdesign-options #visualdesign-options-general #limit-extensions").attr("original-title", lang["JSN_UNIFORM_FOR_SECURITY_REASONS_FOLLOWING_FILE_EXTENSIONS"] + "php, phps, php3, php4, phtml, pl, py, jsp, asp, htm, shtml, sh, cgi, htaccess, exe, dll. ");
} else {
$("#visualdesign-options #visualdesign-options-general #option-allowedExtensions-text").attr("disabled", "disabled");
$("#visualdesign-options #visualdesign-options-general #limit-extensions").attr("original-title", lang["JSN_UNIFORM_FORM_LIMIT_FILE_EXTENSIONS"] + limitEx + ". \n" + lang["JSN_UNIFORM_FOR_SECURITY_REASONS_FOLLOWING_FILE_EXTENSIONS"] + "php, phps, php3, php4, phtml, pl, py, jsp, asp, htm, shtml, sh, cgi, htaccess, exe, dll. ");
}
};
JSNVisualDesign.checkLimitation = function () {
if ($("#visualdesign-options-values #option-limitation-checkbox").is(':checked')) {
$("#visualdesign-options-values #option-limitMin-number").removeAttr("disabled");
$("#visualdesign-options-values #option-limitMax-number").removeAttr("disabled");
$("#visualdesign-options-values #option-limitType-select").removeAttr("disabled");
} else {
$("#visualdesign-options-values #option-limitMin-number").attr("disabled", "disabled");
$("#visualdesign-options-values #option-limitMax-number").attr("disabled", "disabled");
$("#visualdesign-options-values #option-limitType-select").attr("disabled", "disabled");
}
if ($("#visualdesign-options-general #option-limitation-checkbox").is(':checked')) {
$("#visualdesign-options-general #option-limitMax-number").removeAttr("disabled");
}
else {
$("#visualdesign-options-general #option-limitMax-number").attr("disabled", "disabled");
}
};
JSNVisualDesign.eventChangeDate = function () {
var dateFormat = "mm/dd/yy";
var formatDate = "";
if ($("#option-dateOptionFormat-select").val() == "custom") {
formatDate = $("#jsn-custom-date-field").val();
$("#jsn-custom-date-field").on('change', function () {
JSNVisualDesign.eventChangeDate();
});
$("#jsn-custom-date").removeClass("hide");
} else {
formatDate = $("#option-dateOptionFormat-select").val();
$("#jsn-custom-date").addClass("hide");
}
if ($("#option-dateFormat-checkbox").is(':checked')) {
dateFormat = formatDate;
}
var divAppend = $("input.input-date-time").parent();
var dateValue = $("#option-dateValue-text").datetimepicker('getDate');
var dateRageValue = $("#option-dateValueRange-text").datetimepicker('getDate');
$("input.input-date-time").datepicker("destroy");
$(divAppend).attr("class", "input-append jsn-inline");
var timeFormat = $("#option-timeOptionFormat-select").val();
$("#option-timeFormat-checkbox").show();
$("#option-dateFormat-checkbox").show();
$(".jsn-tmp-date").remove();
var yearRangeList = [];
var yearRangeMax = $("#option-yearRangeMax-text").val();
var yearRangeMin = $("#option-yearRangeMin-text").val();
if (yearRangeMin && yearRangeMax) {
yearRangeList.push(yearRangeMin);
yearRangeList.push(yearRangeMax);
} else if (yearRangeMin) {
yearRangeList.push(yearRangeMin);
yearRangeList.push((new Date).getFullYear());
} else if (yearRangeMax) {
yearRangeList.push(yearRangeMax);
yearRangeList.push((new Date).getFullYear());
}
var yearRange = "1930:+0";
if (yearRangeList.length) {
yearRange = yearRangeList.join(":");
}
//remove error mess
$('.valid-range-error').remove();
if ($("#option-timeFormat-checkbox").is(':checked') && $("#option-dateFormat-checkbox").is(':checked')) {
$("input.input-date-time").datetimepicker({
changeMonth: true,
changeYear: true,
showOn: "button",
yearRange: yearRange,
dateFormat: dateFormat,
timeFormat: timeFormat,
hourText: lang['JSN_UNIFORM_DATE_HOUR_TEXT'],
minuteText: lang['JSN_UNIFORM_DATE_MINUTE_TEXT'],
closeText: lang['JSN_UNIFORM_DATE_CLOSE_TEXT'],
prevText: lang['JSN_UNIFORM_DATE_PREV_TEXT'],
nextText: lang['JSN_UNIFORM_DATE_NEXT_TEXT'],
currentText: lang['JSN_UNIFORM_DATE_CURRENT_TEXT'],
monthNames: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY'],
lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY'],
lang['JSN_UNIFORM_DATE_MONTH_MARCH'],
lang['JSN_UNIFORM_DATE_MONTH_APRIL'],
lang['JSN_UNIFORM_DATE_MONTH_MAY'],
lang['JSN_UNIFORM_DATE_MONTH_JUNE'],
lang['JSN_UNIFORM_DATE_MONTH_JULY'],
lang['JSN_UNIFORM_DATE_MONTH_AUGUST'],
lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER'],
lang['JSN_UNIFORM_DATE_MONTH_OCTOBER'],
lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER'],
lang['JSN_UNIFORM_DATE_MONTH_DECEMBER']
],
monthNamesShort: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_MARCH_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_APRIL_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_MAY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_JUNE_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_JULY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_AUGUST_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_OCTOBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_DECEMBER_SHORT']
],
dayNames: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY']
],
dayNamesShort: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY_SHORT']
],
dayNamesMin: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY_MIN']
],
weekHeader: lang['JSN_UNIFORM_DATE_DAY_WEEK_HEADER']
}).removeClass("jsn-input-xxlarge-fluid input-small input-medium").addClass("input-medium");
if (dateValue) {
$("#option-dateValue-text").datetimepicker('setDate', dateValue);
}
if (dateRageValue) {
$("#option-dateValueRange-text").datetimepicker('setDate', dateRageValue);
}
} else if ($("#option-timeFormat-checkbox").is(':checked')) {
$("input.input-date-time").timepicker({
changeMonth: true,
changeYear: true,
showOn: "button",
timeFormat: timeFormat,
hourText: lang['JSN_UNIFORM_DATE_HOUR_TEXT'],
minuteText: lang['JSN_UNIFORM_DATE_MINUTE_TEXT'],
closeText: lang['JSN_UNIFORM_DATE_CLOSE_TEXT'],
prevText: lang['JSN_UNIFORM_DATE_PREV_TEXT'],
nextText: lang['JSN_UNIFORM_DATE_NEXT_TEXT'],
currentText: lang['JSN_UNIFORM_DATE_CURRENT_TEXT'],
monthNames: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY'],
lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY'],
lang['JSN_UNIFORM_DATE_MONTH_MARCH'],
lang['JSN_UNIFORM_DATE_MONTH_APRIL'],
lang['JSN_UNIFORM_DATE_MONTH_MAY'],
lang['JSN_UNIFORM_DATE_MONTH_JUNE'],
lang['JSN_UNIFORM_DATE_MONTH_JULY'],
lang['JSN_UNIFORM_DATE_MONTH_AUGUST'],
lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER'],
lang['JSN_UNIFORM_DATE_MONTH_OCTOBER'],
lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER'],
lang['JSN_UNIFORM_DATE_MONTH_DECEMBER']
],
monthNamesShort: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_MARCH_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_APRIL_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_MAY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_JUNE_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_JULY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_AUGUST_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_OCTOBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_DECEMBER_SHORT']
],
dayNames: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY']
],
dayNamesShort: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY_SHORT']
],
dayNamesMin: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY_MIN']
],
weekHeader: lang['JSN_UNIFORM_DATE_DAY_WEEK_HEADER']
}).removeClass("jsn-input-xxlarge-fluid input-small input-medium").addClass("input-small");
if (dateValue) {
$("#option-dateValue-text").timepicker('setTime', dateValue);
}
if (dateRageValue) {
$("#option-dateValueRange-text").timepicker('setTime', dateRageValue);
}
$("#option-timeFormat-checkbox").before($("<input/>", {
"class": "jsn-tmp-date",
"type": "checkbox",
"disabled": true,
"checked": true
})).hide();
} else {
$("#option-dateFormat-checkbox").prop("checked", true);
$("input.input-date-time").datepicker({
changeMonth: true,
changeYear: true,
showOn: "button",
yearRange: yearRange,
dateFormat: dateFormat,
hourText: lang['JSN_UNIFORM_DATE_HOUR_TEXT'],
minuteText: lang['JSN_UNIFORM_DATE_MINUTE_TEXT'],
closeText: lang['JSN_UNIFORM_DATE_CLOSE_TEXT'],
prevText: lang['JSN_UNIFORM_DATE_PREV_TEXT'],
nextText: lang['JSN_UNIFORM_DATE_NEXT_TEXT'],
currentText: lang['JSN_UNIFORM_DATE_CURRENT_TEXT'],
monthNames: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY'],
lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY'],
lang['JSN_UNIFORM_DATE_MONTH_MARCH'],
lang['JSN_UNIFORM_DATE_MONTH_APRIL'],
lang['JSN_UNIFORM_DATE_MONTH_MAY'],
lang['JSN_UNIFORM_DATE_MONTH_JUNE'],
lang['JSN_UNIFORM_DATE_MONTH_JULY'],
lang['JSN_UNIFORM_DATE_MONTH_AUGUST'],
lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER'],
lang['JSN_UNIFORM_DATE_MONTH_OCTOBER'],
lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER'],
lang['JSN_UNIFORM_DATE_MONTH_DECEMBER']
],
monthNamesShort: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_MARCH_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_APRIL_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_MAY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_JUNE_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_JULY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_AUGUST_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_OCTOBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_DECEMBER_SHORT']
],
dayNames: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY']
],
dayNamesShort: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY_SHORT']
],
dayNamesMin: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY_MIN']
],
weekHeader: lang['JSN_UNIFORM_DATE_DAY_WEEK_HEADER']
}).removeClass("jsn-input-xxlarge-fluid input-small input-medium").addClass("input-small");
if (dateValue) {
$("#option-dateValue-text").datepicker('setDate', dateValue);
}
if (dateRageValue) {
$("#option-dateValueRange-text").datepicker('setDate', dateRageValue);
}
$("#option-dateFormat-checkbox").before($("<input/>", {
"class": "jsn-tmp-date",
"type": "checkbox",
"disabled": true,
"checked": true
})).hide();
}
$("button.ui-datepicker-trigger").addClass("btn btn-icon").html($("<i/>", {
"class": "icon-calendar"
}));
if ($("#option-enableRageSelection-checkbox").is(':checked')) {
$("input#option-dateValueRange-text").parent().show();
} else {
$("input#option-dateValueRange-text").parent().hide();
}
};
JSNVisualDesign.dateTime = function () {
$('input.uniform-date-time').each(function () {
if ($(this).attr("dateFormat") || $(this).attr("timeFormat")) {
$(this).datetimepicker({
changeMonth: true,
changeYear: true,
showOn: "button",
hourText: lang['JSN_UNIFORM_DATE_HOUR_TEXT'],
minuteText: lang['JSN_UNIFORM_DATE_MINUTE_TEXT'],
closeText: lang['JSN_UNIFORM_DATE_CLOSE_TEXT'],
prevText: lang['JSN_UNIFORM_DATE_PREV_TEXT'],
nextText: lang['JSN_UNIFORM_DATE_NEXT_TEXT'],
currentText: lang['JSN_UNIFORM_DATE_CURRENT_TEXT'],
monthNames: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY'],
lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY'],
lang['JSN_UNIFORM_DATE_MONTH_MARCH'],
lang['JSN_UNIFORM_DATE_MONTH_APRIL'],
lang['JSN_UNIFORM_DATE_MONTH_MAY'],
lang['JSN_UNIFORM_DATE_MONTH_JUNE'],
lang['JSN_UNIFORM_DATE_MONTH_JULY'],
lang['JSN_UNIFORM_DATE_MONTH_AUGUST'],
lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER'],
lang['JSN_UNIFORM_DATE_MONTH_OCTOBER'],
lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER'],
lang['JSN_UNIFORM_DATE_MONTH_DECEMBER']
],
monthNamesShort: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_MARCH_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_APRIL_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_MAY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_JUNE_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_JULY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_AUGUST_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_OCTOBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_DECEMBER_SHORT']
],
dayNames: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY']
],
dayNamesShort: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY_SHORT']
],
dayNamesMin: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY_MIN']
],
weekHeader: lang['JSN_UNIFORM_DATE_DAY_WEEK_HEADER']
});
} else {
$(this).datepicker({
changeMonth: true,
changeYear: true,
showOn: "button",
hourText: lang['JSN_UNIFORM_DATE_HOUR_TEXT'],
minuteText: lang['JSN_UNIFORM_DATE_MINUTE_TEXT'],
closeText: lang['JSN_UNIFORM_DATE_CLOSE_TEXT'],
prevText: lang['JSN_UNIFORM_DATE_PREV_TEXT'],
nextText: lang['JSN_UNIFORM_DATE_NEXT_TEXT'],
currentText: lang['JSN_UNIFORM_DATE_CURRENT_TEXT'],
monthNames: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY'],
lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY'],
lang['JSN_UNIFORM_DATE_MONTH_MARCH'],
lang['JSN_UNIFORM_DATE_MONTH_APRIL'],
lang['JSN_UNIFORM_DATE_MONTH_MAY'],
lang['JSN_UNIFORM_DATE_MONTH_JUNE'],
lang['JSN_UNIFORM_DATE_MONTH_JULY'],
lang['JSN_UNIFORM_DATE_MONTH_AUGUST'],
lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER'],
lang['JSN_UNIFORM_DATE_MONTH_OCTOBER'],
lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER'],
lang['JSN_UNIFORM_DATE_MONTH_DECEMBER']
],
monthNamesShort: [lang['JSN_UNIFORM_DATE_MONTH_JANUARY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_FEBRUARY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_MARCH_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_APRIL_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_MAY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_JUNE_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_JULY_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_AUGUST_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_SEPTEMBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_OCTOBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_NOVEMBER_SHORT'],
lang['JSN_UNIFORM_DATE_MONTH_DECEMBER_SHORT']
],
dayNames: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY']
],
dayNamesShort: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY_SHORT'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY_SHORT']
],
dayNamesMin: [lang['JSN_UNIFORM_DATE_DAY_SUNDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_MONDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_TUESDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_WEDNESDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_THURSDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_FRIDAY_MIN'],
lang['JSN_UNIFORM_DATE_DAY_SATURDAY_MIN']
],
weekHeader: lang['JSN_UNIFORM_DATE_DAY_WEEK_HEADER']
});
}
$("button.ui-datepicker-trigger").addClass("btn btn-icon").html($("<i/>", {
"class": "icon-calendar"
}));
});
};
JSNVisualDesign.eventChangePhone = function () {
if ($("#option-format-select").val() == "3-field") {
$("#visualdesign-options-values #option-value-text").parents(".control-group").addClass("hide");
$("#visualdesign-options-values #option-oneField-text").parents(".control-group").removeClass("hide");
} else {
$("#visualdesign-options-values #option-value-text").parents(".control-group").removeClass("hide");
$("#visualdesign-options-values #option-oneField-text").parents(".control-group").addClass("hide");
}
};
JSNVisualDesign.eventChangeCurrency = function () {
if ($("#option-format-select").val() != "" + lang['JSN_UNIFORM_YEN'] + "" && $("#option-format-select").val() != "" + lang['JSN_UNIFORM_RUPEE'] + "") {
$("#visualdesign-options-values .jsn-field-prefix").show();
$("#visualdesign-options-values .jsn-inline #option-cents-text").parent().show();
} else {
$("#visualdesign-options-values .jsn-field-prefix").hide();
$("#visualdesign-options-values .jsn-inline #option-cents-text").parent().hide();
}
};
JSNVisualDesign.eventChangeallowOther = function () {
if ($("#option-allowOther-checkbox").is(':checked')) {
$("#visualdesign-options-values .jsn-allow-other #option-labelOthers-_text").show();
} else {
$("#visualdesign-options-values .jsn-allow-other #option-labelOthers-_text").hide();
}
};
JSNVisualDesign.eventChangeNumber = function () {
if ($("#option-showDecimal-checkbox").is(':checked')) {
$("#visualdesign-options-values .jsn-field-prefix").show();
$("#visualdesign-options-values .jsn-inline #option-decimal-number").parent().show();
} else {
$("#visualdesign-options-values .jsn-field-prefix").hide();
$("#visualdesign-options-values .jsn-inline #option-decimal-number").parent().hide();
}
};
JSNVisualDesign.eventChangeSlider = function(event) {
if (event) {
var step = document.getElementById('option-step-number');
var valueField = document.getElementById('option-value-number');
if (step && valueField) {
step = step.value.indexOf('.') > -1 ? parseFloat(step.value) : parseInt(step.value);
if (!isNaN(step) && step > 0) {
var value = valueField.value.indexOf('.') > -1
? parseFloat(valueField.value)
: parseInt(valueField.value);
var remainder = (function(val, step) {
var valDecCount = (val.toString().split('.')[1] || '').length;
var stepDecCount = (step.toString().split('.')[1] || '').length;
var decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;
var valInt = parseInt(val.toFixed(decCount).replace('.',''));
var stepInt = parseInt(step.toFixed(decCount).replace('.',''));
return (valInt % stepInt) / Math.pow(10, decCount);
})(value, step);
if (remainder != 0) {
alert('' + lang['JSN_UNIFORM_SLIDER_WRONG_DEFAULT_VALUE'] + '');
// Automatically correct the default value.
valueField.value = Math.round((Math.round(value / step) * step) * 100) / 100;
}
}
}
}
};
JSNVisualDesign.eventChangeAddress = function () {
if ($("#option-vcountry-checkbox").is(':checked')) {
$("#visualdesign-options-values #jsn-address-default-country").show();
} else {
$("#visualdesign-options-values #jsn-address-default-country").hide();
}
};
JSNVisualDesign.eventChangeConfirm = function () {
if ($("#option-requiredConfirm-checkbox").is(':checked')) {
$("#visualdesign-options-values #option-valueConfirm-text").show();
} else {
$("#visualdesign-options-values #option-valueConfirm-text").hide();
}
};
JSNVisualDesign.eventChangeName = function () {
if ($("#option-vtitle-checkbox").is(':checked')) {
$("#visualdesign-options-values #jsn-name-default-titles").show();
} else {
$("#visualdesign-options-values #jsn-name-default-titles").hide();
}
};
JSNVisualDesign.eventChangeConfirmPassWord = function () {
if ($("#option-confirmation-checkbox").is(':checked')) {
$("#option-valueConfirmation-text").parents(".control-group").show();
} else {
$("#option-valueConfirmation-text").parents(".control-group").hide();
}
}
/**
* Open options editor for an element
* @param object event
* @return void
*/
JSNVisualDesign.openOptionsBox = function (sender, type, params, action) {
if (JSNVisualDesign.controls[type] === undefined) {
return;
}
JSNVisualDesign.closeToolbox();
JSNVisualDesign.renderOptionsBox(JSNVisualDesign.controls[type].params, params);
JSNVisualDesign.optionsBox.data('visualdesign-active-element', sender);
JSNVisualDesign.optionsBox.appendTo($('body')).show();
JSNVisualDesign.optionsBox.css({"z-index": 2000});
$(".tabs").tabs({
selected: 0
});
$("#visualdesign-options-values #option-limitation-checkbox").on('change', function () {
JSNVisualDesign.checkLimitation();
});
$("#visualdesign-options-general #option-limitation-checkbox").on('change', function () {
JSNVisualDesign.checkLimitation();
});
$("#visualdesign-options #visualdesign-options-general #option-limitFileSize-checkbox").on('change', function () {
JSNVisualDesign.checklimitFileSize();
});
$("#visualdesign-options #visualdesign-options-general #option-limitFileExtensions-checkbox").on('change', function () {
JSNVisualDesign.checklimitFileExtensions();
});
$('#option-identificationCode-text').after('<span style="color:#d3d3d3;line-height: 30px;">' + lang["JSN_UNIFORM_EXAMPLE_CODE"] + ': JSN-SD12FAXxLAJF9</span>');
$("#option-firstItemAsPlaceholder-checkbox").after('<i class="icon-question-sign" original-title="' + lang["JSN_UNIFORM_SET_ITEM_PLACEHOLDER_DES"] + '"></i>')
$("label[for=option-showPriceLabel-radio]").after('<i class="icon-question-sign" original-title="' + lang["JSN_UNIFORM_SET_ITEM_SHOW_PRICE_LABEL"] + '"></i>')
if (type == "date") {
JSNVisualDesign.eventChangeDate();
$("#option-enableRageSelection-checkbox").on('change', function () {
JSNVisualDesign.eventChangeDate();
});
$("#option-dateFormat-checkbox").on('change', function () {
if (!$("#option-timeFormat-checkbox").is(':checked') && !$("#option-dateFormat-checkbox").is(':checked')) {
$(this).prop("checked", true);
} else {
JSNVisualDesign.eventChangeDate();
}
});
$("#option-timeFormat-checkbox").on('change', function () {
if (!$("#option-timeFormat-checkbox").is(':checked') && !$("#option-dateFormat-checkbox").is(':checked')) {
$(this).prop("checked", true);
} else {
JSNVisualDesign.eventChangeDate();
}
});
$("#option-yearRangeMax-text,#option-yearRangeMin-text,#option-timeOptionFormat-select").on('change', function () {
JSNVisualDesign.eventChangeDate();
});
$('#option-yearRangeMax-text,#option-yearRangeMin-text').on('change', function () {
var yearRangeMax = $('#option-yearRangeMax-text').val();
var yearRangeMin = $('#option-yearRangeMin-text').val();
if ((yearRangeMax - yearRangeMin) <= 0) {
$(".jsn-form-bar").last().append('<span class="valid-range-error validation-result label label-important">' + lang["JSN_UNIFROM_YEAR_RANGE_MUST_BE_GREATER_THAN"] + ' ' + yearRangeMin + '</span>');
} else {
$('.valid-range-error').remove();
}
})
var valueDateFormat = $("#option-dateOptionFormat-select").val();
$("#option-dateOptionFormat-select").on('change', function () {
if ($(this).val() != "custom") {
valueDateFormat = $("#option-dateOptionFormat-select").val();
JSNVisualDesign.eventChangeDate();
} else {
$("#jsn-custom-date-field").val(valueDateFormat);
JSNVisualDesign.eventChangeDate();
}
});
$("#option-yearRangeMin-text,#option-yearRangeMax-text").keypress(function (e) {
if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
return false;
}
});
}
JSNVisualDesign.eventChangeConfirm();
$("#option-requiredConfirm-checkbox").on('change', function () {
JSNVisualDesign.eventChangeConfirm();
});
if (type == "phone") {
JSNVisualDesign.eventChangePhone();
$("#option-format-select").on('change', function () {
JSNVisualDesign.eventChangePhone();
});
}
if (type == "password") {
JSNVisualDesign.eventChangeConfirmPassWord();
$("#option-confirmation-checkbox").on('change', function () {
JSNVisualDesign.eventChangeConfirmPassWord();
});
}
if (type == "form-actions") {
var pageItems = $("ul.jsn-page-list li.page-items");
if (pageItems.size() <= 1) {
$("#option-btnNext-text").parents(".control-group").remove();
$("#option-btnNextClass-text").parents(".control-group").remove();
$("#option-btnPrev-text").parents(".control-group").remove();
$("#option-btnPrevClass-text").parents(".control-group").remove();
}
}
if (type == "currency") {
JSNVisualDesign.eventChangeCurrency();
$("#option-format-select").on('change', function () {
JSNVisualDesign.eventChangeCurrency();
});
}
if (type == "number") {
JSNVisualDesign.eventChangeNumber();
$("#option-showDecimal-checkbox").on('change', function () {
JSNVisualDesign.eventChangeNumber();
});
}
if (type == 'slider') {
var stepValue = document.getElementById('option-step-number');
var defaultValue = document.getElementById('option-value-number');
if (stepValue) {
stepValue.onchange = JSNVisualDesign.eventChangeSlider;
}
if (defaultValue) {
defaultValue.onchange = JSNVisualDesign.eventChangeSlider;
}
}
if (type == "address") {
JSNVisualDesign.eventChangeAddress();
$("#option-vcountry-checkbox").on('change', function () {
JSNVisualDesign.eventChangeAddress();
});
$("#visualdesign-options-values #jsn-field-address .jsn-items-list").sortable({
forceHelperSize: true, axis: 'y',
update: function () {
var positionField = [];
$("#visualdesign-options-values #jsn-field-address .jsn-items-list li.jsn-item").each(function () {
positionField.push($(this).find("input[type=checkbox]").attr("name"));
});
$("#visualdesign-options-values #jsn-field-address input#option-sortableField-hidden").val($.toJSON(positionField)).trigger('change');
}
});
var sortableField = $("#visualdesign-options-values #jsn-field-address input#option-sortableField-hidden").val();
if (sortableField) {
sortableField = $.evalJSON(sortableField);
if (sortableField) {
var listFields = $("#visualdesign-options-values #jsn-field-address .jsn-items-list .jsn-item");
listFields.detach();
$.each(sortableField, function (i, val) {
$("#visualdesign-options-values #jsn-field-address .jsn-items-list").append(
$(listFields).find("input[name=" + val + "]").parents(".jsn-item")
)
});
}
}
}
if (type == "name") {
JSNVisualDesign.eventChangeName();
$("#option-vtitle-checkbox").on('change', function () {
JSNVisualDesign.eventChangeName();
});
$("#visualdesign-options-values #jsn-field-name .jsn-items-list").sortable({
forceHelperSize: true, axis: 'y',
update: function () {
var positionField = [];
$("#visualdesign-options-values #jsn-field-name .jsn-items-list li.jsn-item").each(function () {
positionField.push($(this).find("input[type=checkbox]").attr("name"));
});
$("#visualdesign-options-values #jsn-field-name input#option-sortableField-hidden").val($.toJSON(positionField)).trigger('change');
}
});
var sortableField = $("#visualdesign-options-values #jsn-field-name input#option-sortableField-hidden").val();
if (sortableField) {
sortableField = $.evalJSON(sortableField);
if (sortableField) {
var listFields = $("#visualdesign-options-values #jsn-field-name .jsn-items-list .jsn-item");
listFields.detach();
$.each(sortableField, function (i, val) {
$("#visualdesign-options-values #jsn-field-name .jsn-items-list").append(
$(listFields).find("input[name=" + val + "]").parents(".jsn-item")
)
});
}
}
}
JSNVisualDesign.eventChangeallowOther();
$("#option-allowOther-checkbox").on('change', function () {
JSNVisualDesign.eventChangeallowOther();
});
if (type == "file-upload") {
JSNVisualDesign.checklimitFileSize();
JSNVisualDesign.checklimitFileExtensions();
$("#visualdesign-options #visualdesign-options-general #limit-size-upload").attr("original-title", lang["JSN_UNIFORM_FORM_LIMIT_FILE_SIZE"] + limitSize + " MB");
}
$.fn.delayKeyup = function (callback, ms) {
var timer = 0;
var el = $(this);
$(this).keyup(function () {
clearTimeout(timer);
timer = setTimeout(function () {
callback(el)
}, ms);
});
return $(this);
};
$("#option-limitMin-number,#option-limitMax-number,#option-rows-number,#option-maxSize-number,#option-width-number,#option-height-number").delayKeyup(function (e) {
JSNVisualDesign.optionsBoxContent.find('form').trigger("change")
});
$("#option-limitMin-number,#option-limitMax-number,#option-rows-number,#option-maxSize-number,#option-width-number,#option-height-number").keypress(function (e) {
if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
return false;
}
});
if ($("#visualdesign-options-general #option-value-textarea").size()) {
var windowForm = document.forms[0];
var defaultEditor = $(windowForm).find('input#default-editor');
if ($(defaultEditor).attr('data-editor') == 'tinymce') {
var id = $("#visualdesign-options-general .textarea").attr('id');
var new_id = id + '_' + JSNVisualDesign.RandomString();
$('#' + id).attr('data-new-id', new_id);
$('#' + id).attr('id', new_id);
tinymce.init({
selector: '#' + new_id,
// General
directionality: 'ltr',
language: 'en',
mode: "specific_textareas",
autosave_restore_when_empty: false,
skin: "lightgray",
theme: "modern",
schema: "html5",
// Cleanup/Output
inline_styles: true,
gecko_spellcheck: true,
entity_encoding: "raw",
valid_elements: "",
extended_valid_elements: "hr[id|title|alt|class|width|size|noshade]",
force_br_newlines: false, force_p_newlines: true, forced_root_block: 'p',
toolbar_items_size: "small",
invalid_elements: "script,applet,iframe",
// Plugins
plugins: "table link image code hr charmap autolink lists importcss",
// Toolbar
toolbar1: "bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | formatselect | bullist numlist",
toolbar2: "outdent indent | undo redo | link unlink anchor image code | hr table | subscript superscript | charmap",
removed_menuitems: "newdocument",
// URL
relative_urls: false,
remove_script_host: false,
//document_base_url : document_base_url,
// Layout
importcss_append: true,
// Advanced Options
resize: "both",
setup: function (ed) {
ed.on('keyup', function (e) {
JSNVisualDesign.optionsBoxContent.find('form').trigger('change');
});
ed.on('change', function (e) {
JSNVisualDesign.optionsBoxContent.find('form').trigger('change');
});
}
});
}
else if ($(defaultEditor).attr('data-editor') == 'jce') {
var currentElement = $('#option-value-textarea');
try
{
var tmpEd = tinyMCE.EditorManager.get('option-value-textarea');
tinyMCE.EditorManager.remove(tmpEd);
}
catch (err)
{
//console.log(err)
}
try {
WFEditor.init({
editor_selector: 'jsntextarea',
toggle: false,
setup: function (ed) {
ed.onEvent.add(function (ed, l) {
currentElement.html(l.content);
try {
setTimeout(function () {
var content = tinyMCE.activeEditor.getContent();
content = content.replace(/src="images/g, 'src="' + jce_document_base_url + "images");
currentElement.html(content).trigger('change')
}, 100)
}
catch (err) {
console.log(err)
}
});
ed.onExecCommand.add(function (ed, l) {
currentElement.html(l.content);
try {
setTimeout(function () {
var content = tinyMCE.activeEditor.getContent();
content = content.replace(/src="images/g, 'src="' + jce_document_base_url + "images");
currentElement.html(content).trigger('change')
}, 100)
}
catch (err) {
console.log(err)
}
});
ed.onNodeChange.add(function (ed, l) {
currentElement.html(l.content);
try {
setTimeout(function () {
var content = tinyMCE.activeEditor.getContent();
content = content.replace(/src="images/g, 'src="' + jce_document_base_url + "images");
currentElement.html(content).trigger('change')
}, 100)
}
catch (err) {
console.log(err)
}
});
ed.onChange.add(function (ed, l) {
currentElement.html(l.content);
try {
setTimeout(function () {
var content = tinyMCE.activeEditor.getContent();
content = content.replace(/src="images/g, 'src="' + jce_document_base_url + "images");
currentElement.html(content).trigger('change')
}, 100)
}
catch (err) {
console.log(err)
}
});
ed.onInit.add(function (ed) {
$('body').find('.mceListBoxMenu').remove();
$("#param-body_tbl").css("width", "98%");
});
},
skin: jce_toolbar,
base_url: jce_document_base_url,
language: jce_language,
directionality: jce_directionality,
token: token,
etag: jce_etag,
component_id: jce_component_id,
theme: "advanced",
plugins: "autolink,core,code,colorpicker,upload,format,charmap,contextmenu,browser,inlinepopups,media,clipboard,searchreplace,directionality,fullscreen,preview,source,table,textcase,print,style,nonbreaking,visualchars,visualblocks,xhtmlxtras,imgmanager,anchor,link,spellchecker,article,lists,formatselect,styleselect,fontselect,fontsizeselect,fontcolor,importcss,advlist,wordcount",
language_load: false,
theme_advanced_buttons1: "newdocument|,bold,italic,underline,strikethrough,justifyfull,justifycenter,justifyleft,justifyright,|,blockquote,formatselect,styleselect",
theme_advanced_buttons2: "fontselect,fontsizeselect,forecolor,backcolor,|indent,outdent,numlist,bullist,sub,sup,textcase,charmap,hr",
theme_advanced_buttons3: "ltr,rtl,source,|,table_insert,delete_table,|,row_props,cell_props,|,row_before,row_after,delete_row,|,col_before,col_after,delete_col,|,split_cells,merge_cells",
theme_advanced_buttons4: "undo,redo,visualaid,visualchars,visualblocks,nonbreaking,cite,abbr,acronym,del,ins,attribs,anchor,unlink,link,imgmanager,spellchecker",
theme_advanced_resizing: true,
content_css: "/templates/protostar/css/template.css?d9fd6ea4b9c3aab88acbafa5d60f2a6f",
schema: "mixed",
invalid_elements: "iframe,script,style,applet,body,bgsound,base,basefont,frame,frameset,head,html,id,ilayer,layer,link,meta,name,title,xml",
remove_script_host: true,
file_browser_callback: function (name, url, type, win) {
tinyMCE.activeEditor.plugins.browser.browse(name, url, type, win);
},
source_theme: "codemirror",
imgmanager_upload: {"max_size": 1024, "filetypes": ["jpg", "jpeg", "png", "gif"]},
spellchecker_engine: "browser",
formatselect_blockformats: {
"advanced.paragraph": "p",
"advanced.div": "div",
"advanced.div_container": "div_container",
"advanced.address": "address",
"advanced.pre": "pre",
"advanced.h1": "h1",
"advanced.h2": "h2",
"advanced.h3": "h3",
"advanced.h4": "h4",
"advanced.h5": "h5",
"advanced.h6": "h6",
"advanced.code": "code",
"advanced.samp": "samp",
"advanced.span": "span",
"advanced.section": "section",
"advanced.article": "article",
"advanced.aside": "aside",
"advanced.figure": "figure",
"advanced.dt": "dt",
"advanced.dd": "dd"
},
fontselect_fonts: "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",
compress: {"javascript": 1, "css": 1}
});
} catch (e) {
console.debug(e);
}
}
else {
$("#visualdesign-options-general #option-value-textarea").wysiwyg({
controls: {
bold: {visible: true},
italic: {visible: true},
underline: {visible: true},
strikeThrough: {visible: true},
justifyLeft: {visible: true},
justifyCenter: {visible: true},
justifyRight: {visible: true},
justifyFull: {visible: true},
indent: {visible: true},
outdent: {visible: true},
subscript: {visible: true},
superscript: {visible: true},
undo: {visible: true},
redo: {visible: true},
insertOrderedList: {visible: true},
insertUnorderedList: {visible: true},
insertHorizontalRule: {visible: true},
h4: {
visible: true,
className: 'h4',
command: ($.browser.msie || $.browser.safari) ? 'formatBlock' : 'heading',
arguments: ($.browser.msie || $.browser.safari) ? '<h4>' : 'h4',
tags: ['h4'],
tooltip: 'Header 4'
},
h5: {
visible: true,
className: 'h5',
command: ($.browser.msie || $.browser.safari) ? 'formatBlock' : 'heading',
arguments: ($.browser.msie || $.browser.safari) ? '<h5>' : 'h5',
tags: ['h5'],
tooltip: 'Header 5'
},
h6: {
visible: true,
className: 'h6',
command: ($.browser.msie || $.browser.safari) ? 'formatBlock' : 'heading',
arguments: ($.browser.msie || $.browser.safari) ? '<h6>' : 'h6',
tags: ['h6'],
tooltip: 'Header 6'
},
html: {visible: true},
increaseFontSize: {visible: true},
decreaseFontSize: {visible: true}
}
});
}
}
JSNVisualDesign.checkLimitation();
JSNVisualDesign.position(JSNVisualDesign.optionsBox, sender, 'bottom', {
bottom: -5
}, action);
if ($(sender).offset().top - $(window).scrollTop() > JSNVisualDesign.optionsBox.find(".popover").height()) {
$(window).scrollTop($(sender).offset().top - JSNVisualDesign.optionsBox.find(".popover").height());
}
$('#visualdesign-options .icon-question-sign').tipsy({
gravity: 'se',
fade: true
});
if (JSNVisualDesign.controls[type].params.values) {
if (JSNVisualDesign.controls[type].params.values.itemAction) {
var itemAction = $("#visualdesign-options-values #option-itemAction-hidden").val();
if (itemAction) {
itemAction = $.evalJSON(itemAction);
}
if (itemAction) {
$("#visualdesign-options-values .jsn-items-list .jsn-item input[name=item-list]").each(function () {
var inputItem = $(this);
$.each(itemAction, function (i, item) {
if (i == $(inputItem).val()) {
$(inputItem).attr("action-show-field", $.toJSON(item.showField));
$(inputItem).attr("action-hide-field", $.toJSON(item.hideField));
if ($(item.showField).length > 0 || $(item.hideField).length > 0) {
var jsnItem = $(inputItem).parents(".jsn-item");
$(jsnItem).addClass("jsn-highlight");
} else {
var jsnItem = $(inputItem).parents(".jsn-item");
$(jsnItem).removeClass("jsn-highlight");
}
}
})
});
}
}
}
if (type == "google-maps") {
$(".tabs").tabs({
show: function (event, ui) {
if ($(ui.tab).attr("href") == "#visualdesign-options-values") {
$("#google-maps-search #places-search").bind('keypress', function (e) {
if (e.keyCode == 13) {
return false;
}
});
$(".jsn-search-google-maps .jsn-reset-search").click(function () {
$(".jsn-search-google-maps #places-search").val("");
$(this).hide();
});
$(".jsn-search-google-maps #places-search").on('change', function () {
if ($(this).val() != "") {
$(".jsn-search-google-maps .jsn-reset-search").show();
} else {
$(".jsn-search-google-maps .jsn-reset-search").hide();
}
});
$('#visualdesign-options-values .google_maps').gmap({
'zoom': 15, 'disableDefaultUI': false, 'callback': function (map) {
var self = this;
var checkOpenInfo = false;
var control = self.get('control', function () {
self.autocomplete($('#places-search')[0], function (ui) {
self.get('map').setCenter(self._latLng(ui.item.position));
self.get('map').setZoom(15);
if (self.get('iw')) {
self.get('iw').close();
$("#marker-google-maps").find("[name$='open']").val('');
JSNVisualDesign.markerGoogleMaps();
}
if ($(".jsn-search-google-maps #places-search").val() != "") {
$(".jsn-search-google-maps .jsn-reset-search").show();
} else {
$(".jsn-search-google-maps .jsn-reset-search").hide();
}
});
return $('#google-maps-search')[0];
});
new control();
self.set('openDialog', function (marker) {
var button = '<div class="google-toolbar" ><a href="javascript:void(0);" title="Remove Marker" class="google-remove-marker"><i class="icon-trash"></i></a></div>';
var content = '<div class="mk-form-' + marker.__gm_id + ' google-maps-info">' + $("#mk-" + marker.__gm_id).html() + '</div>' + button;
self.openInfoWindow({'content': content}, marker, function () {
setTimeout(function () {
$(".mk-form-" + marker.__gm_id).find('input[type="text"], textarea').each(function () {
$(this).val($("#mk-" + marker.__gm_id).find("[name$='" + $(this).attr("name") + "']").val());
}).bind('change', function () {
$("#mk-" + marker.__gm_id).find("[name$='" + $(this).attr("name") + "']").val($(this).val());
JSNVisualDesign.markerGoogleMaps();
});
$(".google-remove-marker").click(function () {
marker.setMap(null);
$("#mk-" + marker.__gm_id).remove();
JSNVisualDesign.markerGoogleMaps();
});
$("#visualdesign-options-values #list-images").click(function () {
var selfSelect = this;
var buttons = {};
buttons["Close"] = $.proxy(function () {
this.modalSelectImage.close();
}, this);
this.modalSelectImage = new JSNModal({
url: pathRoot + "plugins/system/jsnframework/libraries/joomlashine/choosers/media/index.php?component=com_uniform&root=images&element=jform_item_images&handler=setSelectImage",
title: "Select Image",
buttons: buttons,
width: $(window.parent).width() * 0.9,
height: $(window.parent).height() * 0.75,
zIndex: 3000,
loaded: function (modalSelectImage) {
modalSelectImage.options.loaded = null;
modalSelectImage.iframe[0].contentWindow.location.reload();
}
});
this.modalSelectImage.show();
window.setSelectImage = function (value, id) {
if (value) {
value = pathRoot + value;
} else {
value = "";
}
$("#mk-" + marker.__gm_id).find("[name$='images']").val(value);
$(".mk-form-" + marker.__gm_id).find("[name$='images']").val(value);
JSNVisualDesign.markerGoogleMaps();
selfSelect.modalSelectImage.close();
}
});
$(".gm-style-iw").next().find("img").attr("title", "" + lang['JSN_UNIFORM_CLOSE'] + "");
}, 500);
});
$(self.get('iw')).addEventListener('closeclick', function (event) {
$("#marker-google-maps").find("[name$='open']").val('');
JSNVisualDesign.markerGoogleMaps();
});
JSNVisualDesign.markerGoogleMaps();
});
self.get('map').setOptions({streetViewControl: false});
$(map).addEventListener('idle', function (event) {
var position = {}, check = 0;
position.center = self.get('map').getCenter();
position.zoom = self.get('map').getZoom();
position.mapTypeId = self.get('map').getMapTypeId();
$.each(self.get('map').getCenter(), function () {
if (check == 0) {
position.center.nb = self.get('map').getCenter().lat();
} else if (check == 1) {
position.center.ob = self.get('map').getCenter().lng();
}
check++;
});
JSNVisualDesign.positionGoogleMaps($.toJSON(position));
});
$(map).addEventListener('maptypeid_changed', function (event) {
var position = {}, check = 0;
position.center = self.get('map').getCenter();
position.zoom = self.get('map').getZoom();
position.mapTypeId = self.get('map').getMapTypeId();
$.each(self.get('map').getCenter(), function (i, val) {
if (check == 0) {
position.center.nb = self.get('map').getCenter().lat();
} else if (check == 1) {
position.center.ob = self.get('map').getCenter().lng();
}
check++;
});
JSNVisualDesign.positionGoogleMaps($.toJSON(position));
});
$("#visualdesign-options-values .btn-google-location").click(function () {
if ($(this).hasClass("active")) {
$(this).removeClass("active");
self.get('map').setOptions({draggableCursor: ''});
$("#visualdesign-options-values .google_maps").parent().removeClass("jsn-google-active");
} else {
$(this).addClass("active");
if (self.get('iw')) {
self.get('iw').close();
$("#marker-google-maps").find("[name$='open']").val('');
JSNVisualDesign.markerGoogleMaps();
}
self.get('map').setOptions({draggableCursor: 'crosshair'});
$("#visualdesign-options-values .google_maps").parent().addClass("jsn-google-active");
}
});
self.set('findLocation', function (location, marker, getdata) {
self.search({'location': location}, function (results, status) {
if (status === 'OK' && getdata == true) {
marker.setTitle(results[0].formatted_address);
$('#mk-' + marker.__gm_id + ' textarea[name=descriptions]').val(results[0].formatted_address);
self.get('openDialog')(marker);
} else {
self.get('openDialog')(marker);
}
});
});
$(map).xclick(function (event) {
if ($("#visualdesign-options-values .btn-google-location").hasClass("active")) {
var position = {}, check = 0;
$.each(event.latLng, function () {
if (check == 0) {
position.nb = event.latLng.lat();
} else if (check == 1) {
position.ob = event.latLng.lng();
}
check++;
});
JSNVisualDesign.addMarker(self, map, position, '', '', '', '', true, true);
JSNVisualDesign.markerGoogleMaps();
$(".btn-google-location").trigger("click");
}
});
var googleMarker = $("#option-googleMapsMarKer-hidden").val();
if (googleMarker) {
var markerList = $.evalJSON(googleMarker);
$.each(markerList, function (i, val) {
var position = $.evalJSON(val.position);
//if (!position.nb && position.lb) {
// position.nb = position.lb;
//}
//if (!position.ob && position.mb) {
// position.ob = position.mb;
//}
if (val.open == "true") {
checkOpenInfo = true;
JSNVisualDesign.addMarker(self, map, position, val.title, val.descriptions, val.images, val.link, true);
} else {
JSNVisualDesign.addMarker(self, map, position, val.title, val.descriptions, val.images, val.link, false);
}
});
}
var googleMaps = $("#option-googleMaps-hidden").val();
if (googleMaps) {
var gmaps = $.evalJSON(googleMaps);
if (!gmaps.center.nb && gmaps.center.lat) {
gmaps.center.nb = gmaps.center.lat;
}
if (!gmaps.center.ob && gmaps.center.lng) {
gmaps.center.ob = gmaps.center.lng;
}
if (gmaps.center.nb && gmaps.center.ob) {
if (checkOpenInfo == false) {
self.get('map').setCenter(self._latLng(gmaps.center.nb + "," + gmaps.center.ob));
} else {
setTimeout(function () {
self.get('map').setCenter(self._latLng(gmaps.center.nb + "," + gmaps.center.ob));
}, 1000);
}
}
if (gmaps.zoom) {
self.get('map').setZoom(gmaps.zoom);
}
if (gmaps.mapTypeId) {
self.get('map').setMapTypeId(gmaps.mapTypeId);
}
}
}
});
}
}
});
}
};
JSNVisualDesign.RandomString = function () {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < 5; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
};
JSNVisualDesign.addMarker = function (self, map, position, title, descriptions, images, link, open, getdata) {
var mkid = JSNVisualDesign.RandomString();
self.addMarker({
'position': position.nb + "," + position.ob,
'draggable': true,
'bounds': false,
'__gm_id': mkid
}, function (map, marker) {
var vtitle = '', vdescriptions = '', vimages = '', vlink = '';
if (title) {
vtitle = title;
}
if (images) {
vimages = images;
}
if (link) {
vlink = link;
}
if (descriptions) {
vdescriptions = descriptions;
}
$("#marker-google-maps").append(
$("<div/>", {"id": "mk-" + marker.__gm_id, "class": "mk-items"}).append(
'<div class="control-group"><label for="Country" class="control-label">' + lang["JSN_UNIFORM_TITLE"] + '</label><div class="controls"><input type="text" class="jsn-input-large-fluid" name="title" value="' + vtitle + '"></div></div>' +
'<div class="control-group"><label for="Comment" class="control-label">' + lang["JSN_UNIFORM_GOOGLE_MAP_DESCRIPTION"] + '</label><div class="controls"><textarea class="jsn-input-large-fluid google-descriptions" name="descriptions" cols="40" rows="2">' + vdescriptions + '</textarea></div></div>' +
'<div class="control-group"><label for="Country" class="control-label">' + lang["JSN_UNIFORM_IMAGES"] + '</label><' +
'div class="controls"><div class=" input-append"><input type="text" class="text jsn-input-large-fluid" name="images" value="' + vimages + '"><button onclick="return false;" id="list-images" class="btn">...</button></div></div></div>' +
'<div class="control-group"><label for="Country" class="control-label">' + lang["JSN_UNIFORM_LINK"] + '</label><div class="controls"><input type="text" class="jsn-input-large-fluid" name="link" value="' + vlink + '"></div></div>' +
'<input type="hidden" name="position" value=\'' + $.toJSON(position) + '\' />' +
'<input type="hidden" name="open" value=\'' + open + '\' />'
)
);
if (open == true) {
self.get('findLocation')(marker.getPosition(), marker, getdata);
}
}).xdragend(function (event) {
var position = {}, check = 0;
$.each(event.latLng, function (i, val) {
if (check == 0) {
position.nb = val;
} else if (check == 1) {
position.ob = val;
}
check++;
});
$("#mk-" + this.__gm_id).find("[name$='position']").val($.toJSON(position));
JSNVisualDesign.markerGoogleMaps();
}).xclick(function () {
$("#marker-google-maps").find("[name$='open']").val('');
$("#mk-" + this.__gm_id).find("[name$='open']").val('true');
self.get('openDialog')(this);
});
};
JSNVisualDesign.positionGoogleMaps = function (position) {
$("#option-googleMaps-hidden").val(position).trigger('change');
};
JSNVisualDesign.markerGoogleMaps = function () {
var marker = [];
$("#marker-google-maps .mk-items").each(function () {
var mkItems = {};
mkItems.title = $(this).find("input[name=title]").val();
mkItems.descriptions = $(this).find("textarea[name=descriptions]").val();
mkItems.images = $(this).find("input[name=images]").val();
mkItems.link = $(this).find("input[name=link]").val();
mkItems.position = $(this).find("input[name=position]").val();
mkItems.open = $(this).find("input[name=open]").val();
marker.push(mkItems);
});
$("#option-googleMapsMarKer-hidden").val($.toJSON(marker)).trigger('change');
};
JSNVisualDesign.contentGoogleMaps = function (edit) {
if (!$("#form-container").width()) {
return;
}
if (edit) {
$(".ui-state-edit .content-google-maps").each(function () {
$(this).find('.google_maps').width($(this).attr("data-width"));
$(this).find('.google_maps').height($(this).attr("data-height"));
var dataValue = $(this).attr("data-value");
var dataMarker = $(this).attr("data-marker");
if (dataValue) {
var gmapOptions = $.evalJSON(dataValue);
if (dataMarker) {
var gmapMarker = $.evalJSON(dataMarker);
}
if (!gmapOptions.center.nb && gmapOptions.center.lat) {
gmapOptions.center.nb = gmapOptions.center.lat;
}
if (!gmapOptions.center.ob && gmapOptions.center.lng) {
gmapOptions.center.ob = gmapOptions.center.lng;
}
$(this).find('.google_maps').gmap({
'zoom': gmapOptions.zoom,
'mapTypeId': gmapOptions.mapTypeId,
'center': gmapOptions.center.nb + ',' + gmapOptions.center.ob,
'streetViewControl': false,
'overviewMapControl': true,
'rotateControl': true,
'zoomControl': true,
'mapTypeControl': true,
'scaleControl': true,
'callback': function (map) {
var self = this;
var checkOpenInfo = false;
self.set('inforWindow', function (marker, val) {
var descriptions = val.descriptions;
var content = '<div class="thumbnail">';
if (val.images) {
content += '<img src="' + val.images + '">';
}
content += '<div class="caption">';
if (val.title) {
content += '<h4>' + val.title + '</h4>';
}
if (descriptions) {
content += '<p>' + descriptions.replace(new RegExp('\n', 'g'), "<br/>") + '</p>';
}
if (val.link) {
content += '<p><a target="_blank" href="' + val.link + '">' + lang["JSN_UNIFORM_MORE_INFO"] + '</a></p>';
}
content += '</div></div>';
self.openInfoWindow({'content': content}, marker);
});
if (gmapMarker) {
$.each(gmapMarker, function (i, val) {
var position = $.evalJSON(val.position);
if (!position.nb && position.lb) {
position.nb = position.lb;
}
if (!position.ob && position.mb) {
position.ob = position.mb;
}
self.addMarker({
'position': position.nb + "," + position.ob,
'draggable': false,
'bounds': false
}, function (map, marker) {
if (val.open == "true") {
checkOpenInfo = true;
self.get('inforWindow')(marker, val);
}
})
});
if (checkOpenInfo == true) {
setTimeout(function () {
self.get('map').setCenter(self._latLng(gmapOptions.center.nb + ',' + gmapOptions.center.ob));
self.get('map').setZoom(gmapOptions.zoom);
self.get('map').setMapTypeId(gmapOptions.mapTypeId);
}, 500);
}
}
}
});
}
});
} else {
$(".content-google-maps").each(function () {
$(this).find('.google_maps').width($(this).attr("data-width"));
$(this).find('.google_maps').height($(this).attr("data-height"));
var dataValue = $(this).attr("data-value");
var dataMarker = $(this).attr("data-marker");
if (dataValue) {
var gmapOptions = $.evalJSON(dataValue);
if (dataMarker) {
var gmapMarker = $.evalJSON(dataMarker);
}
if (!gmapOptions.center.nb && gmapOptions.center.lat) {
gmapOptions.center.nb = gmapOptions.center.lat;
}
if (!gmapOptions.center.ob && gmapOptions.center.lng) {
gmapOptions.center.ob = gmapOptions.center.lng;
}
$(this).find('.google_maps').gmap({
'zoom': gmapOptions.zoom,
'mapTypeId': gmapOptions.mapTypeId,
'center': gmapOptions.center.nb + ',' + gmapOptions.center.ob,
'streetViewControl': false,
'overviewMapControl': true,
'rotateControl': true,
'zoomControl': true,
'mapTypeControl': true,
'scaleControl': true,
'callback': function (map) {
var self = this;
var checkOpenInfo = false;
self.set('inforWindow', function (marker, val) {
var descriptions = val.descriptions;
var content = '<div class="thumbnail">';
if (val.images) {
content += '<img src="' + val.images + '">';
}
content += '<div class="caption">';
if (val.title) {
content += '<h4>' + val.title + '</h4>';
}
if (descriptions) {
content += '<p>' + descriptions.replace(new RegExp('\n', 'g'), "<br/>") + '</p>';
}
if (val.link) {
content += '<p><a target="_blank" href="' + val.link + '">' + lang["JSN_UNIFORM_MORE_INFO"] + '</a></p>';
}
content += '</div></div>';
self.openInfoWindow({'content': content}, marker);
});
if (gmapMarker) {
$.each(gmapMarker, function (i, val) {
var position = $.evalJSON(val.position);
//if (!position.nb) {
// position.nb = position.nb;
//}
//if (!position.ob) {
// position.ob = position.ob;
//}
self.addMarker({
'position': position.nb + "," + position.ob,
'draggable': false,
'bounds': false
}, function (map, marker) {
if (val.open == "true") {
checkOpenInfo = true;
self.get('inforWindow')(marker, val);
}
})
});
if (checkOpenInfo == true) {
setTimeout(function () {
self.get('map').setCenter(self._latLng(gmapOptions.center.nb + ',' + gmapOptions.center.ob));
self.get('map').setZoom(gmapOptions.zoom);
self.get('map').setMapTypeId(gmapOptions.mapTypeId);
}, 500);
}
}
}
});
}
});
}
};
/**
* Close options editor
* @param object event
* @return void
*/
JSNVisualDesign.closeOptionsBox = function () {
if (checkChangeEmail) {
JSNVisualDesign.savePage();
}
checkChangeEmail = false;
JSNVisualDesign.optionsBox.hide();
};
/**
* Render UI for options box
* @param data
*/
JSNVisualDesign.renderOptionsBox = function (options, data) {
if (options.general === undefined) {
JSNVisualDesign.optionsBoxContent.find('a[href^="#visualdesign-options-general"]').parent().hide();
} else {
JSNVisualDesign.optionsBoxContent.find('a[href^="#visualdesign-options-general"]').parent().show();
}
if (options.values === undefined) {
JSNVisualDesign.optionsBoxContent.find('a[href^="#visualdesign-options-values"]').parent().hide();
} else {
JSNVisualDesign.optionsBoxContent.find('a[href^="#visualdesign-options-values"]').parent().show();
}
JSNVisualDesign.optionsBoxContent.find('div[id^="visualdesign-options-"]').removeClass('active').empty();
JSNVisualDesign.optionsBoxContent.find('div#visualdesign-options-general').addClass('active');
JSNVisualDesign.optionsBoxContent.find('a[href^="#visualdesign-options-"]').parent().removeClass('active');
JSNVisualDesign.optionsBoxContent.find('a[href^="#visualdesign-options-general"]').parent().addClass('active');
$.map(options, function (params, tabName) {
var tabPane = JSNVisualDesign.optionsBoxContent.find('#visualdesign-options-' + tabName);
$.map(params, function (elementOptions, name) {
// Render for group option
if (elementOptions.type == 'group') {
var group = null;
group = $('<div/>').append($(elementOptions.decorator));
group.addClass('group ' + name);
$.map(elementOptions.elements, function (itemOptions, itemName) {
itemOptions.name = itemName;
group.find(itemName.toLowerCase()).replaceWith(JSNVisualDesign.createControl(itemOptions, data[itemName], data.identify));
});
tabPane.append(group);
return false;
}
if (elementOptions.type == 'horizontal') {
var group = null;
group = $('<div/>', {
"class": "control-group"
}).append($("<label/>", {
"class": "control-label"
}).append(elementOptions.title)).append($("<div/>", {
"class": "controls"
}).append($(elementOptions.decorator)));
$.map(elementOptions.elements, function (itemOptions, itemName) {
itemOptions.name = itemName;
group.find(itemName.toLowerCase()).replaceWith(JSNVisualDesign.createControl(itemOptions, data[itemName], data.identify));
});
tabPane.append(group);
return false;
}
elementOptions.name = name;
if (elementOptions.name == 'group') {
var groupControl = $('<div/>', {
'class': 'controls'
});
$.each(elementOptions, function (index, value) {
if (index != "name") {
value.name = index;
value.classLabel = false;
groupControl.append(JSNVisualDesign.createControl(value, data[index], data.identify));
}
});
tabPane.append($('<div/>', {
'class': 'control-group visualdesign-options-group'
}).append(groupControl));
} else {
tabPane.append(JSNVisualDesign.createControl(elementOptions, data[name], data.identify))
}
JSNVisualDesign.optionsBoxContent.find('a[href^="#visualdesign-options-' + tabName + '"]').parent().show();
});
});
JSNVisualDesign.optionsBoxContent.find('input[type="text"], textarea')
.bind('keyup', function () {
$(this).closest('form').trigger('change');
});
};
/**
* Create form control to use in editor panel
* @param type
* @param name
* @param data
* @return
*/
JSNVisualDesign.createControl = function (options, value, identify) {
var templates = {
'hidden': '<input type="hidden" {{if options.editionLimited}}disabled{{/if}} value="${value}" name="${options.name}" id="${id}" />',
'text': '<div class="controls {{if options.append}}input-append{{/if}}"><input {{if options.editionLimited}}disabled{{/if}} type="text" value="${value}" name="${options.name}" id="${id}" class="text jsn-input-xxlarge-fluid" /> {{if options.append}}<button type="button" class="btn btn-icon" {{if options.append.onClick}}onclick="${options.append.onClick}"{{/if}}>${options.append.text}</button>{{/if}}</div>',
'_text': '<input {{if options.editionLimited}}disabled{{/if}} type="text" value="${value}" name="${options.name}" id="${id}" class="text jsn-input-xxlarge-fluid" />',
//'number': '<div class="controls"><input {{if options.editionLimited}}disabled{{/if}} type="number" value="${value}" name="${options.name}" id="${id}" class="number input-mini" {{if options.step}}step="${options.step}"{{/if}} /></div>',
'number': '<div class="controls"><input {{if options.editionLimited}}disabled{{/if}} type="number" value="${value}" name="${options.name}" id="${id}" class="number input-mini" /></div>',
'select': '<div class="controls"><select {{if options.editionLimited}}disabled{{/if}} name="${options.name}" id="${id}" class="select">{{each(i, val) options.options}}<option value="${i}" {{if val==value || (typeof(i) == "string" && i==value)}}selected{{/if}}>${val}</option>{{/each}}</select></div>',
'checkbox': '<input {{if options.editionLimited}}disabled{{/if}} type="checkbox" value="1" name="${options.name}" id="${id}" {{if value==1 || value == "1"}}checked{{/if}} />',
'checkboxes': '<div class="controls">{{each(i, val) options.options}}<label for="${id}-${i}" class="{{if options.class == ""}}checkbox{{else}}${options.class}{{/if}}"><input {{if options.editionLimited}}disabled{{/if}} type="checkbox" name="${options.name}[]" value="${val}" id="${id}-${i}" {{if value.indexOf(val)!=-1}}checked{{/if}} />${val}</label>{{/each}}</div>',
'radio': '<div class="controls">{{each(i, val) options.options}}<label for="${id}-${i}" class="{{if options.class == ""}}radio{{else}}${options.class}{{/if}}"><input {{if options.editionLimited}}disabled{{/if}} type="radio" name="${options.name}" value="${i}" id="${id}-${i}" {{if value==val}}checked{{/if}} />${val}</label>{{/each}}</div>',
'textarea': '<div class="controls"><textarea {{if options.editionLimited}}disabled{{/if}} name="${options.name}" id="${id}" rows="3" class="jsntextarea textarea jsn-input-xxlarge-fluid">${value}</textarea></div>'
};
var elementId = 'option-' + options.name + '-' + options.type;
var control = null;
var element = $('<div/>');
var setAttributes = function (element, attrs) {
var elm = $(element),
field = elm.is(':input') ? elm : elm.find(':input');
field.attr(attrs);
};
if (templates[options.type] !== undefined) {
control = $.tmpl(templates[options.type], {
options: options,
value: value,
id: elementId
});
if ($.isPlainObject(options.attrs))
setAttributes(control, options.attrs);
} else if (options.type == 'itemlist') {
control = $.itemList($.extend({}, {
listItems: value,
id: elementId,
identify: identify,
language: lang,
token: token
}, options));
} else
return;
if (options.label !== undefined && options.classLabel == undefined) {
element.append($("<div/>", {
"class": "control-group"
}).append($('<label/>', {
'for': elementId,
text: options.label,
'class': 'control-label',
title: lang[options.title]
})));
} else if (!options.classLabel && options.group != "horizontal") {
element.append($("<div/>", {
"class": "control-group "
}).append($('<label/>', {
'for': elementId,
text: options.label,
title: lang[options.title]
})));
}
if (options.editionLimited) {
element.find('label').append(' <span class="label label-important label-pro">PRO</span>');
}
if (options.type == 'checkbox') {
if (options.field == "address" || options.field == "name") {
element.find('label').append(control).addClass('checkbox').removeClass("control-label");
var contentLabel = element.find('label').remove();
// element.find(".control-group").attr("class", "jsn-item ui-state-default").append(contentLabel);
element.append($("<li/>", {
"class": "jsn-item ui-state-default"
}).append(contentLabel));
element.find(".control-group").remove();
} else if (options.field == "allowOther") {
element.find('label').append(control).addClass('checkbox').removeClass("control-label");
var contentLabel = element.find('label').remove();
element.find(".control-group").parent().append(contentLabel);
element.find(".control-group").remove();
} else {
element.find('label').append(control).addClass('checkbox').removeClass("control-label");
var contentLabel = element.find('label').remove();
element.find(".control-group").append($("<div/>", {
"class": "controls"
}).append(contentLabel));
}
} else {
if (options.type == "itemlist") {
element.find(".control-group").append(control).addClass("jsn-items-list-container");
} else if (options.group == "horizontal") {
if (options.field && (options.field == "horizontal" || options.field == "currency" || options.field == "input-inline")) {
$(control).attr("class", "jsn-inline");
element.append(control);
} else if (options.field && (options.field == "horizontal" || options.field == "number")) {
$(control).attr("class", "jsn-inline");
element.append(control);
} else {
$(control).attr("class", "input-append jsn-inline");
element.append(control);
}
} else if (options.field == "allowOther") {
element.append(control);
element.find(".control-group").remove();
} else {
element.find(".control-group").append(control);
}
}
return element.children();
};
/**
* Set position for element that following position of parent element
* @param element
* @param parent
*/
JSNVisualDesign.position = function (e, p, pos, extra, action) {
var position = {},
elm = $(e);
if (action) {
var parent = $(action);
} else {
var parent = $(p);
}
//JSNVisualDesign.equalsHeight(elm.find('.tab-pane'));
var elmStyle = JSNVisualDesign.getBoxStyle(elm),
parentStyle = JSNVisualDesign.getBoxStyle(parent),
elmStyleParet = JSNVisualDesign.getBoxStyle($(e).find(".popover"));
var modalWindow = JSNVisualDesign.getBoxStyle($("#form-design"));
if (pos === undefined) {
pos = 'center';
}
if (pos == "top" && parentStyle.offset.top < elmStyleParet.outerHeight) {
pos = "bottom";
}
switch (pos) {
case 'left':
position.left = parentStyle.offset.left + (parentStyle.outerWidth - elmStyleParet.outerWidth) / 2;
position.top = parentStyle.offset.top;
elm.find(".popover").removeClass("top").removeClass("bottom");
break;
case 'center':
position.left = parentStyle.offset.left + (parentStyle.outerWidth - elmStyleParet.outerWidth) / 2;
position.top = parentStyle.offset.top + parentStyle.outerHeight;
elm.find(".popover").removeClass("top").addClass("bottom");
break;
case 'top':
position.left = parentStyle.offset.left + (parentStyle.outerWidth - elmStyleParet.outerWidth) / 2;
position.top = parentStyle.offset.top - elmStyleParet.outerHeight;
elm.find(".popover").removeClass("bottom").addClass("top");
break;
case 'bottom':
position.left = parentStyle.offset.left + (parentStyle.outerWidth - elmStyleParet.outerWidth) / 2;
position.top = parentStyle.offset.top + parentStyle.outerHeight;
elm.find(".popover").removeClass("top").addClass("bottom");
break;
}
if (extra !== undefined) {
if (extra.left !== undefined) {
position.left = position.left + extra.left;
}
if (extra.right !== undefined) {
position.right = position.right + extra.right;
}
if (extra.top !== undefined) {
position.top = position.top + extra.top;
}
if (extra.bottom !== undefined) {
position.bottom = position.bottom + extra.bottom;
}
}
elm.css(position);
};
JSNVisualDesign.getBoxStyle = function (element) {
var style = {
width: element.width(),
height: element.height(),
outerHeight: element.outerHeight(),
outerWidth: element.outerWidth(),
offset: element.offset(),
margin: {
left: parseInt(element.css('margin-left')),
right: parseInt(element.css('margin-right')),
top: parseInt(element.css('margin-top')),
bottom: parseInt(element.css('margin-bottom'))
},
padding: {
left: parseInt(element.css('padding-left')),
right: parseInt(element.css('padding-right')),
top: parseInt(element.css('padding-top')),
bottom: parseInt(element.css('padding-bottom'))
}
};
return style;
};
/**
* Set all elements to same height
* @param elements
*/
JSNVisualDesign.equalsHeight = function (elements) {
elements.css('height', 'auto');
var maxHeight = 0;
elements.each(function () {
var height = $(this).height();
if (maxHeight < height)
maxHeight = height;
});
elements.css('height', maxHeight + 'px');
};
/**
* Generate identify for field based on label
* @param label
* @return
*/
JSNVisualDesign.generateIdentify = function (data, listLabel) {
if (!data.options.identify) {
var d = new Date();
var time = d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
var getLabel = data.options.label + "_" + time;
var label = getLabel.toLowerCase();
while (/[^a-zA-Z0-9_]+/.test(label)) {
label = label.replace(/[^a-zA-Z0-9_]+/, '_');
}
return label;
} else {
return data.options.identify;
}
};
JSNVisualDesign.prototype = {
/**
* Initialize page for design
* @param object element
* @param object options
*/
init: function (container) {
$("#visualdesign-options").remove();
$("#visualdesign-toolbox").remove();
JSNVisualDesign.initialize(lang);
this.JSNUniformDialogEdition = new JSNUniformDialogEdition(this.params);
this.container = $(container);
this.document = $(document);
this.options = {
regionSelector: '.jsn-column-content',
elementSelector: '.jsn-element',
elements: {}
};
this.newElement.click(function (e) {
e.preventDefault();
e.stopPropagation();
JSNVisualDesign.openToolbox($(e.currentTarget), $(e.currentTarget).prev());
});
// Enable sortable
this.container.data('visualdesign-instance', this).find(this.options.regionSelector + ' .jsn-element-container').sortable({
items: this.options.elementSelector,
connectWith: this.options.regionSelector + ' .jsn-element-container',
placeholder: 'ui-state-highlight',
forcePlaceholderSize: true
}).parent().append(this.newElement);
},
clearElements: function () {
this.container.find('div.jsn-element').remove();
},
/**
* Add existing elements to designing page
* @param array elements
*/
setElements: function (elements) {
var self = this;
$(elements).each(function () {
this.options.identify = this.identify;
var element = JSNVisualDesign.createElement(this.type, this.options, this.id);
var column = self.container.find('div[data-column-name="' + this.position + '"] .jsn-element-container');
if (column.size() == 0) {
column = self.container.find('div[data-column-name] .jsn-element-container');
}
column.append(element);
});
JSNVisualDesign.getField();
// Show icons to move field to another page if there are more than 1 page available.
setTimeout(function() {
if ($('.jsn-page-list > .page-items').length > 1) {
$('.jsn-iconbar-trigger > .jsn-iconbar > .element-move').removeClass('hidden');
} else {
$('.jsn-iconbar-trigger > .jsn-iconbar > .element-move').addClass('hidden');
}
}, 100);
return self;
},
/**
* Serialize designed page to JSON format for save it to database
* @return string
*/
serialize: function (toObject) {
var serialized = [];
var serializeObject = toObject || false;
this.container.find('[data-column-name]').each(function () {
var elements = $(this).find('.jsn-element');
var column = $(this).attr('data-column-name');
elements.each(function () {
var data = $(this).data('visualdesign-element-data');
serialized.push({
id: data.id,
identify: JSNVisualDesign.generateIdentify(data, listLabel),
options: data.options,
type: data.type,
position: column,
token: token
});
});
});
$('input, textarea').placeholder();
$(".control-group.jsn-hidden-field").parents(".jsn-element").addClass("jsn-disabled");
JSNVisualDesign.dateTime();
$(".jsn-tabs").tabs({
show: function (event, ui) {
if ($(ui.tab).attr("href") == "#form-design") {
JSNVisualDesign.contentGoogleMaps();
}
}
});
return serializeObject ? serialized : $.toJSON(serialized);
}
};
/**
* Plugin for jQuery to serialize a form to JSON format
* @param options
* @return
*/
$.fn.toJSON = function (options) {
options = $.extend({}, options);
var self = this,
json = {},
push_counters = {},
patterns = {
"validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/,
"key": /[a-zA-Z0-9_]+|(?=\[\])/g,
"push": /^$/,
"fixed": /^\d+$/,
"named": /^[a-zA-Z0-9_]+$/,
"ignore": /^ignored:/
};
this.build = function (base, key, value) {
base[key] = (value.indexOf('json:') == -1) ? value : $.evalJSON(value.substring(5));
return base;
};
this.push_counter = function (key, i) {
if (push_counters[key] === undefined) {
push_counters[key] = 0;
}
if (i === undefined) {
return push_counters[key]++;
} else if (i !== undefined && i > push_counters[key]) {
return push_counters[key] = ++i;
}
};
$.each($(this).serializeArray(), function () {
// skip invalid keys
if (!patterns.validate.test(this.name) || patterns.ignore.test(this.name)) {
return;
}
var k, keys = this.name.match(patterns.key),
merge = this.value,
reverse_key = this.name;
while ((k = keys.pop()) !== undefined) {
// adjust reverse_key
reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), '');
// push
if (k.match(patterns.push)) {
merge = self.build([], self.push_counter(reverse_key), merge);
}
// fixed
else if (k.match(patterns.fixed)) {
self.push_counter(reverse_key, k);
merge = self.build([], k, merge);
}
// named
else if (k.match(patterns.named)) {
merge = self.build({}, k, merge);
}
}
json = $.extend(true, json, merge);
});
return json;
};
return JSNVisualDesign;
});