Repository navigation
Expand file tree
/
Copy pathdialogs.js
More file actions
137 lines (117 loc) · 3.35 KB
/
Copy pathdialogs.js
File metadata and controls
137 lines (117 loc) · 3.35 KB
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
var _ = require("hr.utils");
var Q = require("q");
var Collection = require("hr.collection");
var Dialog = require("../views/dialogs/container");
var DialogInputView = require("../views/dialogs/input");
var DialogListView = require("../views/dialogs/list");
var alertTemplate = require("../resources/templates/dialogs/alert.html");
var confirmTemplate = require("../resources/templates/dialogs/confirm.html");
var promptTemplate = require("../resources/templates/dialogs/prompt.html");
var schemaTemplate = require("../resources/templates/dialogs/schema.html");
// Open a dialog
var open = function(View, options) {
var d = Q.defer();
// Create the dialog
var diag = new Dialog(_.extend(options || {}, {
View: View
}));
// Bind close
diag.on("close", function(force) {
if (force) return d.reject(new Error("Dialog was been closed"));
d.resolve(diag.view);
});
// Open it (add it to dom)
diag.update();
return d.promise;
};
// Input dialog
var openInput = function(viewOptions, options, View) {
return open(View || DialogInputView, _.extend(options || {}, {
view: viewOptions || {}
}))
.then(function(view) {
var value = view.getValue();
if (value == null) return Q.reject(new Error("Dialog return empty value"));
return value;
});
};
// Alert
var openAlert = function(text, options) {
options = _.defaults(options || {}, {
isHtml: false
});
return openInput({
template: alertTemplate,
text: text,
isHtml: options.isHtml
});
};
var openErrorAlert = function(err) {
console.log("error", err);
return openAlert("Error: "+(err.message || err))
.fin(function() {
return Q.reject(err);
});
};
// Confirm
var openConfirm = function(text, options) {
return openInput({
template: confirmTemplate,
text: text
});
};
// Prompt
var openPrompt = function(text, value, options) {
return openInput({
template: promptTemplate,
text: text,
defaultValue: value,
value: function(d) { return d.$("input").val(); }
});
};
// List
var openList = function(source, options) {
if (_.isArray(source)) {
source = new Collection({
models: _.map(source, function(item) {
if (!_.isObject(item)) return { value: item };
return item;
})
});
}
return openInput(
_.extend({
template: "<div class='item-text'><%- item.get('value') %></div>",
placeholder: "",
filter: function() { return true; }
}, options, {
source: source
}), {}, DialogListView);
};
// Schema
var openSchema = function(schema, values) {
values = values || {};
return openInput({
template: schemaTemplate,
schema: schema,
defaultValues: values,
value: function(d) {
var nvalues = _.clone(values);
_.each(schema.properties, function(property, key) {
var v = d.$("*[name='"+key+"']").val();
nvalues[key] = v;
});
return nvalues;
}
});
};
module.exports = {
open: open,
alert: openAlert,
error: openErrorAlert,
confirm: openConfirm,
prompt: openPrompt,
list: openList,
schema: openSchema,
input: openInput
};