(function($) {
$.makeJson = function(selector, options) {
var result = new Array();
var settings = $.extend({
filter : '*',
json : undefined,
childNodes: undefined,
returnTo : 'LIST',
duplicate : 'LIST', /* 중복된 KEY 처리('SET'=유일성을 보장하는 리스트, 'LIST'=유일성을 보장하지 않는 리스트, 'CHANGE'= 최종 입력되는 값을 사용). */
ignoreEmpty : true,
useSelectValue : true
}, options||{});
var elements = $(selector);
for(var indexOfElements = 0; indexOfElements < elements.size(); indexOfElements++) {
var data = {};
var element = elements.get(indexOfElements);
var targetElements = $(element).find(settings.filter).add(element);
for(var indexOfTargetElements = 0; indexOfTargetElements < targetElements.size(); indexOfTargetElements++) {
var targetElement = $(targetElements.get(indexOfTargetElements));
var _data = targetElement.metadata()||{};
if(targetElement.is('*[name]:input:not(:button)' + (settings.json ? ', ' + settings.json : ''))) {
var name = targetElement.attr('name')||targetElement.attr('title');
var value = targetElement.fieldValue()[0];
if(targetElement.is(':checkbox') && name != undefined && name != '' && name != null) {
_data[name] = value != undefined ? (value == 'on' || value) : targetElement.attr('checked');
} else if(targetElement.is(':input') && name != undefined && name != '' && name != null){
_data[name] = value;
} else if(name != undefined && name != '' && name != null){
_data[name] = targetElement.text();
}
}
switch(settings.duplicate) {
case 'LIST' :
for(key in _data) {
if(typeof data[key] == 'undefined') {
if(settings.ignoreEmpty || _data[key]) {
data[key] = _data[key];
}
} else if(!$.isArray(data[key])) {
if(settings.ignoreEmpty || _data[key]) {
data[key] = $.makeArray(data[key]);
data[key].push(_data[key]);
}
} else {
if(settings.ignoreEmpty || _data[key]) {
data[key].push(_data[key]);
}
}
};
break;
case 'SET' :
for(key in _data) {
if(typeof data[key] == 'undefined') {
if(settings.ignoreEmpty || _data[key]) {
data[key] = _data[key];
}
} else if(!$.isArray(data[key])) {
if(settings.ignoreEmpty || _data[key]) {
data[key] = $.makeArray(data[key]);
data[key].push(_data[key]);
}
} else if((matchIndex = $.inArray(data[key], _data[key])) >= 0) {
if(settings.ignoreEmpty || _data[key]) {
data[key][matchIndex] = _data[key];
}
} else {
if(settings.ignoreEmpty || _data[key]) {
data[key].push(_data[key]);
}
}
};
break;
default : /** case 'CHANGE' : */
for(key in _data) {
if(settings.ignoreEmpty || _data[key]) {
if($.isArray(_data[key])) {
for(var idx = 0; idx < _data[key].length; idx++) {
if(settings.ignoreEmpty || _data[key][idx]) {
data[key] = _data[key][idx];
}
}
} else {
data[key] = _data[key];
}
}
}
break;
}
}
if(settings.childNodes) {
for(var name in settings.childNodes) {
var childNode = settings.childNodes[name];
data[name] = $.makeJson($(element).find(childNode.selector), childNode);
}
}
result.push(data);
}
if(settings.returnTo == 'OBJECT') {
if(result.length > 1) {
return result[0];
} else {
alert('"returnTo" settings "Object", but will return too many results');
return undefined;
}
} else {
return result;
}
};
$.template = function(context, object) {
var getMaps = function(object, key) {
var result = new Array();
if(key == undefined) {
for(_key in object) {
_result = getMaps(object, _key);
if($.isArray(_result)) {
for(index in _result) {
result.push(_result[index]);
}
} else {
result.push(_result);
}
}
return result;
} else if(typeof object[key] == 'object') {
for(_key in object[key]) {
_result = getMaps(object[key], _key);
if($.isArray(_result)) {
for(index in _result) {
_result[index].key = key + "." + _result[index].key;
result.push(_result[index]);
}
} else {
_result.key = key + "." + _result.key;
result.push(_result);
}
}
return result;
} else if($.isFunction(object[key])) {
return { key : key, value : object[key](object, key) };
} else {
return { key : key, value : object[key] };
}
};
if(typeof object == 'object') {
var result = getMaps(object);
for(index in result) {
context = context.replace(new RegExp('\\$\\[\\s*'+result[index].key+'\\s*\\]','gim'), result[index].value);
}
}
return context.replace(new RegExp('\\$\\[\\s*[^\\]]*\\s*\\]','gim'), '');
};
$.fn.template = function(object) {
$.template(this.html(), object);
return this;
};
$.fn.tiny = function(options) {
var target = $(this);
if(target.size() > 0) {
$.getScript('/script/jquery/tiny_mce/jquery.tinymce.js',function() {
target.tinymce($.extend({
// Location of TinyMCE script
script_url : '/script/jquery/tiny_mce/tiny_mce.js',
mode : "textareas",
// General options
language : "ko",
theme : "advanced",
plugins : "safari,pagebreak,style,table,advimage,advlink,inlinepopups,preview,media,contextmenu,paste,directionality,noneditable,nonbreaking,xhtmlxtras",
// Theme options
theme_advanced_buttons1 : "newdocument,|,bold,italic,underline,strikethrough,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,justifyfull,formatselect,fontselect,fontsizeselect,code,preview",
theme_advanced_buttons2 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,link,unlink,|,image",
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,
theme_advanced_resize_horizontal : false,
theme_advanced_path : false,
// Example content CSS (should be your site CSS)
content_css : "/style/blank.css",
convert_urls : false,
execcommand_callback : function(editor_id, elm, command, user_interface, value) {
return false; // Pass to next handler in chain
},
file_browser_callback : function(field_name, url, type, win) {
// alert("Field_Name: " + field_name + "\nURL: " + url + "\nType: " + type + "\nWin: " + win); // debug/testing
return false;
}
}, options||{}));
});
}
return this;
};
/**
* SWFUpload v2 Documentation URL : http://demo.swfupload.org/Documentation/
* button_placeholder_id : 'element_id',
* button_placeholder : element,
* button_image_url : 'button_image_url', // normal, hover, down/click, disabled.
* button_text : 'Click here',
* button_text_style : '.redText { color: #FF0000; }',
* button_text_top_padding : 0,
* button_text_left_padding : 0,
* post_params : {
* post_param_name_1 : 'post_param_value_1',
* post_param_name_2 : 'post_param_value_2',
* post_param_name_n : 'post_param_value_n'
* },
* custom_settings : {
* custom_setting_1 : 'custom_setting_value_1',
* custom_setting_2 : 'custom_setting_value_2',
* custom_setting_n : 'custom_setting_value_n'
* },
* flash_ready_handler : function() {},
* swfupload_loaded_handler : function() {},
* file_dialog_start_handler : function() {},
* file_queued_handler : function(file_object) {},
* file_queue_error_handler : function(file_object, error_code, message) {},
* file_dialog_complete_handler : function(number_of_files_selected, number_of_files_queued, total_number_of_files_in_the_queued) {},
* upload_start_handler : function(file_object) {},
* upload_progress_handler : function(file_object, bytes_complete, total_bytes) {},
* upload_error_handler : function(file_object, error_code, message) {},
* upload_success_handler : function(file_object, server_data, received_response) {},
* upload_complete_handler : function(file_object) {},
* debug_handler : function(message) {}
*/
$.fn.swfupload = function(options) {
var settings = $.extend({
upload_url : '/upload.do',
flash_url : '/script/swfupload/swfupload.swf',
file_post_name : 'Filedata',
use_query_string : true,
requeue_on_error : false,
http_success : [201, 200],
assume_success_timeout : 0,
file_types : '*.gif;*.jpg;*.png',
file_types_description : 'Web Image Files...',
file_size_limit : '0',
file_upload_limit : 10,
file_queue_limit : 2,
prevent_swf_caching : false,
preserve_relative_urls : false,
debug : false,
button_image_url : '/resource/images/btn/fileup.gif',
button_width : 67,
button_height : 21,
button_action : SWFUpload.BUTTON_ACTION.SELECT_FILE,
button_disabled : false,
button_cursor : SWFUpload.CURSOR.HAND,
button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT
}, options||{});
var list = new Array();
this.each(function(index, element) {
list[element.id] = new SWFUpload($.extend(settings, { button_placeholder_id : element.id }));
});
return list;
};
})(jQuery);