Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
loeasy68
GitHub Repository: loeasy68/loeasy68.github.io
Path: blob/main/website/GAUSS/inputs-ext/wysihtml5/bootstrap-wysihtml5-0.0.2/bootstrap-wysihtml5-0.0.2.js
2946 views
1
!function($, wysi) {
2
"use strict";
3
4
var tpl = {
5
"font-styles": function(locale, options) {
6
var size = (options && options.size) ? ' btn-'+options.size : '';
7
return "<li class='dropdown'>" +
8
"<a class='btn dropdown-toggle" + size + "' data-toggle='dropdown' href='#'>" +
9
"<i class='icon-font'></i>&nbsp;<span class='current-font'>" + locale.font_styles.normal + "</span>&nbsp;<b class='caret'></b>" +
10
"</a>" +
11
"<ul class='dropdown-menu'>" +
12
"<li><a data-wysihtml5-command='formatBlock' data-wysihtml5-command-value='div' tabindex='-1'>" + locale.font_styles.normal + "</a></li>" +
13
"<li><a data-wysihtml5-command='formatBlock' data-wysihtml5-command-value='h1' tabindex='-1'>" + locale.font_styles.h1 + "</a></li>" +
14
"<li><a data-wysihtml5-command='formatBlock' data-wysihtml5-command-value='h2' tabindex='-1'>" + locale.font_styles.h2 + "</a></li>" +
15
"<li><a data-wysihtml5-command='formatBlock' data-wysihtml5-command-value='h3' tabindex='-1'>" + locale.font_styles.h3 + "</a></li>" +
16
"</ul>" +
17
"</li>";
18
},
19
20
"emphasis": function(locale, options) {
21
var size = (options && options.size) ? ' btn-'+options.size : '';
22
return "<li>" +
23
"<div class='btn-group'>" +
24
"<a class='btn" + size + "' data-wysihtml5-command='bold' title='CTRL+B' tabindex='-1'>" + locale.emphasis.bold + "</a>" +
25
"<a class='btn" + size + "' data-wysihtml5-command='italic' title='CTRL+I' tabindex='-1'>" + locale.emphasis.italic + "</a>" +
26
"<a class='btn" + size + "' data-wysihtml5-command='underline' title='CTRL+U' tabindex='-1'>" + locale.emphasis.underline + "</a>" +
27
"</div>" +
28
"</li>";
29
},
30
31
"lists": function(locale, options) {
32
var size = (options && options.size) ? ' btn-'+options.size : '';
33
return "<li>" +
34
"<div class='btn-group'>" +
35
"<a class='btn" + size + "' data-wysihtml5-command='insertUnorderedList' title='" + locale.lists.unordered + "' tabindex='-1'><i class='icon-list'></i></a>" +
36
"<a class='btn" + size + "' data-wysihtml5-command='insertOrderedList' title='" + locale.lists.ordered + "' tabindex='-1'><i class='icon-th-list'></i></a>" +
37
"<a class='btn" + size + "' data-wysihtml5-command='Outdent' title='" + locale.lists.outdent + "' tabindex='-1'><i class='icon-indent-right'></i></a>" +
38
"<a class='btn" + size + "' data-wysihtml5-command='Indent' title='" + locale.lists.indent + "' tabindex='-1'><i class='icon-indent-left'></i></a>" +
39
"</div>" +
40
"</li>";
41
},
42
43
"link": function(locale, options) {
44
var size = (options && options.size) ? ' btn-'+options.size : '';
45
return "<li>" +
46
"<div class='bootstrap-wysihtml5-insert-link-modal modal hide fade'>" +
47
"<div class='modal-header'>" +
48
"<a class='close' data-dismiss='modal'>&times;</a>" +
49
"<h3>" + locale.link.insert + "</h3>" +
50
"</div>" +
51
"<div class='modal-body'>" +
52
"<input value='http://' class='bootstrap-wysihtml5-insert-link-url input-xlarge'>" +
53
"</div>" +
54
"<div class='modal-footer'>" +
55
"<a href='#' class='btn' data-dismiss='modal'>" + locale.link.cancel + "</a>" +
56
"<a href='#' class='btn btn-primary' data-dismiss='modal'>" + locale.link.insert + "</a>" +
57
"</div>" +
58
"</div>" +
59
"<a class='btn" + size + "' data-wysihtml5-command='createLink' title='" + locale.link.insert + "' tabindex='-1'><i class='icon-share'></i></a>" +
60
"</li>";
61
},
62
63
"image": function(locale, options) {
64
var size = (options && options.size) ? ' btn-'+options.size : '';
65
return "<li>" +
66
"<div class='bootstrap-wysihtml5-insert-image-modal modal hide fade'>" +
67
"<div class='modal-header'>" +
68
"<a class='close' data-dismiss='modal'>&times;</a>" +
69
"<h3>" + locale.image.insert + "</h3>" +
70
"</div>" +
71
"<div class='modal-body'>" +
72
"<input value='http://' class='bootstrap-wysihtml5-insert-image-url input-xlarge'>" +
73
"</div>" +
74
"<div class='modal-footer'>" +
75
"<a href='#' class='btn' data-dismiss='modal'>" + locale.image.cancel + "</a>" +
76
"<a href='#' class='btn btn-primary' data-dismiss='modal'>" + locale.image.insert + "</a>" +
77
"</div>" +
78
"</div>" +
79
"<a class='btn" + size + "' data-wysihtml5-command='insertImage' title='" + locale.image.insert + "' tabindex='-1'><i class='icon-picture'></i></a>" +
80
"</li>";
81
},
82
83
"html": function(locale, options) {
84
var size = (options && options.size) ? ' btn-'+options.size : '';
85
return "<li>" +
86
"<div class='btn-group'>" +
87
"<a class='btn" + size + "' data-wysihtml5-action='change_view' title='" + locale.html.edit + "' tabindex='-1'><i class='icon-pencil'></i></a>" +
88
"</div>" +
89
"</li>";
90
},
91
92
"color": function(locale, options) {
93
var size = (options && options.size) ? ' btn-'+options.size : '';
94
return "<li class='dropdown'>" +
95
"<a class='btn dropdown-toggle" + size + "' data-toggle='dropdown' href='#' tabindex='-1'>" +
96
"<span class='current-color'>" + locale.colours.black + "</span>&nbsp;<b class='caret'></b>" +
97
"</a>" +
98
"<ul class='dropdown-menu'>" +
99
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='black'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='black'>" + locale.colours.black + "</a></li>" +
100
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='silver'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='silver'>" + locale.colours.silver + "</a></li>" +
101
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='gray'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='gray'>" + locale.colours.gray + "</a></li>" +
102
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='maroon'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='maroon'>" + locale.colours.maroon + "</a></li>" +
103
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='red'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='red'>" + locale.colours.red + "</a></li>" +
104
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='purple'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='purple'>" + locale.colours.purple + "</a></li>" +
105
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='green'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='green'>" + locale.colours.green + "</a></li>" +
106
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='olive'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='olive'>" + locale.colours.olive + "</a></li>" +
107
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='navy'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='navy'>" + locale.colours.navy + "</a></li>" +
108
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='blue'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='blue'>" + locale.colours.blue + "</a></li>" +
109
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='orange'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='orange'>" + locale.colours.orange + "</a></li>" +
110
"</ul>" +
111
"</li>";
112
}
113
};
114
115
var templates = function(key, locale, options) {
116
return tpl[key](locale, options);
117
};
118
119
120
var Wysihtml5 = function(el, options) {
121
this.el = el;
122
var toolbarOpts = options || defaultOptions;
123
for(var t in toolbarOpts.customTemplates) {
124
tpl[t] = toolbarOpts.customTemplates[t];
125
}
126
this.toolbar = this.createToolbar(el, toolbarOpts);
127
this.editor = this.createEditor(options);
128
129
window.editor = this.editor;
130
131
$('iframe.wysihtml5-sandbox').each(function(i, el){
132
$(el.contentWindow).off('focus.wysihtml5').on({
133
'focus.wysihtml5' : function(){
134
$('li.dropdown').removeClass('open');
135
}
136
});
137
});
138
};
139
140
Wysihtml5.prototype = {
141
142
constructor: Wysihtml5,
143
144
createEditor: function(options) {
145
options = options || {};
146
147
// Add the toolbar to a clone of the options object so multiple instances
148
// of the WYISYWG don't break because "toolbar" is already defined
149
options = $.extend(true, {}, options);
150
options.toolbar = this.toolbar[0];
151
152
var editor = new wysi.Editor(this.el[0], options);
153
154
if(options && options.events) {
155
for(var eventName in options.events) {
156
editor.on(eventName, options.events[eventName]);
157
}
158
}
159
return editor;
160
},
161
162
createToolbar: function(el, options) {
163
var self = this;
164
var toolbar = $("<ul/>", {
165
'class' : "wysihtml5-toolbar",
166
'style': "display:none"
167
});
168
var culture = options.locale || defaultOptions.locale || "en";
169
for(var key in defaultOptions) {
170
var value = false;
171
172
if(options[key] !== undefined) {
173
if(options[key] === true) {
174
value = true;
175
}
176
} else {
177
value = defaultOptions[key];
178
}
179
180
if(value === true) {
181
toolbar.append(templates(key, locale[culture], options));
182
183
if(key === "html") {
184
this.initHtml(toolbar);
185
}
186
187
if(key === "link") {
188
this.initInsertLink(toolbar);
189
}
190
191
if(key === "image") {
192
this.initInsertImage(toolbar);
193
}
194
}
195
}
196
197
if(options.toolbar) {
198
for(key in options.toolbar) {
199
toolbar.append(options.toolbar[key]);
200
}
201
}
202
203
toolbar.find("a[data-wysihtml5-command='formatBlock']").click(function(e) {
204
var target = e.target || e.srcElement;
205
var el = $(target);
206
self.toolbar.find('.current-font').text(el.html());
207
});
208
209
toolbar.find("a[data-wysihtml5-command='foreColor']").click(function(e) {
210
var target = e.target || e.srcElement;
211
var el = $(target);
212
self.toolbar.find('.current-color').text(el.html());
213
});
214
215
this.el.before(toolbar);
216
217
return toolbar;
218
},
219
220
initHtml: function(toolbar) {
221
var changeViewSelector = "a[data-wysihtml5-action='change_view']";
222
toolbar.find(changeViewSelector).click(function(e) {
223
toolbar.find('a.btn').not(changeViewSelector).toggleClass('disabled');
224
});
225
},
226
227
initInsertImage: function(toolbar) {
228
var self = this;
229
var insertImageModal = toolbar.find('.bootstrap-wysihtml5-insert-image-modal');
230
var urlInput = insertImageModal.find('.bootstrap-wysihtml5-insert-image-url');
231
var insertButton = insertImageModal.find('a.btn-primary');
232
var initialValue = urlInput.val();
233
var caretBookmark;
234
235
var insertImage = function() {
236
var url = urlInput.val();
237
urlInput.val(initialValue);
238
self.editor.currentView.element.focus();
239
if (caretBookmark) {
240
self.editor.composer.selection.setBookmark(caretBookmark);
241
caretBookmark = null;
242
}
243
self.editor.composer.commands.exec("insertImage", url);
244
};
245
246
urlInput.keypress(function(e) {
247
if(e.which == 13) {
248
insertImage();
249
insertImageModal.modal('hide');
250
}
251
});
252
253
insertButton.click(insertImage);
254
255
insertImageModal.on('shown', function() {
256
urlInput.focus();
257
});
258
259
insertImageModal.on('hide', function() {
260
self.editor.currentView.element.focus();
261
});
262
263
toolbar.find('a[data-wysihtml5-command=insertImage]').click(function() {
264
var activeButton = $(this).hasClass("wysihtml5-command-active");
265
266
if (!activeButton) {
267
self.editor.currentView.element.focus(false);
268
caretBookmark = self.editor.composer.selection.getBookmark();
269
insertImageModal.appendTo('body').modal('show');
270
insertImageModal.on('click.dismiss.modal', '[data-dismiss="modal"]', function(e) {
271
e.stopPropagation();
272
});
273
return false;
274
}
275
else {
276
return true;
277
}
278
});
279
},
280
281
initInsertLink: function(toolbar) {
282
var self = this;
283
var insertLinkModal = toolbar.find('.bootstrap-wysihtml5-insert-link-modal');
284
var urlInput = insertLinkModal.find('.bootstrap-wysihtml5-insert-link-url');
285
var insertButton = insertLinkModal.find('a.btn-primary');
286
var initialValue = urlInput.val();
287
var caretBookmark;
288
289
var insertLink = function() {
290
var url = urlInput.val();
291
urlInput.val(initialValue);
292
self.editor.currentView.element.focus();
293
if (caretBookmark) {
294
self.editor.composer.selection.setBookmark(caretBookmark);
295
caretBookmark = null;
296
}
297
self.editor.composer.commands.exec("createLink", {
298
href: url,
299
target: "_blank",
300
rel: "nofollow"
301
});
302
};
303
var pressedEnter = false;
304
305
urlInput.keypress(function(e) {
306
if(e.which == 13) {
307
insertLink();
308
insertLinkModal.modal('hide');
309
}
310
});
311
312
insertButton.click(insertLink);
313
314
insertLinkModal.on('shown', function() {
315
urlInput.focus();
316
});
317
318
insertLinkModal.on('hide', function() {
319
self.editor.currentView.element.focus();
320
});
321
322
toolbar.find('a[data-wysihtml5-command=createLink]').click(function() {
323
var activeButton = $(this).hasClass("wysihtml5-command-active");
324
325
if (!activeButton) {
326
self.editor.currentView.element.focus(false);
327
caretBookmark = self.editor.composer.selection.getBookmark();
328
insertLinkModal.appendTo('body').modal('show');
329
insertLinkModal.on('click.dismiss.modal', '[data-dismiss="modal"]', function(e) {
330
e.stopPropagation();
331
});
332
return false;
333
}
334
else {
335
return true;
336
}
337
});
338
}
339
};
340
341
// these define our public api
342
var methods = {
343
resetDefaults: function() {
344
$.fn.wysihtml5.defaultOptions = $.extend(true, {}, $.fn.wysihtml5.defaultOptionsCache);
345
},
346
bypassDefaults: function(options) {
347
return this.each(function () {
348
var $this = $(this);
349
$this.data('wysihtml5', new Wysihtml5($this, options));
350
});
351
},
352
shallowExtend: function (options) {
353
var settings = $.extend({}, $.fn.wysihtml5.defaultOptions, options || {});
354
var that = this;
355
return methods.bypassDefaults.apply(that, [settings]);
356
},
357
deepExtend: function(options) {
358
var settings = $.extend(true, {}, $.fn.wysihtml5.defaultOptions, options || {});
359
var that = this;
360
return methods.bypassDefaults.apply(that, [settings]);
361
},
362
init: function(options) {
363
var that = this;
364
return methods.shallowExtend.apply(that, [options]);
365
}
366
};
367
368
$.fn.wysihtml5 = function ( method ) {
369
if ( methods[method] ) {
370
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
371
} else if ( typeof method === 'object' || ! method ) {
372
return methods.init.apply( this, arguments );
373
} else {
374
$.error( 'Method ' + method + ' does not exist on jQuery.wysihtml5' );
375
}
376
};
377
378
$.fn.wysihtml5.Constructor = Wysihtml5;
379
380
var defaultOptions = $.fn.wysihtml5.defaultOptions = {
381
"font-styles": true,
382
"color": false,
383
"emphasis": true,
384
"lists": true,
385
"html": false,
386
"link": true,
387
"image": true,
388
events: {},
389
parserRules: {
390
classes: {
391
// (path_to_project/lib/css/wysiwyg-color.css)
392
"wysiwyg-color-silver" : 1,
393
"wysiwyg-color-gray" : 1,
394
"wysiwyg-color-white" : 1,
395
"wysiwyg-color-maroon" : 1,
396
"wysiwyg-color-red" : 1,
397
"wysiwyg-color-purple" : 1,
398
"wysiwyg-color-fuchsia" : 1,
399
"wysiwyg-color-green" : 1,
400
"wysiwyg-color-lime" : 1,
401
"wysiwyg-color-olive" : 1,
402
"wysiwyg-color-yellow" : 1,
403
"wysiwyg-color-navy" : 1,
404
"wysiwyg-color-blue" : 1,
405
"wysiwyg-color-teal" : 1,
406
"wysiwyg-color-aqua" : 1,
407
"wysiwyg-color-orange" : 1
408
},
409
tags: {
410
"b": {},
411
"i": {},
412
"br": {},
413
"ol": {},
414
"ul": {},
415
"li": {},
416
"h1": {},
417
"h2": {},
418
"h3": {},
419
"blockquote": {},
420
"u": 1,
421
"img": {
422
"check_attributes": {
423
"width": "numbers",
424
"alt": "alt",
425
"src": "url",
426
"height": "numbers"
427
}
428
},
429
"a": {
430
set_attributes: {
431
target: "_blank",
432
rel: "nofollow"
433
},
434
check_attributes: {
435
href: "url" // important to avoid XSS
436
}
437
},
438
"span": 1,
439
"div": 1,
440
// to allow save and edit files with code tag hacks
441
"code": 1,
442
"pre": 1
443
}
444
},
445
stylesheets: ["./lib/css/wysiwyg-color.css"], // (path_to_project/lib/css/wysiwyg-color.css)
446
locale: "en"
447
};
448
449
if (typeof $.fn.wysihtml5.defaultOptionsCache === 'undefined') {
450
$.fn.wysihtml5.defaultOptionsCache = $.extend(true, {}, $.fn.wysihtml5.defaultOptions);
451
}
452
453
var locale = $.fn.wysihtml5.locale = {
454
en: {
455
font_styles: {
456
normal: "Normal text",
457
h1: "Heading 1",
458
h2: "Heading 2",
459
h3: "Heading 3"
460
},
461
emphasis: {
462
bold: "Bold",
463
italic: "Italic",
464
underline: "Underline"
465
},
466
lists: {
467
unordered: "Unordered list",
468
ordered: "Ordered list",
469
outdent: "Outdent",
470
indent: "Indent"
471
},
472
link: {
473
insert: "Insert link",
474
cancel: "Cancel"
475
},
476
image: {
477
insert: "Insert image",
478
cancel: "Cancel"
479
},
480
html: {
481
edit: "Edit HTML"
482
},
483
colours: {
484
black: "Black",
485
silver: "Silver",
486
gray: "Grey",
487
maroon: "Maroon",
488
red: "Red",
489
purple: "Purple",
490
green: "Green",
491
olive: "Olive",
492
navy: "Navy",
493
blue: "Blue",
494
orange: "Orange"
495
}
496
}
497
};
498
499
}(window.jQuery, window.wysihtml5);
500
501