5
|
1 |
/* global tinymce */ |
|
2 |
/** |
|
3 |
* Included for back-compat. |
|
4 |
* The default WindowManager in TinyMCE 4.0 supports three types of dialogs: |
|
5 |
* - With HTML created from JS. |
|
6 |
* - With inline HTML (like WPWindowManager). |
|
7 |
* - Old type iframe based dialogs. |
|
8 |
* For examples see the default plugins: https://github.com/tinymce/tinymce/tree/master/js/tinymce/plugins |
|
9 |
*/ |
|
10 |
tinymce.WPWindowManager = tinymce.InlineWindowManager = function( editor ) { |
|
11 |
if ( this.wp ) { |
|
12 |
return this; |
|
13 |
} |
|
14 |
|
|
15 |
this.wp = {}; |
|
16 |
this.parent = editor.windowManager; |
|
17 |
this.editor = editor; |
|
18 |
|
|
19 |
tinymce.extend( this, this.parent ); |
|
20 |
|
|
21 |
this.open = function( args, params ) { |
|
22 |
var $element, |
|
23 |
self = this, |
|
24 |
wp = this.wp; |
|
25 |
|
|
26 |
if ( ! args.wpDialog ) { |
|
27 |
return this.parent.open.apply( this, arguments ); |
|
28 |
} else if ( ! args.id ) { |
|
29 |
return; |
|
30 |
} |
|
31 |
|
|
32 |
if ( typeof jQuery === 'undefined' || ! jQuery.wp || ! jQuery.wp.wpdialog ) { |
|
33 |
// wpdialog.js is not loaded |
|
34 |
if ( window.console && window.console.error ) { |
|
35 |
window.console.error('wpdialog.js is not loaded. Please set "wpdialogs" as dependency for your script when calling wp_enqueue_script(). You may also want to enqueue the "wp-jquery-ui-dialog" stylesheet.'); |
|
36 |
} |
|
37 |
|
|
38 |
return; |
|
39 |
} |
|
40 |
|
|
41 |
wp.$element = $element = jQuery( '#' + args.id ); |
|
42 |
|
|
43 |
if ( ! $element.length ) { |
|
44 |
return; |
|
45 |
} |
|
46 |
|
|
47 |
if ( window.console && window.console.log ) { |
|
48 |
window.console.log('tinymce.WPWindowManager is deprecated. Use the default editor.windowManager to open dialogs with inline HTML.'); |
|
49 |
} |
|
50 |
|
|
51 |
wp.features = args; |
|
52 |
wp.params = params; |
|
53 |
|
|
54 |
// Store selection. Takes a snapshot in the FocusManager of the selection before focus is moved to the dialog. |
|
55 |
editor.nodeChanged(); |
|
56 |
|
|
57 |
// Create the dialog if necessary |
|
58 |
if ( ! $element.data('wpdialog') ) { |
|
59 |
$element.wpdialog({ |
|
60 |
title: args.title, |
|
61 |
width: args.width, |
|
62 |
height: args.height, |
|
63 |
modal: true, |
|
64 |
dialogClass: 'wp-dialog', |
|
65 |
zIndex: 300000 |
|
66 |
}); |
|
67 |
} |
|
68 |
|
|
69 |
$element.wpdialog('open'); |
|
70 |
|
|
71 |
$element.on( 'wpdialogclose', function() { |
|
72 |
if ( self.wp.$element ) { |
|
73 |
self.wp = {}; |
|
74 |
} |
|
75 |
}); |
|
76 |
}; |
|
77 |
|
|
78 |
this.close = function() { |
|
79 |
if ( ! this.wp.features || ! this.wp.features.wpDialog ) { |
|
80 |
return this.parent.close.apply( this, arguments ); |
|
81 |
} |
|
82 |
|
|
83 |
this.wp.$element.wpdialog('close'); |
|
84 |
}; |
|
85 |
}; |
|
86 |
|
|
87 |
tinymce.PluginManager.add( 'wpdialogs', function( editor ) { |
|
88 |
// Replace window manager |
|
89 |
editor.on( 'init', function() { |
|
90 |
editor.windowManager = new tinymce.WPWindowManager( editor ); |
|
91 |
}); |
|
92 |
}); |