/
linkfield.js
117 lines (96 loc) · 3.1 KB
/
linkfield.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
jQuery.entwine("linkfield", function($) {
$("input.link").entwine({
Loading: null,
Dialog: null,
URL: null,
onmatch: function() {
var self = this;
this.setDialog(self.siblings('.linkfield-dialog:first'));
var form = this.parents('form');
formUrl = form.attr('action'),
formUrlParts = formUrl.split('?'),
formUrl = formUrlParts[0],
url = encodeURI(formUrl) + '/field/' + this.attr('name') + '/LinkFormHTML';
if(self.val().length){
url = url + '?LinkID=' + self.val();
}else{
url = url + '?LinkID=0';
}
if(typeof formUrlParts[1] !== 'undefined') {
url = url + '&' + formUrlParts[1];
}
this.setURL(url);
// configure the dialog
var windowHeight = $(window).height();
this.getDialog().data("field", this).dialog({
autoOpen: false,
width: $(window).width() * 80 / 100,
height: $(window).height() * 80 / 100,
modal: true,
title: this.data('dialog-title'),
position: { my: "center", at: "center", of: window }
});
// submit button loading state while form is submitting
this.getDialog().on("click", "button", function() {
$(this).addClass("loading ui-state-disabled");
});
// handle dialog form submission
this.getDialog().on("submit", "form", function() {
var dlg = self.getDialog().dialog(),
options = {};
options.success = function(response) {
if($(response).is(".field")) {
self.getDialog().empty().dialog("close");
self.parents('.field:first').replaceWith(response);
form.addClass('changed');
} else {
self.getDialog().html(response);
jQuery('div.display-logic, div.display-logic-master').entwine().initFields();
}
}
$(this).ajaxSubmit(options);
return false;
});
},
onunmatch: function () {
var self = this;
$('.linkfield-dialog.ui-dialog-content').filter(function(){
return self[0] == $(this).data("field")[0];
}).remove();
},
showDialog: function(url) {
var dlg = this.getDialog();
dlg.empty().dialog("open").parent().addClass("loading");
dlg.load(this.getURL(), function(){
// init display logic fields
jQuery('div.display-logic, div.display-logic-master').entwine().initFields();
dlg.parent().removeClass("loading");
});
}
});
$(".linkfield-button").entwine({
onclick: function() {
this.siblings('input.link').showDialog();
return false;
},
});
$(".linkfield-remove-button").entwine({
onclick: function() {
var form = this.parents('form');
var formUrl = form.attr('action'),
formUrlParts = formUrl.split('?'),
formUrl = formUrlParts[0],
url = encodeURI(formUrl) + '/field/' + this.siblings('input:first').prop('name') + '/doRemoveLink';
if(typeof formUrlParts[1] !== 'undefined') {
url = url + '&' + formUrlParts[1];
}
var holder = this.parents('.field:first');
this.parents('.middleColumn:first').html("<img src='framework/images/network-save.gif' />");
holder.load(url, function() {
form.addClass('changed');
holder.replaceWith(holder.html());
});
return false;
},
});
});